Herança e Polimorfismo em POO
Os alunos aprofundam os conceitos de herança e polimorfismo, compreendendo como promovem a reutilização e flexibilidade do código.
Sobre este tópico
A herança e o polimorfismo constituem fundamentos essenciais da Programação Orientada a Objetos (POO), promovendo a reutilização de código e a flexibilidade na arquitetura de software. Neste tópico, os alunos do 12.º ano aprofundam como classes derivadas herdam atributos e métodos de classes base, criando hierarquias que refletem relações reais, como veículos e os seus tipos específicos. O polimorfismo, via sobrescrita de métodos ou interfaces, permite tratar objetos de classes diferentes de forma uniforme, facilitando código genérico e extensível.
Integrado na unidade de Algoritmia e Estruturas de Dados do Currículo Nacional, este conteúdo responde a questões chave: comparar herança com composição, analisar o impacto do polimorfismo na extensibilidade e avaliar cenários de herança múltipla. Desenvolve competências em pensamento computacional avançado, como abstração, modularidade e resolução de problemas complexos, preparando para projetos de inovação digital.
A aprendizagem ativa beneficia especialmente este tópico, pois conceitos abstractos tornam-se concretos através de codificação prática e discussão colaborativa. Quando os alunos implementam hierarquias em projetos de grupo ou depuram código polimórfico em pares, identificam benefícios e pitfalls reais, retendo melhor os princípios e aplicando-os com confiança em contextos autênticos.
Questões-Chave
- Compare os benefícios da herança e da composição na arquitetura de software.
- Analise como o polimorfismo permite escrever código mais genérico e extensível.
- Avalie os cenários em que a herança múltipla pode ser vantajosa ou problemática.
Objetivos de Aprendizagem
- Comparar a eficiência da reutilização de código através de herança versus composição em cenários de desenvolvimento de software específicos.
- Analisar o impacto do polimorfismo na extensibilidade de aplicações, demonstrando como a adição de novas classes afeta o código existente.
- Avaliar criticamente os riscos e benefícios da herança múltipla em linguagens de programação que a suportam, propondo alternativas quando necessário.
- Demonstrar a implementação de interfaces e classes abstratas para alcançar polimorfismo em exemplos práticos de código.
- Sintetizar os princípios de herança e polimorfismo para projetar uma pequena hierarquia de classes que modele um domínio de problema específico.
Antes de Começar
Porquê: Os alunos precisam de compreender os conceitos básicos de classes, objetos, atributos e métodos para poderem aprofundar herança e polimorfismo.
Porquê: A manipulação de objetos e a implementação de métodos requerem um conhecimento sólido de como funcionam as estruturas de controlo (if, loops) e os tipos de dados.
Vocabulário-Chave
| Herança | Um mecanismo que permite a uma classe (classe derivada) adquirir propriedades e comportamentos de outra classe (classe base), promovendo a reutilização de código. |
| Polimorfismo | A capacidade de objetos de diferentes classes responderem à mesma mensagem (chamada de método) de maneiras específicas às suas classes, permitindo um tratamento uniforme de objetos diversos. |
| Sobrescrita de Método (Method Overriding) | A implementação de um método numa classe derivada que já existe na sua classe base, permitindo que a classe derivada forneça um comportamento específico. |
| Interface | Um contrato que especifica um conjunto de métodos que uma classe deve implementar, definindo um comportamento comum sem fornecer a implementação. |
| Classe Abstrata | Uma classe que não pode ser instanciada diretamente e pode conter métodos abstratos (sem implementação) e métodos concretos, servindo como base para outras classes. |
Atenção a estes erros comuns
Erro comumA herança é sempre preferível à composição.
O que ensinar em alternativa
A composição favorece flexibilidade em cenários de relações 'tem-um', evitando rigidez. Discussões em grupo ajudam os alunos a comparar exemplos reais, como um Carro com Motor (composição) versus Carro como Veículo (herança), clarificando escolhas arquiteturais.
Erro comumPolimorfismo significa apenas herança múltipla.
O que ensinar em alternativa
Polimorfismo surge principalmente da sobrescrita em herança simples ou interfaces. Atividades de codificação em pares revelam como objetos respondem diferentemente a chamadas iguais, dissipando confusão e reforçando o conceito de comportamento dinâmico.
Erro comumHerança múltipla resolve todos os problemas de reutilização.
O que ensinar em alternativa
Pode causar o 'problema do diamante' e ambiguidades. Simulações colaborativas com diagramas expõem conflitos, guiando alunos a preferir interfaces, promovendo decisões informadas.
Ideias de aprendizagem ativa
Ver todas as atividadesParcerias de Codificação: Hierarquia de Veículos
Em pares, os alunos criam uma classe base Veículo com métodos como acelerar() e freiar(). Derivam classes Carro e Moto que sobrescrevem esses métodos. Testam polimorfismo num array de veículos, invocando métodos genéricos e observando resultados diferenciados.
Grupos Pequenos: Debate Herança vs Composição
Divida a turma em grupos de 4. Cada grupo analisa um cenário de software, como sistema de gestão de funcionários, e decide entre herança ou composição, justificando com diagramas UML. Apresentam argumentos à turma para votação.
Aula Completa: Simulação com Cartões Polimórficos
Crie cartões com classes e métodos. A turma, como 'objetos', responde a chamadas genéricas de métodos, demonstrando sobrescrita. Discutem depois em plenário como isso se traduz em código.
Individual: Refatoração Polimórfica
Forneça código monolítico. Cada aluno refatora para usar herança e polimorfismo, testando com casos variados. Partilham soluções no final para revisão coletiva.
Ligações ao Mundo Real
- No desenvolvimento de jogos, a herança é usada para criar diferentes tipos de inimigos (ex: 'InimigoBase' com 'ataque()' e 'mover()', e classes derivadas como 'Goblin' e 'Dragão' que especializam esses comportamentos). O polimorfismo permite que o motor do jogo chame 'atacar()' em qualquer inimigo, independentemente do seu tipo específico.
- Empresas de desenvolvimento de software, como a Microsoft no .NET Framework, utilizam extensivamente herança e polimorfismo para criar bibliotecas de componentes reutilizáveis. Por exemplo, diferentes tipos de controlos de interface gráfica (botões, caixas de texto) herdam de uma classe base comum e implementam métodos polimórficos para desenho e interação.
- Sistemas de gestão de bases de dados podem usar polimorfismo para interagir com diferentes tipos de drivers de base de dados (SQL Server, PostgreSQL, MySQL) através de uma interface comum. Isto permite que a aplicação principal funcione com qualquer base de dados suportada sem modificações significativas no seu código.
Ideias de Avaliação
Apresente aos alunos um pequeno trecho de código que utiliza herança e polimorfismo (ex: uma classe 'Animal' com método 'fazerSom()' e classes 'Cão' e 'Gato' que o sobrescrevem). Peça-lhes para preverem a saída do programa e explicarem o porquê, focando na chamada polimórfica.
Coloque a seguinte questão para discussão em pequenos grupos: 'Quando é preferível usar composição em vez de herança para construir a relação entre duas classes? Dê um exemplo concreto onde a composição seria mais vantajosa e explique porquê.'
Divida os alunos em pares. Cada par recebe um problema simples (ex: modelar diferentes formas geométricas). Um aluno desenha uma hierarquia de classes usando herança e o outro usa composição. Depois, trocam de solução e avaliam mutuamente: A hierarquia é clara? O código é reutilizável? Quais os pontos fortes e fracos de cada abordagem?
Perguntas frequentes
Como comparar herança e composição na POO?
Quais os benefícios do polimorfismo em código extensível?
Como a aprendizagem ativa ajuda a compreender herança e polimorfismo?
Quando usar herança múltipla em programação?
Mais em Algoritmia e Estruturas de Dados
Introdução ao Pensamento Computacional
Os alunos exploram os princípios do pensamento computacional e a sua aplicação na resolução de problemas do dia a dia.
2 methodologies
Lógica de Programação e Pseudocódigo
Os alunos desenvolvem raciocínio lógico através da representação de algoritmos independentemente da linguagem de programação.
2 methodologies
Fluxogramas e Representação Gráfica
Os alunos aprendem a visualizar o fluxo de execução de algoritmos usando fluxogramas, melhorando a compreensão lógica.
2 methodologies
Gestão de Variáveis e Tipos de Dados
Os alunos estudam a manipulação de diferentes tipos de informação e o seu armazenamento na memória do computador.
2 methodologies
Operadores e Expressões Lógicas
Os alunos aplicam operadores aritméticos, relacionais e lógicos para construir expressões complexas e tomar decisões em algoritmos.
2 methodologies
Estruturas de Controlo Condicional
Os alunos aplicam estruturas de decisão (se/então/senão) para controlar o fluxo de execução de programas com base em condições.
2 methodologies