Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

Calculadora-Extens-vel

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate this project.

README

🧮 Módulo 1 — Calculadora Extensível (Delphi + SOLID + Clean Architecture)

Este repositório contém o primeiro módulo da jornada de estudos em Clean Architecture, SOLID e Design Patterns aplicados em Delphi.
O objetivo deste mini-projeto é construir uma calculadora extensível, aplicando conceitos fundamentais de arquitetura limpa e padrões de projeto.

Ele é simples, mas poderoso o suficiente para servir como base para projetos maiores.


🎯 Objetivos do Módulo

  • Aprender a estruturar um projeto Delphi seguindo boas práticas.
  • Aplicar princípios SOLID em um cenário real.
  • Implementar o padrão Strategy para operações matemáticas.
  • Utilizar o Factory Method para criar objetos sem acoplamento.
  • Criar um projeto extensível, onde novas operações podem ser adicionadas sem modificar código existente.

🟦 /domain

Contém as regras de negócio puras:

  • Interface IOperacao
  • Implementações concretas das operações matemáticas.

🟩 /application

Contém a lógica de criação/despacho:

  • TOperacaoFactory (Factory Method)

🟧 /ui

Contém apenas a interface gráfica (VCL):

  • Formulário principal com campos, seleção e resultado.

🧩 Padrões e Princípios Utilizados

✔ SOLID

1. SRP — Single Responsibility Principle

Cada operação (soma, subtração, multiplicação, divisão) é uma classe isolada com uma única responsabilidade.

2. OCP — Open/Closed Principle

Para adicionar uma nova operação, basta criar uma nova classe implementando IOperacao.
Nenhuma classe existente precisa ser alterada.

3. LSP — Liskov Substitution Principle

Todas as operações substituem corretamente a interface IOperacao sem alterar o comportamento esperado.

4. ISP — Interface Segregation Principle

A interface IOperacao é pequena, coesa e específica.

5. DIP — Dependency Inversion Principle

O formulário (UI) depende da abstração (IOperacao) em vez das classes concretas.


✔ Design Patterns

🎯 Strategy

Cada operação é uma “estratégia” diferente.
O usuário escolhe a operação e o sistema troca a estratégia em tempo de execução.

🎯 Factory Method

A classe TOperacaoFactory centraliza a criação das estratégias.
A UI não sabe “como” criar a operação — apenas informa qual deseja.


🧪 O que podemos aprender com este módulo?

Este módulo ensina uma base sólida para qualquer software bem escrito:

✔ Criar código extensível

Adicionar uma nova operação é fácil:

  1. Criar uma classe implementando IOperacao
  2. Registrar na factory
  3. Colocar no ComboBox

✔ Escrever código com baixo acoplamento

O Form não sabe nada sobre as classes concretas.

✔ Entender Clean Architecture na prática

Ainda que simplificado, o projeto separa UI / Application / Domain.

✔ Treinar o uso correto de interfaces

Proporciona abstração, teste e substituição fácil.

✔ Tratar erros com responsabilidade (ex.: divisão por zero)


🚀 Como executar

  1. Abra o projeto no Delphi (VCL).
  2. Certifique-se de que todas as units estejam nos caminhos corretos.
  3. Execute o programa.
  4. No formulário:
    • Informe os valores A e B.
    • Escolha a operação no ComboBox.
    • Clique em Calcular.

O resultado aparecerá no label.


🔧 Tecnologias Utilizadas

  • Delphi (Object Pascal)
  • VCL
  • Padrões de projeto: Strategy e Factory Method
  • Princípios SOLID
  • Arquitetura em camadas (Clean Architecture - versão inicial)

➕ Como adicionar uma nova operação?

Passo 1 — Criar a classe

delphi
TMinhaNovaOperacao = class(TInterfacedObject, IOperacao)
public
  function Executar(A, B: Double): Double;
  function Nome: string;
end;

Passo 2 — Implementar suas regras

Passo 3 — Registrar na Factory

delphi
if Identificador = 'Minha Nova Operação' then
  Exit(TMinhaNovaOperacao.Create);

Passo 4 — Adicionar ao ComboBox na UI