Saltar para o conteúdo
Informática · 11.º Ano · Algoritmia e Estruturas de Dados Complexas · 1o Periodo

Herança e Polimorfismo

Os alunos exploram os conceitos de herança para reutilização de código e polimorfismo para flexibilidade no design de software.

Aprendizagens EssenciaisDGE: Secundário - ProgramaçãoDGE: Secundário - Engenharia de Software

Sobre este tópico

A herança e o polimorfismo constituem fundamentos essenciais da programação orientada a objetos, promovendo a reutilização de código e a flexibilidade no design de software. Neste tópico, os alunos do 11.º ano investigam como a herança permite criar hierarquias de classes, com subclasses a herdarem atributos e métodos das classes base. Isso facilita a manutenção de grandes projetos de software, reduzindo redundâncias e simplificando atualizações. O polimorfismo adiciona flexibilidade, permitindo que objetos de classes diferentes respondam de forma uniforme a chamadas de métodos comuns, o que resulta em código mais genérico e extensível.

No âmbito do Currículo Nacional, estes conceitos integram-se na unidade de Algoritmia e Estruturas de Dados Complexas, alinhando-se com os standards de Programação e Engenharia de Software. Os alunos diferenciam sobrecarga de métodos, que cria variantes no mesmo escopo, da sobreposição de métodos, que redefine comportamentos em subclasses para polimorfismo dinâmico. Analisam como estes mecanismos respondem às questões chave, como a manutenção de projetos e a escrita de código reutilizável.

A aprendizagem ativa beneficia especialmente este tópico, pois os alunos implementam hierarquias concretas em Python, testam polimorfismo com exemplos reais e depuram em grupo. Esta prática torna ideias abstratas concretas, fomenta a discussão colaborativa e consolida competências de engenharia de software através da experimentação iterativa.

Questões-Chave

  1. De que forma a herança facilita a manutenção de grandes projetos de software?
  2. Diferencie sobrecarga de métodos de sobreposição de métodos no contexto do polimorfismo.
  3. Analise como o polimorfismo permite escrever código mais genérico e extensível.

Objetivos de Aprendizagem

  • Demonstrar como a herança permite a criação de hierarquias de classes reutilizando código em projetos de software.
  • Comparar a sobrecarga de métodos (overloading) e a sobreposição de métodos (overriding) para explicar as diferentes aplicações do polimorfismo.
  • Analisar como o polimorfismo contribui para a escrita de código mais genérico e extensível em cenários de desenvolvimento de software.
  • Criar exemplos de código em Python que ilustrem os princípios de herança e polimorfismo para resolver problemas específicos.

Antes de Começar

Conceitos Fundamentais de Programação Orientada a Objetos

Porquê: Os alunos precisam de ter uma compreensão básica de classes, objetos, atributos e métodos para poderem aplicar os conceitos de herança e polimorfismo.

Estruturas de Controlo e Funções

Porquê: A capacidade de escrever e chamar funções é essencial para a implementação de métodos e para a compreensão de como o polimorfismo afeta a execução do código.

Vocabulário-Chave

HerançaUm mecanismo que permite a uma classe (subclasse) adquirir propriedades e comportamentos de outra classe (superclasse), promovendo a reutilização de código.
PolimorfismoA capacidade de objetos de diferentes classes responderem a uma mesma chamada de método de formas específicas, permitindo um tratamento uniforme de objetos diversos.
Sobrecarga de Métodos (Overloading)Definir múltiplos métodos com o mesmo nome numa classe, mas com assinaturas (parâmetros) diferentes, permitindo que o método execute tarefas semelhantes de maneiras distintas.
Sobreposição de Métodos (Overriding)Uma subclasse redefine um método já existente na sua superclasse, alterando o seu comportamento para se adequar às necessidades específicas da subclasse.
Classe Base (Superclasse)A classe da qual outras classes herdam características. É a classe mais genérica numa hierarquia.
Classe Derivada (Subclasse)A classe que herda características de outra classe (a classe base). É uma especialização da classe base.

Atenção a estes erros comuns

Erro comumA herança copia todo o código da classe base em vez de referenciar.

O que ensinar em alternativa

A herança estabelece uma relação de referência, permitindo reutilização sem duplicação. Atividades de construção de hierarquias em pares ajudam os alunos a visualizar ligações através de diagramas de classes e testes de instâncias, esclarecendo que alterações na base propagam-se automaticamente.

Erro comumSobrecarga e sobreposição de métodos são a mesma coisa no polimorfismo.

O que ensinar em alternativa

Sobrecarga ocorre em tempo de compilação no mesmo escopo, enquanto sobreposição redefine em subclasses para decisão em runtime. Experiências em estações rotativas permitem aos alunos executar código e observar diferenças em saídas, fomentando discussões que corrigem confusões.

Erro comumPolimorfismo só funciona com classes da mesma hierarquia.

O que ensinar em alternativa

Polimorfismo aplica-se via interfaces ou herança múltipla, independentemente de hierarquia direta. Projetos coletivos com listas de objetos diversos mostram como chamadas uniformes funcionam, ajudando os alunos a experimentar e validar através de depuração colaborativa.

Ideias de aprendizagem ativa

Ver todas as atividades

Ligações ao Mundo Real

  • Desenvolvedores de jogos utilizam herança para criar diferentes tipos de inimigos ou personagens, onde cada um partilha características básicas de um 'personagem' genérico, mas possui comportamentos únicos definidos por sobreposição de métodos.
  • Empresas de desenvolvimento de software, como a Microsoft ou a Google, aplicam polimorfismo em frameworks de UI (User Interface) para permitir que diferentes tipos de botões ou janelas respondam ao evento 'clique' de forma apropriada, sem que o código principal precise conhecer o tipo exato de cada elemento visual.
  • Sistemas de gestão de bases de dados usam herança e polimorfismo para organizar e aceder a dados de forma eficiente. Por exemplo, uma classe 'Veículo' pode ter subclasses como 'Carro' e 'Moto', cada uma com métodos específicos para 'acelerar', mas implementados de forma diferente.

Ideias de Avaliação

Bilhete de Saída

Peça aos alunos para escreverem um pequeno trecho de código Python que demonstre herança, criando uma classe base e uma classe derivada. Em seguida, devem explicar em uma frase como a reutilização de código foi aplicada.

Questão para Discussão

Coloque a seguinte questão no quadro: 'Imagine que está a construir um sistema de gestão de biblioteca. Como usaria herança para representar diferentes tipos de materiais (livros, DVDs, revistas) e polimorfismo para implementar uma função de 'pesquisa' que funcione para todos eles?'. Dê 5 minutos para reflexão individual e depois abra para discussão em pequenos grupos.

Verificação Rápida

Apresente duas definições de métodos: uma que é sobrecarga e outra que é sobreposição. Peça aos alunos para identificarem qual é qual e explicarem o porquê, focando na assinatura do método e no contexto de herança.

Perguntas frequentes

Como diferenciar sobrecarga de sobreposição de métodos?
A sobrecarga cria múltiplas versões de um método na mesma classe, resolvida em tempo de compilação pelos argumentos. A sobreposição redefine um método herdado numa subclasse, permitindo polimorfismo em runtime. Atividades práticas com exemplos em Python, como estações rotativas, mostram aos alunos as diferenças através de execução de código e análise de erros, reforçando a distinção com 60 palavras de discussão guiada.
De que forma a herança facilita a manutenção de software?
A herança centraliza código comum em classes base, evitando duplicações e simplificando atualizações globais. Alterações numa base propagam-se às subclasses, reduzindo bugs em projetos grandes. Os alunos compreendem isso ao refatorar hierarquias em projetos colaborativos, medindo tempo de manutenção antes e depois, o que ilustra benefícios reais em engenharia de software.
Como a aprendizagem ativa ajuda a ensinar herança e polimorfismo?
A aprendizagem ativa torna conceitos abstratos concretos através de codificação prática, como construir hierarquias de classes em pares ou testar polimorfismo em grupo. Os alunos depuram erros reais, discutem falhas e iteram soluções, o que aprofunda compreensão e retenção. Comparado a aulas expositivas, esta abordagem aumenta engagement e competências de programação em 30-50%, conforme estudos pedagógicos.
Como implementar polimorfismo em projetos extensíveis?
Use sobreposição de métodos em subclasses e trate objetos via tipos base ou interfaces. Isso permite adicionar novas classes sem alterar código existente. Atividades de extensão individual, seguidas de integração coletiva, mostram aos alunos como listas polimórficas executam comportamentos variados, promovendo código genérico alinhado com standards de engenharia de software no Currículo Nacional.