Exercício em laboratório: MVC com Strategy
Neste exercício, você irá aplicar na prática seus conhecimentos do Padrão Arquitetural MVC e do Padrão de Projeto Estratégia (Strategy). Fique à vontade para tirar dúvidas ou discutir possibilidades com o professor.
PARTE 1 - MVC: Você foi
contratado para implementar um sistema para controlar a tabela do
Campeonato Brasileiro de Futebol (Brasileirão). O sistema deverá ser
alimentado com os resultados de cada jogo e a saída do sistema deverá
ser a
Tabela do Brasileirão.
No entanto, seu cliente já lhe avisou que diferentes formas de entrada e saída de dados poderão ser úteis no futuro, portanto, você decidiu implementar o sistema baseado no padrão MVC. Além disso, para ter uma ideia rápida de como o sistema irá funcionar, você decidiu implementar rapidamente uma versão, baseda puramente em texto, do sistema. Essa versão já deve usar o padrão MVC, mas o Controlador simplesmente irá receber uma lista de resultados de jogos do teclado e irá imprimir, a cada novo jogo, a tabela do brasileirão em formato texto na saída padrão.
Ou seja, o Modelo será simplesmente uma estrutura de dados
indicando, para cada time, os seguintes valores: número de vitórias,
empates, derrotas, pontos ganhos, gols pró, gols contra e saldo de gols.
Para calcular os pontos ganhos, considere que uma vitória vale 3
pontos, um empate vale 1 ponto e uma derrota não vale nada. Saldo de
gols é o total de gols a favor menos o total de gols contra.
O controlador será simplesmente um laço que, a cada iteração, pergunta o nome de dois times e o número de gols de cada time.
A visão conterá um método que, consultando o modelo, irá imprimir a tabela do brasileirão atualizada.
Implemente o sistema acima utilizando o padrão MVC e faça
um teste com alguns times (por exemplo, o quarteto paulista) e uns 3 ou
4 jogos.
Dicas:
- Neste exercício, a entrada (feita pelo controlador) irá ler os
dados do teclado. A saída (feita pela visão) irá imprimir os dados na
tela.
- Se quiser, você pode fazer um laço inicial para perguntar os
times participantes. Ou então, definir os times participantes no próprio
código da função main().
- Um possível exemplo de como poderia ser a entrada de dados é o seguinte:
1o time: CSA
Gols do CSA: 5
2o time: CRB
Gols do CRB: 2
representando uma goleada do CSA contra o CRB.
- O modelo pode, por exemplo, guardar os dados sobre o desempenho dos times num HashMap, ou TreeMap.
Time P J V E D GP GC SG
CRB 31 17 8 7 2 25 17 8
CSA 30 16 8 6 2 27 12 15
SPFC 29 17 8 5 4 19 17 2
O CSA venceu o CRB por 5 gols a 2!