🏛️ Atividade 07: Diagrama de Classes (UML)
🎯 Objetivo da Aula
Ao final desta atividade, você será capaz de:
- Definir Atributos (o que o objeto guarda) e Métodos (o que o objeto faz).
- Aplicar modificadores de Visibilidade (Público
+, Privado-, Protegido#) baseados no princípio do Encapsulamento. - Modelar Associações e multiplicidade (1:1, 1:N, N:N).
- Identificar oportunidades de Herança para otimização de código.
🏢 O Cenário Prático (Seu Desafio)
Na TecProExpress, os protótipos (Atividade 06) foram aprovados! Agora, o time de desenvolvimento backend (Java/C#/Python) precisa saber: "Como os dados serão organizados no código? Quais são as classes e como elas se conectam?".
Se você apenas disser "Cria uma tabela de motorista", o programador pode esquecer de validar se o motorista tem uma CNH válida ou se ele pode ter vários veículos associados a ele.
"Seu desafio é atuar como Arquiteto de Software. Você deve desenhar o Diagrama de Classes, que é o mapa estrutural que diz ao programador exatamente quais variáveis e funções ele deve criar para que o sistema suporte toda a lógica de logística da TecProExpress."
🧠 Fundamentos: A Teoria Traduzida
O Diagrama de Classes mostra a "foto" parada do sistema. Se o software fosse um prédio, o Diagrama de Classes seria a planta estrutural das paredes e colunas.
Anatomia da Classe
- Nome: Sempre substantivo e no singular (Ex:
Motorista). - Atributos (Dados): O que ele sabe? (Ex:
- cnh: String). - Métodos (Ações): O que ele faz? (Ex:
+ validarDocumento()).
📊 Visualizando a Lógica
📖 Exemplo Guiado
Abaixo, veja como mapear as entidades da TecProExpress para classes UML.
| Passo | Pergunta do Arquiteto | Tradução UML |
|---|---|---|
| 01 | O que um 'Pacote' tem? | Atributos: -id, -peso, -status. |
| 02 | O que o 'Pacote' faz? | Métodos: +calcularFrete(), +atualizarStatus(). |
| 03 | Como ele se conecta? | Um Motorista leva Muitos Pacotes (1:N). |
📊 Graus de Acoplamento e Relacionamentos entre Classes
🛠️ Estrutura de Atributo e Método
- Atributo:
- salario: Double = 1412.00-: Privado.salario: Nome.Double: Tipo do dado.= 1412.00: Valor padrão.
- Método:
+ calcularIdade(dataNasc: Date): Int+: Público.dataNasc: Date: Parâmetro de entrada.: Int: O que o método devolve (Tipo de retorno).
🔍 Detalhamento do Processo:
- Note que no Diagrama de Classes não colocamos "clicar no botão". Colocamos a lógica do objeto. Se o botão na tela chama uma função de salvar, o método
salvar()deve estar na Classe.
🛠️ Prática Obrigatória 1: O Diagrama de Classes
Cenário: O projeto semestral da sua equipe.
- Identifique as 5 principais entidades do seu sistema (ex: Usuário, Produto, Pedido, Categoria, Endereço).
- Utilizando uma ferramenta UML (Astah, Lucidchart ou Draw.io), desenhe o diagrama.
- Cada classe deve conter pelo menos 3 atributos e 2 métodos.
- Defina as multiplicidades corretamente (ex: Um cliente tem 0 ou N pedidos).
🏁 Resultado Esperado (Para sua Referência)
Uma imagem (PNG/JPG) do diagrama contendo as 5 classes conectadas, com tipos de dados e visibilidade (+ e -) aplicados.
🛠️ Prática Obrigatória 2: Justificativa de Visibilidade
Cenário: Proteção de dados (Encapsulamento).
- Escolha uma classe do seu diagrama.
- Explique por que você definiu um determinado atributo como Privado (
-) e como o sistema fará para ler ou alterar esse dado com segurança.
🏁 Resultado Esperado (Para sua Referência)
Um pequeno texto em Markdown justificando a escolha técnica do encapsulamento na sua modelagem.
📤 Instruções de Entrega (Microsoft Teams)
Após validar suas documentações técnicas:
- Salve o arquivo de documentação com o nome
Atividade_07.mde a imagem do seu diagrama de classes com o nomeAtividade_07.pngna pastaes-atv-07-classes/do seu repositório GitHub. - Certifique-se de fazer o commit e push para o repositório público.
- Submeta o link do seu repositório no Microsoft Teams para avaliação do professor.
💡 Checkpoint de Lógica
Funcionario e uma classe Gerente, e percebe que ambas têm os atributos nome, cpf e telefone, qual conceito de Orientação a Objetos você aplicaria para não precisar repetir esse código duas vezes? (Resposta: Herança. Você criaria uma classe pai 'Pessoa' e as outras herdariam dela). 🧠🛡️📊 Rubrica Formativa de Avaliação
| Critério de Avaliação | Insuficiente (0% - 40%) | Regular (41% - 70%) | Excelente (71% - 100%) |
|---|---|---|---|
| Diagrama de Classes (UML) | Menos de 5 classes ou sem tipos de dados nos atributos. | Mapeia 5 classes mas sem multiplicidades ou sem visibilidade. | Diagrama de classes impecável com 5 entidades, atributos com visibilidade (+/-), métodos e multiplicidades corretas. |
| Justificativa de Encapsulamento | Deixa todos os atributos como públicos sem justificativa. | Justifica superficialmente sem explicar o papel dos getters/setters. | Justificativa técnica sólida de encapsulamento protegendo a integridade dos dados da classe. |
| Entrega no GitHub | Entrega fora da pasta `es-atv-07-classes/`. | Entrega apenas o texto sem o arquivo `.png` da modelagem. | Submete `Atividade_07.md` e `Atividade_07.png` no repositório com formatação validada. |
🖼️ Atividade 06: Prototipagem e Wireframes
Bem-vindo a mais uma etapa da sua jornada no curso de Gestão de TI / Desenvolvimento de Sistemas. Hoje vamos mergulhar em conceitos que conectam a teoria técnica diretamente com o padrão de excelência visual, trazendo a interface do software para o "mundo real" antes mesmo de escrever a primeira linha de código. 🛡️🧩
🔀 Atividade 08: Diagrama de Sequência (UML)
Bem-vindo a mais uma etapa da sua jornada no curso de Gestão de TI / Desenvolvimento de Sistemas. Hoje vamos mergulhar em conceitos que conectam a teoria técnica diretamente com o padrão de excelência da dinâmica de software, entendendo como o sistema "conversa" internamente. 🛡️🧩