Escolar Documentos
Profissional Documentos
Cultura Documentos
AbapObjects 1 PDF
AbapObjects 1 PDF
1/70
OOP em ABAP
VISIBILIDADE................................................................................................................. 4
HELP.SAP.COM ............................................................................................................. 5
O QUE ORIENTAO A OBJETO? ............................................................................... 5
Usos de Orientaao a Objeto...................................................................................... 6
Leitura Posterior........................................................................................................ 7
O ambiente de tempo de execuo .............................................................................. 9
A extenso da linguagem orientada a objeto .............................................................. 9
DE GRUPOS DE FUNES A OBJETOS ............................................................................... 9
Classes..................................................................................................................... 13
Objetos como Instancias de uma Classe ................................................................... 15
Declarando Mtodos ................................................................................................ 25
Implementando Mtodos .......................................................................................... 26
Chamando Mtodos.................................................................................................. 26
Mtodos de Manipulao de Eventos........................................................................ 27
Constructors............................................................................................................. 28
MTODOS EM OBJETOS ABAP - EXEMPLO ................................................................ 28
Viso Geral .............................................................................................................. 28
HERANA ................................................................................................................. 39
Redefinindo Mtodos................................................................................................ 40
Mtodos e Classes Abstratos e Finais....................................................................... 40
Referncias a Subclasses e Polimorfismo ................................................................. 41
Espao de Nomes para Componentes ....................................................................... 41
Herana e Atributos Estticos .................................................................................. 41
Herana e Constructors............................................................................................ 42
GRFICO GERAL DE HERANA .................................................................................. 44
Herana: Viso Geral .............................................................................................. 44
Herana Simples ...................................................................................................... 45
Herana e Variveis Referenciais............................................................................. 46
INTERFACES ............................................................................................................. 47
Definindo Interfaces................................................................................................. 48
Implementando Interfaces ........................................................................................ 48
Referncia de Interface ............................................................................................ 49
Endereando Objetos Usando Referncias de Interfaces .......................................... 49
Atribuio Usando Referncias de Interfaces ........................................................... 50
GRFICOS GERAIS .................................................................................................... 51
2/70
OOP em ABAP
Interfaces ................................................................................................................. 51
INTERFACES - EXEMPLO INTRODUTRIO ................................................................... 52
ATIVANDO E MANIPULANDO EVENTOS ..................................................................... 56
Ativando Eventos...................................................................................................... 56
Declarando Eventos ................................................................................................. 56
Disparando Eventos ................................................................................................. 57
Manipulando Eventos............................................................................................... 57
Declarando Mtodos de Manipulao de Eventos .................................................... 57
Registrando Mtodos de Manipulo de Eventos...................................................... 57
Timing de Manipulao de Eventos.......................................................................... 58
GRFICO GERAL - EVENTOS ..................................................................................... 58
EVENTOS: EXEMPLO INTRODUTRIO ......................................................................... 61
EVENTOS EM OBJETOS ABAP - EXEMPLO ................................................................. 62
Viso Geral .............................................................................................................. 62
POOL DE CLASSES .................................................................................................... 68
Classes Globais e Interfaces..................................................................................... 68
Estrutura de um Pool de classes ............................................................................... 68
Diferenas De Outros Programas ABAP .................................................................. 69
Classes Locais em Pool de Classes........................................................................... 70
3/70
OOP em ABAP
TAD(Tipo Abstrato de Dados) so estruturas que visam representar objetos do mundo real em uma
forma computacional. So compostos de atributos e mtodos.
Os atributos so os dados referentes ao TAD e devem ser manipulados apenas pelo mtodos que
so operaes que alteram o ambiente e os atributos. Os mtodos disponibilizam aos
desenvolvedores as funcionalidades do TAD.
As Classes so TAD propriamente definidos e implementados por um desenvolvedor como
um tipo no nativo da linguagem. Em uma analogia simples, as classes so molduras, formas de
onde iro nascer vrias representaes dela.
Cada representao (instncia) de uma classe recebe o nome de objeto. Cada objeto
alocado em diferentes posies da memria.
Sim. Uma linguagem para ser considerada como orientada a objeto deve possibilitar os seguintes
recursos:
o Classes e objetos
o Herana
o Polimorfismo
O ABAP disponibiliza tais recursos. A linguagem, porm, no totalmente orientada a objetos por
combinar elementos estruturados e no estruturados.
Os conceitos de OOP apresentados na linguagem ABAP so os mesmos em sua maioria
apresentados pela linguagem JAVA como classes finais, abstratas, coletor de lixo e herana
simples.
Visibilidade
Privado
Atributos e mtodos definidos como privados no podem ser acessados fora dos domnios da
classe.
PRIVATE SECTION.
DATA: name(25) TYPE c,
4/70
OOP em ABAP
No R3 pode-se definir classes atravs da transao SE24 ou no prprio corpo do programa Abap.
Nas pastas pblicas, recomendo a leitura da apostila OOP em ABAP e Class Builder. A seguir,
temos o material traduzido sobre Abap Objects extrado do help.sap.com.
Help.sap.com
Uma introduo compreensiva a orientao a objeto como um todo iria muito alm dos limites da
introduo aos objetos ABAP. Esta documentao introduz uma seleo de termos que so
usados universalmente na orientao a objeto e tambm ocorre em objetos ABAP. Em sesses
5/70
OOP em ABAP
subseqentes, continua-se a discutir em mais detalhes como esses termos so usados em objetos
ABAP. O fim desta seo contm uma lista de leitura posterior, com uma seleo de ttulos sobre
orientao a objeto.
Objetos
Um objeto seo de cdigo que contm dados e fornece servios. Os dados formam os
atributos do objeto. Os servios so conhecidos como mtodos (tambm conhecido como
operaes ou funes). Tipicamente, mtodos operam em dados privados (os atributos, ou
estado do objeto), que apenas visvel para os mtodos do objeto. Logo os atributos de
um objeto no podem ser modificados diretamente pelo usurio, mas apenas pelos
mtodos do objeto. Isso garante a consistncia interna do objeto.
Classes
Referncias a Objetos
Encapsulamento
Polimorfismo
Herana
Voc pode usar uma classe existente para derivar uma classe nova. Classes derivadas
herdam os dados e mtodos da superclasse. No entanto, eles podem substituir mtodos
existentes, e tambm adicionar novos.
Usos de Orientaao a Objeto
Abaixo esto algumas vantagens da programao orientada a objeto:
6/70
OOP em ABAP
Esta seo do guia do usurio ABAP fornece uma viso geral da extenso orientada a objeto da
linguagem ABAP. Ns temos usado apenas exemplos simples para demonstrar como se utilizam
as novas ferramentas. No entanto, estas pretendem ser um modelo para design orientado a objeto.
Mais informao detalhada sobre cada dos comandos dos objetos ABAP contida na
documentao de palavras chaves no editor ABAP. Para uma introduo compreensiva ao
desenvolvimento de software orientado a objeto, voc deve ler um ou mais ttulos listados abaixo.
Leitura Posterior
H muitos livros sobre orientao a objeto, linguagem de programao orientado a objeto, anlise
orientada a objeto e design, gerenciamento de projeto para projetos OO, padres e frameworks, e
muitos outros. Esta uma pequena seleo de bons livros cobrindo os tpicos principais:
Scott Ambler, The Object Primer, SIGS Books & Multimedia (1996), ISBN: 1884842178
Uma introduo muito boa orientao a objetos para programadores. Ele fornece
explicaes compreensivas de todas as essncias dos conceitos OO, e contm um modo
de aprendizagem muito rpido e eficiente. fcil e prtico de se ler, mas totalmente
baseado em teoria.
7/70
OOP em ABAP
Martin Fowler, UML Distilled: Applying the Standard Object Modeling Language,
Addison-Wesley Pub Co (1997), ISBN: 0201325632
Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides, Design Patterns.
Elements of Reusable Object-Oriented Software, Addison-Wesley Pub Co (1998),
ISBN: 0201634988
Notas
Se voc novo a orientao a objetos, voc deveria ler Scott Amblers The Object Primer e ento
adquirir alguma experincia prtica voc prprio. Voc deve definitivamente utilizar as tcnicas
CRC descritas por Ambler e Fowler para anlise e design orientados a objeto. Aps isso, voc
deve aprender UML, j que este a anlise e design OO universal. Finalmente, voc deve ler pelo
menos um dos livros sobre padres.
No incio de um grande projeto OO, as questes imediatamente emergem sobre como a seqncia
que as coisas devem ser feitas, quais fases devem terminar e a qual hora, como dividir e organizar
o trabalho de desenvolvimento, como minimizar riscos, como montar uma boa equipe, e assim
continua. Muitas das melhores prticas em gerenciamento de projetos tiveram que ser redefinidas
para o mundo orientado a objeto, e as oportunidades que isto produz so significantes. Para mais
informaes sobre como utilizar, veja o livro de Gradys Brooch Object Solutions , ou o captulo
intitulado An outline development process do livro de Martin Fowler.
H, claro, muitos outros livros bons sobre orientao a objeto. Os acima listados no clamam
estarem totalmente completos, ou necessariamente os melhores livros disponveis.
8/70
OOP em ABAP
Objetos ABAP suporta programao orientada a objeto. Orientao a objeto (OO), tambm
conhecida como paradigma orientado a objeto, um modelo de programao que une dados e
funes em objetos. O resto da linguagem ABAP primeiramente intencionado para programao
estruturada, onde os dados so guardados em tabelas de banco de dados e programas orientados
por funes acessam e trabalham com eles.
Antes do R/3 Release 4.0, o que existia mais prximo de objetos no ABAP eram mdulos de
funes e grupos de funes. Suponha que tenhamos um grupo de funes para processar
ordens. Os atributos de uma ordem correspondem aos dados globais do grupo de funo,
enquanto os mdulos de funes individuais representam aes que manipulam aqueles dados
(mtodos). Isto significa que a verdadeira ordem dos dados encapsulada no grupo de funes.
Deste modo, os mdulos de funes podem garantir que os dados so consistentes.
9/70
OOP em ABAP
Quando voc executa um programa ABAP, o sistema inicia uma nova sesso interna. A sesso
interna tem uma rea de memria que contm o programa ABAP e os dados associados.Quando
voc chama um mdulo de funo, uma instancia de um grupo de funes mais seus dados,
carregado na memria da sesso interna. Um programa ABAP pode carregar vrias instancias
atravs da chamada de mdulos de funes de diferentes grupos de funes.
A instancia de um grupo de funes na rea de memria de uma sesso interna quase representa
um objeto no senso de orientao a objeto. Quando voc chama um modulo de funo, o
programa chamador usa a instancia de um grupo de funes, baseada na descrio usada no
Function Builder. O programa no pode acessar os dados no grupo de funes diretamente, mas
apenas atravs do modulo de funo. Os mdulos de funes e seus parmetros so a interface
entre o grupo de funes e o usurio.
A diferena principal entre a real orientao a objeto e grupo de funes que apesar de um
programa poder trabalhar com instancias de diversos grupos de funes simultaneamente, ele no
pode trabalhar com diversas instancias do mesmo grupo de funes. Suponha que um programa
necessite vrios contadores independentes, ou processar vrias ordens ao mesmo tempo. Neste
caso, voc teria que adaptar o grupo de funes a incluir administrao de instancia, por exemplo,
usando nmeros para diferenci-las.
10/70
OOP em ABAP
Este requisito atingido por orientao a objeto. Objetos ABAP permitem que voc defina dados e
funes em classes ao invs de grupo de funes. Usando classes, um programa ABAP pode
trabalhar com qualquer nmero de instancias (objetos) baseados na mesma classe.
Ao invs de carregar uma nica instancia de um grupo de funes dentro de uma memria
implcita quando um modulo chamado, o programa ABAP pode agora gerar as instancias de
classes explicitamente usando o novo comando ABAP CREATE OBJECT. As instancias
individuais representam objetos nicos. Voc enderea estes usando referncias a objetos. As
referncias aos objetos permitem que o programa ABAP acesse as interfaces das instancias.
Exemplo
O exemplo a seguir demonstra o aspecto orientado a objeto de grupo de funes no simples caso
de um contador.
FUNCTION-POOL COUNTER.
FUNCTION SET_COUNTER.
* Local Interface IMPORTING VALUE(SET_VALUE)
COUNT = SET_VALUE.
ENDFUNCTION.
11/70
OOP em ABAP
FUNCTION INCREMENT_COUNTER.
ADD 1 TO COUNT.
ENDFUNCTION.
FUNCTION GET_COUNTER.
* Local Interface: EXPORTING VALUE(GET_VALUE)
GET_VALUE = COUNT.
ENDFUNCTION.
Qualquer programa ABAP pode ento trabalhar com este grupo de funes.
Exemplo:
DO 3 TIMES.
CALL FUNCTION 'INCREMENT_COUNTER'.
ENDDO.
Grfico Geral
12/70
OOP em ABAP
Classes
A figura a esquerda demonstra as partes de declarao e implementao de uma classe local C1.
A figura a direita ilustra a estrutura da classe com os componentes em suas respectivas reas de
visibilidade, e a implementao de mtodos.
13/70
OOP em ABAP
O simples exemplo a seguir utiliza Objetos ABAP para programar um contador. Para comparao,
veja tambm o exemplo em De Grupo de Funes a Objetos:
PUBLIC SECTION.
METHODS: SET_COUNTER IMPORTING VALUE(SET_VALUE) TYPE I,
INCREMENT_COUNTER,
GET_COUNTER EXPORTING VALUE(GET_VALUE) TYPE I.
PRIVATE SECTION.
DATA COUNT TYPE I.
ENDCLASS.
METHOD SET_COUNTER.
COUNT = SET_VALUE.
ENDMETHOD.
METHOD INCREMENT_COUNTER.
ADD 1 TO COUNT.
ENDMETHOD.
METHOD GET_COUNTER.
GET_VALUE = COUNT.
ENDMETHOD.
ENDCLASS.
Grfico Geral
14/70
OOP em ABAP
A ilustrao acima mostra uma classe C1 a esquerda, com suas instancias representadas na
sesso interna de um programa ABAP a direita. Para distingu-los de classes, instancias so
desenhadas com cantos redondos. Os nomes das instancias acima usam a mesma notao como
usada para variveis de referncia no Debugger.
Exemplo:
15/70
OOP em ABAP
O comando DATA cria uma varivel CREF1de referncia a classe com tipo C_COUNTER. Esta
varivel pode conter referncias a todas as instancias da classe C_COUNTER. A classe
C_COUNTER deve ser conhecida ao programa quando o comando DATA ocorre. Voc pode tanto
declar-la localmente antes do comando data no mesmo programa, ou globalmente usando o
Class Builder(SE24). O contedo de CREF1 so iniciais. A referncia no aponta para uma
instancia(Em uma analogia, seria um ponteiro dangling que no possui memria alocada) .
16/70
OOP em ABAP
17/70
OOP em ABAP
18/70
OOP em ABAP
O programa acima declara trs diferentes variveis de referncia a classes para a classe
C_COUNTER. Todas as referncias so iniciais.
19/70
OOP em ABAP
O sistema cria trs objetos da classe de trs variveis de referncias de classes. As referncias
nestas trs variveis de referncia apontam para um destes objetos.
20/70
OOP em ABAP
O programa ABAP pode usar as variveis de referncia para acessar objetos individuais, isto
neste caso, para chamar os mtodos pblicos da classe C_COUNTER.
Cada objeto tem seu prprio estado, j que o atributo da instancia privada COUNT tem um valor
separado para cada objeto. O programa a esquerda administra vrios contadores independentes.
21/70
OOP em ABAP
Aqui, trs variveis de referncia a classes so declaradas para a classe C_COUNTER, e dois
objetos so criados para a classe. As referncias nas variveis CREF1 e CREF2 apontam para um
destes objetos. A referncia CREF3 inicial.
22/70
OOP em ABAP
Aps o comando MOVE, CREF3 contm as mesmas referncias de CREF2, e ambas indicam o
objeto C_COUNTER<2>. Um usurio pode ento usar ambas para indicar o objeto
C_CONTER<2>.
23/70
OOP em ABAP
O comando CLEAR desfaz a referncia em CREF2 para seu valor inicial. A varivel de referncia
CREF2 ento contm o mesmo valor que continha aps sua declarao, ela no mais indica um
objeto.
24/70
OOP em ABAP
O efeito do comando de igualdade copiar a referncia de CREF1 para CREF2. Como resultado,
a referncia em CREF3 tambm indica o objeto C_COUNTER<1>. Mais nenhuma referncia indica
o objeto C_COUNTER<2>, e este automaticamente excludo pelo coletor de lixo. O nome interno
C_COUNTER<2> est agora livre novamente.
E as adies apropriadas.
25/70
OOP em ABAP
CLASS-METHODS <meth>...
Quando voc declara um mtodo, voc tambm define sua interface de parmetros usando as
adies IMPORTING, EXPORTING, CHANGING, e RETURNING. As adies definem parmetros
de entrada/sada, e o cdigo de retorno. Elas tambm definem os atributos dos parmetros da
interface, principalmente quando um parmetro passado por referncia ou valor (VALUE), seu
tipo(TYPE), e se opcional (OPTIONAL, DEFAULT). Ao contrrio de mdulos de funes, o modo
default de passar um parmetro em um mtodo por referncia. Para passar um parmetro por
valor, voc deve explicitamente especificar a adio VALUE. O valor de retorno (RETURNING)
deve sempre ser passado explicitamente como um valor. Isto timo para mtodos que retornam
um nico valor de sada. Se voc us-lo, voc no pode usar EXPORTING ou CHANGING.
Assim como em mdulos de funes, voc pode usar parmetros de excees (EXCEPTIONS)
para permitir que o usurio reaja a situaes de erro quando o mtodo executado.
Implementando Mtodos
Voc deve implementar todos os mtodos dentro de uma classe na parte de implementao.
METHOD <meth>.
...
ENDMETHOD.
Assim como mdulos de funes, voc pode usar o comando RAISE <exception> e MESSAGE
RAISING para lidar com situaes de erro.
Quando voc implementa um mtodo esttico, lembre-se que isto pode apenas trabalhar com
atributos estticos da sua classe. Mtodos de instancias podem trabalhar com ambos atributos
estticos ou de instancia.
Chamando Mtodos
Para chamar um mtodo, use o seguinte comando:
O modo como se acessa o mtodo <meth> depende de onde voc o est chamando. Dentro da
parte de implementao da classe, voc pode chamar os mtodos da mesma classe diretamente
usando o nome <meth> deles.
26/70
OOP em ABAP
Onde <ref> uma varivel de referncia cujo valor indica uma instancia da classe. Mtodos de
classe visveis podem ser chamados de fora da classe usando:
Quando voc chama um mtodo, voc deve passar todos os parmetros de entrada obrigatrios
usando EXPORTING ou CHANGING no comando CALL METHOD. Voc pode (se quiser) importar
os parmetros de sadas para dentro de seu programa usando IMPORTING ou RECEIVING.
Igualmente, voc pode (se quiser) manipular quaisquer excees disparadas pelos mtodos
usando a adio EXCEPTIONS. No entanto, isto altamente recomendado.
Voc passa e recebe valores em mtodos da mesma maneira dos mdulos de funes, incluindo a
sintaxe aps a adio correspondente:
Cada actual parameter <f i > passado correspondenteis ao formal parameter <i i >.
27/70
OOP em ABAP
Constructors
Constructors so mtodos especiais que no podem ser chamados usando CALL METHOD. Ao
invs, eles so chamados automaticamente pelo sistema para selecionar o estado inicial de um
novo objeto ou classe. H dois tipos de constructors instance constructors e static constructors.
Constructors so mtodos com um nome pr-definido. Para us-los, voc deve explicitamente
declar-los dentro da classe.
METHODS CONSTRUCTOR
IMPORTING.. [VALUE(]<ii>[)] TYPE type [OPTIONAL]..
EXCEPTIONS.. <ei>.
CLASS-METHODS CLASS_CONSTRUCTOR.
Cada objeto na classe C_TEAM pode criar um mximo de instancias igual ao total da classe
C_BIKER de membros no time. Cada instancia da classe C_BIKER cria uma instancia da classe
C_BICYCLE.
Cada instancia da classe C_TEAM pode comunicar com o usurio do programa atravs de uma
lista interativa. O usurio do programa pode escolher membros do time individuais para aes. As
instancias da classe C_BIKER permite que o usurio escolha a ao em uma selection screen
posterior.
28/70
OOP em ABAP
29/70
OOP em ABAP
Conflitos
o ULINE
o SKIP
o NEW-LINE
Declaraes
Este exemplo foi implementado utilizando classes locais, j que selection screens pertencem ao
programa ABAP, e no pode ser definido ou chamado em classes globais. Abaixo h definies de
duas selection screens e trs classes:
*******************************************************************
* Global Selection Screens
*******************************************************************
*------------------------------------------------------------------
*******************************************************************
* Class Definitions
*******************************************************************
*------------------------------------------------------------------
30/70
OOP em ABAP
PUBLIC SECTION.
BEGIN OF STATUS_LINE_TYPE,
FLAG(1) TYPE C,
TEXT1(5) TYPE C,
ID TYPE I,
TEXT2(7) TYPE C,
TEXT3(6) TYPE C,
GEAR TYPE I,
TEXT4(7) TYPE C,
SPEED TYPE I,
END OF STATUS_LINE_TYPE.
CLASS-METHODS: CLASS_CONSTRUCTOR.
METHODS: CONSTRUCTOR,
CREATE_TEAM,
SELECTION,
EXECUTION.
PRIVATE SECTION.
DATA: ID TYPE I,
STATUS_LINE TYPE STATUS_LINE_TYPE,
STATUS_LIST TYPE SORTED TABLE OF STATUS_LINE_TYPE
WITH UNIQUE KEY ID,
METHODS: WRITE_LIST.
ENDCLASS.
*------------------------------------------------------------------
PUBLIC SECTION.
PRIVATE SECTION.
31/70
OOP em ABAP
DATA: ID TYPE I,
BIKE TYPE REF TO C_BICYCLE,
GEAR_STATUS TYPE I VALUE 1,
SPEED_STATUS TYPE I VALUE 0.
ENDCLASS.
*------------------------------------------------------------------
PUBLIC SECTION.
PRIVATE SECTION.
ENDCLASS.
*******************************************************************
Note que nenhuma das trs classes tem atributos pblicos. Os estados das classes podem ser
modificados apenas pelos prprios mtodos. O classe C_TEAM Contm um
CLASS_CONSTRUCTOR. C_TEAM e C_BIKER ambos contm instance constructors.
Implementaes
As sees de implementao contm as implementaes de todos os mtodos declarados nas
partes correspondentes de declarao. As interfaces dos mtodos j foram definidas na
declarao. Nas implementaes, os parmetros de interface se comportam como dado local.
...
ENDCLASS.
32/70
OOP em ABAP
CLASS_CONSTRUCTOR
METHOD CLASS_CONSTRUCTOR.
TIT1 = 'Team members ?'.
CALL SELECTION-SCREEN 100 STARTING AT 5 3.
IF SY-SUBRC NE 0.
LEAVE PROGRAM.
ELSE.
TEAM_MEMBERS = MEMBERS.
ENDIF.
ENDMETHOD.
O static constructor executado antes da classe C_TEAM ser usada pela primeira vez no
programa. Ele chama a selection screen 100 e seleciona o atributo TEAM_MEMBERS para o valor
entrado pelo usurio. Este atributo tem o mesmo valor para todas as instancias da classe
C_TEAM.
CONSTRUCTOR
METHOD CONSTRUCTOR.
COUNTER = COUNTER + 1.
ID = COUNTER.
ENDMETHOD.
O instance constructor executada diretamente aps cada instancia da classe C_TEAM ser criada.
Ela usada para contar o nmero de instancias de C_TEAM no atributo esttico COUNTER, e
assimila o nmero correspondente para o atributo ID de cada instancia da classe.
CREATE_TEAM
METHOD CREATE_TEAM.
DO TEAM_MEMBERS TIMES.
CREATE OBJECT BIKER EXPORTING TEAM_ID = ID
MEMBERS = TEAM_MEMBERS.
APPEND BIKER TO BIKER_TAB.
CALL METHOD BIKER->STATUS_LINE IMPORTING LINE = STATUS_LINE.
APPEND STATUS_LINE TO STATUS_LIST.
ENDDO.
ENDMETHOD.
O mtodo pblico de instancia CREATE_TEAM pode ser chamado por qualquer usurio da classe
contendo uma varivel com uma referncia para a instancia da classe. usada para criar
instancias da classe C_BIKER, usando a varivel referencial privada BIKER na classe C_TEAM.
Voc deve passar ambos parmetros de entrada para o instance constructor da classe C_BIKER
no comando CREATE OBJECT. As referncias para as novas instancias so inseridas dentro de
uma tabela interna privada BIKER_TAB. Aps o mtodo tiver sido executado, cada linha da tabela
interna contm uma referncia para uma instancia da classe C_BIKER. Estas referncias so
apenas visveis dentro da classe C_TEAM. Usurios externos no podem enderear os objetos da
classe C_BIKER.
CREATE_TEAM tambm chama o mtodo STATUS_LINE para cada objeto novo, e usa a work
area STATUS_LINE para acrescentar o parmetro de sada LINE tabela interna privada
STATUS_LIST.
SELECTION
33/70
OOP em ABAP
METHOD SELECTION.
CLEAR BIKER_SELECTION.
DO.
READ LINE SY-INDEX.
IF SY-SUBRC <> 0. EXIT. ENDIF.
IF SY-LISEL+0(1) = 'X'.
READ TABLE BIKER_TAB INTO BIKER INDEX SY-INDEX.
APPEND BIKER TO BIKER_SELECTION.
ENDIF.
ENDDO.
CALL METHOD WRITE_LIST.
ENDMETHOD.
O mtodo de instancia pblica SELECTION pode ser chamado por qualquer usurio da classe
contendo uma varivel referencial com referncia a uma instancia de uma classe. Ela seleciona
todas as linhas na lista atual em quais a caixa de verificao na primeira coluna selecionada.
Para estas linhas, o sistema copia as variveis referenciais correspondentes da tabela BIKER_TAB
dentro de uma tabela interna BIKER_SELECTION. SELECTION ento chama o mtodo privado
WRITE_LIST, que mostra a lista.
EXECUTION
METHOD EXECUTION.
CHECK NOT BIKER_SELECTION IS INITIAL.
LOOP AT BIKER_SELECTION INTO BIKER.
CALL METHOD BIKER->SELECT_ACTION.
CALL METHOD BIKER->STATUS_LINE IMPORTING LINE = STATUS_LINE.
MODIFY TABLE STATUS_LIST FROM STATUS_LINE.
ENDLOOP.
CALL METHOD WRITE_LIST.
ENDMETHOD.
O mtodo de instancia pblica EXECUTION pode ser chamado por qualquer usurio da classe. O
mtodo chama dois mtodos SELECT_ACTION e STATUS_LINE para cada instancia da classe
C_BIKER para qual h uma referncia na tabela BIKER_SELECTION. A linha da tabela
STATUS_LIST com a mesma chave do componente ID na work area STATUS_LINE sobrescrita
e mostrada pelo mtodo privado WRITE_LIST.
WRITE_LIST
METHOD WRITE_LIST.
SET TITLEBAR 'TIT'.
SY-LSIND = 0.
SKIP TO LINE 1.
POSITION 1.
LOOP AT STATUS_LIST INTO STATUS_LINE.
WRITE: / STATUS_LINE-FLAG AS CHECKBOX,
STATUS_LINE-TEXT1,
STATUS_LINE-ID,
STATUS_LINE-TEXT2,
STATUS_LINE-TEXT3,
STATUS_LINE-GEAR,
STATUS_LINE-TEXT4,
STATUS_LINE-SPEED.
34/70
OOP em ABAP
ENDLOOP.
ENDMETHOD.
O mtodo privado de instancia WRITE_LIST pode apenas ser chamado de mtodos da classe
C_TEAM. usada para mostrar a tabela interna privada STATUS_LIST na lista bsica (SY-LSIND
= 0) do programa.
...
ENDCLASS.
CONSTRUCTOR
METHOD CONSTRUCTOR.
COUNTER = COUNTER + 1.
ID = COUNTER - MEMBERS * ( TEAM_ID - 1).
CREATE OBJECT BIKE.
ENDMETHOD.
O instance constructor executado diretamente aps cada instance da classe C_BIKER ser
criada. usada para contra o nmero de instance de C_BIKER no atributo esttico COUNTER, e
define os nmeros correspondents para o atributo de instance ID de cada instance da classe. O
constructor tem dois parmetros de entrada TEAM_ID e MEMBERS os quais voc deve passar
no comando CREATE OBJECT quando voc cria uma instance em C_BIKER.
O instance constructor tambm cria uma instance da classe C_BICYCLE para cada nova instance
da classe C_BIKER. A referncia na varivel referencial privada BIKE de cada instance de
C_BIKER indica para uma instance correspondente da classe C_BICYCLE. Nenhum usurio
externo pode enderear estas instances da classe C_BICYCLE.
SELECT_ACTION
METHOD SELECT_ACTION.
DATA ACTIVITY TYPE I.
TIT2 = 'Select action for BIKE'.
TIT2+24(3) = ID.
CALL SELECTION-SCREEN 200 STARTING AT 5 15.
CHECK NOT SY-SUBRC GT 0.
IF GEARUP = 'X' OR GEARDOWN = 'X'.
IF GEARUP = 'X'.
ACTIVITY = 1.
ELSEIF GEARDOWN = 'X'.
ACTIVITY = -1.
ENDIF.
ELSEIF DRIVE = 'X'.
ACTIVITY = 2.
ELSEIF STOP = 'X'.
ACTIVITY = 3.
ENDIF.
35/70
OOP em ABAP
O mtodo da instancia pblico SELECT_ACTION pode ser chamado por qualquer usurio da
classe contendo uma varivel referencial com uma referncia para uma instancia da classe. O
mtodo chama a selection screen 200 e analisa a entrada do usurio. Depois disto, chama o
mtodo privado BIKER_ACTION da mesma classe. A chamada do mtodo usa a forma reduzida
para passar o parmetro atual ACTIVITY para parmetro formal ACTION.
BIKER_ACTION
METHOD BIKER_ACTION.
CASE ACTION.
WHEN -1 OR 1.
CALL METHOD BIKE->CHANGE_GEAR
EXPORTING CHANGE = ACTION
RECEIVING GEAR = GEAR_STATUS
EXCEPTIONS GEAR_MAX = 1
GEAR_MIN = 2.
CASE SY-SUBRC.
WHEN 1.
MESSAGE I315(AT) WITH 'BIKE' ID
' is already at maximal gear!'.
WHEN 2.
MESSAGE I315(AT) WITH 'BIKE' ID
' is already at minimal gear!'.
ENDCASE.
WHEN 2.
CALL METHOD BIKE->DRIVE IMPORTING VELOCITY = SPEED_STATUS.
WHEN 3.
CALL METHOD BIKE->STOP IMPORTING VELOCITY = SPEED_STATUS.
ENDCASE.
ENDMETHOD.
O mtodo de instancia privado BIKER_ACTION pode ser apenas chamado dos mtodos da classe
C_BICYCLE para qual a referncia na varivel referencial BIKE est indicando, dependendo do
valor na entrada do parmetro ACTION.
STATUS_LINE
METHOD STATUS_LINE.
LINE-FLAG = SPACE.
LINE-TEXT1 = 'Biker'.
LINE-ID = ID.
LINE-TEXT2 = 'Status:'.
LINE-TEXT3 = 'Gear = '.
LINE-GEAR = GEAR_STATUS.
LINE-TEXT4 = 'Speed = '.
LINE-SPEED = SPEED_STATUS.
ENDMETHOD.
O mtodo da instancia pblica STATUS_LINE pode ser chamado por qualquer usurio da classe.
Isto atribui ao parmetro estruturado de sada LINE com os valores de atributos atuais da instancia
correspondente.
36/70
OOP em ABAP
...
ENDCLASS.
DRIVE
METHOD DRIVE.
SPEED = SPEED + GEAR * 10.
VELOCITY = SPEED.
ENDMETHOD.
O mtodo da instancia pblica DRIVE pode ser chamado por qualquer usurio da classe. O
mtodo muda os valores do atributo privado SPEED e passa-o para o usurio usando o parmetro
de sada VELOCITY.
STOP
METHOD STOP.
SPEED = 0.
VELOCITY = SPEED.
ENDMETHOD.
O mtodo da instancia pblica STOP pode ser chamado por qualquer usurio da.O mtodo muda
os valores do atributo privado SPEED e passa-o para o usurio o parmetro de sada VELOCITY.
CHANGE_GEAR
METHOD CHANGE_GEAR.
GEAR = ME->GEAR.
GEAR = GEAR + CHANGE.
IF GEAR GT MAX_GEAR.
GEAR = MAX_GEAR.
RAISE GEAR_MAX.
ELSEIF GEAR LT MIN_GEAR.
GEAR = MIN_GEAR.
RAISE GEAR_MIN.
ENDIF.
ME->GEAR = GEAR.
ENDMETHOD.
O mtodo da instancia pblica CHANGE_GEAR pode ser chamado por qualquer usurio da
classe. O mtodo muda o valor do atributo privado GEAR. J que o parmetro formal com o
mesmo nome obscurece o atributo dentro do mtodo, o atributo tem de ser endereado usando a
referncia prpria ME->GEAR (ME referencia a instncia que chamou o mtodo).
37/70
OOP em ABAP
O programa a seguir mostra como as classes acima podem ser usadas em um programa. As
declaraes da selection screen e classes locais, e as implementaes dos mtodos tambm
devem ser parte do programa.
*******************************************************************
* Declarations and Implementations
*******************************************************************
...
*******************************************************************
* Global Program Data
*******************************************************************
DATA COLOR(5).
*******************************************************************
* Program events
*******************************************************************
START-OF-SELECTION.
*------------------------------------------------------------------
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'TEAM_BLUE'.
COLOR = 'BLUE '.
FORMAT COLOR = 1 INTENSIFIED ON INVERSE ON.
CALL METHOD TEAM_BLUE->SELECTION.
WHEN 'TEAM_GREEN'.
COLOR = 'GREEN'.
FORMAT COLOR = 5 INTENSIFIED ON INVERSE ON.
CALL METHOD TEAM_GREEN->SELECTION.
WHEN 'TEAM_RED'.
COLOR = 'RED '.
FORMAT COLOR = 6 INTENSIFIED ON INVERSE ON.
38/70
OOP em ABAP
*******************************************************************
O programa contm trs variveis referenciais a classes que se referem a classe C_TEAM. Ele cria
3 instancias para as variveis de refercia e cada objeto, chama-se o mtodo CREATE_TEAM. O
mtodo CLASS_CONSTRUCTOR da classe C_TEAM executado antes da criao do primeiro
objeto. O status TEAMLIST para a lista bsica permite que o usurio escolha uma de quatro
funes:
Herana
A herana permite que voc derive uma nova classe de uma j existente. Voc faz isso usando a
adio INHERITING FROM do modo a seguir:
39/70
OOP em ABAP
Se a superclasse no tem uma seo de visibilidade privada, a subclasse uma rplica exata da
superclasse. No entanto, voc pode adicionar novos componentes subclasse. Isto lhe permite
que torne uma subclasse em uma verso especializada da superclasse. Se uma subclasse
tambm uma superclasse, voc introduz um novo nvel de especializao.
Uma classe pode ter mais do que uma subclasse direta, mas apenas uma superclasse direta. Isto
chamada herana simples. Quando subclasses herdam de superclasses e a superclasse
tambm uma subclasse de outra classe, todas as classes envolvidas formam uma rvore de
herana, cujos degraus de especializao aumentam com cada novo nvel hierrquico que voc
adicionar. Ao contrrio, as classes se tornam mais generalizadas at se chegar a raiz da rvore de
herana. A raiz de todas as rvores de herana em Objetos ABAP a predefinida classe vazia
OBJECT. Esta a classe mais generalizada possvel, j que no contm mtodos nem atributos.
Quando voc define uma classe, voc no precisa especificar explicitamente a superclasse a
relao sempre definida implicitamente. Dentro de uma rvore de herana, dois ns adjacentes
so a superclasse direta ou subclasse direta uma da outra. Outros ns relacionados so referidos
como superclasse ou subclasse. A declarao de componentes de uma subclasse so distribudas
atravs todos os nveis da rvore de herana.
Redefinindo Mtodos
Todas as subclasses contm componentes de todas as classes entre elas e o n-raiz em uma
rvore de herana. A visibilidade de um componente no pode ser mudada. No entanto, voc pode
usar a adio REDEFINITION no comando METHODS para redefinir mtodo de instancia pblico
ou protegido em uma subclasse e faz-la mais especializada. Quando se redefine um mtodo,
voc no pode mudar sua interface. O mtodo continua com o mesmo nome e interface, mas
possui uma nova implementao.
Qualquer referncia que indique para um objeto da subclasse usa o mtodo redefinido, at mesmo
se a referncia foi definida com referncia a superclasse. Isto particularmente se aplica a auto-
referncia ME->. Se, por exemplo, um mtodo de superclasse M1 contm uma chamada CALL
METHOD [ME->]M2, e M2 redefinido em uma subclasse, chamando M1 de uma instancia da
subclasse que vai fazer com que o mtodo M2 original seja chamado, e chamando M1 de uma
instancia da subclasse vai fazer com que o mtodo M2 redefinido seja chamado.
Dentro de um mtodo redefinido, voc pode usar a pseudo-referncia SUPER-> para acessar o
mtodo obscuro. Isto lhe permite usar a funo existente do mtodo dentro da superclasse sem ter
de recodific-lo na subclasse.
Mtodos e Classes Abstratos e Finais
As adies ABSTRACT e FINAL nos comandos METHODS e CLASS permitem que voc defina
mtodos e classes abstratos e finais.
40/70
OOP em ABAP
Um mtodo abstrato definido dentro de uma classe abstrata e no pode ser implementado naquela
classe. Ao invs, implementada em uma subclasse da classe. Classes abstratas no podem ser
instanciadas.
Um mtodo final no pode ser redefinido em uma subclasse. Classes finais no podem ter
subclasses. Eles concluem uma rvore de herana.
Referncias a Subclasses e Polimorfismo
Variveis referenciais definidas como referncia para uma superclasse ou uma interface definida
com referncia para ela tambm contm referncias para qualquer uma de suas subclasses. J
que as subclasses contm todos os componentes de todas as suas superclasses, e dado que a
interface dos mtodos no pode ser mudada, uma varivel referencial definida com referncia a
uma superclasse ou uma interface implementada por uma superclasse pode conter referncias
para instancias de qualquer de suas subclasses. Em particular, voc pode definir o varivel alvo
com referncia a classe genrica OBJECT.
Quando voc cria um objeto usando o comando CREATE OBJECT e uma varivel referencial
preenchida com referncia a uma subclasse, voc pode usar a adio TYPE para criar uma
instancia de subclasse, para qual a referncia na varivel referencial ir indicar.
Um usurio esttico pode usar uma varivel referencial para enderear os componentes visveis a
ela na superclasse para qual a varivel referencial indica. No entanto, no pode acessar qualquer
especializao na subclasse. Se voc usar um mtodo de chamada dinmico, voc pode
enderear todos os componentes da classe.
Se voc redefinir um mtodo de instancia em um ou mais subclasses, voc pode usar uma nica
varivel referencial para chamar diferentes implementaes do mtodo, dependendo da posio na
rvore de herana na qual o objeto referido ocorre. Este conceito que diferentes classes podem ter
a mesma interface e, portanto serem endereados usando variveis referenciais com um simples
tipo chamado polimorfismo.
Espao de Nomes para Componentes
As subclasses contm todos os componentes de todas as superclasses dentro da rvore de
herana acima. Destes componentes, apenas os pblicos e protegidos so visveis. Todos os
componentes pblicos e protegidos dentro de uma rvore de herana pertencem ao mesmo
espao de nomes, e conseqentemente devem possuir nomes nicos. O nome dos componentes
privados, por outro lado, devem apenas ser nicos dentro de sua classe.
Quando voc redefine mtodos, a nova implementao dos mtodos obscurece o mtodo da
superclasse com o mesmo nome. No entanto, a nova definio substitui o mtodo anterior de
implementao, ento o nome ainda nico. Voc pode usar pseudo-referncia SUPER-> para
acessar uma definio de mtodos dentro de uma superclasse que tenha sido obscura por uma
redefinio de uma subclasse.
Herana e Atributos Estticos
Como todos componentes, atributos estticos apenas existem uma vez na rvore de herana. Uma
subclasse pode acessar os atributos estticos e protegidos de todas as suas superclasses. Ao
contrrio, uma superclasse compartilha os atributos estticos protegidos e pblicos com todas as
suas subclasses. Em termos de herana, atributos estticos no so atribudos para uma nica
classe, mas a uma parte da rvore de herana. Voc pode mud-las de for a da classe usando o
seletor de componentes de classes com qualquer nome de classe, ou dentro de qualquer classe
em que ela sejam compartilhadas. Elas so visveis em todas as classes na rvore de herana.
Quando se acessa um atributo esttico, sempre se enderea a classe cujo atributo declarado.
Isto particularmente importante quando voc chama o static constructor de classes em herana.
Static constructors so executados na primeira vez em que a classe acessada. Se voc acessar
41/70
OOP em ABAP
um atributo esttico declarado em uma superclasse usando o nome da classe de uma subclasse,
apenas o static constructor executado.
Herana e Constructors
H regras especiais gerenciando constructors em herana.
Instance Constructors
Toda classe tem um instance constructor chamado CONSTRUCTOR. Esta uma exceo a regra
de que nomes de componentes dentro de uma rvore de herana devem ser nicos. No entanto,
os instance constructors de vrias classes dentro de uma rvore de herana so totalmente
independentes um do outros. Voc no pode redefinir o instance constructor de uma superclasse
dentro de uma subclasse, nem chamar um especificamente usando o comando CALL METHOD
CONSTRUCTOR. Conseqentemente, conflitos de nomes no podem ocorrer.
O instance constructor de uma classe chamado pelo sistema quando se cria uma instancia de
classe usando CREATE OBJECT. J que uma subclasse contm todos os atributos visveis de
suas superclasses, que so tambm preparadas pelos instance contructors de todas as suas
superclasses, tais mtodos tambm devem ser chamados. Para fazer isso, o instance constructor
de cada subclasse deve conter um comando CALL METHOD SUPER->CONSTRUCTOR. As
nicas excees a essa regra so subclasses diretas do n-raiz OBJECT.
Quando voc chama um instance constructor, voc deve passar valores para todos os parmetros
de interface obrigatrios. H varias maneiras de fazer isto:
Se a classe que voc est criando uma instancia tem um instance constructor com uma
interface, deve-se passar valores para ela usando EXPORTING.
Se a classe que voc est criando uma instancia tem um instance constructor sem uma
interface, no se deve passar parmetros.
Se a classe que voc est criando uma instancia no possui um instance constructor
explcito, voc deve olhar na rvore de herana pela prxima superclasse que possua um
instance constructor explcito. Caso haja uma interface, voc deve passar valores usando
EXPORTING, seno no h necessidade de passar qualquer valor.
Se a superclasse direta tem um instance constructor com uma interface, voc deve passar
valores para ela usando EXPORTING.
42/70
OOP em ABAP
O instance constructor de uma subclasse dividido em duas partes pelo comando CALL METHOD
SUPER->CONSTRUCTOR. Nas linhas antes da chamada, o construtor se comporta como um
mtodo esttico, isto , no pode acessar os atributos de instancia da sua classe. Voc no pode
acessar atributos de instancia at depois da chamada. Use os comandos antes da chamada para
determinar os parmetros atuais para a interface do instance constructor da superclasse. Voc
pode apenas usar atributos estticos ou dados locais para fazer isto.
Quando voc cria uma instancia de uma subclasse, o instance constructor chamado
hierarquicamente. O primeiro nvel em qual voc pode acessar atributos de instancia o nvel mais
alto superclasse. Quando voc retorna ao constructor da classe com nvel mais baixo, voc pode
tambm sucessivamente acessar seus atributos de instancia.
Static Constructors
Toda classe tem um static constructor chamado CLASS_CONSTRUCTOR. Assim como o espao
para nomes dentro de uma rvore hierrquica, as mesmas regras de um instance constructor se
aplicam a um static constructor.
A primeira vez que voc acessa uma subclasse em um programa, o static constructor executado.
No entanto, antes que possa ser executado, os statics constructors de todas as superclasses
devem j ter sido executados. Um static constructor pode apenas ser chamado uma vez por
programa. Portanto, quando voc acessa uma subclasse, o sistema procura pela superclasse mais
prxima cujo static constructor ainda no foi executado, seguido de todas as classes entre aquela
e a subclasse que voc acessou.
43/70
OOP em ABAP
A parte esquerda do grfico demonstra como voc pode derivar uma subclasse c2 de uma
superclasse c1 usando a adio INHERTING FROM no comando CLASS. A parte direita do grfico
demonstra como a distribuio da subclasse dentro da rvore de herana, que alcana a classe
vazia default OBJECT. Uma subclasse contm todos os componentes declarados acima dela na
rvore de herana, e pode acessar aqueles que so declarados pblicos ou protegidos.
44/70
OOP em ABAP
Herana Simples
Este grfico ilustra herana simples. Uma classe pode apenas ter uma superclasse direta, mas
pode ter mais do que uma subclasse direta. A classe vazia OBJECT o n-raiz de toda rvore de
herana em objetos ABAP.
45/70
OOP em ABAP
Este grfico demonstra como variveis referenciais definidas com referncia para uma superclasse
pode indicar objetos de subclasses. O objeto a direita uma instancia da classe class3. As
variveis referenciais de classe CREF1, CREF2, e CREF3 so digitadas com referncia a class1,
class2, e class3. Todas as trs variveis referenciam ao objeto. No entanto, CREF1 pode apenas
acessar os componentes pblicos da classe class1, CREF2 pode acessar os componentes
pblicos da class1 e class2. CREF3 pode acessar os componentes pblicos de todas as classes.
Se voc redefinir um mtodo de uma superclasse em uma subclasse, voc pode usar uma varivel
referencial definida com referncia a superclasse para acessar objetos com diferentes
implementaes de mtodos. Quando se acessa a superclasse, o mtodo tem a implementao
original, mas quando voc acessa a subclasse, o mtodo tem a nova implementao. O uso de
uma simples varivel de referncia para chamar mtodos com mesmo nome que se comportam
diferentemente chamado polimorfismo. O tipo esttico sempre uma superclasse. O tipo
dinmico(tipo da instncia) pode ser o da superclasse ou subclasse.
46/70
OOP em ABAP
START-OF-SELECTION.
DO 20 TIMES.
CALL METHOD count->increment.
ENDDO.
Interfaces
Classes, suas instancias (objetos), e acesso a objetos usando variveis referenciais formam o
bsico de objetos ABAP. Estes meios j lhe permitem modelar aplicaes tpicas de negcios,
como consumidores, ordens, ordens de itens, entre outros, usando objetos, e para implementar
solues usando objetos ABAP.
47/70
OOP em ABAP
No entanto, freqentemente necessrio para classes similares fornecer funes similares que
so codificadas diferentemente em cada classe, mas que deveria fornecer um ponto uniforme de
contato com o usurio. Por exemplo, voc pode ter duas classes similares, conta poupana e
contas corrente, ambas as quais tem um mtodo de calcular juros ao ano. As interfaces e nomes
dos mtodos so os mesmos, mas a verdadeira implementao diferente. O usurio das classes
e suas instancias devem tambm estar aptos a executar o mtodo de final de ano para todas as
contas, sem ter de se preocupar individualmente com cada tipo de conta.
Objetos ABAP permitem isto atravs do uso de interfaces. Interfaces so estruturas independentes
que voc pode implementar em uma classe para ampliar o corpo da classe. O corpo especfico de
uma classe definido por seus componentes e sees de visibilidade. Por exemplo, os
componentes pblicos de uma classe definem o seu corpo pblico, j que todos os seus atributos
podem ser endereados por todos os usurios. Os componentes protegidos de uma classe
definem seu corpo em conjunto com suas subclasses.(No entanto, herana no suportada no
Release 4.5B).
Interfaces ampliam o corpo de uma classe adicionando seus prprios componentes a seo
pblica. Isto permite que usurios enderecem diferentes classes via um ponto universal de contato.
Interfaces, junto com herana, fornece um dos pilares do polimorfismo, j que eles permitem um
mtodo simples dentro de uma interface se comporte diferentemente em diferentes classes.
Definindo Interfaces
Como classes, voc pode definir interfaces tanto globalmente no R/3 Repository ou localmente em
um programa ABAP. Para informaes sobre como definir interfaces locais leia a seo Class
Builder na documentao de ferramentas do ABAP Workbench. A definio de uma interface local
<intf> includa nos comandos:
INTERFACE <intf>.
...
ENDINTERFACE.
Implementando Interfaces
Ao contrrio de classes, interfaces no possuem instancias. Ao invs, interfaces so
implementadas por classes. Para implementar uma interface dentro de uma classe, use o
comando:
INTERFACES <intf>.
Na parte de declaraes da classe. Este comando pode apenas aparecer na seo pblica da
classe.
Quando voc implementa uma interface dentro de uma classe, os componentes da interface so
adicionados aos outros componentes na seo pblica. Um componente <icomp> de uma interface
<intf> pode ser acessada como se fosse uma membro da classe sob o nome <intf~icomp>.
48/70
OOP em ABAP
METHOD <intf~imeth>.
...
ENDMETHOD.
Interfaces podem ser implementadas por diferentes classes. Cada uma destas classes ampliada
pelo mesmo conjunto de componentes. No entanto, os mtodos da interface podem ser
implementados diferentemente dentro de cada classe.
Interfaces permitem que voc use diferentes classes em um modo uniforme usando referncias de
interface (polimorfismo). Por exemplo, interfaces que so implementadas em diferentes classes e
ampliam o corpo pblico de cada classe em um mesmo conjunto de componentes. Se uma classe
no tem nenhum componente pblico especfico dela, as interfaces definem todo o corpo pblico
da classe.
Referncia de Interface
Variveis referenciais lhe permitem acessar objetos. Ao invs de criar variveis referenciais com
referncia a uma classe, voc pode tambm defin-los com referncia a uma interface. Este tipo de
varivel referencial pode conter referncias a objetos de classes que implementam a interface
correspondente.
Para definir uma referncia de interface, use a adio TYPE REF TO <intf> no comando TYPES ou
DATA. <intf> deve ser uma interface que foi declarada ao programa antes da verdadeira
declarao da referncia ocorrer. Uma varivel referencial com a referncia de interface type
chamada uma varivel referencial de interface ou referncia de interface.
Uma referncia de interface <iref> permite que um usurio utilize a forma <iref>-><icomp> para
enderear todos os componentes visveis da interface <icomp> do objeto cujo objeto de referncia
est indicando. Isso permite que o usurio acesse todos os componentes do objeto que foram
adicionados a sua definio pela implementao da interface.
Endereando Objetos Usando Referncias de Interfaces
Para criar um objeto da classe <class>, voc deve primeiro ter declarado uma varivel referencial
<cref> com referncia classe. Se a classe <class> implementa uma interface <intf>, voc pode
usar a seguinte atribuio entre a varivel referencial da classe <cref> e uma referncia de
interface <iref> para fazer com que a referncia de interface em <iref> indique o mesmo objeto da
referncia de classe <cref>:
<iref> = <cref>
49/70
OOP em ABAP
Em relao a componentes estticos de interfaces, voc pode apenas utilizar o nome da interface
para acessar constantes:
Para todos os outros componentes estticos de uma interface, voc pode apenas usar referncias
a objetos ou a classe <class> que implementa a interface.
Suponha que tenhamos uma referncia de classe <cref> e referncias de interfaces <iref>, <iref1>,
e <iref2>. As seguintes atribuies com referncias de interfaces podem ser checadas
estaticamente:
<iref1> = <iref2>
<iref> = <cref>
<cref> = <iref>
Em todos os outros casos, voc teria que trabalhar com o comando MOVE ?-TO ou o casting
operator (?=). O casting operator substitui o operador de atribuio (=). No comando MOVE?-
TO, ou quando voc utiliza o casting operator, no h verificao de tipo esttico. Ao invs, o
sistema verifica em tempo de execuo se a referncia do objeto na varivel de origem indica um
objeto cuja referncia de objeto no alvo a varivel tambm pode indicar. Se a atribuio possvel,
o sistema a faz, seno, o erro em tempo de execuo MOVE_CAST_ERROR ocorre.
Voc deve sempre usar casting para atribuir uma referncia de interface a uma referncia de
classe se <cref> no indica a classe predefinida vazia OBJECT:
<cref> ?= <iref>
para o type cast ter sucesso, o objeto o qual <iref> indica deve ser um objeto da mesma classe
como o tipo da varivel de classe <cref>.
50/70
OOP em ABAP
Grficos Gerais
Interfaces
A figura direita ilustra a estrutura da classe com os componentes em suas respectivas reas de
visibilidade, e a implementao dos mtodos. Os componentes da interface ampliam o corpo
pblico da classe. Todos os usurios podem acessar os componentes pblicos especficos da
classe e os componentes da interface.
51/70
OOP em ABAP
Uma classe pode implementar um nmero indefinido de interfaces em sua seo pblica. A figura
esquerda do diagrama demonstra a parte de declarao e implementao de uma classe local C1,
que implementa diversas interfaces em sua seo pbica. A classe deve implementar todas os
mtodos de interface em sua parte de implementao.
A figura direita ilustra a estrutura da classe com os componentes em suas respectivas reas de
visibilidade, e a implementao dos mtodos. Os componentes da interface ampliam a seo
pblica da classe em qual eles foram declarados.
INTERFACE I_COUNTER.
METHODS: SET_COUNTER IMPORTING VALUE(SET_VALUE) TYPE I,
INCREMENT_COUNTER,
GET_COUNTER EXPORTING VALUE(GET_VALUE) TYPE I.
ENDINTERFACE.
52/70
OOP em ABAP
A seo a seguir explica como um usurio pode usar uma referncia de interface
para acessar os objetos em ambas as classes.
53/70
OOP em ABAP
Primeiro, duas variveis referenciais de classe CREF1 e CREF2 so declaradas para as classes
C_COUNTER1 e C_COUNTER2. Uma referncia de interface IREF tambm declarada para a
interface I_COUNTER. Todas as variveis referenciais so iniciais.
54/70
OOP em ABAP
O comando CREATE OBJECT cria um objeto para cada classe que as referncias CREF1 e
CREF2 indicam.
55/70
OOP em ABAP
Quando a referncia de CREF1 atribuda a IREF, a referncia em IREF tambm indica ao objeto
com o nome interno C_COUNTER<1>.
Esta seo contm explicao de como trabalhar com eventos em objetos ABAP. Para detalhes
precisos dos comandos ABAP relevantes, procure a palavra-chave correspondente no ABAP
Editor.
Ativando Eventos
Para disparar um evento, uma classe deve
56/70
OOP em ABAP
CLASS-EVENTS <evt>...
Quando se declara um evento, voc pode usar a adio EXPORTING para especificar parmetros
que so passados ao manipulador de eventos. Os parmetros so sempre passados por valor.
Eventos de instancia sempre contm o parmetro implcito SENDER, que tem o tipo de uma
referncia para o tipo ou interface em qual o evento declarado.
Disparando Eventos
Um evento de instancia em uma classe pode ser disparado por qualquer mtodo na classe.
Eventos estticos podem ser ativados por qualquer mtodo esttico. Para ativar um evento em um
mtodo, use o comando a seguir:
Para cada parmetro formal <e i > que definido como obrigatrio deve-se passar um parmetro
atual correspondente <f i > na adio EXPORTING. A auto-referncia ME automaticamente
passada para o parmetro implcito SENDER.
Manipulando Eventos
Eventos so manipulados usando mtodos especiais. Para manipular um evento, um mtodo deve:
Declarar um mtodo de manipulao de evento em uma classe significa que instancias da classe
ou a prpria classe so, em princpio, capazes de manipular um evento <evt> disparado por um
mtodo.
Registrando Mtodos de Manipulo de Eventos
Para permitir que um mtodo de manipulao de eventos reaja a um evento, voc deve determinar
em tempo de execuo o gatilho ao qual ele deve reagir. Voc pode usar o seguinte comando:
57/70
OOP em ABAP
Ele conecta uma lista de mtodos de manipulao com mtodos de disparo correspondentes. H
quatro mtodos diferentes de eventos.
Podem ser:
A sintaxe e efeito do SET HANDLER depende de qual dos quatro casos se aplica.
Para um evento de instancia, voc deve usar a adio FOR para especificar a instancia para a qual
voc quer registrar o handler. Voc pode tanto especificar uma nica instancia como o gatilho,
usando uma varivel referencial <ref>:
Ou voc pode registrar o handler para todas as instancia que podem disparar o evento:
O registro ento se aplica at mesmo a instancia de disparo que ainda no foram criadas quando
voc registra o handler.
58/70
OOP em ABAP
A classe C1 contm um evento E1, que disparado pelo mtodo M1. Classe C2 contm um
mtodo M2, que pode manipular evento E1 da classe C1.
59/70
OOP em ABAP
O programa cria uma instancia da classe C1 e duas instancias da classe C2. Os valores das
variveis referenciais R1, H1 e H2 indicam estas instancias.
O comando SET HANDLER cria uma tabela de handler, invisvel ao usurio, para cada evento que
um mtodo de manipulao foi registrado.
60/70
OOP em ABAP
em uma varivel referencial. Em outras palavras, conta como um uso da instancia, e portanto
diretamente afeta seu tempo de vida. No diagrama acima, isto significa que as instancias C2<1> e
C2<2> no so excludas pela coleta de lixo, mesmo se H1 e H2 so initial, enquanto seu registro
no excludo da tabela de handler.
Para eventos estticos, o sistema cria uma tabela de handler independente de instancia para a
classe relevante.
REPORT demo_class_counter_event.
61/70
OOP em ABAP
START-OF-SELECTION.
DO 20 TIMES.
CALL METHOD r1->increment_counter.
ENDDO.
62/70
OOP em ABAP
Contras
ULINE
SKIP
NEW-LINE
Declaraes
Este exemplo implementado usando interfaces e classe locais. Abaixo esto as declaraes das
interfaces e classes:
*****************************************************************
* Interface and Class declarations
*****************************************************************
INTERFACE I_VEHICLE.
METHODS: DRIVE,
STOP.
ENDINTERFACE.
*----------------------------------------------------------------
PUBLIC SECTION.
METHODS CONSTRUCTOR.
INTERFACES I_VEHICLE.
PRIVATE SECTION.
63/70
OOP em ABAP
ENDCLASS.
*----------------------------------------------------------------
PUBLIC SECTION.
METHODS CONSTRUCTOR.
INTERFACES I_VEHICLE.
PRIVATE SECTION.
ENDCLASS.
*----------------------------------------------------------------
PUBLIC SECTION.
CLASS-METHODS: CLASS_CONSTRUCTOR,
USER_ACTION.
ENDCLASS.
*----------------------------------------------------------------
PUBLIC SECTION.
PRIVATE SECTION.
DATA: ID TYPE I,
REF_SHIP TYPE REF TO C_SHIP,
REF_TRUCK TYPE REF TO C_TRUCK,
BEGIN OF LINE,
ID TYPE I,
FLAG,
64/70
OOP em ABAP
ENDCLASS.
*****************************************************************
Note que a classe STATUS no tem qualquer atributo, e, portanto apenas trabalha com mtodos
estticos e eventos.
Implementaes
Abaixo esto as implementaes dos mtodos das classes acima:
*****************************************************************
* Implementations
*****************************************************************
METHOD CONSTRUCTOR.
MAX = 30.
ENDMETHOD.
METHOD I_VEHICLE~DRIVE.
CHECK SHIP_SPEED < MAX.
SHIP_SPEED = SHIP_SPEED + 10.
RAISE EVENT I_VEHICLE~SPEED_CHANGE
EXPORTING NEW_SPEED = SHIP_SPEED.
ENDMETHOD.
METHOD I_VEHICLE~STOP.
CHECK SHIP_SPEED > 0.
SHIP_SPEED = 0.
RAISE EVENT I_VEHICLE~SPEED_CHANGE
EXPORTING NEW_SPEED = SHIP_SPEED.
ENDMETHOD.
ENDCLASS.
*----------------------------------------------------------------
65/70
OOP em ABAP
METHOD CONSTRUCTOR.
MAX = 150.
ENDMETHOD.
METHOD I_VEHICLE~DRIVE.
CHECK TRUCK_SPEED < MAX.
TRUCK_SPEED = TRUCK_SPEED + 50.
RAISE EVENT I_VEHICLE~SPEED_CHANGE
EXPORTING NEW_SPEED = TRUCK_SPEED.
ENDMETHOD.
METHOD I_VEHICLE~STOP.
CHECK TRUCK_SPEED > 0.
TRUCK_SPEED = 0.
RAISE EVENT I_VEHICLE~SPEED_CHANGE
EXPORTING NEW_SPEED = TRUCK_SPEED.
ENDMETHOD.
ENDCLASS.
*----------------------------------------------------------------
METHOD CLASS_CONSTRUCTOR.
SET PF-STATUS 'VEHICLE'.
WRITE 'Click a button!'.
ENDMETHOD.
METHOD USER_ACTION.
RAISE EVENT BUTTON_CLICKED EXPORTING FCODE = SY-UCOMM.
ENDMETHOD.
ENDCLASS.
*----------------------------------------------------------------
METHOD FCODE_HANDLER .
CLEAR LINE.
CASE FCODE.
WHEN 'CREA_SHIP'.
ID = ID + 1.
CREATE OBJECT REF_SHIP.
LINE-ID = ID.
LINE-FLAG = 'C'.
LINE-IREF = REF_SHIP.
APPEND LINE TO LIST.
WHEN 'CREA_TRUCK'.
ID = ID + 1.
CREATE OBJECT REF_TRUCK.
LINE-ID = ID.
LINE-FLAG = 'T'.
LINE-IREF = REF_TRUCK.
APPEND LINE TO LIST.
WHEN 'DRIVE'.
66/70
OOP em ABAP
METHOD LIST_CHANGE .
LINE-SPEED = NEW_SPEED.
MODIFY TABLE LIST FROM LINE.
ENDMETHOD.
METHOD LIST_OUTPUT.
SY-LSIND = 0.
SET TITLEBAR 'TIT'.
LOOP AT LIST INTO LINE.
IF LINE-FLAG = 'C'.
WRITE / ICON_WS_SHIP AS ICON.
ELSEIF LINE-FLAG = 'T'.
WRITE / ICON_WS_TRUCK AS ICON.
ENDIF.
WRITE: 'Speed = ', LINE-SPEED.
ENDLOOP.
ENDMETHOD.
ENDCLASS.
*****************************************************************
*****************************************************************
* Global data of program
*****************************************************************
*****************************************************************
* Program events
*****************************************************************
67/70
OOP em ABAP
START-OF-SELECTION.
*----------------------------------------------------------------
AT USER-COMMAND.
*****************************************************************
Pool de Classes
Esta seo discute a estrutura e caractersticas especiais de pool de classes.
Um pool de classes comparvel a um pool de mdulos ou grupo de funes. Ele contm ambos
os comandos declarativos e executveis ABAP, mas no pode ser iniciado por si prprio. Ao invs,
o sistema pode somente executar os comandos dentro do pool de classes processado, isto ,
quando o comando CREATE OBJECT ocorrer para criar instancias da classe.
Pool de interfaces no contm qualquer comando executvel. Ao invs, eles so usados como
container para definies da interface. Quando voc implementa uma interface dentro de uma
classe, a definio da interface est implicitamente inclusa na definio da classe.
68/70
OOP em ABAP
Pool de classes contm uma parte de definio para declaraes de tipos, e as partes de
declarao e implementao da classe.
69/70
OOP em ABAP
70/70