Objectivos

  • Utilização do diagrama de classes da linguagem UML para modelar um problema.
  • Exemplificar a utilização de contentores, iteradores e de ordenação de contentores.

Actividade

  1. Resolução do enunciado da aula.
  2. Resolução do Exercício de Programação 4 (EP4)

Enunciado da Aula

Considere o Jogo do Galo descrito na aula anterior. Pretende-se agora adicionar a seguinte funcionalidade.

Deve ser possível guardar os vários jogos que foram jogados. A ordem pela qual os jogos são guardados deve ser preservada. Deverá ser possível aceder a cada um dos jogos jogados, sendo necessário apenas indicar o índice do jogo pretendido (o índice deve começar em 1). Defina um comportamento para o caso em que se fornece um índice inválido. Deve ainda existir uma funcionalidade que escreve o estado final de cada um dos jogos já jogados. A iteração sobre os jogos deve ser feita pela mesma ordem com que os jogos foram inseridos.

Para correr a aplicação estando no directório pai do directório com o código, é necessário dar o seguinte comando:

  • java -cp .: jogogalo.JogoGalo
Caso esteja no mesmo directório onde tem o código da aplicação, então o comando deverá ser:
  • java -cp ..: jogogalo.JogoGalo

Trabalho Proposto

Nesta aula, os alunos devem fazer o seguinte trabalho (respeitando a ordem indicada):

  1. Representar num diagrama de classes UML as relações existentes entre as classes necessárias para realizar as funcionalidades descritas acima, incluindo os métodos e campos das classes.
  2. Concretizar a ou as classes necessárias para concretizar a nova funcionalidade do Jogo do Galo.
  3. Após ter realizado o diagrama UML e a concretização da funcionalidade extra indicada, pode ver a seguinte secção que contém o código extra necessário para concretizar as funcionalidades extras pedidas. Compare a sua solução com esta e discuta as diferenças.
  4. Após ter realizado estas tarefas, suponha agora que a classe JogoGalo tem um método que devolve o estado de um jogo: vitória do primeiro jogador, vitória do segundo jogador, empate e não terminado. Qual a melhor forma de representar o tipo de retorno deste método? Faça uma solução e compare-a com o seguinte excerto de código.
  5. Altere agora o código realizado por forma a que cada jogo do galo saiba sempre o estado em que está e quando se realiza uma jogada válida num jogo do galo não terminado tem que se verificar se o jogo terminou e nesse caso alterar o estado do jogo do galo para o valor correto. Os métodos que já realizou na classe JogoGalo permitem actualizar o comportamento do método joga de forma simples (basta reutilizar alguns métodos desta classe). Realize as alterações necessárias à classe JogoGalo para suportar esta funcionalidade. Compare as alterações efectuadas com a solução proposta: código.
  6. Acrescente um método à aplicação Jogo do Galo que devolve uma lista com os jogos ordenados ordenados por vencedor: jogos ganhos pelo primeiro jogador, jogos ganhos pelo segundo jogador e jogos empatados. Tenha em atenção que a execução deste método não deverá alterar a ordem pela qual os jogos já terminados estão guardados. Esta nova funcionalidade deverá ser concretizada com base na interface Comparator e no método estático sort da classe Collections disponíveis na biblioteca do Java. Vai ser necessário especificar um comparador de jogos do galo que compare dois jogos com base no estado de cada um. Realize a sua concretização e compare a sua solução com o seguinte excerto de código.
  7. Realizar o Exercício de Programação 4 na parte final da aula.