Laboratório 2

Objetivos

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

  1. Baixe o aplicativo.
  2. Execute-o.
  3. Carregue a classe "Throbber". Isso deve criar um botão para a classe na base da janela.
  4. 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.

  5. Carregue a classe "Faller", crie instâncias dessa classe e observe seu comportamento.
  6. 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.

  1. Dê uma olhada nas interfaces "Ball" "Animate" "World" (detalhes em sala de aula).
  2. Escreva a classe "Ponto" que faz o tipo de bola mais trivial que possa existir. Ela deve apenas ficar parada no centro da tela.
  3. Crie o diretório balls em algum ponto de sua conta. Nele armazenaremos as classes compiladas para o aplicativo.
  4. Use a operação "File -> Expand classpath..." e adicione o diretório criado.
  5. 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.

  6. Copie o arquivo "Ponto.class" para o diretório criado.
  7. 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.

  8. Crie vários objetos de sua classe. O que ocorreu? Por quê?

Parte 3: criando novas classes de bolas

  1. Mude a classe Ponto para que o ponto seja deslocado a cada "click" do mouse para o ponto indicado na tela.
  2. Mude a classe Ponto para que o ponto seja eliminado ao digitarmos "d" quando ele estiver selecionado.
  3. Mude a classe Ponto para que o ponto aumente de raio ao digitarmos "+" quando ele estiver selecionado.
  4. 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
  5. Crie novas classes de bolas segundo as especificações abaixo.
    1. Bolas que mudem de posição aleatoriamente quando clicadas.
    2. Bolas que desapareçam quando clicadas e apareçam algum tempo depois novamente.
    3. Bolas que percorram a tela chocando-se contra as paredes.
    4. Bolas com comportamento semelhante às bolas do tipo Exploder.
    5. Bolas que evitem se chocar com outras de seu mesmo tipo. Ao se aproximarem demais, elas devem se repelir.
    6. Bolas que... (use sua imaginação).

Questões