Skip to content

Polimorfismo

El polimorfismo es un concepto clave en la programación orientada a objetos y se refiere a la capacidad de un objeto de tomar diferentes formas.

En términos simples, significa que un objeto puede ser tratado como un objeto de una clase padre o de una clase hija, dependiendo de las necesidades del programador. Esto permite una mayor flexibilidad y reutilización del código.

El polimorfismo se logra a través de la sobrecarga y la sobrescritura de métodos.

  • La sobrecarga de métodos significa que una clase puede tener varios métodos con el mismo nombre, pero con diferentes parámetros.
  • La sobrescritura de métodos significa que una clase hija puede reemplazar el comportamiento de un método de la clase padre.

Este concepto es muy útil cuando se trabaja con objetos de diferentes tipos que comparten una funcionalidad similar.

Por ejemplo, si tenemos una clase “Animal” y varias clases hijas, como “Gato“, “Perro” y “Pájaro“, todas ellas pueden tener un método “Hablar” con un comportamiento diferente para cada clase hija.

Sin embargo, todos pueden ser tratados como objetos de la clase “Animal“, lo que facilita la manipulación y el manejo de los objetos en el programa.

Ejemplos de polimorfismo en Delphi

type
  TAnimal = class
    procedure Hablar; virtual;
  end;
  
  TGato = class(TAnimal)
    procedure Hablar; override;
  end;
  
  TPerro = class(TAnimal)
    procedure Hablar; override;
  end;
  
  TPajaro = class(TAnimal)
    procedure Hablar; override;
  end;

procedure TAnimal.Hablar;
begin
  Writeln('El animal está hablando');
end;

procedure TGato.Hablar;
begin
  Writeln('El gato está maullando');
end;

procedure TPerro.Hablar;
begin
  Writeln('El perro está ladrando');
end;

procedure TPajaro.Hablar;
begin
  Writeln('El pájaro está cantando');
end;

Continuando con el ejemplo, tenemos una clase “TAnimal” con un método “Hablar“.

Luego, tenemos tres clases hijas, “TGato”, “TPerro” y “TPajaro”, que sobrescriben el método “Hablar” con comportamientos diferentes.

Al tratar cada objeto como un objeto de la clase padre “TAnimal“, podemos ejecutar el método “Hablar” sin tener que preocuparnos por el tipo específico de objeto que estamos manejando.

var
  animal: TAnimal;
  gato: TGato;
  perro: TPerro;
  pajaro: TPajaro;
begin
  gato := TGato.Create;
  perro := TPerro.Create;
  pajaro := TPajaro.Create;
  
  animal := gato;
  animal.Hablar;  // Output: El gato está maullando
  
  animal := perro;
  animal.Hablar;  // Output: El perro está ladrando
  
  animal := pajaro;
  animal.Hablar;  // Output: El pájaro está cantando
end;

Este es un ejemplo de cómo podemos utilizar el polimorfismo para tratar objetos de diferentes tipos como objetos de la clase padre “TAnimal“.

Al hacer esto, podemos ejecutar el método “Hablar” sin tener que preocuparnos por el tipo específico de objeto que estamos manejando. En cada caso, el comportamiento del método “Hablar” será el apropiado para el tipo específico de objeto que estamos manejando.

En resumen, el polimorfismo es un concepto clave en la programación orientada a objetos que permite a los objetos tomar diferentes formas y ser tratados como objetos de una clase padre o hija.

Esto permite una mayor flexibilidad y reutilización del código, y es esencial para la programación eficiente y mantenible.