• Nenhum resultado encontrado

O Poder do Polimorfismo. Fábio Bissolotti Solution Engineer

N/A
N/A
Protected

Academic year: 2021

Share "O Poder do Polimorfismo. Fábio Bissolotti Solution Engineer"

Copied!
31
0
0

Texto

(1)

O Poder do Polimorfismo

Fábio Bissolotti

(2)

Polimorfismo -- Agenda

O que é polimorfismo

Herança e sobrescrita de método (overriding)

Implementando interfaces

(3)

/** super.p **/

PROCEDURE DoIt:

/* common behavior*/

END PROCEDURE.

O Que as Super Procedures Oferecem?

O princípio do Polimorfismo!

/** run.p **/

RUN Super.p SET hDoIt.

h:ADD-SUPER-PROCEDURE(hDoIt).

PROCEDURE DoIt:

/* customized behavior */

RUN SUPER.

END PROCEDURE.

Alguns recursos para a

programação genérica

Alguns recursos para

customizar

comportamento

Alguns recursos para

customizar respostas a

mensagens

(4)

Comportamento diferenciado para

Tipos específicos

Comportamento comum a todos

os Tipos

O Que é Poliformismo?

Cliente

Doméstico

Cliente

Preferencial

Cliente

Internacional

Cliente

Cliente

Interno

(5)

Informações p/ Contato

Cálculo de Entrega

Emissão de Relatórios

Assinatura de mailing list Endereço Alternativo p/ Faturamento

Herança

Cliente

Doméstico

Preferencial

Cliente

CLASS DomCust INHERITS Cust CLASS PreCust INHERITS Cust

Cliente

Informações p/ Contato

Cálculo de Entrega

Emissão de Relatórios

Informações p/ Contato

Cálculo de Entrega

Emissão de Relatórios

(6)

Vocabulário

OBJETO

Uma entidade com propriedades que a

descrevem e comportamento p/ manipulá-la

TIPO

Uma categoria de dados que pode ter valores,

um formato que o denote e operações que

agem sobre ele

SUPER CLASSE Uma classe que especifica dados e

compor-tamento comuns à categoria de objetos

SUBCLASSE

Uma classe que herda um super tipo,

adqui-rindo dados e comportamento comuns, além

de declarar os seus próprios

(7)

Tipos Definidos Pelo Usuário

Cliente

Tipos embutidos: INTEGER, CHARACTER, HANDLE etc…

DEFINE VARIABLE myvar AS INTEGER.

Tipos definidos pelo

usuário

(8)

DEFINE VARIABLE DomObj AS CLASS DomCust.

DomObj = NEW DomCust().

DomObj

refere-se a uma instância de um Cliente Doméstico

DEFINE VARIABLE CustObj AS CLASS Cust.

CustObj = NEW DomCust().

Custobj

refere-se a uma instância de um Cliente Doméstico

ou um Cliente Internacional

ou um Cliente Preferencial

ou qualquer outra subclasse de

Cust...

(9)

Herança e Referências a Objetos

Cliente

Preferencial

Cliente

Doméstico

É um tipo de

Cliente

Cliente

É um tipo de

DEF VARIABLE CustObj1 AS CLASS Cust.

DEF VARIABLE CustObj2 AS CLASS Cust.

CustObj1 = NEW DomCust( ).

CustObj2 = NEW PreCust( ).

MESSAGE CustObj1:CalcShipping( ).

MESSAGE CustObj2:CalcShipping( ).

(10)

Acessando Informações Adicionais

Cliente

Preferencial

Cliente

CAST(CustObj1, PreCust):AddToMailList

Cliente

Doméstico

Assinatura de mailing list Endereço Alternativo p/ Faturamento

Informações p/ Contato

Cálculo de Entrega

Emissão de Relatórios

Informações p/ Contato

Cálculo de Entrega

Emissão de Relatórios

Informações p/ Contato

Cálculo de Entrega

Emissão de Relatórios

(11)

Métodos definidos em super classes

Comportamento comum aos tipos

Métodos sobrescritos na subclasse

Comportamento específico ao tipo

Acesso a dados específicos

Cálculos especializados

Sobrescrita de Método (Overriding)

Cliente

Cliente

Doméstico

METHOD PUBLIC INTEGER CalcShipping( ):

(12)

$

13.99

Spring St,

Boston

Herança e Sobrescrita de Método

Cliente

Qual o valor da entrega?

Onde o cliente está

localizado?

CalcShipping()

GetCustomerInfo()

Cliente

Doméstico

(13)

Main St,

Chicago

FREE

Herança e Sobrescrita de Método

Cliente

Preferencial

Cliente

Qual o valor da entrega?

Onde o cliente está

localizado?

CalcShipping()

(14)

O Que Está Acontecendo…

1. Define uma variável genérica

CustObj

para um objeto Cliente

Cliente

3. Invoca

CalcShipping()

CustObj:CalcShipping()

2. Atribui a variável a um novo objeto

Cliente Doméstico

Cliente

Doméstico

4. Método sobrescrito executado em

(15)

METHOD PUBLIC OVERRIDE INT CalcShipping( ):

SUPER:CalcShipping( ).

/* type-specific behavior */

END METHOD.

Acessando Comportamento Comum

Pré-processamento: executa método da super

classe antes do comportamento específico

Pós-processamento: executa método da super

classe depois do comportamento específico

(16)

METHOD PUBLIC OVERRIDE INT CalcShipping( ):

/* type-specific behavior */

SUPER:CalcShipping( ).

END METHOD.

Acessando Comportamento Comum

Pré-processamento: executa método da super

classe antes do comportamento específico

Pós-processamento: executa método da super

classe depois do comportamento específico

(17)

METHOD PUBLIC OVERRIDE INT CalcShipping( ):

SUPER:CalcShipping().

/* type-specific behavior */

PrintReport( ).

END METHOD.

Acessando Comportamento Comum

A subclasse tem acesso ao comportamento

comum definido na super classe

(18)

Calcula taxas

comuns de envio

Emite o

relatório

Cliente

Doméstico

Acessando Comportamento Comum

Cliente

$13.99

Qual o valor da entrega?

(19)

O Que Está Acontecendo…

1.

Usando a variável genérica

CustObj,

invoca

CalcShipping().

CustObj:CalcShipping()

2. Método sobrescrito executado em Cliente Doméstico,

não em Cliente

METHOD PUBLIC OVERRIDE INT CalcShipping( ):

SUPER:CalcShipping().

/* type-specific behavior */

PrintReport( ).

(20)

Acessa Situação de Crédito Calcula Total da Ordem

Acessa Situação de Crédito

Calcula Total da Ordem

Interfaces

Acessa Situação de Crédito Calcula Total da Ordem

ICliente

Cliente

Doméstico

Cliente

Preferencial

CLASS DomCust INHERITS Cust

IMPLEMENTS ICust

CLASS DomCust INHERITS Cust

(21)

DEFINE VARIABLE DomObj AS CLASS DomCust.

DomObj = NEW DomCust().

DomObj

refere-se a uma instância de um Cliente Doméstico

DEFINE VARIABLE CustObj AS CLASS ICust.

CustObj = NEW DomCust().

Custobj

refere-se a uma instância de um Cliente Doméstico

ou um Cliente Internacional

ou um Cliente Preferencial

ou qualquer classe que implementa

ICust…

(22)

A Garantia da Interface

Cliente

Preferencial

Cliente

Doméstico

implementa

ICliente

ICliente

implementa

DEF VARIABLE CustObj1 AS CLASS ICust.

DEF VARIABLE CustObj2 AS CLASS ICust.

CustObj1 = NEW DomCust( ).

CustObj2 = NEW PreCust( ).

MESSAGE CustObj1:CalcOrderTotal( ).

MESSAGE CustObj2:CalcOrderTotal( ).

(23)

ICliente

ICliente

Uma Mensagem, Respostas Distintas

(24)

Cliente

Preferencial

Cliente

Doméstico

Uma Mensagem, Respostas Distintas

Qual é o total da ordem?

Total = $171.49

Total = $135.00

Sub-total

$150.00

Envio

$ 13.99

Taxas

$ 7.50

Total

$ 171.49

Sub-total

$150.00

Envio

$ .00

Desconto

< 15.00>

Total

$ 135.00

(25)

O Que Está Acontecendo…

1. Define uma variável genérica

CustObj

para a interface ICust

ICliente

3. Invoca

CalcOrderTotal()

CustObj:CalcOrderTotal()

2. Atribui a variável a um novo

objeto Cliente Doméstico

Cliente

Doméstico

4. O método é garantido pela interface e

(26)

METHOD PUBLIC DomCust MakeCustObj

(INPUT CustType AS CHARACTER):

DEFINE VARIABLE CustObj AS CLASS Cust.

CASE CustType:

WHEN “DomCust” THEN

CustObj = DomCust( ).

WHEN “PreCust” THEN

CustObj = PreCust( ).

END CASE.

RETURN CustObj.

END METHOD.

Programação Dinâmica

(27)

METHOD PUBLIC DomCust MakeCustObj

(INPUT CustType AS CHARACTER):

DEFINE VARIABLE CustObj AS CLASS Cust.

CustObj = DYNAMIC-NEW (CustType + “Cust”).

RETURN CustObj.

END METHOD.

Programação Dinâmica

(28)

Em Resumo

Resposta a uma

mensagem assume várias

formas

Mesma API usada por

vários objetos possibilita

programação genérica

Cria código customizável,

reutilizável e mais fácil de

manter.

(29)
(30)
(31)

Referências

Documentos relacionados

O papel da meteorologia na prevenção e combate dos incêndios florestais.. Conferência apresentada no Instituto de Meteorologia e Geofísica, Lisboa, 19 de Outubro

A política monetária enfatiza sua atuação sobre os meios de pagamento, títulos públicos e taxas de juros, modificando o custo e o nível de oferta do crédito.

A estrutura dos poros e propriedades mecânicas de corpos-de-prova de cimento reforçado com fibras de celulose e PVA foram avaliadas antes e depois destes serem submetidos

Não custa nada pensar como rico! Não precisa nem sair para gastar nas lojas, mas mentalizar onde iria, que casa compraria, que carro vai ter, que lugar vai passar nas

(2017) Satisfação do usuário da Atenção Básica em Saúde por regiões do Brasil: 1º ciclo de avaliação externa do PMAQ-AB. Oral Health Policies in Brazil. Ten Years of a

Não só pela credibilidade profissional, mas também pelo motivo dos Sistemas de Busca não indexar as páginas dos sites que estão neste tipo de servidor grátis... Além disso,

El objetivo del artículo es analizar y describir las estrategias que la Asociación Evangélica de la Misión Israelita del Nuevo Pacto Universal, un movimiento mesiánico milenarista

Prestação de contas do repasse de recursos financeiros pelo Município de Venâncio Aires e Municípios Referenciados em complementação aos valores pagos pelo SUS destinado ao