Bootcamp: Desenvolvimento Java com IA
Desafio: Criar uma solução que explore o cenceito de Padrões de Projeto:
- Java Puro (GoF)
- Spring Framework
Bom, escolhi o Java Puro porque gosto de lógica e fazer acontecer, uso o Spring quando é preciso, quando é para escolher, claro, escolho a linguagem pura, como neste caso... sem mais delongas vamos para o projeto.
Neste projeto foi criado uma aplicação que simula um mundo virtual em que tem (somente, rsrsrsr) veículos e garagens e, que os veículos têm somente funções básicas e as garagens aceitam somente um tipo de veículo; a princípio, as garagens armazenam um veículo apenas, kkkk, bom, o objetivo do projeto é apresentar os Padrões de Projetos.
Padrões de Design do GoF1
-
Strategy Pattern2:
- Neste projeto, as classes
Car
eMotorcycle
implementam a interfaceVehicle
, definindo comportamentos específicos para cada tipo de veículo. Embora o comportamento de direção seja similar, o padrão é sugerido aqui pela forma como diferentes tipos de veículos são tratados, permitindo que novos tipos de veículos possam ser adicionados facilmente sem modificar as classes existentes.
- Neste projeto, as classes
-
Factory Method (implícito)3:
- Embora não esteja explicitamente implementado, o uso da classe abstrata
Garage
sugere um padrão de fábrica, onde subclasses específicas (CarGarage
,MotorcycleGarage
) podem ser criadas para instanciar e gerenciar tipos específicos de veículos.
- Embora não esteja explicitamente implementado, o uso da classe abstrata
-
Template Method4:
- A classe
Garage
define um esqueleto de métodos para armazenar e retirar veículos (storingVehicle
etakingVehicle
), com as subclasses podendo definir detalhes específicos. Isso permite que o comportamento geral seja definido na classe base, enquanto os detalhes são especificados nas subclasses.
- A classe
Princípios de Programação Orientada a Objetos (POO)5
-
Encapsulamento6:
- As classes
Car
eMotorcycle
encapsulam os métodos específicos para ligar, desligar e dirigir o veículo, enquanto a classeGarage
gerencia a lógica de armazenamento de veículos.
- As classes
-
Polimorfismo7:
- O uso da interface
Vehicle
permite que diferentes tipos de veículos (Car
,Motorcycle
) sejam tratados de forma polimórfica, o que é um exemplo claro de polimorfismo em ação.
- O uso da interface
-
Herança8:
- A herança é usada entre
Garage
e suas subclasses (CarGarage
eMotorcycleGarage
). Isso permite que as subclasses herdem comportamentos comuns, como armazenamento e retirada de veículos, enquanto adicionam ou modificam funcionalidades específicas para o tipo de veículo que gerenciam.
- A herança é usada entre
-
Abstração9:
- A interface
Vehicle
define um contrato abstrato para todos os tipos de veículos, enquanto as classes concretas (Car
,Motorcycle
) implementam esses métodos, escondendo os detalhes de implementação.
- A interface
classDiagram
class Vehicle {
<<interface>>
+turnedOn()
+turnedOff()
+drive()
+getType() : String
}
class Car {
+turnedOn()
+turnedOff()
+drive()
+getType() : String
}
class Motorcycle {
+turnedOn()
+turnedOff()
+drive()
+getType() : String
}
class Garage~T~ {
-vehicle : T
-vehicleType : String
+storeVehicle(vehicle : T)
+removeVehicle(vehicle : T)
+getVehicleType() : String
}
class CarGarage {
+CarGarage()
}
class MotorcycleGarage {
+MotorcycleGarage()
}
Vehicle <|-- Car
Vehicle <|-- Motorcycle
Garage o-- Vehicle : uses
Garage <|-- CarGarage
Garage <|-- MotorcycleGarage
Footnotes
-
Padrões de Design do GoF (Gang of Four) são uma coleção de soluções típicas para problemas comuns de design de software. Esses padrões foram documentados e popularizados por quatro autores—Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides—no livro "Design Patterns: Elements of Reusable Object-Oriented Software", publicado em 1994. O grupo é conhecido como "Gang of Four" ou "GoF". ↩
-
O padrão Strategy é utilizado para definir uma família de algoritmos, encapsulá-los e torná-los intercambiáveis. ↩
-
Factory Method Implícito refere-se a situações em que a criação de objetos é controlada por métodos que não são explicitamente chamados de "factory" ou que não seguem rigorosamente a forma tradicional do padrão. ↩
-
Template Method é um padrão de design comportamental que define o esqueleto de um algoritmo em um método, permitindo que subclasses alterem etapas específicas do algoritmo sem mudar sua estrutura. ↩
-
POO é um paradigma de programação que organiza o software em objetos, que são instâncias de classes. Uma classe define uma estrutura de dados (atributos) e comportamentos (métodos) que os objetos daquela classe podem ter. POO facilita a modelagem de sistemas complexos usando conceitos do mundo real e promove uma abordagem modular e reutilizável para o desenvolvimento de software. ↩
-
O Encapsulamento restringe o acesso direto aos atributos de um objeto e controla como esses atributos são manipulados. Isso protege o estado interno do objeto e melhora a segurança e a integridade dos dados. ↩
-
O Polimorfismo permite que objetos de diferentes classes sejam tratados como objetos de uma classe comum. Isso facilita a utilização de diferentes tipos de objetos de maneira uniforme e intercambiável. ↩
-
A Herança permite criar novas classes a partir de classes existentes, herdando seus atributos e métodos, o que promove a reutilização de código e a criação de hierarquias de classes. ↩
-
A Abstração foca em expor apenas os aspectos essenciais de um objeto ou classe, escondendo detalhes complexos e promovendo interfaces claras e concisas. ↩