📐 CAPÍTULO 12: DIAGRAMA DE CLASSES (CONCEITOS)
Chegamos ao núcleo da Engenharia de Sistemas modernos. Se os "Casos de Uso" explicavam o que o usuário vê, o Diagrama de Classes explica como o software organiza a Memória RAM e o Banco de Dados. 🛡️🧩
🎯 Objetivo do Capítulo
Dominar a estrutura de classes, atributos e métodos, aplicando os modificadores de visibilidade e as associações fundamentais para criar um modelo de dados escalável.
🏢 O Cenário Corporativo (TecProExpress)
Na TecProExpress, o time de Backend está migrando do modelo de "Scripts de Banco" para a Orientação a Objetos em Java. Os desenvolvedores precisam saber: O que é um objeto vivo na memória? Como protegemos o saldo de uma conta de ser alterado por qualquer um?
"Seu desafio como Arquiteto de Dados é desenhar o molde das classes. Você deve definir quais informações são privadas (escondidas no cofre) e quais ações são públicas para os outros objetos."
🧠 Classes vs. Objetos (Instâncias)
- Classe: É o "Molde" ou a "Planta". Não tem dados reais ainda. (Ex: A classe
Motorista). - Objeto (Instância): É a "Vida" na memória RAM. Tem dados reais. (Ex: O motorista
João, CPF123.456...).
🔍 Anatomia de uma Classe UML
Uma classe é representada por um retângulo dividido em três partes:
- Nome: Substantivo no singular (Ex:
Produto). - Atributos (Dados): O que ele guarda. (Ex:
- preco: Double). - Métodos (Ações): O que ele faz. (Ex:
+ calcularDesconto()).
🛡️ Visibilidade (Encapsulamento)
Controlamos o acesso aos dados usando símbolos universais:
+(Public): Qualquer um pode acessar.-(Private): Somente a própria classe pode mexer. (O "Cofre").#(Protected): A classe e suas filhas (herança) podem acessar.
📊 Exemplo de Classe Protegida
classDiagram
class ContaBancaria {
-Double saldoOculto
#String titular
+efetuarSaque(Double valor)
+consultarSaldo() Double
}
[!TIP] Regra de Ouro (Java Sênior): Atributos devem ser SEMPRE Privados (-). O acesso a eles deve ser feito exclusivamente por métodos Públicos (+). Isso garante que ninguém mude um saldo para negativo por erro de lógica externa. 🚀
🖇️ Relacionamentos (Associações)
As classes não vivem isoladas. Elas se conectam para realizar tarefas complexas.
1. Multiplicidade (Cardinalidade)
Indica quantos objetos podem se conectar:
1: Exatamente um (Obrigatório).0..*: Zero ou Muitos (Opcional).1..*: Pelo menos um (Obrigatório).
classDiagram
class Cliente {
-String nome
}
class Pedido {
-Date data
}
Cliente "1" -- "0..*" Pedido : Realiza
💡 Checkpoint de Lógica
[!IMPORTANT] Reflexão Profissional: Por que uma tabela de Banco de Dados não é exatamente a mesma coisa que uma Classe UML? (Resposta: Porque tabelas guardam apenas dados mortos; Classes guardam dados e também Comportamentos/Métodos que rodam na memória). 🧠🛡️