|
Usuários |
|
18 Usuários Online
|
|
[Dicas]
Polimorfismo |
Publicado por rboaro : Quinta, Fevereiro 16, 2012 - 04:26 GMT-3 (1233 leituras)
2 Comentários Enviar para um amigo Versão para impressão
|
Já li vários artigos na internet explicando sobre polimorfismo sempre utilizando exemplos abstratos para explicar uma das principais características da orientação a objetos. O principal exemplo que eu acompanhei utiliza-se de animais para exemplificar o que é e como funciona o polimorfismo. Geralmente é mostrado algo como o exemplo abaixo.
TAnimal = class
public Locomover; virtual; abstract;
end;
TMamifero = class(TAnimal)
public Locomover; override;
end;
TMorcego = class(TMamifero)
public Locomover; final;
end;
TLeao = class(TMamifero)
end;
TAnimal -> Nenhuma Implementação
procedure TMamifero.Locomover;
begin
inherited;
Andar;
end;
procedure TMorcego.Locomover;
begin
//inherited;
Voar;
end;
Agora vamos entender o que feito em cada exemplo. Na classe TAnimal o método Locomover foi implementado com as diretrizes virtual e abstract. Geralmente, os programadores imaginam que todos método virtual tem q ser abstrato mas, na verdade temos que entender que a diretriz virtual garante o método poderá ser sobrescrito (override) nas classes descendentes e a diretriz abstract diz ao compilador que o método abstrato não será implementado. Nota: Se um método for deixado como abstrato e não for implementado nos filhos e o método for chamado irá gerar um abstract error, isto é, invocação de um método não implementado.
Quanto a classe TMamífero o método Locomover foi implementado e sobrescrito (override) . A sobrescrita garante que tudo implementado no pai seja executado no filho (inherited) . Caso você não queira que o método do pai seja executado, você pode comentar ou excluir o inherited do método sobrescrito.
Já a diretriz final garante que os descendentes daquele método não poderão mais sobrescrevê-lo. Outra diretriz importante de relembrar é a reintroduce que permite que o método tenha uma assinatura diferente isto é, um resultado ou parâmetros diferentes.
Como eu havia dito anteriormente, a explicação abstrata a ter noção do que é cada um deles, mas na prática, como seria a implementação de classes com essas diretrizes. Vamos imaginar implementar classes para gerenciar as pessoas cadastradas no sistema. Teríamos um código, de uma forma mais simples:
TPessoa = class
public
property Nome: string read FNome write FNome;
procedure Gravar; virtual; abstract;
end;
TPessoaFisica = class(TPessoa)
public CPF: string read FCPF write FCPF;
procedure Gravar; override;
end;
TPessoaJuridica = class(TPessoa)
public CNPJ: string read FCNPJ write FCNPJ;
procedure Gravar; override;
end;
TFornecedor = class(TPessoaJuridica)
public
procedure Gravar; final;
End;
TCliente = class(TPessoaFisica)
public
procedure Gravar(Especial: Boolean); reintroduce;
end;
Uma outra diretriz de compilação que precisa ser mencionada é a sobrecarga (overload) que é utilizada para ter mais de um método com o mesmo nome e resultado ou parâmetros diferentes.
Fica aí a dica e em breve volto com mais dicas.
Felipe Caputo
|
|
Comentários | |
| | Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos. |
|
|
Edição 112 |
|
|
50 Programas Fontes |
|
|
Produtos |
|
|