DC-UFRPE/Licenciatura Plena em Computação/Programação II/Herança

Herança

editar

A herança é um conceito fundamental da Programação Orientada a Objetos (POO) que permite a criação de novas classes a partir de classes já existentes. É uma técnica de reutilização de código que ajuda a evitar duplicação de código e a simplificar a estruturação dos programas.

Conceito

editar

Em POO, a herança é um mecanismo pelo qual uma classe pode herdar propriedades e comportamentos de outra classe. A classe que herda é chamada de classe derivada ou subclasse, enquanto a classe que é herdada é chamada de classe base ou superclasse.

A herança permite que a classe derivada reutilize o código da classe base, estendendo ou modificando seu comportamento. A subclasse pode adicionar novos membros de dados e métodos à sua própria definição de classe, além de herdar todos os membros públicos e protegidos da classe base.

Exemplo

editar

Para ilustrar a herança em POO, vamos considerar um exemplo:

// Classe pai
class Animal {
    String nome;
    int idade;
    
    public Animal(String nome, int idade) {
        this.nome = nome;
        this.idade = idade;
    }
    
    public void emitirSom() {
        System.out.println("O animal emite um som.");
    }
}

// Classe filha
class Cachorro extends Animal {
    public Cachorro(String nome, int idade) {
        super(nome, idade);
    }
    
    public void latir() {
        System.out.println("O cachorro está latindo.");
    }
}

// Classe principal
class Main {
    public static void main(String[] args) {
        Cachorro dog = new Cachorro("Toto", 2);
        System.out.println("Nome: " + dog.nome);
        System.out.println("Idade: " + dog.idade);
        dog.emitirSom();
        dog.latir();
    }
}

Neste exemplo, temos uma classe pai Animal, que tem duas propriedades (nome e idade) e um método (emitirSom). Em seguida, criamos uma classe filha Cachorro que herda de Animal e adiciona um novo método (latir).

No método main, criamos um novo objeto Cachorro e chamamos seus métodos emitirSom e latir, além de acessar suas propriedades nome e idade.

Vantagens

editar

As principais vantagens da herança em POO são:

  • Reutilização de código: A herança permite que as classes filhas herdem os atributos e métodos das classes pai, evitando a duplicação de código e economizando tempo e esforço de programação.
  • Extensibilidade: As classes filhas podem adicionar novos atributos e métodos à sua implementação original da classe pai, permitindo que as classes sejam estendidas para atender às novas necessidades do programa.
  • Facilitação da manutenção do código: A herança ajuda na manutenção do código, pois as atualizações realizadas na classe pai são refletidas automaticamente nas classes filhas, garantindo que todas as instâncias das classes filhas sejam atualizadas.
  • Polimorfismo: A herança permite o polimorfismo, o que significa que as instâncias de uma classe filha podem ser tratadas como instâncias da classe pai, permitindo que o código seja mais flexível e genérico.
  • Simplificação do código: A herança permite que as classes sejam organizadas em uma hierarquia, tornando o código mais fácil de entender e de se trabalhar. Isso também facilita a modularização do código e permite que as classes sejam agrupadas em módulos reutilizáveis.

Desvantagens

editar

Algumas das principais desvantagens da herança em POO são:

  • Aumento da complexidade: A herança pode tornar o código mais complexo e difícil de entender, especialmente em casos de herança múltipla.
  • Acoplamento entre classes: A herança pode aumentar o acoplamento entre as classes, o que pode tornar o código mais difícil de modificar e manter.
  • Dependência de implementações: A herança pode fazer com que as subclasses dependam da implementação da classe pai, o que pode dificultar a manutenção e a evolução do código.
  • Fragilidade: Mudanças na classe pai podem afetar as subclasses, o que pode levar a problemas de compatibilidade e de comportamento inesperado.
  • Limitações na reutilização de código: A herança pode limitar a reutilização de código em situações em que a estrutura da classe pai não é adequada para as subclasses.

Links externos

editar