Laboratório 2
Objetivos
- Fazer o aluno compreender a distinção entre interfaces, classes e objetos.
Descrição Geral
O aluno deverá produzir classes Java que implementam e usam certas
interfaces dadas. Uma vez compiladas, objetos das classes criadas
poderão ser instanciados e observados em um programa gráfico fornecido
ao aluno. O aluno terá a oportunidade de compreender a diferença entre
os conceitos de interface, classe e objeto e a importância da
programação baseada em contratos como forma de desacoplar o usuário do
produtor do código.
Roteiro
Parte 1: Compreensão do ambiente
- Baixe o aplicativo.
- Execute-o.
- Carregue a classe "Throbber". Isso deve criar um botão para a classe na base da janela.
- Clique no botão, para criar instâncias dessa classe.
Throbbers são bolas que continuamente aumentam e diminuem
de raio. Elas podem ser movidas pela tela arrastando-as com o mouse.
- Carregue a classe "Faller", crie instâncias dessa classe e observe seu comportamento.
- Carregue a classe "Exploder", crie instâncias dessa classe e observe seu comportamento.
Parte 2: as interfaces e o processo
Seu trabalho será produzir novos tipos de bolas e incorporá-las ao
programa visto. Para isso, você deve implementar novas classes que
implementem o tipo (interface) bola usado na aplicação. Além disso, para
poder interagir adequadamente com o programa gráfico que implementa o
"mundo das bolas" e sua visualização, você precisará conhecer e utilizar
a interface que ele implementa.
- Dê uma olhada nas interfaces
"Ball"
"Animate"
"World"
(detalhes em sala de aula).
- Escreva a classe "Ponto" que faz o tipo de bola mais trivial que possa existir. Ela deve apenas ficar parada no centro da tela.
- Crie o diretório balls em algum ponto de sua conta. Nele armazenaremos as classes compiladas para o aplicativo.
- Use a operação "File -> Expand classpath..." e adicione o diretório criado.
- Compile a classe com "javac -classpath ballworld.jar Ponto.java".
A compilação pode dar vários erros. Além dos problemas sintáticos e de
digitação, lembre de informar Java sobre onde encontrar as interfaces usadas
em seu código. Para isso, coloque as linhas contendo "import ballworld.*;" e "import
cs101.lang.*;" no início do seu arquivo.
- Copie o arquivo "Ponto.class" para o diretório criado.
- Carregue a classe "Ponto", e observe que seu comportamento.
A integração entre sua classe e o programa existente deve ser perfeita.
Após ler a classe, o aplicativo deve criar um botão para criar instâncias de
sua classe e se a classe estiver escrita corretamente, uma bola
correspondendo a cada objeto criado deve ser produzida na tela.
- Crie vários objetos de sua classe. O que ocorreu? Por quê?
Parte 3: criando novas classes de bolas
- Mude a classe Ponto para que o ponto seja deslocado a cada "click" do mouse para o ponto indicado na tela.
- Mude a classe Ponto para que o ponto seja eliminado ao digitarmos "d" quando ele estiver selecionado.
- Mude a classe Ponto para que o ponto aumente de raio ao digitarmos "+" quando ele estiver selecionado.
- Mude a classe Ponto para que o ponto diminua de raio ao digitarmos "-" quando ele estiver selecionado. O ponto deve ser eliminado se seu raio for menor que 1
- Crie novas classes de bolas segundo as especificações abaixo.
- Bolas que mudem de posição aleatoriamente quando clicadas.
- Bolas que desapareçam quando clicadas e apareçam algum tempo depois novamente.
- Bolas que percorram a tela chocando-se contra as paredes.
- Bolas com comportamento semelhante às bolas do tipo Exploder.
- Bolas que evitem se chocar com outras de seu mesmo tipo. Ao se aproximarem demais, elas devem se repelir.
- Bolas que... (use sua imaginação).
Questões
- Explique a diferença entre interfaces e classes.
- Explique a diferença entre classes e objetos.