🚀 Capítulo 05: A Iniciativa Vingadores (Tema: Vingadores)
NOTE
Este capítulo utiliza a temática dos Vingadores para explicar os 4 pilares da Orientação a Objetos: Encapsulamento, Herança, Polimorfismo e Abstração.
1. 🎯 Objetivo da Aula
Compreender os quatro pilares fundamentais da Orientação a Objetos em Java e como eles ajudam a organizar códigos complexos.
2. 🏢 O Cenário Prático (Seu Desafio)
Para criar a equipe dos Vingadores, Nick Fury precisou recrutar heróis muito diferentes. O Homem de Ferro usa tecnologia, o Thor usa magia divina e o Hulk usa força bruta. Cada um tem suas próprias características e segredos, mas todos compartilham uma coisa em comum: todos são “Super-Heróis”.
Para gerenciar essa complexidade de heróis sem virar uma bagunça, o Java utiliza os Pilares da Orientação a Objetos! Eles funcionam como as regras de convivência da equipe. Seu desafio é entender esses pilares!
🧠 Fundamentos: A Teoria Traduzida
🛡️ 1. Encapsulamento (Proteger os Segredos):
Significa esconder os detalhes internos do objeto e liberar apenas o que for necessário. No Java, fazemos isso colocando a palavra private antes das variáveis e criando métodos públicos chamados getters e setters para acessar esses valores de forma segura!
- Metáfora: Você não pode mexer direto no reator do peito do Homem de Ferro, você precisa pedir para ele ligar ou desligar!
🧬 2. Herança (Reutilizar Poderes):
Permite que uma classe nova herde todos os atributos e métodos de uma classe que já existe. Usamos a palavra extends.
- Metáfora: O Homem de Ferro e o Capitão América herdam as características da classe pai
SuperHeroi(como ter um codinome e uma missão).
🎭 3. Polimorfismo (Muitas Formas):
É a capacidade de objetos diferentes responderem ao mesmo comando de formas diferentes.
- Metáfora: Se você der o comando
atacar()para os Vingadores, o Homem de Ferro vai disparar um raio laser, o Capitão América vai jogar o escudo e o Hulk vai esmagar! O comando é o mesmo, mas a ação é diferente!
🌌 4. Abstração (Focar no que Importa):
É isolar um conceito do mundo real focando apenas no que é importante para o sistema, ignorando os detalhes complexos.
- Metáfora: Para o sistema dos Vingadores, importa que a Viúva Negra sabe lutar e é uma espiã. Não importa a marca do shampoo que ela usa.
classDiagram class Heroi { +atacar() } class Hulk { +atacar() } class Thor { +atacar() } Heroi <|-- Hulk : Herança Heroi <|-- Thor : Herança
4. 📖 Exemplo Guiado: O Ataque dos Vingadores
Veja como funciona o Polimorfismo em Java:
// Classe Pai
class Heroi {
void atacar() {
System.out.println("O herói atacou!");
}
}
// Classes Filhas que herdam de Heroi e mudam o ataque!
class Hulk extends Heroi {
@Override // Diz que estamos mudando o comportamento do pai!
void atacar() {
System.out.println("Hulk ESMAGA!");
}
}
class Thor extends Heroi {
@Override
void atacar() {
System.out.println("Thor lança o trovão!");
}
}5. 🛠️ Prática Obrigatória 1: Identificando o Pilar
Leia a situação abaixo e diga qual dos 4 pilares da POO melhor descreve o que está acontecendo:
- Você criou a classe
Veiculocom o métodobuzinar(). Depois criou a classeCarroque herda deVeiculopara não precisar reescrever o código da buzina. Qual o nome desse pilar? - Você colocou as variáveis da classe como
privatee criou métodos para validar os dados antes de salvá-los. Qual o nome desse pilar?
6. 🛠️ Prática Obrigatória 2: O Comando de Herança
- Dada a classe
SuperHeroi, escreva a linha de código que cria a classeArqueiroherdando todas as características deSuperHeroi.
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 05 Java_Vingadores) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
spec_backend_com_java_e_springboot/
├── capitulos/
│ └── capitulo_05_vingadores.md💡 Checkpoint de Lógica
A anotação @Override serve para avisar ao Java (e a outros programadores) que aquele método da classe filha está de propósito substituindo o método da classe pai!
10. 🔥 Desafio de Fixação
Pesquise o que é uma Interface em Java e qual a diferença dela para uma classe abstrata comum.
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- Herança (reutilização de código).
- Encapsulamento (proteção e validação de dados). Gabarito da Prática 2:
class Arqueiro extends SuperHeroi { }