Este projeto demonstra a aplicação de diversos padrões de projeto de software (Design Patterns) em Java, utilizando um contexto temático de "Organismos Biológicos".
O código demonstra os seguintes padrões:
-
Strategy: Permite definir uma família de algoritmos (ações de um organismo), encapsular cada um deles e torná-los intercambiáveis. Visto nos pacotes
eng3.strategy.patterneeng3.mvc.pattern.acao, onde diferentesAcao(comoAcaoCaminhar,AcaoCorrer) podem ser atribuídas a umOrganismo. -
Observer: Define uma dependência um-para-muitos entre objetos, de modo que quando um objeto (o
SujeitoObservado) muda de estado, todos os seus dependentes (Observador) são notificados e atualizados automaticamente. Implementado no pacoteeng3.observe.patterne integrado emeng3.mvc.pattern.observer, ondeOrganismo(que estendeSujeitoObservado) notificaRegistroAtividadeObserversobre suas ações. -
Composite: Compõe objetos em estruturas de árvore para representar hierarquias parte-todo. Permite que os clientes tratem objetos individuais e composições de objetos de maneira uniforme. Visto em
eng3.mvc.pattern.composite, ondeEstruturaBiologicapode ser umOrgao(folha) ou umSistemaOrganico(grupo que contém outrasEstruturaBiologica). -
MVC (Model-View-Controller) - Integração: Embora não seja uma implementação MVC completa com UI, o pacote
eng3.mvc.pattern(e seus subpacotes) integra os padrões Strategy, Observer e Composite para simular um sistema onde diferentes componentes interagem.Organismoatua como parte do Model, as ações (Acao) e estruturas (EstruturaBiologica) também compõem o Model, eSimulacaoBiologicaemeng3.mvc.pattern.observerage como um Controller/Runner que orquestra as interações e a saída (simulando a View) no console.
A estrutura de diretórios principal do código-fonte, baseada na imagem fornecida, é:
Bertoti/
└── eng3/
├── mvc/pattern/
│ ├── acao/
│ │ ├── Acao.java
│ │ ├── AcaoCaminhar.java
│ │ └── AcaoCorrer.java
│ ├── composite/
│ │ ├── EstruturaBiologica.java
│ │ ├── Orgao.java
│ │ └── SistemaOrganico.java
│ └── observer/
│ ├── Observador.java
│ ├── RegistroAtividadeObserver.java
│ ├── SujeitoObservado.java
│ ├── Organismo.java
│ └── SimulacaoBiologica.java <-- Ponto de entrada principal
├── observe/pattern/
│ ├── Observador.java
│ ├── RegistroAtividadeObserver.java
│ └── SujeitoObservado.java
└── strategy/
├── antipattern/
│ ├── ControleDeAcoes.java
│ └── SimulacaoBiologicaAntipattern.java <-- Demonstra o uso sem o padrão Strategy
└── pattern/
├── Acao.java
├── AcaoCaminhar.java
├── AcaoCorrer.java
├── Organismo.java
└── SimulacaoBiologica.java <-- Ponto de entrada para teste do Strategy
Para compilar e executar este projeto, você precisará ter o JDK (Java Development Kit) instalado em seu sistema.
-
Navegue até o diretório raiz:
Abra um terminal ou prompt de comando e navegue até o diretórioENG3(o diretório que contém a pastaeng3). -
Compile o código:
Execute o seguinte comando dentro do diretórioENG3:find eng3 -name "*.java" -print0 | xargs -0 javac -d .
Este comando compila todos os arquivos
.javadentro da pastaeng3e organiza os arquivos.classcorretamente a partir do diretório atual (.). -
Execute a Simulação Principal:
Após a compilação bem-sucedida, execute a classe principal que demonstra a integração dos padrões (localizada emeng3.mvc.pattern.observer):java eng3.mvc.pattern.observer.SimulacaoBiologica
-
Execute a Simulação do Strategy:
Para testar apenas o padrão Strategy isoladamente:java eng3.strategy.pattern.SimulacaoBiologica
-
Execute a Simulação do Antipattern (Sem Strategy):
Para comparar com a versão não refatorada, onde as ações não são encapsuladas como estratégias:java eng3.strategy.antipattern.SimulacaoBiologicaAntipattern