Vous êtes sur la page 1sur 8

Instituto Politcnico de Beja

Escola Superior de Tecnologia e Gesto


Licenciatura em Engenharia Informtica
Programao 1

A Super Tartaruga
Trabalho Prtico de Avaliao 1
Beja, 17 de Novembro de 2014 - revisto em 19 de Novembro de 2014

you could have a big dipper


going up and down, all around the bends
you could have a bumper car, bumping
this amusement never ends
Peter Gabriel - Sledgehammer
https://www.youtube.com/watch?v=OJWJE0x7T4Q

1 Introduo
Este enunciado algo extenso. Tal significa que deve ser lido mais do que uma vez
e com muita ateno. O que pedido est classificado em trs tipos de REQUISITOS :
1. ESSENCIAIS
2. NO ESSENCIAIS
3. QUE IMPLICAM PENALIZAES.
Os essenciais permitem obter 10 valores, mas apenas desde que no estejam presentes motivos para penalizaes, ou seja, se cumprir totalmente todos os requisitos que podem implicar penalizaes. Para no ter penalizaes basta ter cuidado a ler o enunciado e respeitar o que requerido. Assim, poder garantir que
o programa entregue no ir oferecer motivos para a aplicao de penalizaes,
as quais podem fazer baixar a nota para nveis certamente indesejados. Os requisitos no essenciais permitem obter at 17 valores. Os 18, 19 e 20 valores ficam
apenas para quem fez tudo o que pedido de forma absolutamente impecvel e
inventou algo mais para fazer, os chamados EXTRAS. Esses extras tm de ter uma
dificuldade superior ao que pedido embora devam continuar na linha do que
pedido e utilizando apenas os contedos que j foram dados nas aulas. No vale
a pena fazer extras sem ter TUDO o que pedido feito. Tambm no vale a pena
fazer os requisitos no essenciais sem ter feito os essenciais. Em resumo:
S pode ter mais do 10 valores se tiver cumprido totalmente os requisitos
essenciais e no tiver penalizaes.
S pode ter mais do 17 valores se tiver cumprido totalmente os requisitos
essenciais e tambm os no essenciais e no tiver penalizaes.

Para mais informaes pode e deve ler as regras de avaliao no guia de funcionamento da unidade curricular.

2 SuperTurtle
O objetivo geral deste trabalho o de implementar uma classe de tartarugas que
so capazes de executar vrios novos mtodos efetuar, muitos deles recursivos
(ou recorrentes). Para tal ter de definir uma classe SuperTurtle que herda de
acm.graphics.GTurtle 1 :
class SuperTurtle extends GTurtle
{
.............
}

Ter tambm de escrever


acm.program.GraphicsProgram 2 .

uma

classe

World

que

herda

de

class World extends GraphicsProgram


{
.............
}

Esta classe devera ter apenas o mtodo void run() e este no deve ter mais de 30
pontos-e-vrgulas (";").
Note que todos os desenhos tero de ser feitos por um objecto da classe
SuperTurtle SEM utilizar nem o mtodo setLocation nem o mtodo move da classe
acm.graphics.GTurtle.
O trabalho deve ser realizado individualmente e da responsabilidade de um
s autor.
Seguem-se os requisitos para o trabalho. Antes de escrever cdigo, leia-os atentamente mais do que uma vez. Antes de entregar o trabalho leia-os, pelo menos,
mais uma vez.

3 Requisitos Essenciais
O incumprimento de qualquer destes requisitos implica uma classificao negativa no trabalho e a no contabilizao dos requisitos no essenciais.
Algumas classes e mtodos que podem ajudar:
1 http://cs.stanford.edu/people/eroberts/jtf/javadoc/complete/acm/graphics/
GTurtle.html
2 http://cs.stanford.edu/people/eroberts/jtf/javadoc/student/acm/program/
GraphicsProgram.html

Classe acm.util.RandomGenerator3 .
Mtodo getGCanvas4 .
Mtodo erasePath5 .
Mtodo setSize6 .
Req. 1 Mtodo demonstrador (2,0 valores) Na classe SuperTurtle defina um mtodo denominado public void startShow(). Este mtodo ir colocar a tartaruga a fazer todos os desenhos que capaz de fazer e que so pedidos nos
requisitos 2 a 11. O mtodo pode chamar outros mtodos de forma a nunca
nenhum ultrapassar o limite de 30 pontos-e-vrgulas (";").
Req. 2 - Desenho de polgonos aleatrios (3,0 valores) Utilizando
a
classe
RandomGenerator, defina o mtodo public void randomPolygons(int
nPolygons, int minSides, int maxSides) que coloca a tartaruga a desenhar a quantidade indicada (pelo parmetro nPolygons) de polgonos. Os
polgonos tero uma quantidade aleatria de faces e sero desenhados em
locais tambm aleatrios embora sempre dentro da janela.
Req. 3 - gotoXY (0,5 valores) Escreva um mtodo void gotoXY(double x, double
y, boolean draw) que desloca a tartaruga para o ponto (x , y ). Se o parmetro draw tiver o valor true a tartaruga desenha; caso contrrio no desenha.
Req. 4 - drawLine (0,5 valores) Escreva um mtodo void drawLine(double x1,
double y1, double x2, double y2) que faz a tartaruga desenhar entre os
pontos (x 1, y 1) e (x 2, y 2).
Req. 5 - drawRect (0,5 valores) Escreva um mtodo void drawRect(double x,
double y, double width,double height) que faz a tartaruga desenhar um
rectngulo com o canto superior esquerdo na posio (x , y ) e com a largura
e altura indicadas. O rectngulo deve ser desenhado sem preenchimento.
Utilize o mtodo da alnea anterior.
Req. 6 - drawFilledRect (1,5 valores) Escreva
um
mtodo
iterativo
void drawFilledRect(double x, double y, double width,double height)
que faz a tartaruga desenhar um rectngulo a cheio com o canto superior esquerdo na posio (x , y ) e a largura e altura indicadas. Utilize o mtodo da
alnea anterior para desenhar rectngulos dentro de rectngulos
Req. 7 - drawFilledRectRecursive (2,0 valores) Faa uma verso recursiva do mtodo do requisito anterior e que no utiliza nenhum ciclo.
3 http://cs.stanford.edu/people/eroberts/jtf/javadoc/complete/acm/util/
RandomGenerator.html
4 http://cs.stanford.edu/people/eroberts/jtf/javadoc/student/acm/program/
GraphicsProgram.html#getGCanvas()
5 http://cs.stanford.edu/people/eroberts/jtf/javadoc/complete/acm/graphics/
GTurtle.html#erasePath()
6
http://cs.stanford.edu/people/eroberts/jtf/javadoc/complete/acm/program/
GraphicsProgram.html

4 Requisitos No Essenciais
Estes requisitos s so contabilizados se os requisitos essenciais estiverem totalmente correctos. Todos, excepto o "Req. 12 - rvores com objectos" devem
ser definidos na classe SuperTurtle e como tal desenhados por um objecto dessa
classe (uma tartaruga). Tambm todos excepto o Req. 12 devem ser executados a
partir do mtodo startShow na classe SuperTurtle e requerido no Req. 1.
Req. 8 - bumpingWalk (1,5 valores) Escreva um mtodo void bumpingWalk(
int xLimit, int yLimit, double speed) que faz a tartaruga deslocar-se na
velocidade indicada de forma aleatria (experimente com a velocidade 0.85).
Quanto a tartaruga atinge o limite horizontal (zero ou xLimit) ou vertical
(zero ou yLimit) faz ricochete (bumps!), ou seja, muda uma das componentes (x ou y ) da direco e mantm a outra: por exemplo, se "bater" em baixo
vinda da esquerda, a tartaruga continua a ir para a direita, mas passa a ir
para cima completando um V. Ou seja, o mtodo tem de testar se a tartaruga chegou a uma posio de abcissa ou ordenada zero ou igual ao limite
da janela. Nesse caso deve mudar o ngulo. Note que a mudana de ngulo
difere conforme preciso mudar o sentido na vertical ou na horizontal. Os
mtodos getLocation e setDirection podem ajudar.
Aps testar se o x ou y esto no limite e, se necessrio, mudar o ngulo
da forma correta o mtodo deve fazer a tartaruga avanar uma, ou mais,
unidades. Este teste e avano devem ser repetidos num ciclo infinito que
pode programar com while(true) ou com for(;;).
Deve ainda acrescentar um som quando a tartaruga atinge o limite (bumps!).
O som pode ser um beep simples feito pelo mtodo beep() da classe MediaTools:
MediaTools.beep(); ou algo mais dramtico! Neste caso pode utilizar a classe
SoundClip e o seu mtodo play().
Note que na classe World, pode obter a largura e altura da janela com o seguinte
cdigo:
this.getGCanvas().getWidth();
e
this.getGCanvas().getHeight();
Req. 9 - Sierpinski (1,5 valores)
Escreva um mtodo com nome sierpinskiTriangle(int nLevels, double side
que desenha nLevels do tringulo de Sierpinski: http://en.wikipedia.
org/wiki/Sierpinski_triangle. O comprimento do lado do tringulo
maior dado por side. Note que so tringulos equilteros.
Req. 10 - drawTreeConfigurable (1,5 valores)
Escreva um mtodo drawTreeConfigurable que permita desenhar uma rvore. O
mtodo ter as seguintes caractersticas:
1. A quantidade de nveis indicada pelo parmetro nLevels.
2. A quantidade de ramos que saem do ramo inicial (e dos restantes)
indicada pelo parmetro nBranches.
3. Um parmetro formal com o nome isMulticoloured indica se a cor
fixa ou no: se o parmetro isMulticoloured tiver o valor false, a cor
ser a indicada num outro parmetro com o nome colour; se o parmetro isMulticoloured tiver o valor true, a cor do ramo inicial ser a
indicada no parmetro colour, mas as restantes sero aleatrias.
4. A inclinao de cada ramo deve ser aleatria mas variando entre dois
valores indicados pelos parmetros formais minAngle e maxAngle.

Nota que 0,5 dos 1,5 valores sero atribudos apenas se o mtodo anterior
que no utilizar qualquer ciclo. Ou seja, mesmo para desenhar os vrios
ramos deve apenas fazer chamadas recorrentes. Note que pode definir mais
mtodos, mas no pode utilizar ciclos.
Req. 11 - drawKoch Snowflake (1,5 valores) Escreva um mtodo que desenha o
Koch Snowflake http://mathworld.wolfram.com/KochSnowflake.html.
Note que este desenho pode ser visto como um tringulo em que cada lado
ou uma linha simples ou uma linha com uma ponta a meio. O mtodo
deve ter a seguinte assinatura (cabealho): public void drawSnowFlake(int
n, double side)
Req. 12 - rvores como objectos (1,0 valores) Acrescente um classe denominada
Tree que do tipo GCompound: class Tree extends GCompound.
Esta classe deve ter um construtor que recebe um objecto do tipo SuperTurtle
e que desenha uma rvore. Essa rvore passa a ser um objecto do tipo Tree.
A rvore deve ser desenhada por chamadas ao mtodo drawTreeConfigurable,
ou outro semelhante, se no tiver feito esse.
No mtodo run na classe World acrescente uma opo que permite preencher a janela do programa (do World) com 20 a 50 objectos aleatrios, e em
posies aleatrias, do tipo Tree.

5 Requisitos que podem implicar penalizaes


O incumprimento de um ou mais dos seguintes requisitos implica a atribuio
da penalizao especificada e a automtica impossibilidade de obter uma nota
superior a 17.
Req. 13 - Mtodos com mais de 30 pontos-e-vrgulas (-4,0 valores) Nenhum mtodo deve ter mais de trinta pontos-e-vrgulas (";"). Note que um ciclo for
tem dois pontos-e-vrgulas.
Req. 14 - Mtodos proibidos (-5,0 valores) No pode utilizar os seguintes mtodos da classe acm.graphics.GTurtle:
move 7
setLocation 8
Req. 15 - Proibida a utilizao de atributos (-4,0 valores) No pode acrescentar
atributos de objecto nem de classe em nenhuma classe. Mas, note que pode
definir constantes da classe, por exemplo final static int SIZE = 200;.
Req. 16 - Utilizao do operador instanceof ou do mtodo getClass (-4,0 valores)
A utilizao do operador instanceof, do mtodo getClass ( http://download.
oracle.com/javase/6/docs/api/java/lang/Object.html#getClass()),
ou algo idntico que permita saber o tipo de dados de um objecto, ser penalizada pois tal no foi sequer leccionado.
Req. 17 - Regras de estilo e elegncia do cdigo (-4,0 valores) O cdigo entregue
deve respeitar as regras de estilo, nomeadamente todas as seguintes:
7 http://cs.stanford.edu/people/eroberts/jtf/javadoc/complete/acm/graphics/
GTurtle.html#move(double,%20double)
8 http://cs.stanford.edu/people/eroberts/jtf/javadoc/complete/acm/graphics/
GTurtle.html#setLocation(double,%20double)

Identificadores em ingls Os nomes de todas as variveis, mtodos e classes devem estar em ingls.
Nomes das variveis, mtodos, constantes e classe Utilizao de letras minsculas/maisculas e informao transmitida pelos nomes; por exemplo, turtle um nome melhor para uma tartaruga do que a ou xyz.
Constantes No deve utilizar constantes literais (por exemplo, 20, -300, 45.4)
para representar valores que podem ser melhor representados por um
nome. Nesses casos deve definir constantes utilizando a palavra reservada final.
Alinhamento das chavetas Cada uma por baixo da correspondente.
Os espaamentos Depois das vrgulas e antes e depois dos operadores.
Indentao coerente e para cada bloco.
Utilizao de parmetros Sempre que conveniente, os mtodos devem utilizar parmetros de modo a evitar duplicao de cdigo, nomeadamente mtodos muito parecidos.
Repetio de cdigo Deve ser evitada a repetio de cdigo.
Comentrios Antes de cada mtodo deve escrever um comentrio javadoc(
/** */) que explique o que o mtodo faz, os respectivos parmetros e
valor devolvido (se existentes). Os comentrios podem estar em portugus mas tente coloc-los em ingls. Os comentrios tm de incluir
tags @param para cada parmetro e @return quando necessrio.
Utilizao do this Deve utilizar o nome this mesmo quando no seria estritamente necessrio. Por exemplo: this.add(turtle) e no add(turtle).
Req. 18 - Auto-avaliao (-2,0 valores) No ficheiro "README.TXT", existente no
projecto do BlueJ, deve indicar quais os requisitos que esto totalmente
cumpridos (os nicos que contam como cumpridos) e a classificao resultante. No mesmo ficheiro deve indicar quantas horas gastou a fazer
este trabalho, incluindo o tempo em aulas e fora das aulas (trabalho autnomo). Verifique TODO os requisitos.
Req. 19 - Identificao (-4,0 valores) Todos
os
ficheiros
com
cdigo
(ficheiros *.java) tm de conter, em comentrio no incio, o nome e nmero
de aluno do autor.
Req. 20 - Quantidade de autores (-20,0 valores) O trabalho deve ser realizado individualmente e da responsabilidade de um s autor.
Req. 21 - Nome do projecto (-3,0 valores) O nome do projecto no BlueJ
tem de respeitar o seguinte formato. Note que Primeiro e Ultimo representam o nome do autor. Numero representa o nmero de aluno do autor.
Numero_PrimeiroUltimo_TP1_P1_2014-2015
Por exemplo: 1232_AnaGomes_TP1_P1_2014-2015

O trabalho entregue compactando a directoria do projecto BlueJ num ficheiro .zip de forma a que este fique com o nome
Numero_PrimeiroUltimo_Numero_PrimeiroUltimo_TP1_P1_2014-2015.zip.
Req. 22 - Originalidade (-20,0 a +2,0 valores) A originalidade das solues encontradas para resoluo dos requisitos essenciais e no essenciais pode ser valorizada num mximo de 2 valores e penalizada num mximo de 20,0 valores. Para efeitos de aplicao desta valorizao ou penalizao, a originalidade determinada pelas diferenas ou semelhanas entre o trabalho a ser
avaliado e os restantes trabalhos entregues por outros alunos ou da autoria
de terceiros.

Req. 23 - Entrega (at -20,0 valores) O trabalho entregue tem de ser uma directoria do projecto BlueJ pronto a funcionar, sob a forma de um nico ficheiro
zip contendo toda a directoria mais o ficheiro de auto-avaliao. Antes de
entregar, verifique que sabe pr a funcionar o cdigo no ficheiros zip entregue. Para tal parta desse ficheiro, descompacte-o, e leia-o no BlueJ. Tal
poder ser requerido na apresentao individual do trabalho. Se no conseguir pr a funcionar o contedo do ficheiro zip entregue (no moodle e por
email) a classificao no trabalho poder ser de zero valores.
A entrega tem de ser feita num ficheiro no formato zip com o nome
nomeDoProjecto.zip e sempre por duas vias:
1. Na pgina da disciplina.
2. Por email, respeitando as seguintes regras: A entrega por email feita
para
trabalhos.p1ARROBAgmail.com. O email a enviar deve conter em attach um nico ficheiro no formato zip. O subject do email deve ser o
nomeDoProjecto.
Note que pode entregar mais do que uma vez. A ltima entrega a nica
que conta. Leia tambm com ateno o seguinte requisito (Req. 23).
Req. 24 - Data limite de entrega O trabalho deve ser entregue no moodle e tambm por email at s 23:55 de 08 de Dezembro de 2014. Haver uma penalizao de 1 valor por entregas com um atraso superior a uma hora e inferior
a 24. Por cada dia (24 horas) de atraso adicional haver mais um valor de
penalizao. Por exemplo, um trabalho entregue 1:00 do dia 9 de Dezembro ter um valor de penalizao; um outro trabalho entregue s 00:00 do
dia 10 de Dezembro j ter uma penalizao de 2 valores. Se o atraso ultrapassar sete dias o trabalho ser considerado como no entregue e avaliado
com zero valores. No presente caso, os trabalhos entregues aps as 23:55
de 15 de Dezembro obtero a nota final de zero valores sem hipteses de
recuperao.

Finalmente, note que necessita de realizar mais do que o pedido para obter mais
de 17 valores. A criatividade tambm pode justificar uma melhor classificao
pelo que extras originais e sofisticados sero uma boa aposta. Note que estas adies s contam para a classificao do trabalho se forem consideradas suficientemente significativas e se todos os requisitos estiverem completamente cumpridos
e sem penalizaes.

6 Nota importante
Todas as contribuies para o trabalho que no sejam da exclusiva responsabilidade dos
autores tm de ser identificadas (com comentrios no cdigo e referncias no relatrio) e
a sua utilizao bem justificada e expressamente autorizada pelo professor responsvel.
Justificaes insatisfatrias, ausncia de autorizao, ou ausncia de referncias para trabalhos ou colaboraes externas utilizadas sero consideradas fraude sempre que os trabalhos sejam considerados demasiado semelhantes para terem sido criados de forma independente. Tal ter como consequncia a reprovao na unidade curricular de todos
os alunos envolvidos. Excepcionalmente, podero ser penalizados apenas os alunos que
se declarem como nicos culpados. Assim, nenhum aluno deve dar cpia do seu cdigo
(ainda que em fase inicial) a outro. Por essa mesma razo no boa ideia partilhar cdigo com os colegas, quer directamente quer atravs do frum. Naturalmente, cada aluno
pode trocar impresses e esclarecer dvidas com todos os colegas, mas deve saber escrever

todo o cdigo sozinho. Lembre-se que ser avaliado num exame prtico final em frente a
um computador. A classificao neste trabalho prtico fica dependente de uma eventual
apresentao individual do mesmo, tal como previsto no guia da unidade curricular.
Finalmente, antes de entregar leia com MUITA ateno todo o enunciado. A falha de
parte do exigido num requisito implica o no cumprimento desse requisito e consequente
penalizao. A programao tambm a ateno aos detalhes.
Bom trabalho!
Joo Paulo Barros & Rui Pais

Vous aimerez peut-être aussi