Saltar para o conteúdo
Aplicações Informáticas B · 12.º Ano · Algoritmia e Estruturas de Dados · 1o Periodo

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.

Aprendizagens EssenciaisDGE: Secundário - Algoritmia e Programação

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

  1. Compare os benefícios da herança e da composição na arquitetura de software.
  2. Analise como o polimorfismo permite escrever código mais genérico e extensível.
  3. 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

Conceitos Fundamentais de Programação Orientada a Objetos (POO)

Porquê: Os alunos precisam de compreender os conceitos básicos de classes, objetos, atributos e métodos para poderem aprofundar herança e polimorfismo.

Estruturas de Controlo e Tipos de Dados Básicos

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çaUm mecanismo que permite a uma classe (classe derivada) adquirir propriedades e comportamentos de outra classe (classe base), promovendo a reutilização de código.
PolimorfismoA 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.
InterfaceUm contrato que especifica um conjunto de métodos que uma classe deve implementar, definindo um comportamento comum sem fornecer a implementação.
Classe AbstrataUma 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 atividades

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

Verificação Rápida

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.

Questão para Discussão

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ê.'

Avaliação entre Pares

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?
A herança modela 'é-um' (Carro é Veículo), reutilizando código via extensão. A composição usa 'tem-um' (Carro tem Motor), permitindo trocas flexíveis. Atividades de debate em grupos ajudam alunos a analisar cenários, como sistemas modulares, identificando quando cada uma otimiza manutenção e extensibilidade, alinhando com standards do Currículo Nacional.
Quais os benefícios do polimorfismo em código extensível?
Permite código genérico que funciona com subclasses sem alterações, como arrays de formas desenhando-se uniformemente. Facilita manutenção e testes. Projetos práticos mostram como sobrescrita reduz duplicação, preparando para software real em inovação digital.
Como a aprendizagem ativa ajuda a compreender herança e polimorfismo?
Implementações hands-on, como codificar hierarquias em pares, tornam abstracto concreto: alunos veem polimorfismo em ação ao executar código. Debates e simulações coletivas clarificam trade-offs, como herança múltipla, retendo conceitos 70% melhor que aulas expositivas, fomentando pensamento crítico.
Quando usar herança múltipla em programação?
Vantajosa para traços comuns sem hierarquia rígida, como Flyable e Swimmable em animais. Problemática com conflitos de métodos. Análises em small groups com UML expõem riscos, guiando a priorizar composição ou interfaces para código limpo e escalável.