![]() |
Formas geométricas de cores diferentes. |
Índice
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
- Método Virtual: Declarado na classe base com a palavra-chave
virtual
. - 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
- Abrindo o Delphi: Abra o Delphi e crie um novo projeto VCL Forms Application.
- 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
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
- Definição das Classes:
TForma
: Classe base com o método virtualDesenhar
.TCirculo
eTRetangulo
: Classes derivadas que sobrescrevem o métodoDesenhar
da classe baseTForma
.
- Implementação dos Métodos:
TForma.Desenhar
: Método virtual que exibe uma mensagem genérica.TCirculo.Desenhar
eTRetangulo.Desenhar
: Métodos sobrescritos que exibem mensagens específicas para círculos e retângulos, respectivamente.
- Formulário com Botões:
ButtonCirculoClick
eButtonRetanguloClick
: Manipuladores de eventos que criam instâncias deTCirculo
eTRetangulo
, respectivamente, e chamam o métodoDesenharForma
.DesenharForma
: Método que chamaDesenhar
na instância da classe baseTForma
, demonstrando o polimorfismo em ação.
![]() |
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.
Nenhum comentário:
Postar um comentário