ENTENDENDO O POLIMORFISMO

 

 

Dando continuidade na utilização de técnicas orientadas a objetos, estarei mostrando em dois artigos o uso do polimorfismo juntamente com outras técnicas de orientação a objetos. Nesta primeira parte explicarei o conceito, características e exemplo de utilização, e na segunda parte otimizaremos a técnica, e veremos a criação de templates e como compartilha-los entre os projetos existentes. A grande maioria dos desenvolvedores conhece o seu conceito, mais o uso em sistemas reais deveria ser mais aplicado pelas vantagens que a técnica oferece. Pode-se definir o seguinte sobre as técnicas de orientação a objetos em relação ao desenvolvimento de sistemas: Quanto maior e mais complexas for a estrutura e as regras, mas vantagens serão obtidas com a POO, ou melhor, maior será sua necessidade de utilização, pois se obtém dentre outras vantagens – manutenabilidade, reusabilidade e organização.  A agregação disso tudo trará, se bem aplicada, um resultado esperado de produtividade com qualidade.

Para a ideal compreensão da orientação a objetos é indispensável o conhecimento da suas características básicas, que são as classes e objetos. Para entender e empregar o polimorfismo o leitor não pode ter dúvidas do que é uma classe e como ela é definida e identificada, por isso, para aqueles que não estão “confortáveis” aconselho um estudo sobre o assunto.

 

O polimorfismo pode ser empregado em dois contextos:

-          Em classes da mesma família;

-          Dentro da mesma classe;

 

Mostraremos o uso do polimorfismo em classes da mesma família onde teremos um método na classe base e suas diferentes implementações nas classes filhas onde a tarefa será executada de acordo com a classe instanciada. Para o exemplo, imagine um sistema real que dentre suas diversas classes possui uma responsável pela impressão do pedido de venda do sistema, onde podemos definir como TPedidoVenda. Esta “regra” de impressão de pedido é na maioria dos casos particular de cada cliente, onde cada um possui sua própria implementação. Vejam, é neste ponto que começaremos a identificar o polimorfismo! Temos em nosso sistema uma regra genérica(Impressão de Pedidos), mas que sua implementação é diferente de cliente para cliente, ou seja, uma regra que terá uma forma de acordo com a situação. O objetivo do artigo não é trazer uma real implementação de uma regra de negócio e sim mostrar a definição de uma estrutura onde as regras devem ser implementadas.

 

DEFININDO A CLASSE GENÉRICA TPEDIDOVENDA

 

Nossa classe terá algumas propriedades e métodos sendo os principais o seu construtor, que iniciará os objetos, e um método chamado ImpressãoPedido, que retornará através de um TStringList, informações para simplesmente ilustrar o exemplo. Em sistemas reais esta classe teria muitas outras funcionalidades e esta regra, por exemplo, receberia o nº do pedido a ser impresso e realizaria a impressão de todas as informações relacionadas ao mesmo. Com o Delphi aberto, vamos criar nossa classe usando File | New -> Unit. Salve-a com o nome de uPedidoVenda.pas. A seguir é apresentada a definição da classe. Podemos perceber a declaração da palavra chave virtual, que informa que o método da classe base poderá ser sobrescrito(override) nas classes descendentes. Em alguns casos, em vez de utilizarmos a palavra chave virtual, utilizamos a palavra chave abstract. Isto é conveniente onde desejamos definir um método que obrigatoriamente deva ser implementado em suas classes descendentes, onde na classe base apenas sua definição é realizada. Um exemplo aplicado seria em classes genéricas que não possuem uma implementação padrão para a o método:

 

 

unit uPedidoVenda;

 

interface

 

uses Classes, SysUtils, Graphics;

 

type

  TPedidoVenda = class

  private

    FFont: TFont;

    FText: TStrings;

    FMostrarData: boolean;

    procedure SetFont(const Value: TFont);

    procedure SetText(const Value: TStrings);

  public

    constructor create; virtual;

    function ImpressaoPedido: TStrings; virtual;

    property Font: TFont read FFont write SetFont;

...

Quer ler esse conteúdo completo? Tenha acesso completo