Uma classe herda comportamento e atributos de outra
- Permite refinamentos
- Utilizada para organizar o código
Gera uma hierarquia de tipos
- Refletem relacionamentos no espaço de problemas
- \pause Nova terminologia para lidar com tipos
- classe derivada ou subclasse
- classe pai ou superclasse
- Métodos (funções) e mensagens (chamadas de métodos)
\pause Diferenças entre subclasse e superclasse
- Superclasse pode definir atributos privados
- \pause Subclasse pode adicionar novos atributos/variáveis
- \pause Subclasse pode modificar o comportamento da classe pai
- Sobrescrita de método
Exemplo
- Veiculo (cor, ano) ← Caminhao (rodas, capacidade)
Métodos e atributos de instância
- Métodos são compartilhados entre os objetos da classe
- Atributos diferenciam dois objetos da mesma classe
Métodos e atributos de classe
- Definem comport. da classe (métodos globais da classe)
- Atributos pertencem à classe (só existe um)
Simples
- Cada classe herda de uma única classe
- Gera uma árvore de derivação
Múltipla
- Uma classe pode herdar de mais de uma superclasse
- Grafo de derivação
Problemas na implementação de herança múltipla
- Herdar dois métodos com mesmo nome
- \pause Herança repetida (problema do diamante)
- Herança replicada (várias cópias) → C++
- \pause Herança compartilhada (uma cópia) → Eiffel
- \pause Alternativa: interfaces (Java, C#, Ada), protocolos (ObjC)
- Uma das heranças apenas contém métodos