Projeto de Software Orientado a Objeto
Descrição do Projeto - Período 2004.1

Você deve implementar, em Java, um programa para manipular pilhas de
cartas de forma a poder jogar um jogo como Paciência (também chamado Klondike).
Seu programa não precisa ter interface gráfica: toda manipulação é feita através
de linha de comando. As regras do jogo Klondike devem ser obedecidas. As pilhas
de baixo são chamadas "tableaux"; as de cima à direita são "fundações"; as duas
pilhas mais à esquerda são chamadas de "estoque" (esquerda) e "descarte"
(direita). O baralho deve ser embaralhado (traçado) no início do jogo. A
linguagem deve permitir operações adicionais tais como "encerrar", "reiniciar",
etc.
Temos pouco tempo para o projeto. Por outro lado, seu programa deve usar uma
arquitetura com isolamento entre a lógica de negócio e a interface. Exponha as interfaces
da lógica de negócio através de uma API.
Um dos objetivos do projeto é de usar o maior número de design patterns
possível. Pense em formas de maximizar a flexibilidade do código. Portanto, a
linguagem de comando que você usará deve ser genérica o suficiente para permitir
a manipulação de quaisquer outros jogos semelhantes envolvendo tableaux,
fundações, estoque e descarte.
O projeto será avaliado através de 3 milestones:
- Milestone 1: Modelo conceitual em UML (basta o diagrama de classes). Projeto
arquitetural. Projeto de baixo nível incluindo:
- Uma descrição de cada entidade
- Uma descrição das responsabilidades assumidas pela entidade
(1 frase curta para cada responsabilidade)
- Um diagrama de classes UML
- Documentação javadoc (para ajudar você a concretizar
as idéias)
- Milestone 2: O código do business logic, com interface gráfica e com testes
de unidade feitos com JUNIT (ou algo semelhante). No relatório, indicar quais
design patterns foram usados e para quê. Não precisa entregar
os artefatos atualizados (modelo conceitual e modelo de design).
- Milestone 3: Neste milestone, você trabalhará com o programa de outra equipe,
indicada pelo professor. Você deve refatorar o código para deixá-lo mais
limpo. Testes de unidade devem estar atualizados. Implemente o jogo Spider.
Alternativa: Se você quiser usar um processo semelhante a XP, você
pode redefinir os três milestones e apresentar código desde o início,
com seus testes de unidade e aceitação. Precisa combinar com o
professor.
Para cada milestone, entregue o seguinte material:
- Entregue o código fonte documentado (quando houver código
fonte). Entregue também a saída do javadoc. Nos comentários,
identifique claramente os design patterns utilizados. Adicionalmente, entregue
o código fonte de todos os testes de unidade realizados. Use JUNIT
para testes de unidade.
- Entregue um único arquivo zip
- Ao deszipar o arquivo, tudo deve cair no lugar certo para ajudar minha tarefa
de testar e verificar seu trabalho
- Posso deszipar o arquivo em qualquer diretório que eu quiser na minha
máquina
- Use apenas nomes de arquivos relativos, pois nomes absolutos que poderão
existir na sua máquina poderão não existir na minha máquina
- Use ant com os seguintes alvos: limpa, compila, doc, testa. Só garanto
que o PATH de minha máquina permite executar ant, e os comandos java
(javac, java, javadoc, ...).
- O arquivo build.xml deve estar na raiz do seu zip
- Crie um comando paciencia.bat (ou paciencia no Unix/Linux) para executar o programa.
- Para testar seu programa, usarei dois comandos:
- ant limpa compila doc testa
- paciencia.bat (ou paciencia, no Unix/Linux)
- Os testes devem abrir uma GUI do JUNIT e mostrar os testes executando e
dando "barra verde".
- Para ter certeza que tudo funcione adequadamente, teste os passos acima
numa máquina diferente daquela onde você desenvolveu o software
- Estarei testando seu software com o JDK 1.4.1. Não peça para
que eu use outra versão de Java.
- Não topo editar build.xml ou arquivos .bats para acertar
o classpath ou qualquer outra coisa.
- Entregue um relatório chamado relatorio-milestone1.pdf, etc. (ou
.doc ou .html)
- Para o terceiro milestone, o que você deve avaliar sobre o projeto
que você recebeu de outra equipe (incluir sua avaliação
no relatório):
- Comente as fraquezas do design que você recebeu.
- Comente as virtudes do design que você recebeu.
- Comente as dificuldades que você teve para implementar o jogo
spider.
- Descrever o refatoramento que você efetuou.