Você está na página 1de 57

Programao Orientada por Objetos e Abap

Objects
Carlos Eduardo Candido de Oliveira
E-mail: carlos.candido@procwork.com.br

Programao Orientada por Objetos

ASPEN

Objetivos e ganhos;
Classes e Objetos
Encapsulamento
Classes Abstratas
Herana
Polimorfismo
Abap Objects
Excees
Eventos
2

Modelo de Objetos: genealogia


ALGOL
1960

Pascal
1973

classes
TADs
SIMULA
1967

classes
herana

C
1972

SmalTalk
1980
ADA
1983

Delphi
1995
ASPEN

SIMULA
1967

C com
classes
C++
1985

OO
Internet

OO
Internet
JAVA
1995
C#
1999

Programao Orientada por Objetos

ASPEN

Objetivo da Engenharia de Software:


Produzir software de qualidade
Reduzir complexidade,
Aumentar confiabilidade
Fatores de Qualidade:
Externos: Correo, robustez, extensibilidade,
reusabilidade, facilidade de uso, eficincia, portabilidade
etc
Internos: Modularidade e legibilidade
Fatores externos so o que interessa, mas apenas sero
atingidos atravs de fatores internos

Programao Orientada por Objetos

ASPEN

Orientao por Objetos permite melhorar:


Reusabilidade e Extensibilidade
Principais conceitos de POO:
Classes
Objetos
Herana
Polimorfismo

Classes

ASPEN

Definio de Tipos Abstratos de Dados (TAD):


Estrutura de dados descrita por suas
propriedades e pelos servios que oferece
A sua representao interna deve ficar
totalmente encapsulada
Em POO, classes so usadas para implementar
TAD
Servios de uma classe: mtodos
Propriedades de uma classe: atributos
6

Classes e Objetos
Classe: modelo esttico, que especifica
caractersticas representadas por um dado
conceito, definindo sua estrutura e
comportamento.

Objeto: entidade dinmica, criada como


instncia de uma classe, que armazena os
dados sobre os quais so realizadas as
operaes disponveis em sua classe.

ASPEN

Encapsulamento

ASPEN

Classes devem prover ocultamento de informao


(information hiding):
Deve ser permitido ao implementador de uma classe
informar:
O que visvel aos clientes da classe (interface)
O que de uso privativo da classe
(implementao)
Permitir independncia entre clientes e
implementadores de servios

Herana

ASPEN

Mecanismo que permite definir uma nova classe que herde os


atributos e mtodos da classe pai
Classe filho pode definir (ou redefinir) atributos e mtodos
Classe filho: classe derivada, subclasse etc
Classe pai: classe base, superclasse etc
Conceito central em OO: reusabilidade e extensibilidade

Herana
Pessoa

SuperClasse

SuperClasse

nome: String
sexo: char;
dataNasc: Date;

Aluno
matricula: long;

Ator
Contrato: Cont;

SubClasse
Personagem
Caracterizaca
Novela: String;
ASPEN

10

Heranas Simples e Mltipla

ASPEN

Herana Simples:
Subclasse tem uma nica superclasse
Herana Mltipla:
Subclasse pode ter mais de uma superclasse
Problemas:
Coliso de Nomes
Herana Repetida

11

Herana Mltipla

B1

f ()

B2

g ()

B3

g ()

Coliso de Nomes. g () definido em B2 e em B3


Herana Repetida: f () definido em A
ASPEN

12

Polimorfismo

ASPEN

Definio:
Capacidade de uma varivel se referir em
tempo de execuo a objetos de diversas
classes.
Exemplo:
p: Poligono; r: Retangulo;
p:= r;
Atribuio Polimrfica:
x:= y vlida se tipo de y for uma subclasse
do tipo de x
13

Classes Abstratas

ASPEN

Classes definidas parcialmente (especificadas,


mas no implementadas);
Mtodos abstratos possuem somente sua
assinatura;
til para Projeto Orientado por Objetos;

14

Chamada Dinmica de Mtodos

ASPEN

Tipo Esttico x Tipo Dinmico:


Tipo Esttico: tipo com que uma varivel foi
declarada
Tipo Dinmico: tipo da varivel em tempo de
execuo
Chamada dinmica (dynamic dispatching)
Tipo dinmico de um objeto determina qual
implementao do mtodo ser executada.
15

Chamada Dinmica de Mtodos


Exemplo:
Var p: Poligono;
r: Retangulo;
....;
r = Retangulo.create(10,5);
p:= r;
x:= p.perimetro ()

ASPEN

16

Abap Objects

ASPEN

Conceitos derivados das linguagens C++ e Java.


Herana Simples;
Coletor de Lixo;
Todo mtodo por default virtual e aceita
redefinio(overriding e sem overloading);
Mtodos finais(no aceitam redefinio);
Classes abstratas
Classes finais
Interfaces
Funes Amigas(Marreta)
17

Classes no Abap 4

ASPEN

Podem ter escopo global ou local.


Local Definidas dentro de um programa ou
report.
Global Definidas na transao SE24,
fazendo parte de um Class Pool(packages).

18

Classes Abap 4 Sintaxe bsica


Class TPilha definition.
public section.
methods Is_empty
exporting
empty type c.
private section.
data is_empty.
Endclass.
Class TPilha implementation.
Method Is_empty.
empty = isempty.
Endmethod.
Endclass.

ASPEN

19

Controle de Visibilidade

ASPEN

Private Section atributos e mtodos acessveis


somente internamente na classe;
Public Section atributos e mtodos acessveis
internamente e externamente;
Protected Section atributos e mtodos
acessveis somente internamente na classe e
em suas subclasses.

20

Alocao de memria e o Garbage


Colector

ASPEN

21

Declarando mtodos

Assinatura

METHODS <meth> IMPORTING.. [VALUE(]<ii>[)] TYPE


type [OPTIONAL]..
EXPORTING.. [VALUE(]<ei>[)] TYPE type
[OPTIONAL]..
CHANGING.. [VALUE(]<ci>[)] TYPE type
[OPTIONAL]..
RETURNING VALUE(<r>)
EXCEPTIONS.. <ei>..
CLASS-METHODS <meth>...

ASPEN

22

Implementando mtodos

ASPEN

Sem assinatura
Mtodos estticos s podem acessar atributos
estticos
Comando raise <E> ativa uma exceo
Comando raise event ativa a chamada para um
evento
Chamadas usando Call Method

23

Trabalhando com tabelas internas no


contexto OO

ASPEN

No possuem header line, occurs 0...


Mtodos no possuem clusula TABLES
Permite o uso do tipo genrico TABLE(+
complexo)
A melhor maneira de se passar uma tabela
como parmetro para um mtodo utilizando
uma Categoria de Tabela
Ponteiro genrico para objetos: Type ref to data
24

Tipo Data(Exemplo)
Class ZCL_EXEMPLO DEFINITION.
public section.
methods: set_table
importing it_dados type table.
private section.
data: tabela type ref to data.
Endclass.
Class ZCL_EXEMPLO IMPLEMENTATION.
Method set_table.
field-symbols: <t_dados> type standard table.
GET REFERENCE OF it_dados INTO tabela.
ASSIGN tabela->* TO <t_dados>.
Endmethod.
Endclass.

ASPEN

25

Mtodo Construtor

ASPEN

Instance Constructor(METHODS
CONSTRUCTOR )
Static Constructor(CLASS-METHODS
CLASS_CONSTRUCTOR )
No possui parametro de sada
Constructor palavra reservada
Chamada implcita usando Create Object

26

Prtica

ASPEN

1.1 Fazer uma classe local em um report


contendo os mtodos pblicos READ_DATASET
e WRITE_DATASET. A idia simular
GUI_DOWNLOAD e GUI_UPLOAD para
arquivos em servidores.
1.2 Fazer uma classe que simule um include de
batch input
Criar a mesma classe global na transao SE24

27

Herana

ASPEN

Clusula Inherited from


Abstract e Final Classes
ME->
SUPER->
Call method super->constructor
Super Classe geral OBJECT

28

O Uso do objeto ME
Class zcl_Client definition.
public section.
data: name(50) value Client1.
methods: Create_server .
Endclass.
Class zcl_server definition.
public section.
data: name(50) value Server1.
methods: ack
importing p_client type ref to zcl_client.
Endclass.
ASPEN

29

O Uso do objeto ME
Class zcl_Client implementation.
Method Create_server.
data: l_server type ref to zcl_server.
create object l_server.
call method l_server->ack
exporting
p_client = ME.
Endmethod.
Endclass.
Class zcl_server implementation.
method ack.
write: me->name, Criado por:, p_client->name.
endmethod.
Endclass.
ASPEN

30

Polimorfismo

ASPEN

Atribuies sempre devem ser feitas da


seguinte maneira Superclasse = subclasse.
Para se criar um objeto com tipo diferente da
declarao:
Create object <OBJ> TYPE <SUBCLASS>
Ao se redefinir um mtodo, deve-se usar a
adio REDEFINITION em sua assinatura.
31

Interfaces

ASPEN

Descrevem estruturas de classes mas no possuem


implementao e no podem ser instanciadas.
S podem ser implementadas na seo pblica das
classes.
Funcionam como includes na definio de classes.
Para implementar um mtodo de uma interface:
Method <intf~meth>.
...
Endmethod.

32

Interfaces

ASPEN

Para chamar um mtodo de uma interface de


uma classe:
CALL METHOD <cref>-><intf~meth>
Data: cl_classe type ref to <cref>,
if_interf type ref to <intf>.
If_interf = cl_classe.
CALL METHOD if_interf->meth.

33

Exemplos: Interfaces
Interface Window.
events:
minimize exporting status type i,
maximize exporting status type i,
restore exporting status type i.
Endinterface.
Class cl_dialog_window definition.
public section.
interfaces window.
Endclass.

ASPEN

34

Prtica(Herana e polimorfismo)

ASPEN

Criar uma SuperClasse Plano com os atributos base,


altura, cor, nome da forma(quadrado, triangulo,
retangulo) e com o mtodo abstrato CalcArea. Criar
tambm um mtodo de impresso (Forma - Area) com a
cor informada no constructor. Criar as subclasses
triangulo, retngulo e quadrado implementando o
mtodo CalcArea.
Criar report que popule uma tabela interna de objetos
Plano. Em seguida, percorrer a tabela chamando os
mtodos CalcArea e Imprimir de cada objeto.

35

Prtica TYPE CAST

ASPEN

O Type Cast identificado pelo operador ?=


Implementar na prtica 2 o mtodo permetro
para a classe cl_quadrado.
Quando o plano for o quadrado imprimir
tambm seu permetro pelo mtodo perimetro.

36

Prtica (Interfaces)

ASPEN

Fazer cpia do report da prtica 1(Classe


SHDB).
Criar uma interface if_shdb(local) contendo os
atributos it_bdbdata, it_bdcmsg, tcode. A
interface deve tambm conter os mtodos
Inser_line e Call_transaction.
Refazer a classe SHDB utilizando a interface
if_shdb.

37

Eventos

ASPEN

Events(presente no definition).
Raise Event(presente no mtodo).
Set Handler - Associa quais objetos estaro
relacionados por eventos
Methods for events
Mtodos podem ser disparados por
chamadas explcitas ou por eventos.

38

Eventos

ASPEN

Events: [NOME_EVENTO] [exporting] value(p) .


Raise Event [NOME_EVENTO] [exporting] p = p.
METHOD [METODO] for event [NOME_EVENTO] of
[class] [IMPORTING] [P] [SENDER].
SET HANDLER [OBJETO]->[METODO] FOR [OBJETO].
SET HANDLER [OBJETO]->[METODO] FOR ALL
INSTANCES.
Exemplo: YCEC_ OOP_Events

39

Prtica Eventos
CLASS account DEFINITION.
PUBLIC SECTION.
EVENTS DISPLAY_DEPOSITO EXPORTING value(valor) TYPE p.
METHODS: CONSTRUCTOR IMPORTING p_number TYPE c
p_cliente TYPE c
p_saldo TYPE p,
DEPOSITO
IMPORTING
p_valor TYPE p.
DATA: number(10).
PRIVATE SECTION.
DATA: saldo TYPE p DECIMALS 2,
cliente(10).
ENDCLASS.
CLASS cliente DEFINITION.
PUBLIC SECTION.
METHODS: display_deposito FOR EVENT inform OF account
IMPORTING valor sender,
constructor IMPORTING p_number TYPE c
p_name TYPE c.
DATA: codigo(10),name(40).
ENDCLASS.

ASPEN

40

Prtica Eventos(cont)

ASPEN

Dadas as classes...
Utilizando a classe ZCL_HANDLE_DATASET, carregar
o arquivos de Contas.
Criar os parmetros de entrada Conta e valor
depsito.
Para cada registro lido, instanciar um objeto da classe
Conta e um objeto da Classe Cliente nas tabelas
it_contas e it_clientes.
Efetuar depsito de acordo com parmetro de entrada.
A cada depsito efetuado disparar o mtodo
Display_deposito via evento.

41

Clausula Friends

ASPEN

Anexada na clusula Class definition.


Class [NOME_CLASSE] definition
friends[CLASSE/INTERFACE].
Todas as classes e interfaces informadas
podem acessar todos os atributos e mtodos
protected e private da classe.

42

Prtica Classes Amigas

ASPEN

Criar um report.
Criar uma classe cl_tabela com o atributo tabela do tipo (type
ref to data) e visibilidade private. No constructor, ter como
parmetro de entrada p_table type table. Acrescentar uma
clusula Friends com a classe cl_counter.
Criar uma classe cl_counter com o mtodo display_count que
deve imprimir o numero de linhas do parmetro p_obj_table
do tipo cl_tabela.
Instanciar 2 objetos da classe cl_tabela.
Instanciar 1 objeto da classe cl_counter.
Chamar o mtodo display_count duas vezes passando as
instancias de cl_tabela como parmetro.

43

CLASS-DATA e CLASS-METHODS

ASPEN

Atributos e mtodos estticos. Pertencem


classe e no instncia .
Mtodos estticos somente acessam atributos
estticos e no requerem instanciao para
serem chamados.
Mtodos e atributos estticos so acessados via
operador =>
Class-methods: class_constructor.

44

Prtica CLASS-DATA e CLASSMETHODS

Criar um report.
Criar uma classe cl_instance_counter que deve conter o atributo
instances(esttico), os mtodos class_constructor(esttico),
constructor(instance) e display(instance), MSG_INIT(Estatico).
MSG_INIT(Estatico) Imprimir msg Inicio de alocacao de objetos.
Constructor(esttico) Imprimir mensagem Iniciando contagem....
Constructor(instance) Incrementa instances.
Display - imprime nmero de instancias.
No start-of-selection
Chamar metodo MSG_INIT
instanciar objetos vontade.

ASPEN

45

Excees: Introduo

ASPEN

Programas devem tratar erros ou situaes no previstas:


Exemplos: diviso por zero, Indexao de um vetor alm
de seus limites, overflow em uma operao aritmtica,
memria insuficiente, disco cheio etc
Ausncia de tratamento: graves conseqncias
Exemplo: exploso do foguete Ariane 5 em 1996 devido a
um overflow em uma operao de ponto flutuante em um
programa desenvolvido em ADA
Problema: formas convencionais poluem o programa com
cdigo para tratamento de erros
Chegando a 2/3 do cdigo em alguns programas
Soluo: excees

46

Tratamento de erros usando exceptions

ASPEN

TRY...CATCH
Exceo: erro ou um estado imprevisto, que no ocorre com
freqncia(dumps)
Idia: remover o tratamento de erros do fluxo normal de execuo,
de forma a no poluir o cdigo.
Tratador (ou Manipulador) de Exceo: bloco de cdigo para onde a
execuo desviada quando ocorre uma exceo
Primeira linguagem: PL/I (1964)
Atualmente: ADA, C++, Java, Delphi etc
Excees em linguagens de programao:
Como ativar uma exceo ?
Como especificar um tratador de excees ?
Como excees so propagadas?
Como retornar ao fluxo normal de execuo ?

47

Como ativar uma exceo em Abap?

ASPEN

Atravs do comando RAISE EXCEPTION TYPE class.


Exemplo:
class DivisaoPorZero implementation ;
method divisao.
if y = 0.
raise exception type CX_SY_ZERODIVIDE . ativa
exceo
endif.
result = x / y;
Endmethod.
Endclass.

48

Como especificar um tratador de excees


em Abap?

Atravs dos comandos:


Try. comandos que podem ativar excees
catch class into obj.

Endtry.
Excees ocorridas no interior de um try so transferidas para o
catch correspondente

try.
...
perform divisao using 5 0. // ativa uma exceo
catch CX_SY_ZERODIVIDE. captura exceo
write: Diviso por zero.
Endtry.
ASPEN

49

Como excees so propagadas ?

ASPEN

Excees so propagadas automaticamente, terminando cada


um dos blocos e funes do programa, at se encontrar um
tratador com parmetro formal do mesmo tipo do objeto
especificado na ativao da exceo.
Em outras palavras, procura-se na pilha de ativao de
blocos e funes, o primeiro catch que trate a exceo
ativada
Como um tratador escolhido ?
catch A captura excees da classe A e das subclasses de A
catch B captura excees da classe B e das subclasses de B
catch CX_ROOT captura excees de qualquer classe (catch-all)

50

Exemplo

Sem Tratamento de Excees


perform AbraArquivo changing nome OK.
if ok = X.
performTamArquivo using nome
changing tam.
if tam <> 0.
perform AloqueMemoria changing tam p.
if p = 0.
...
else.
...
endif.
else.
...
Endif.
else.
...
Endif.

ASPEN

Com Tratamento de Excees

Try.
perform AbraArquivo using nome.
perform TamanhoArquivo using nome
changing tam.
perform AloqueMemoria using tam
changing p.
catch CX_SY_FILE_OPEN
...
catch ZCX_TAM_ARQ
...
catch
CX_SY_EXPORT_BUFFER_NO_MEMORY
...
catch CX_ROOT
Endtry.

51

CX_ROOT

ASPEN

Classe Exception bsica


text = exception->get_text( ).
CALL METHOD
exception->get_source_position
IMPORTING
program_name = p_program
include_name = p_include
source_line
= p_position.
52

Como retornar ao fluxo normal de


execuo aps tratar uma exceo ?

ASPEN

Basta que encontre-se um bloco catch que trate o tipo da exceo


levantada
Este bloco ento executado;
A exceo desativada;
E a execuo prossegue na linha seguinte ao bloco
Como reativar uma exceo dentro de um bloco catch ?
Atravs do comando raise exception
Exemplo:
catch A.
...
raise exception type A.
reativa exceo do tipo A
.....
endtry.

53

Prtica Tratamento de Erros

ASPEN

Inserir comandos TRY...CATCH no cdigo abaixo. Em caso de uma


exceo criada, buscar o programa e linha do erro gerado.
Form f_anything using p_value type c.
Data: l_number type p decimals 3,
l_fieldname(50).
Field-symbols: <fs> type ANY.
l_fieldname = (SAPLGM)MPGD-UMREF.
Assign (l_fieldname) to <fs>.
L_number = p_value.
L_number = l_number / <fs> .
Write: Resultado:, l_number.
Endform.

54

BADIS

ASPEN

Objetos espalhados pelo cdigo standard


Substituio das USER EXITS
Para listar: SE18
Para implementar SE19

55

Case: Classes Projeto

ASPEN

ZCL_GERA_ALV
ZCL_HANDLE_DATASET

56

ASPEN

57

Você também pode gostar