Menu

Tradução

Português English Español Français

Polimorfismo em Delphi

Nesse post iremos aprender sobre Polimorfismo em Delphi dentro da Orientação a Objetos.

 

Polimorfismo em Delphi
Formas geométricas de cores diferentes.

Introdução

Nesse post iremos aprender sobre Polimorfismo em Delphi dentro da Orientação a Objetos. Iremos pontuar o conceito, utilização e exemplo prático com código fonte completo, para elevar seus conhecimentos em Delphi para outros nível.

Conceito de Polimorfismo

Polimorfismo é um dos principais pilares da programação orientada a objetos (POO), ao lado da herança e encapsulamento. O termo "polimorfismo" vem do grego e significa "muitas formas". Em programação, refere-se à capacidade de uma função, objeto ou método assumir diferentes formas. Em Delphi, o polimorfismo permite que métodos em classes derivadas tenham comportamentos diferentes, mesmo quando são chamados através de referências a classes base.

O polimorfismo torna o código mais flexível e extensível, permitindo que objetos de diferentes classes sejam tratados de maneira uniforme. Isso é especialmente útil em sistemas complexos, onde a reutilização e a extensibilidade do código são cruciais.

Métodos Virtuais e Sobrescritos

Para implementar polimorfismo em Delphi, usamos métodos virtuais e sobrescritos. Um método virtual é declarado na classe base e pode ser redefinido (sobrescrito) em classes derivadas. A palavra-chave virtual é usada para declarar um método como virtual, e a palavra-chave override é usada na classe derivada para sobrescrever o método virtual da classe base.

Definição de Métodos Virtuais e Sobrescritos

  1. Método Virtual: Declarado na classe base com a palavra-chave virtual.
  2. Método Sobrescrito: Declarado na classe derivada com a palavra-chave override, substituindo a implementação do método virtual na classe base.

Uso do Polimorfismo em Delphi

O polimorfismo é utilizado em Delphi para permitir que uma mesma operação tenha diferentes comportamentos em diferentes objetos. Isso é alcançado através da herança e dos métodos virtuais e sobrescritos. O código pode chamar métodos em classes derivadas através de uma referência à classe base, permitindo a substituição dinâmica do comportamento.

Exemplo Prático com Código

Vamos criar um exemplo prático para ilustrar o conceito de polimorfismo em Delphi. No exemplo, teremos uma classe base TForma com um método virtual Desenhar, e duas classes derivadas TCirculo e TRetangulo que sobrescrevem o método Desenhar.

Configurando o Ambiente

  1. Abrindo o Delphi: Abra o Delphi e crie um novo projeto VCL Forms Application.
  2. Configurando o Formulário Principal: Adicione o seguinte componente ao formulário:
  • TButton (ButtonCirculo): Para executar exibir os dados de TCirculo.
  • TButton (ButtonRetangulo): Para executar exibir os dados de TRetangulo.

Código Completo

Delphi

unit Unit1;

interface

uses
  Vcl.Forms, Vcl.Dialogs, Vcl.Controls, Vcl.StdCtrls, System.Classes;

type
  TForma = class
  public
    procedure Desenhar; virtual; // Método virtual
  end;

  TCirculo = class(TForma)
  public
    procedure Desenhar; override; // Sobrescrevendo o método Desenhar
  end;

  TRetangulo = class(TForma)
  public
    procedure Desenhar; override; // Sobrescrevendo o método Desenhar
  end;

  TForm1 = class(TForm)
    ButtonCirculo: TButton;
    ButtonRetangulo: TButton;
    procedure ButtonCirculoClick(Sender: TObject);
    procedure ButtonRetanguloClick(Sender: TObject);
  private
    procedure DesenharForma(Forma: TForma);
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForma }

procedure TForma.Desenhar;
begin
  ShowMessage('Desenhando uma forma genérica');
end;

{ TCirculo }

procedure TCirculo.Desenhar;
begin
  ShowMessage('Desenhando um círculo');
end;

{ TRetangulo }

procedure TRetangulo.Desenhar;
begin
  ShowMessage('Desenhando um retângulo');
end;

{ TForm1 }

procedure TForm1.ButtonCirculoClick(Sender: TObject);
var
  Circulo: TForma;
begin
  Circulo := TCirculo.Create;
  try
    DesenharForma(Circulo);
  finally
    Circulo.Free;
  end;
end;

procedure TForm1.ButtonRetanguloClick(Sender: TObject);
var
  Retangulo: TForma;
begin
  Retangulo := TRetangulo.Create;
  try
    DesenharForma(Retangulo);
  finally
    Retangulo.Free;
  end;
end;

procedure TForm1.DesenharForma(Forma: TForma);
begin
  Forma.Desenhar;
end;

end.
  

Explicação do Código

  1. Definição das Classes:
    • TForma: Classe base com o método virtual Desenhar.
    • TCirculo e TRetangulo: Classes derivadas que sobrescrevem o método Desenhar da classe base TForma.
  2. Implementação dos Métodos:
    • TForma.Desenhar: Método virtual que exibe uma mensagem genérica.
    • TCirculo.Desenhar e TRetangulo.Desenhar: Métodos sobrescritos que exibem mensagens específicas para círculos e retângulos, respectivamente.
  3. Formulário com Botões:
    • ButtonCirculoClick e ButtonRetanguloClick: Manipuladores de eventos que criam instâncias de TCirculo e TRetangulo, respectivamente, e chamam o método DesenharForma.
    • DesenharForma: Método que chama Desenhar na instância da classe base TForma, demonstrando o polimorfismo em ação.
Veja a ilustração do projeto abaixo:
Ilustração do projeto.

Código fonte do exemplo

Você pode fazer o download do exemplo do projeto através do repositório do github:

https://github.com/Gisele-de-Melo/Polimorfismo

Conclusão

O polimorfismo é uma característica poderosa da programação orientada a objetos que permite que um método tenha diferentes implementações em classes derivadas. Em Delphi, o polimorfismo é implementado através de métodos virtuais e sobrescritos, permitindo que o mesmo método possa ter comportamentos diferentes dependendo da classe que o implementa. Ao utilizar polimorfismo, você pode criar código mais flexível, extensível e fácil de manter.

Este exemplo prático demonstrou como definir e usar polimorfismo em Delphi, mostrando a importância desse conceito na construção de aplicações robustas e escaláveis. Ao dominar o polimorfismo, você estará melhor preparado para desenvolver sistemas complexos de maneira eficiente e organizada.

Posts Relacionados



Nenhum comentário:

Postar um comentário

Recursividade em Delphi: Conceitos, Exemplos e Aplicações Práticas

Neste post, você aprenderá quando usar recursividade em Delphi, suas vantagens e desvantagens, além de um exemplo prático implementa...