Projeto criado no intuito de estudar Design Patterns através da simulação de uma Locadora. O sistema permite que os clientes aluguem DVDs, calculem os valores dos aluguéis e gerem extratos em diferentes formatos.
- Cadastro de clientes e DVDs.
- Registro de aluguéis de DVDs por clientes.
- Cálculo do valor dos aluguéis baseado no tipo de DVD e dias alugados.
- Geração de extratos de aluguel em formato de texto e HTML.
- Pontuação de cliente por frequência de aluguéis e bônus para aluguéis de lançamentos.
- Execute a classe Principal
Main
.
javac Main
Os princípios SOLID visam garantir um código mais modular, reutilizável e fácil de manter. Abaixo a definição de cada princípio:
- S - Princípio da Responsabilidade Única (Single Responsibility Principle - SRP):
- Uma classe deve ter apenas uma única função, ou seja, ela deve ter apenas uma responsabilidade. Isso facilita a manutenção e evolução do código.
- O - Princípio do Aberto/Fechado (Open/Closed Principle - OCP):
- Toda classe criada deve ser aberta para extensão, mas fechada para modificação.
- Isso significa que você pode estender o comportamento da classe sem alterar o escopo central.
- Toda classe criada deve ser aberta para extensão, mas fechada para modificação.
- L - Princípio da Substituição de Liskov (Liskov Substitution Principle - LSP):
- Subclasses não devem alterar a lógica das superclasses.
- I - Princípio da Segregação de Interface (Interface Segregation Principle - ISP):
- Uma classe não deve ser forçada a implementar interfaces que ela não utiliza. Interfaces devem ser específicas para as necessidades da classe que as implementa.
- D - Princípio da Inversão de Dependência (Dependency Inversion Principle - DIP):
- Módulos de alto nível não devem depender de módulos de baixo nível. Ambos devem depender de abstrações.
O padrão Null Object é utilizado para representar a ausência de algum objeto, evitando verificações nulas espalhadas pelo código.
O padrão Template Method é utilizado para quando um método realiza uma operação cujo algoritmo pode ser dividido em etapas específicas, algumas das quais podem ser definidas ou sobrescritas por subclasses.
No projeto, foi utilizado o mesmo para gerar extratos de aluguel em diferentes formatos (texto e HTML). Onde a super classe Extrato
define o esqueleto do método mostrarExtrato
, enquanto as subclasses TextExtrato
e HTMLExtrato
implementam os métodos expecificados no passo a passo do esqueleto.