Upload
vinicius-pereira-gomes
View
250
Download
2
Embed Size (px)
Citation preview
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
1/74
OOP em ABAP
Programação orientada a objeto em
Abap/4
Carlos Eduardo Candido de OliveiraConsultor Abap - Aspen BH
carloscandido!proc"or#combr
$/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
2/74
OOP em ABAP
PRINCIPAL OBJETIVO DA ORIENTAÇÃO A OBJETO..............................................4
TAD, CLASSES E OBJETOS............................................................................................4
A LINGUAGEM ABAP É ORIENTADA A OBJETO?....................................................4
VISIBILIDADE......................................................................................................................4
HELP.SAP.COM...................................................................................................................5
O &'E ( O)*E+,A.O A OBE,O0 1Usos de Orientaçao a Objeto.........................................................................................7 Leitura Posterior............................................................................................................7
O ambiente de tempo de execução..................................................................................9
A extensão da linguagem orientada a objeto.................................................................9
2E 3)'PO 2E 5'+6E A OBE,O$7Classes..........................................................................................................................1
Objetos como !nstancias de uma Classe......................................................................1"
#eclarando $%todos....................................................................................................&" !mplementando $%todos...............................................................................................&7
C'amando $%todos......................................................................................................&7
$%todos de $anipulação de ()entos...........................................................................&9Constructors.................................................................................................................&9
8(,O2O E8 OBE,O ABAP - E9E8P:O ;7*isão +eral...................................................................................................................,-
HE)A+A 4<
ede/inindo $%todos...................................................................................................., $%todos e Classes Abstratos e 0inais..........................................................................,
e/erncias a 2ubclasses e Polimor/ismo.................................................................... (spaço de 3omes para Componentes..........................................................................
4erança e Atributos (st5ticos......................................................................................
4erança e Constructors................................................................................................63)=5*CO 3E)A: 2E HE)A+A 4%
4erança *isão +eral...................................................................................................7
4erança 2imples...........................................................................................................8 4erança e *ari5)eis e/erenciais.................................................................................9
* +,E)5ACE 1$
#e/inindo !nter/aces.....................................................................................................61 !mplementando !nter/aces............................................................................................6& e/erncia de !nter/ace.................................................................................................6&
(ndereçando Objetos Usando e/erncias de !nter/aces.............................................6,
Atribuição Usando e/erncias de !nter/aces..............................................................6,3)=5*CO 3E)A* 11
!nter/aces......................................................................................................................66
* +,E)5ACE - E9E8P:O * +,)O2',>)*O 1?
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
3/74
OOP em ABAP
A,*@A+2O E 8A+*P':A+2O E@E+,O ?7 Ati)ando ()entos.........................................................................................................."-
#eclarando ()entos....................................................................................................."1
#isparando ()entos....................................................................................................."1
$anipulando ()entos..................................................................................................."1 #eclarando $%todos de $anipulação de ()entos......................................................."1
egistrando $%todos de $anipulção de ()entos........................................................"&
iming de $anipulação de ()entos..............................................................................",3)=5*CO 3E)A: - E@E+,O ?;E@E+,O E9E8P:O * +,)O2',>)*O ?1E@E+,O E8 OBE,O ABAP - E9E8P:O ??
*isão +eral...................................................................................................................""
POO: 2E C:AE %;Classes +lobais e !nter/aces.........................................................................................7,
(strutura de um Pool de classes...................................................................................7,
#i/erenças #e Outros Programas A:AP......................................................................7Classes Locais em Pool de Classes..............................................................................76
;/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
4/74
OOP em ABAP
Principa !"#$%i&! 'a !ri$n%a()! a !"#$%!.Reaproveitamento de código.
TAD, Ca**$* $ !"#$%!*
TAD(Tipo Abstrato de Dados) são estruturas que visam representar objetos do mundo real em umaforma computacional. São compostos de atributos e mtodos.!s atributos são os dados referentes ao TAD e devem ser manipulados apenas pelo mtodos quesão opera"#es que alteram o ambiente e os atributos. !s mtodos disponibili$am aosdesenvolvedores as funcionalidades do TAD.
As Ca**$* são TAD propriamente definidos e implementados por um desenvolvedor comoum tipo não nativo da linguagem. %m uma analogia simples& as classes são molduras& formas deonde irão nascer v'rias representa"#es dela.
ada representa"ão (instncia) de uma classe recebe o nome de !"#$%!. ada objeto alocado em diferentes posi"#es da memória.
A in+a+$- ABAP !ri$n%a'a a !"#$%!?
Sim. *ma linguagem para ser considerada como orientada a objeto deve possibilitar os seguintesrecursos+
o lasses e objetoso ,eran"ao -olimorfismo
! AA- disponibili$a tais recursos. A linguagem& porm& não totalmente orientada a objetos por combinar elementos estruturados e não estruturados.!s conceitos de !!- apresentados na linguagem AA- são os mesmos em sua maioriaapresentados pela linguagem /A0A como classes finais& abstratas& coletor de li1o e 2eran"asimples.
Vi*i"ii'a'$
Atributos e mtodos podem ser p3blicos& privados ou protegidos.
-3blico
-odem ser acessados e modificados de dentro e de fora dos dom4nios da classe. ! acesso diretoaos atributos de fora da classe deve ser evitado.
-*56 S%T6!7. DATA+ ounter t8pe i.
-rivado
Atributos e mtodos definidos como privados não podem ser acessados fora dos dom4nios daclasse.
-R60AT% S%T6!7. DATA+ name(9:) T;-% c& planet8pe 56
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
5/74
OOP em ABAP
-rotected
Atributos e mtodos definidos como protegidos são acess4veis somente nos dom4nios da classe ede suas subclasses.
-R!T%T%D S%T6!7. DATA+ od(9:) T;-% c.
7o R> pode=se definir classes atravs da transa"ão S%9? ou no próprio corpo do programa Abap.
7as pastas p3blicas& recomendo a leitura da apostila !!- em AA- e lass uilder. A seguir&
temos o material tradu$ido sobre Abap !bjects e1tra4do do 2elp.sap.com.
1/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
6/74
OOP em ABAP
Help.sap.com
O que é Orientação a Objeto?
!rienta"ão a objeto& ou para ser mais preciso& programa"ão orientada a objeto& um mtodo deresolu"ão de problemas no qual o solu"ão do soft@are reflete objetos do mundo real.
*ma introdu"ão compreensiva a orienta"ão a objeto como um todo& iria muito alm dos limites daintrodu"ão sobre Abap !bjects. %sta documenta"ão introdu$ uma sele"ão de termos que sãousados universalmente na orienta"ão a objeto e tambm ocorrem em AA-. %m sess#essubseqentes& continua=se a discutir em mais detal2es como esses termos são utili$ados em
AA-. ! fim desta se"ão contm uma lista de $i%ra p!*%$ri!r & com uma sele"ão de t4tulos sobreorienta"ão a objeto.
O"#$%!*
*m objeto se"ão de código que contm dados e fornece servi"os. !s dados formam os
atributos do objeto. !s servi"os são con2ecidos como mtodos (tambm con2ecido comoopera"#es ou fun"#es). Tipicamente& mtodos operam em dados privados (os atributos& ouestado do objeto)& que apenas vis4vel para os mtodos do objeto. 5ogo os atributos deum objeto não podem ser modificados diretamente pelo usu'rio& mas apenas pelosmtodos do objeto. 6sso garante a consistBncia interna do objeto.
Ca**$*
lasses descrevem objetos. De um ponto de vista tcnico& objetos são instancias emtempo de e1ecu"ão de uma classe. %m teoria& vocB pode criar qualquer n3mero de objetosbaseados em uma 3nica classe. ada instancia (objeto) de uma classe tem umaidentidade 3nica e seu próprio conjunto de valores para seus atributos.
R$/$r0ncia* a O"#$%!*
%m um programa& vocB identifica e endere"a objetos usando referBncias 3nicas a objetos.
%m programa"ão orientada a objeto& objetos geralmente tBm as seguintes propriedades+
Encap*a-$n%!
!bjetos restringem a visibilidade de seus recursos (atributos e mtodos) aos outrosusu'rios. Todo objeto tem uma in%$r/ac$& que determina como os outros objetos podeminteragir com ele. A implementa"ão do objeto encapsulada& isso & invis4vel fora dopróprio objeto.
P!i-!r/i*-!
Ctodos idBnticos (mesmo nome) se comportam diferentemente em diferentes classes.!rienta"ão orientada a objeto contm constru"#es c2amadas interfaces. %las permitemque enderece mtodos com mesmo nome em diferentes objetos. Apesar de a forma deendere"amento sempre a mesma& a implementa"ão do mtodo espec4fica de umaclasse. !u seja& os mtodos podem ter mesmo nome e assinatura& mas possuemcomportamentos totalmente diferentes.
?/%4
http://help.sap.com/saphelp_46csr2/helpdata/en/c3/225b5654f411d194a60000e8353423/frameset.htm
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
7/74
OOP em ABAP
1$ran(a
0ocB pode usar uma classe e1istente para derivar uma classe nova. lasses derivadas
2erdam os dados e mtodos da superclasse. 7o entanto& eles podemsobrescrever(overriding e overloading) mtodos e1istentes& e tambm adicionar novos.
Usos de Orientaçao a Objeto
Abai1o estão algumas vantagens da programa"ão orientada a objeto+
• Sistemas de soft@are comple1os se tornam mais f'ceis de serem compreendidos& j' que aestrutura orientada a objeto fornece uma representa"ão muito mais pró1ima da realidadedo que as outras tcnicas de programa"ão.
• %m um sistema orientado a objeto bem desenvolvido& poss4vel implementar mudan"asem n4vel de classe& sem ter que reali$ar altera"#es em outros pontos do sistema. 6sto
redu$ a quantidade total de manuten"ão requerida.• Atravs do polimorfismo e 2eran"a& a programa"ão orientada a objeto permite a
reutili$a"ão de componentes individuais.• %m um sistema orientado a objeto& a quantidade de trabal2o de manuten"ão e revisão
envolvido redu$ida& j' que muitos problemas podem ser detectados e corrigidos em fasede projeto.
-ara atingir estes objetivos requer+
• 5inguagens de programa"ão orientada a objetos• Tcnicas de programa"ão orientadas a objeto não necessariamente dependem em
linguagens de programa"ão orientada a objeto. 7o entanto& a eficiBncia da programa"ãoorientada a objeto depende diretamente de como as tcnicas de programa"ão sãoimplementadas no sistema ernel.
• Eerramentas de orienta"ão a objeto
• Codelagem orientada a objeto
A modelagem orientada a objeto de um sistema de soft@are o mais importante& maisdemorado& e o requerimento mais dif4cil para alcan"ar acima dos objetivos. Designorientado a objeto envolve mais do que apenas programa"ão orientada a objeto& e fornecevantagens lógicas que são independentes da verdadeira implementa"ão. %1 *C5
%sta se"ão do guia do usu'rio AA- fornece uma visão geral da e1tensão orientada a objeto dalinguagem AA-. 7ós temos usado apenas e1emplos simples para demonstrar como se utili$am asnovas ferramentas. 7o entanto& estas pretendem ser um modelo para design orientado a objeto.Cais informa"ão detal2ada sobre cada dos comandos dos objetos AA- contida nadocumenta"ão de palavras c2aves no editor AA-. -ara uma introdu"ão compreensiva aodesenvolvimento de soft@are orientado a objeto& vocB deve ler um ou mais t4tulos listados abai1o.
%/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
8/74
OOP em ABAP
Leitura Posterior
,' muitos livros sobre orienta"ão a objeto& linguagem de programa"ão orientado a objeto& an'liseorientada a objeto e design& gerenciamento de projeto para projetos !!& padr#es e frame@ors& emuitos outros. %sta uma pequena sele"ão de bons livros cobrindo os tópicos principais+
• Sc!%% A-"$r, T2$ O"#$c% Pri-$r, SIGS B!!3* 4 M%i-$'ia 567789, ISBN: 6;;
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
9/74
OOP em ABAP
N!%a*
Se vocB iniciante em !!-& vocB deveria ler Scott AmblerIs JT2e !bject -rimerI e então adquirir alguma e1periBncia pr'tica vocB próprio. 0ocB deve definitivamente utili$ar as tcnicas Rdescritas por Ambler e Eo@ler para an'lise e design orientados a objeto. Após isso& vocB deve
aprender *C5& j' que a an'lise e design !! universal. Einalmente& vocB deve ler pelo menos umdos livros sobre padr#es.
7o in4cio de um grande projeto !!& as quest#es imediatamente emergem sobre como a seqBnciaque as coisas devem ser feitas& quais fases devem terminar e a qual 2ora& como dividir e organi$ar o trabal2o de desenvolvimento& como minimi$ar riscos& como montar uma boa equipe& e assimcontinua. Cuitas das mel2ores pr'ticas em gerenciamento de projetos tiveram que ser redefinidaspara o mundo orientado a objeto& e as oportunidades que isto produ$ são significantes. -ara maisinforma"#es sobre como utili$ar& veja o livro de Krad8Is rooc2 J!bject SolutionsI & ou o cap4tulointitulado JAn outline development processI do livro de Cartin Eo@ler.
,'& claro& muitos outros livros bons sobre orienta"ão a objeto. !s acima listados não clamamestarem totalmente completos& ou necessariamente os mel2ores livros dispon4veis.
O que são Abap Objects?
AA- !bjects um novo conceito do RL> Release ?.M. ! termo tem dois conceitos. 7o primeiro& osobjetos comp#em todo o ambiente de tempo de e1ecu"ão AA-. 7o segundo& ele representa ae1tensão orientada a objeto da linguagem AA-.
O ambiente de tempo de execução
! novo nome AA- !bjects para todo o ambiente de tempo de e1ecu"ão uma indica"ão domodo que o SA- R> tem& por algum tempo& movendo em dire"ão a orienta"ão a objeto& e de seucompromisso em perseguir esta lin2a. ! AA- Norbenc2 permite que vocB crie objetos RL>Repositor8& como programas& objetos de autori$a"ão& objetos de travamento& objetos decustomi$ing& e muitos outros. *sando módulos de fun"#es& vocB pode encapsular fun"#es emprogramas separados com uma interface definida. ! usiness !bject Repositor8 (!R) permiteque se crie SA- usiness !bjects para uso interno e e1terno (D!CL!RA). At agora& astcnicas de orienta"ão a objeto tBm sido usadas e1clusivamente em projeto de sistemas& e aindanão foram suportadas pela linguagem AA-.
A extensão da linguagem orientada a objeto
AA- !bjects são um conjunto completo de comandos que foram introdu$idos dentro dalinguagem AA-. %sta e1tensão orientada a objeto constrói sobre a linguagem e1istente& sendototalmente compat4vel com ela. 0ocB pode utili$ar objetos AA- em j' programas e1istentes& e
pode tambm usar o AA- OconvencionalP em novos objetos de programas AA-.
!rienta"ão a objeto (!!)& tambm con2ecida como paradigma orientado a objeto& um modelo deprograma"ão que une dados e fun"#es em objetos. ! resto da linguagem AA- primeiramenteintencionado para programa"ão estruturada& onde os dados são guardados em tabelas de bancode dados e programas orientados por fun"#es acessam e trabal2am com eles.
A implementa"ão do modelo orientado a objeto do AA- baseado em modelos de /ava e QQ. Gcompat4vel com objetos e1ternos como D!C e !RA. A implementa"ão de elementos
/%4
http://help.sap.com/saphelp_46csr2/helpdata/en/c3/225b5354f411d194a60000e8353423/frameset.htm
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
10/74
OOP em ABAP
orientados a objeto no ernel da linguagem AA- tem diminu4do consideravelmente o tempo deresposta quando se trabal2a com oop. SA- usiness !bjects e objetos K*6 H vão tambm lucrar ao serem incorporados no conceito.
De Grupos de unç!es a Objetos
7o centro de qualquer modelo !!- estão os objetos. !bjetos devem permitir aos programadores amapear um problema real e solu"#es propostas do soft@are em uma base um=por=um(comportamento 3nico). !bjetos t4picos no ambiente de negócios são& por e1emplo&JconsumidorI& JordemI& ou JpedidoI. Do release >. em diante& o usiness !bject Repositor8 (!R)contm e1emplos de tais objetos
Antes do RL> Release ?.M& o que e1istia mais pró1imo de !!- eram módulos de fun"#es e gruposde fun"#es. Supon2a que ten2amos um grupo de fun"#es para processar ordens. !s atributos deuma ordem correspondem aos dados globais do grupo de fun"ão& enquanto os módulos defun"#es individuais representam a"#es que manipulam aqueles dados (mtodos). 6sto significa quea verdadeira ordem dos dados encapsulada no grupo de fun"#es. Deste modo& os módulos de
fun"#es podem garantir que os dados são consistentes.
uando vocB e1ecuta um programa AA-& o sistema inicia uma nova sessão interna. A sessãointerna tem uma 'rea de memória que contm o programa AA- e os dados associados.uandovocB c2ama um módulo de fun"ão& uma in*%ancia de um grupo de fun"#es mais seus dados& carregado na memória da sessão interna. *m programa AA- pode carregar v'rias instanciasatravs da c2amada de módulos de fun"#es de 'i/$r$n%$* grupos de fun"#es.
$7/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
11/74
OOP em ABAP
A instancia de um grupo de fun"#es na 'rea de memória de uma sessão interna quase representaum objeto no sentido de orienta"ão a objeto. uando vocB c2ama um modulo de fun"ão& oprograma c2amador usa a instancia de um grupo de fun"#es& baseada na descri"ão usada noEunction uilder. ! programa não pode acessar os dados no grupo de fun"#es diretamente& masapenas atravs do modulo de fun"ão. !s módulos de fun"#es e seus parmetros são a in%$r/ac$
entre o grupo de fun"#es e o usu'rio.
A diferen"a principal entre a real orienta"ão a objeto e grupo de fun"#es que apesar de umprograma poder trabal2ar com instancias de diversos grupos de fun"#es simultaneamente& ele nãopode trabal2ar com diversas instancias do mesmo grupo de fun"#es. Supon2a que um programanecessite v'rios contadores independentes& ou processar v'rias ordens ao mesmo tempo. 7estecaso& vocB teria que adaptar o grupo de fun"#es a incluir administra"ão de instancia& por e1emplo&usando n3meros para diferenci'=las.
7a pr'tica& isto muito estran2o. onseqentemente& os dados são usualmente guardados noprograma c2amador& e os módulos de fun"#es são c2amados para trabal2ar com ele (programa"ãoestruturada). *m problema & por e1emplo& que todos os usu'rios do módulo de fun"ão devemutili$ar os mesmos dados assim como o grupo de fun"#es. Codificando a estrutura interna dos
dados de um grupo de fun"#es afeta v'rios usu'rios& e freqentemente dif4cil de prever implica"#es. ! 3nico modo de evitar depender muito de interfaces e de uma tcnica que garanteque as estruturas internas das instancias vão permanecer ocultas& permitindo que as modifiquemais tarde sem causar problemas.
%ste requisito atingido por orienta"ão a objeto. AA- !bjects permitem que vocB defina dados efun"#es em classes ao invs de grupo de fun"#es. *sando classes& um programa AA- podetrabal2ar com qualquer n3mero de instancias (objetos) baseados na mesma classe.
$$/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
12/74
OOP em ABAP
Ao invs de carregar uma 3nica instancia de um grupo de fun"#es dentro de uma memóriaimpl4cita quando um modulo c2amado& o programa AA- pode agora gerar as instancias declasses e1plicitamente usando o novo comando AA- CREATE OBJECT. As instancias individuaisrepresentam objetos 3nicos. 0ocB endere"a tais instncias usando referBncias a objetos. AsreferBncias aos objetos permitem que o programa AA- acesse as interfaces das instancias.
"xemplo
! e1emplo a seguir demonstra o aspecto orientado a objeto de grupo de fun"#es no simples casode um contador.
Supon2a que ten2amos um grupo de fun"ão c2amado !*7T%R+
E*7T6!7=-!!5 !*7T%R.
DATA !*7T T;-% 6.
E*7T6!7 S%TU!*7T%R.V 5ocal 6nterface 6C-!RT67K 0A5*%(S%TU0A5*%) !*7T W S%TU0A5*%.%7DE*7T6!7.
E*7T6!7 67R%C%7TU!*7T%R. ADD T! !*7T.%7DE*7T6!7.
E*7T6!7 K%TU!*7T%R.V 5ocal 6nterface+ %X-!RT67K 0A5*%(K%TU0A5*%) K%TU0A5*% W !*7T.%7DE*7T6!7.
! grupo de fun"#es tem um campo inteiro global !*7T& e trBs módulos defun"#es& S%TU!*7T%R& 67R%C%7TU!*7T%R& e K%TU!*7T%R& quetrabal2am com o campo. Dois dos módulos de fun"#es tBm parmetros de sa4da ede entrada. %stes formam a interface de dados do grupo de fun"#es.
ualquer programa AA- pode então trabal2ar com este grupo de fun"#es.%1emplo+
DATA 7*C%R T;-% 6 0A5*% :.
A55 E*7T6!7 YS%TU!*7T%RY %X-!RT67K S%TU0A5*% W 7*C%R.
D! > T6C%S. A55 E*7T6!7 Y67R%C%7TU!*7T%RY.%7DD!.
A55 E*7T6!7 YK%TU!*7T%RY 6C-!RT67K K%TU0A5*% W 7*C%R.
$
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
13/74
OOP em ABAP
Após esta se"ão do programa tiver sido processada& a vari'vel do programa7*C%R ter' valor Z. ! programa por ele próprio não pode acessar o campo!*7T no grupo de fun"#es. !pera"#es neste campo estão completamenteencapsuladas no módulo de fun"#es. ! programa pode apenas comunicar com osgrupos de fun"#es c2amando os seus módulos de fun"ão.
Gr#$ico Geral
%lasses
A figura a esquerda demonstra as partes de declara"ão e implementa"ão de uma classe local . A figura a direita ilustra a estrutura da classe com os componentes em suas respectivas 'reas devisibilidade& e a implementa"ão de mtodos.
!s componentes p3blicos da classe formam a in%$r/ac$ $n%r$ a ca**$ $ *$* *ri!* . !scomponentes protegidos são uma interface para que as subclasses de acessem atributos dasuperclasse. !s componentes privados não estão vis4veis e1ternamente& e estão completamenteencapsulados dentro da classe. !s mtodos &na parte de implementa"ão& tem acesso irrestrito atodos os componentes da classe.
$;/%4
http://help.sap.com/saphelp_46csr2/helpdata/en/73/d1875cb27011d194ef0000e8353423/frameset.htm
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
14/74
OOP em ABAP
%lasses & "xemplo 'ntrodut(rio
! simples e1emplo a seguir utili$a AA- !bjects para programar um contador. -ara compara"ão&veja tambm o e1emplo em De Krupo de Eun"#es a !bjetos+
CLASS C_COUNTER DEFINITION.
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.
CLASS C_COUNTER IMPLEMENTATION.
METHOD SET_COUNTER. COUNT = SET_VALUE. ENDMETHOD.
METHOD INCREMENT_COUNTER. ADD 1 TO COUNT.
ENDMETHOD.
METHOD GET_COUNTER. GET_VALUE = COUNT. ENDMETHOD.
ENDCLASS.
A classe U!*7T%R contm trBs mtodos p3blicos = S%TU!*7T%R&67R%C%7TU!*7T%R& e K%TU!*7T%R. ada um destes trabal2am com ocampo inteiro privado !*7T. Dois dos mtodos tem parmetros de entrada esa4da. %stes formam a interface de dados da classe. ! campo !*7T não vis4vel e1ternamente.
Gr#$ico Geral
$4/%4
http://help.sap.com/saphelp_46csr2/helpdata/en/48/ad3776b33a11d194f00000e8353423/frameset.htmhttp://help.sap.com/saphelp_46csr2/helpdata/en/73/d18759b27011d194ef0000e8353423/frameset.htm
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
15/74
OOP em ABAP
Objetos como 'nstancias de uma %lasse
A ilustra"ão acima mostra uma classe a esquerda& com suas instancias representadas nasessão interna de um programa AA- a direita. -ara distingu4=los de classes& instancias são
desen2adas com cantos redondos. !s nomes das instancias acima usam a mesma nota"ão como usada para vari'veis de referBncia no Debugger.
Objetos & "xemplo 'ntrodut(rio
! e1emplo a seguir demonstra como criar e utili$ar uma instancia da classeU!*7T%R que nós criamos no cap4tulo anterior+
EH$-p!:
$1/%4
http://help.sap.com/saphelp_46csr2/helpdata/en/48/ad3779b33a11d194f00000e8353423/frameset.htm
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
16/74
OOP em ABAP
! comando DATA cria uma vari'vel R%Ede referBncia a classe com tipo U!*7T%R. %stavari'vel pode conter referBncias a todas as instancias da classe U!*7T%R. A classe
U!*7T%R deve ser con2ecida ao programa quando o comando DATA ocorre. 0ocB pode tantodeclar'=la localmente antes do comando data no mesmo programa& ou globalmente usando olass uilder(S%9?). ! conte3do de R%E são iniciais. A referBncia não aponta para umainstancia.
$?/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
17/74
OOP em ABAP
! comando R%AT% !/%T cria um objeto (instancia) da classe U!*7T%R. A referBncia navari'vel de referBncia R%E indica este objeto.
A instancia da classe U!*7T%R c2amada U!*7T%R[\&e ela guarda o conte3do da
vari'vel de objeto R%EU!*7T%RU& mostradas no debugger após o comando R%AT% !/%Ttiver sido e1ecutado. %ste nome apenas usado para administra"ão de programas internos H nãoocorre dentro do próprio programa AA-.
$%/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
18/74
OOP em ABAP
! programa AA- pode acessar os componentes p3blicos do objeto usando a vari'vel dereferBncia R%E& isso neste caso& pode c2amar os mtodos p3blicos da classe U!*7T%R.
Após o programa F esquerda tiver sido e1ecutado& as vari'veis do programa 7*C%R e o atributodo objeto privado !*7T ambos terão valor Z.
$/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
19/74
OOP em ABAP
! programa acima declara trBs diferentes vari'veis de referBncia a classes para a classeU!*7T%R. Todas as referBncias são iniciais.
$/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
20/74
OOP em ABAP
! sistema cria trBs objetos da classe de trBs vari'veis de referBncias de classes. As referBnciasnestas trBs vari'veis de referBncia apontam para um destes objetos.
7o gerenciamento interno do programa& as instancias individuais são c2amadas U!*7T%R[\&U!*7T%R[9\& e U!*7T%R[>\. %las são nomeadas na ordem em que são criadas.
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
21/74
OOP em ABAP
! programa AA- pode usar as vari'veis de referBncia para acessar objetos individuais& isto neste caso& para c2amar os mtodos p3blicos da classe U!*7T%R.
ada objeto tem seu próprio estado& j' que o atributo da instancia privada !*7T tem um valor separado para cada objeto. ! programa a esquerda administra v'rios contadores independentes.
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
22/74
OOP em ABAP
Aqui& trBs vari'veis de referBncia a classes são declaradas para a classe U!*7T%R& e doisobjetos são criados para a classe. As referBncias nas vari'veis R%E e R%E9 apontam para umdestes objetos. A referBncia R%E> inicial.
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
23/74
OOP em ABAP
Após o comando C!0%& R%E> contm as mesmas referBncias de R%E9& e ambas indicam oobjeto U!*7T%R[9\. *m usu'rio pode então usar ambas para indicar o objetoU!7T%R[9\.
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
24/74
OOP em ABAP
! comando 5%AR desfa$ a referBncia em R%E9 para seu valor inicial. A vari'vel de referBnciaR%E9 então contm o mesmo valor que contin2a após sua declara"ão& ela não mais indica umobjeto.
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
25/74
OOP em ABAP
! efeito do comando de igualdade copiar a referBncia de R%E para R%E9. omo resultado& areferBncia em R%E> tambm indica o objeto U!*7T%R[\. Cais nen2uma referBncia indica oobjeto U!*7T%R[9\& e este automaticamente e1clu4do pelo coletor de li1o. ! nome internoU!*7T%R[9\ est' agora livre novamente.
Declarando e %)amando *étodos
%sta se"ão e1plica como trabal2ar com mtodos em AA- !bjects. -ara detal2es precisos decomandos relevantes AA-& refira=se a palavra c2ave na documenta"ão do editor. ! e1emplomostra como declarar& implementar e c2amar mtodos.
Declarando *étodos
0ocB pode declarar mtodos na parte de declara"ão de uma classe ou em uma interface. -aradeclarar mtodos de instancia (pertencentes ao objeto)& use o seguinte comando+
C%T,!DS [met2\ 6C-!RT67K.. ]0A5*%(^[ii\])^ T;-% t8pe ]!-T6!7A5^..%X-!RT67K.. ]0A5*%(^[ei\])^ T;-% t8pe ]!-T6!7A5^..,A7K67K.. ]0A5*%(^[ci\])^ T;-% t8pe ]!-T6!7A5^..
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
26/74
OOP em ABAP
R%T*R767K 0A5*%([r\)%X%-T6!7S.. [ei\..
% as adi"#es apropriadas.
-ara declarar mtodos est'ticos (pertencem F classe)& use o seguinte comando+
5ASS=C%T,!DS [met2\...
Ambos tBm a mesma sinta1e.
uando vocB declara um mtodo& vocB tambm define sua interface de parmetros usando asadi"#es 6C-!RT67K& %X-!RT67K& ,A7K67K& e R%T*R767K. As adi"#es definem parmetrosde entradaLsa4da& e o código de retorno. %las tambm definem os atributos dos parmetros dainterface& principalmente quando um parmetro passado por referBncia ou valor (0A5*%)& seutipo(T;-%)& e se opcional (!-T6!7A5& D%EA*5T). Assim como os módulos de fun"#es& o mododefault de passar um parmetro em um mtodo por referBncia. -ara passar um parmetro por valor& vocB deve e1plicitamente especificar a adi"ão 0A5*%. ! valor de retorno (R%T*R767K)deve sempre ser passado e1plicitamente como um valor. 6sto ótimo para mtodos que retornamum 3nico valor de sa4da. Se vocB us'=lo& vocB não pode usar %X-!RT67K ou ,A7K67K.
Assim como em módulos de fun"#es& vocB pode usar parmetros de e1ce"#es (%X%-T6!7S)para permitir que o usu'rio reaja a situa"#es de erro quando o mtodo e1ecutado.
'mplementando *étodos
0ocB deve implementar todos os mtodos dentro de uma classe na parte de implementa"ão.
C%T,!D [met2\. ...
%7DC%T,!D.
uando vocB implementa o mtodo& não precisa especificar quaisquer parmetros de interface& j'que são definidos dentro da declara"ão do mtodo. !s parmetros de interface de um mtodocomportam=se como vari'veis locais dentro do mtodo de implementa"ão. -ode=se definir vari'veis locais adicionais dentro de um mtodo usando o comando DATA.
Assim como módulos de fun"#es& vocB pode usar o comando RA6S% [e1ception\ e C%SSAK%RA6S67K para lidar com situa"#es de erro.
uando vocB implementa um mtodo est'tico& lembre=se que pode=se apenas trabal2ar comatributos est'ticos da sua classe. Ctodos de instancias podem trabal2ar com ambos atributosest'ticos ou de instancia.
%)amando *étodos
-ara c2amar um mtodo& use o seguinte comando+
A55 C%T,!D [met2\ %X-!RT67K... [ii\ W.[f i\...6C-!RT67K... [ei\ W.[g i\...,A7K67K ... [ci\ W.[f i\...
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
27/74
OOP em ABAP
R%%6067K r W 2%X%-T6!7S... [ei\ W rc i...
! modo como se acessa o mtodo [met2\ depende de onde vocB o est' c2amando. Dentro daparte de implementa"ão da classe& vocB pode c2amar os mtodos da mesma classe diretamente
usando o nome [met2\ deles.
A55 C%T,!D [met2\...
Eora da classe& a visibilidade do mtodo depende da visibilidade atribu4da a ele(public). Ctodosde instancia vis4veis podem ser c2amados de fora da classe usando+
A55 C%T,!D [ref\=\[met2\...
!nde [ref\ uma vari'vel de referBncia cujo valor indica uma instancia da classe. Ctodos declasse vis4veis podem ser c2amados de fora da classe usando+
A55 C%T,!D [class\W\[met2\...
onde [class\ o nome da classe relevante.
uando vocB c2ama um mtodo& vocB deve passar todos os parmetros de entrada obrigatóriosusando %X-!RT67K ou ,A7K67K no comando A55 C%T,!D. 0ocB pode (se quiser) importar os parmetros de sa4das para dentro de seu programa usando 6C-!RT67K ou R%%6067K.6gualmente& vocB pode (se quiser) manipular quaisquer e1ce"#es disparadas pelos mtodosusando a adi"ão %X%-T6!7S. 7o entanto& isto altamente recomendado.
0ocB passa e recebe valores em mtodos da mesma maneira dos módulos de fun"#es& incluindo asinta1e após a adi"ão correspondente+
... [-armetro Eormal \ W [-armetro Atual\
!s parmetros de interface (-armetros Eormais) estão sempre do lado esquerdo do sinal deigualdade. ! novo parmetro est' sempre a direita. ! sinal de igual não um operador deatribui"ão neste conte1to& ele meramente serve para copiar vari'veis do programa para osparmetros de interface de mtodo.
Se a interface de um mtodo consiste apenas de um simples parmetro 6C-!RT67K& vocB podeusar a seguinte forma resumida de c2amada de mtodo+
A55 C%T,!D [met2od\( f).
! parmetro [f\ passado para os parmetros de entrada do mtodo.
Se a interface de um mtodo consiste apenas de parmetros 6C-!RT67K& vocB pode usar aseguinte forma resumida+
A55 C%T,!D [met2od\(....[ii\ W.[f i\...).
ada parmetro atual [f i \ passado correspondente ao parmetro formal [i i \.
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
28/74
OOP em ABAP
*étodos de *anipulação de "+entos
Ctodos de manipula"ão de eventos são mtodos especiais que não podem ser c2amados usandoo comando A55 C%T,!D. %les são ativados usando eventos. 0ocB define um mtodo como um
manipulador de eventos usando a adi"ão
... E!R %0%7T [evt\ !E [cif\...
7o comando C%T,!DS ou 5ASS=C%T,!DS.
As seguintes regras especiais se aplicam para a interface de um mtodo manipulador de eventos+
• A interface pode apenas consistir de parmetros 6C-!RT67K.• ada parmetro 6C-!RT67K deve ser um parmetro %X-!RT67K no evento [evt\.• !s atributos dos parmetros são definidos na declara"ão do evento [evt\ (comando
%0%7TS) e são adotados pelo mtodo manipulador de eventos.
%onstructors
onstructors são mtodos especiais que não podem ser c2amados usando A55 C%T,!D. Aoinvs& eles são c2amados automaticamente pelo sistema para selecionar o estado inicial de umnovo objeto ou classe. ,' dois tipos de constructors H instance constructors e static constructors.onstructors são mtodos com um nome pr=definido. -ara us'=los& vocB deve e1plicitamentedeclar'=los dentro da classe.
! instance constructor de uma classe o mtodo predefinido de um objeto !7STR*T!R. 0ocBo declara da seguinte maneira na se"ão publica da classe.
C%T,!DS !7STR*T!R6C-!RT67K.. ]0A5*%(^[ii\])^ T;-% t8pe ]!-T6!7A5^..%X%-T6!7S.. [ei\.
% implementa=lo na se"ão de implementa"ão como qualquer outro mtodo. ! sistema c2ama oinstance constructor uma ve$ para cada instancia da classe& diretamente ap* o objeto ter sidocriado no comando R%AT% !/%T. 0ocB pode passar parmetros de entrada do instanceconstructor e lidar com e1ce"#es usando as adi"#es %X-!RT67K e %X%-T6!7S.
! static constructor de uma classe um mtodo est'tico com o nome 5ASSU!7STR*T!Rpr=definido. 0ocB o declara na se"ão p3blica como segue+
5ASS=C%T,!DS 5ASSU!7STR*T!R.
% implementa=lo na se"ão de implementa"ão como qualquer outro mtodo. ! static constructor nãopossui parmetros. ! sistema c2ama o static constructor uma ve$ para cada classe& an%$* daclasse ser acessada pela primeira ve$. ! static constructor p!'$ então acessar componentes desua própria classe.
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
29/74
OOP em ABAP
*étodos em A,AP Objects - "xemplo
! e1emplo a seguir demonstra como declarar& implementar& e usar mtodos em objetos AA-.
.isão Geral
%ste e1emplo usa trBs classes c2amadas UT%AC& U6
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
30/74
OOP em ABAP
;7/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
31/74
OOP em ABAP
C!n/i%!*
!s comandos usados para processamento de listas ainda não estãocompletamente dispon4veis com objetos AA-. 7o entanto& para produ$ir umsimples teste& vocB pode usar o seguinte+
o NR6T% ]AT^ L[offset\([lengt2\) [f\o *567%o S
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
32/74
OOP em ABAP
PUBLIC SECTION.
TYPES: BI0ER_REF TYPE REF TO C_BI0ER, BI0ER_REF_TAB TYPE STANDARD TABLE OF BI0ER_REF
ITH DEFAULT 0EY,
BEGIN OF STATUS_LINE_TYPE, FLAG(1) TYPE C, TEXT1() TYPE C, ID TYPE I, TEXT-(2) TYPE C, TEXT3(4) TYPE C, GEAR TYPE I, TEXT5(2) TYPE C, SPEED TYPE I, END OF STATUS_LINE_TYPE.
CLASS+METHODS: CLASS_CONSTRUCTOR.
METHODS: CONSTRUCTOR, CREATE_TEAM, SELECTION, EXECUTION.
PRIVATE SECTION.
CLASS+DATA: TEAM_MEMBERS TYPE I, COUNTER TYPE I.
DATA: ID TYPE I, STATUS_LINE TYPE STATUS_LINE_TYPE,
STATUS_LIST TYPE SORTED TABLE OF STATUS_LINE_TYPE ITH UNI6UE 0EY ID,
BI0ER_TAB TYPE BI0ER_REF_TAB, BI0ER_SELECTION LI0E BI0ER_TAB, BI0ER LI0E LINE OF BI0ER_TAB.
METHODS: RITE_LIST.
ENDCLASS.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CLASS C_BI0ER DEFINITION.
PUBLIC SECTION.
METHODS: CONSTRUCTOR IMPORTING TEAM_ID TYPE I MEMBERS TYPE I, SELECT_ACTION, STATUS_LINE EXPORTING LINE
TYPE C_TEAM=7STATUS_LINE_TYPE.
;
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
33/74
OOP em ABAP
PRIVATE SECTION.
CLASS+DATA COUNTER TYPE I.
DATA: ID TYPE I,
BI0E TYPE REF TO C_BICYCLE, GEAR_STATUS TYPE I VALUE 1, SPEED_STATUS TYPE I VALUE .
METHODS BI0ER_ACTION IMPORTING ACTION TYPE I.
ENDCLASS.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CLASS C_BICYCLE DEFINITION.
PUBLIC SECTION.
METHODS: DRIVE EXPORTING VELOCITY TYPE I, STOP EXPORTING VELOCITY TYPE I, CHANGE_GEAR IMPORTING CHANGE TYPE I RETURNING VALUE(GEAR) TYPE I EXCEPTIONS GEAR_MIN GEAR_MAX.
PRIVATE SECTION.
DATA: SPEED TYPE I, GEAR TYPE I VALUE 1.
CONSTANTS: MAX_GEAR TYPE I VALUE 18, MIN_GEAR TYPE I VALUE 1.
ENDCLASS.
7ote que nen2uma das trBs classes tem atributos p3blicos. !s estados das classes podem ser modificados apenas pelos próprios mtodos. A classe UT%AC ontm um5ASSU!7STR*T!R. UT%AC e U6
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
34/74
OOP em ABAP
M%!'!* 'a Ca**$ CKTEAM
!s mtodos seguintes são implementados nesta se"ão+
CLASS C_TEAM IMPLEMENTATION.
...
ENDCLASS.
CLASSKCONSTRUCTOR
METHOD CLASS_CONSTRUCTOR. TIT1 = 9T%$ %#%* ;9. CALL SELECTION+SCREEN 1 STARTING AT 3. IF SY+SUBRC NE . LEAVE PROGRAM.
ELSE. TEAM_MEMBERS = MEMBERS. ENDIF. ENDMETHOD.
! static constructor e1ecutado antes da classe UT%AC ser usada pela primeira ve$ noprograma. %le c2ama a selection screen MM e seleciona o atributo T%ACUC%C%RS para o valor entrado pelo usu'rio. %ste atributo tem o mesmo valor para todas as instancias da classeUT%AC.
CONSTRUCTOR
METHOD CONSTRUCTOR.
COUNTER = COUNTER < 1. ID = COUNTER. ENDMETHOD.
! instance constructor e1ecutado diretamente após cada instancia da classe UT%AC ser criada.%le usado para contar o n3mero de instancias de UT%AC no atributo est'tico !*7T%R& eassimila o n3mero correspondente para o atributo 6D de cada instancia da classe.
CREATEKTEAM
METHOD CREATE_TEAM. DO TEAM_MEMBERS TIMES. CREATE OBECT BI0ER EXPORTING TEAM_ID = ID MEMBERS = TEAM_MEMBERS. APPEND BI0ER TO BI0ER_TAB. CALL METHOD BI0ER+7STATUS_LINE IMPORTING LINE = STATUS_LINE. APPEND STATUS_LINE TO STATUS_LIST. ENDDO. ENDMETHOD.
! mtodo p3blico de instancia R%AT%UT%AC pode ser c2amado por qualquer usu'rio da classecontendo uma vari'vel com uma referBncia para a instancia da classe. G usada para criar
;4/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
35/74
OOP em ABAP
instancias da classe U6
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
36/74
OOP em ABAP
RITEKLIST
METHOD RITE_LIST. SET TITLEBAR 9TIT9. SY+LSIND = .
S0IP TO LINE 1. POSITION 1. LOOP AT STATUS_LIST INTO STATUS_LINE. RITE: ? STATUS_LINE+FLAG AS CHEC0BOX, STATUS_LINE+TEXT1, STATUS_LINE+ID, STATUS_LINE+TEXT-, STATUS_LINE+TEXT3, STATUS_LINE+GEAR, STATUS_LINE+TEXT5, STATUS_LINE+SPEED. ENDLOOP. ENDMETHOD.
! mtodo privado de instancia NR6T%U56ST pode apenas ser c2amado de mtodos da classeUT%AC. G usada para mostrar a tabela interna privada STAT*SU56ST na lista b'sica (S;=5S67DW M) do programa.
M%!'!* 'a Ca**$ CKBIER
!s mtodos seguintes são implementados na se"ão+
CLASS C_BI0ER IMPLEMENTATION.
...
ENDCLASS.
CONSTRUCTOR
METHOD CONSTRUCTOR. COUNTER = COUNTER < 1. ID = COUNTER + MEMBERS ( TEAM_ID + 1). CREATE OBECT BI0E. ENDMETHOD.
! instance constructor e1ecutado diretamente após cada instance da classe U6
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
37/74
OOP em ABAP
SELECTKACTION
METHOD SELECT_ACTION.
DATA ACTIVITY TYPE I. TIT- = 9S%!%&' $&'i" /" BI0E9. TIT-
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
38/74
OOP em ABAP
! mtodo de instancia privado 6
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
39/74
OOP em ABAP
C1ANGEKGEAR
METHOD CHANGE_GEAR.
GEAR = ME+7GEAR. 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+7GEAR = GEAR. ENDMETHOD.
! mtodo da instancia p3blica ,A7K%UK%AR pode ser c2amado por qualquer usu'rio da classe.
! mtodo muda o valor do atributo privado K%AR. /' que o parmetro formal com o mesmo nomeobscurece o atributo dentro do mtodo& o atributo tem de ser endere"ado usando a referBnciaprópria C%=\K%AR (C% referencia a instncia que c2amou o mtodo).
Usando as Classes dentro de um Programa
! programa a seguir mostra como as classes acima podem ser usadas em um programa. Asdeclara"#es da selection screen e classes locais& e as implementa"#es dos mtodos tambmdevem ser parte do programa.
REPORT OO_METHODS_DEMO NO STANDARD PAGE HEADING.
D%&!$$'i"* $@ I!%%'$'i"*
...
G!"#$! P"$ D$'$
TYPES TEAM TYPE REF TO C_TEAM.
DATA: TEAM_BLUE TYPE TEAM, TEAM_GREEN TYPE TEAM, TEAM_RED TYPE TEAM.
DATA COLOR().
;/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
40/74
OOP em ABAP
P"$ %%'*
START+OF+SELECTION.
CREATE OBECT: TEAM_BLUE, TEAM_GREEN, TEAM_RED.
CALL METHOD: TEAM_BLUE+7CREATE_TEAM,TEAM_GREEN+7CREATE_TEAM,
TEAM_RED+7CREATE_TEAM.
SET PF+STATUS 9TEAMLIST9.
RITE 9 S%!%&' $ '%$ 9 COLOR = -.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AT USER+COMMAND. CASE SY+UCOMM. HEN 9TEAM_BLUE9. COLOR = 9BLUE 9. FORMAT COLOR = 1 INTENSIFIED ON INVERSE ON. CALL METHOD TEAM_BLUE+7SELECTION.
HEN 9TEAM_GREEN9. COLOR = 9GREEN9. FORMAT COLOR = INTENSIFIED ON INVERSE ON. CALL METHOD TEAM_GREEN+7SELECTION.
HEN 9TEAM_RED9.
COLOR = 9RED 9. FORMAT COLOR = 4 INTENSIFIED ON INVERSE ON. CALL METHOD TEAM_RED+7SELECTION.
HEN 9EXECUTION9. CASE COLOR. HEN 9BLUE 9. FORMAT COLOR = 1 INTENSIFIED ON INVERSE ON. CALL METHOD TEAM_BLUE+7SELECTION.
CALL METHOD TEAM_BLUE+7EXECUTION. HEN 9GREEN9.
FORMAT COLOR = INTENSIFIED ON INVERSE ON. CALL METHOD TEAM_GREEN+7SELECTION.
CALL METHOD TEAM_GREEN+7EXECUTION.
HEN 9RED 9. FORMAT COLOR = 4 INTENSIFIED ON INVERSE ON. CALL METHOD TEAM_RED+7SELECTION.
CALL METHOD TEAM_RED+7EXECUTION. ENDCASE.
ENDCASE.
47/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
41/74
OOP em ABAP
! programa contm trBs vari'veis referenciais a classes que se referem a classe UT%AC. %le cria> instancias para as vari'veis de referBncia e cada objeto& c2ama o mtodo R%AT%UT%AC. !mtodo 5ASSU!7STR*T!R da classe UT%AC e1ecutado antes da cria"ão do primeiroobjeto. ! status T%AC56ST para a lista b'sica permite que o usu'rio escol2a uma de quatrofun"#es+
uando o usu'rio escol2e uma fun"ão& o evento AT *S%R=!CCA7D ativado e os mtodosp3blicos são c2amados em uma das trBs instancias de UT%AC& dependendo da escol2a dousu'rio. ! usu'rio pode mudar o estado objeto selecionando a lin2a correspondente na lista destatus.
/erança
A 2eran"a permite que vocB derive uma nova classe de uma j' e1istente. 0ocB fa$ isso usando aadi"ão 67,%R6T67K ER!C do modo a seguir+
5ASS [subclasse\ D%E676T6!7 67,%R6T67K ER!C [superclasse\.
A nova classe [subclasse\ 2erda todos os componentes da classe e1istente [superclasse\. Anova classe c2amada derivada da qual ela 2erdou. % a original c2amada superclasse da novaclasse.
Se vocB adicionar novas declara"#es F subclasse ela conter' os mesmos componentes dasuperclasse& mais as adi"#es. 7o entanto& apenas os componentes p"ic!* e pr!%$+i'!* dasuperclasse estão vis4veis na subclasse. Apesar dos componentes privados da superclassee1istirem na subclasse& eles não estão vis4veis. 0ocB pode declarar componentes privados em umasubclasse que tem os mesmo nomes dos componentes privados da superclasse. ada classetrabal2a com seus próprios componentes privados.
Se a superclasse não tem uma se"ão de visibilidade privada& a subclasse uma rplica e1ata dasuperclasse. 7o entanto& pode=se adicionar novos componentes F subclasse. 6sto l2e permite quetorne uma subclasse em uma versão especiali$ada da superclasse. Se uma subclasse tambmuma superclasse& vocB introdu$ um novo n4vel de especiali$a"ão.
4$/%4
http://help.sap.com/saphelp_46csr2/helpdata/en/dd/4049c40f4611d3b9380000e8353423/frameset.htm
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
42/74
OOP em ABAP
*ma classe pode ter mais do que uma subclasse direta& mas apenas uma superclasse direta. 6sto c2amada 2$ran(a *i-p$*. uando subclasses 2erdam de superclasses e a superclasse tambm uma subclasse de outra classe& todas as classes envolvidas formam uma 'rvore de2eran"a& cujos degraus de especiali$a"ão aumentam com cada novo n4vel 2ier'rquico que vocBadicionar. Ao contr'rio& as classes se tornam mais generali$adas at se c2egar a rai$ da 'rvore de
2eran"a. A rai$ de todas as 'rvores de 2eran"a em !bjetos AA- a predefinida classe va$ia!/%T. %sta a classe mais generali$ada poss4vel& j' que não contm mtodos nem atributos.uando vocB define uma classe& vocB não precisa especificar e1plicitamente a superclasse H arela"ão sempre definida implicitamente. Dentro de uma 'rvore de 2eran"a& dois nós adjacentessão a superclasse direta ou subclasse direta uma da outra. !utros nós relacionados são referidoscomo superclasse ou subclasse. A declara"ão de componentes de uma subclasse são distribu4dasatravs todos os n4veis da 'rvore de 2eran"a.
0ede$inindo *étodos
Todas as subclasses contBm componentes de todas as classes entre elas e o nó=rai$ em uma'rvore de 2eran"a. A visibilidade de um componente não pode ser mudada. 7o entanto& vocB podeusar a adi"ão R%D%E676T6!7 no comando C%T,!DS para redefinir mtodo de instncia p3blico
ou protegido em uma subclasse e fa$B=la mais especiali$ada. uando se redefine um mtodo&vocB não pode mudar sua assinatura. ! mtodo continua com o mesmo nome e assinatura& maspossui uma nova implementa"ão.
A declara"ão e implementa"ão do mtodo na superclasse não são afetadas quando vocB redefineo mtodo dentro de uma subclasse. A implementa"ão da redefini"ão na subclasse obscurece aimplementa"ão original na superclasse.
ualquer referBncia que indique para um objeto da subclasse usar' o mtodo redefinido& atmesmo se a referBncia for definida com referBncia a superclasse& isto & se o tipo dinmico doobjeto for da subclasse e o tipo est'tico deste for do tipo da superclasse. 6sto particularmente seaplica a auto=referBncia C%=\. Se& por e1emplo& um mtodo de superclasse C contm umac2amada A55 C%T,!D ]C%=\^C9& e C9 redefinido em uma subclasse& c2amando C de uma
instncia da subclasse que vai fa$er com que o mtodo C9 original seja c2amado& e c2amando Cde uma instancia da subclasse vai fa$er com que o mtodo C9 redefinido seja c2amado.
Dentro de um mtodo redefinido& vocB pode usar a pseudo=referBncia S*-%R=\ para acessar omtodo obscuro 2erdado da superclasse. 6sto l2e permite usar a fun"ão e1istente do mtododentro da superclasse sem ter de recodific'=lo na subclasse.
*étodos e %lasses Abstratos e inais
As adi"#es ABSTRACT e FINAL nos comandos C%T,!DS e 5ASS permitem que vocB definamtodos e classes abstratos e finais.
*m mtodo abstrato definido dentro de uma classe abstrata e não pode ser implementado naquelaclasse. ! mtodo deve ser então& implementado nas subclasses. lasses abstratas não podem ser instanciadas.
*m mtodo final não pode ser redefinido em uma subclasse. lasses finais não podem ter subclasses. %les concluem uma 'rvore de 2eran"a.
4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
43/74
OOP em ABAP
0e$er1ncias a 2ubclasses e Polimor$ismo
0ari'veis referenciais(T;-% R%E T!) definidas como referBncia para uma superclasse ou umainterface definida com referBncia para ela tambm contm referBncias para qualquer uma de suassubclasses. /' que as subclasses contBm todos os componentes de todas as suas superclasses& e
dado que a interface dos mtodos não pode ser mudada& uma vari'vel referencial definida comreferBncia a uma superclasse ou uma interface implementada por uma superclasse pode conter referBncias para instancias de qualquer de suas subclasses. %m particular& vocB pode definir ovari'vel alvo com referBncia a classe genrica !/%T.
uando vocB cria um objeto usando o comando R%AT% !/%T e uma vari'vel referencialpreenc2ida com referBncia a uma subclasse& vocB pode usar a adi"ão T;-% para criar umainstancia de subclasse& para qual a referBncia na vari'vel referencial ir' indicar.
*m usu'rio est'tico pode usar uma vari'vel referencial para endere"ar os componentes vis4veis aela na superclasse para qual a vari'vel referencial indica. 7o entanto& não pode acessar qualquer especiali$a"ão na subclasse. Se vocB usar um mtodo de c2amada dinmico& vocB podeendere"ar todos os componentes da classe.
Se vocB redefinir um mtodo de instancia em um ou mais subclasses& vocB pode usar uma 3nicavari'vel referencial para c2amar diferentes implementa"#es do mtodo& dependendo da posi"ão na'rvore de 2eran"a na qual o objeto referido ocorre. %ste conceito que diferentes classes podem ter a mesma interface e& portanto serem endere"ados usando vari'veis referenciais com um simplestipo c2amado polimorfismo.
"spaço de 3omes para %omponentes
As subclasses contBm todos os componentes de todas as superclasses dentro da 'rvore de2eran"a acima. Destes componentes& apenas os p3blicos e protegidos são vis4veis. Todos oscomponentes p3blicos e protegidos dentro de uma 'rvore de 2eran"a pertencem ao mesmo
espa"o de nomes& e conseqentemente devem possuir nomes 3nicos. ! nome dos componentesprivados& por outro lado& devem apenas ser 3nicos dentro de sua classe.
uando vocB redefine mtodos& a nova implementa"ão dos mtodos obscurece o mtodo dasuperclasse com o mesmo nome. 7o entanto& a nova defini"ão substitui o mtodo anterior deimplementa"ão& então o nome ainda 3nico. 0ocB pode usar pseudo=referBncia S*-%R=\ paraacessar uma defini"ão de mtodos dentro de uma superclasse que ten2a sido obscura por umaredefini"ão de uma subclasse.
/erança e Atributos "st#ticos
omo todos componentes& atributos est'ticos apenas e1istem uma ve$ na 'rvore de 2eran"a. *masubclasse pode acessar os atributos est'ticos e protegidos de todas as suas superclasses. Ao
contr'rio& uma superclasse compartil2a os atributos est'ticos protegidos e p3blicos com todas assuas subclasses. %m termos de 2eran"a& atributos est'ticos não são atribu4dos para uma 3nicaclasse& mas a uma parte da 'rvore de 2eran"a. 0ocB pode mud'=las de for a da classe usando oseletor de componentes de classes com qualquer nome de classe& ou dentro de qualquer classeem que ela sejam compartil2adas. %las são vis4veis em todas as classes na 'rvore de 2eran"a.
uando se acessa um atributo est'tico& sempre se endere"a a classe cujo atributo declarado.6sto particularmente importante quando vocB c2ama o static constructor de classes em 2eran"a.Static constructors são e1ecutados na primeira ve$ em que a classe acessada. Se vocB acessar
4;/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
44/74
OOP em ABAP
um atributo est'tico declarado em uma superclasse usando o nome da classe de uma subclasse&apenas o static constructor e1ecutado.
/erança e %onstructors
,' regras especiais gerenciando constructors em 2eran"a.
In*%anc$ C!n*%rc%!r*
Toda classe tem um instance constructor c2amado !7STR*T!R. %sta uma e1ce"ão a regrade que nomes de componentes dentro de uma 'rvore de 2eran"a devem ser 3nicos. 7o entanto&os instance constructors de v'rias classes dentro de uma 'rvore de 2eran"a são totalmenteindependentes um do outros. 0ocB não pode redefinir o instance constructor de uma superclassedentro de uma subclasse& nem c2amar um especificamente usando o comando A55 C%T,!D!7STR*T!R. onseqentemente& conflitos de nomes não podem ocorrer.
! instance constructor de uma classe c2amado pelo sistema quando se cria uma instancia de
classe usando R%AT% !/%T. /' que uma subclasse contm todos os atributos vis4veis desuas superclasses& que são tambm preparadas pelos instance contructors de todas as suassuperclasses& tais mtodos tambm devem ser c2amados. -ara fa$er isso& o instance constructor de cada subclasse deve conter um comando A55 C%T,!D S*-%R=\!7STR*T!R. As3nicas e1ce"#es a essa regra são subclasses diretas do nó=rai$ !/%T.
%m superclasses sem um instance constructor e1plicitamente definido& o instance constructor impl4cito c2amado. 6sto automaticamente garante que o instance constructor da superclasseimediata c2amada.
uando vocB c2ama um instance constructor& vocB deve passar valores para todos os parmetrosde interface obrigatórios. ,' varias maneiras de fa$er isto+
• *sando R%AT% !/%T
Se a classe que vocB est' criando uma instancia tem um instance constructor com umainterface& deve=se passar valores para ela usando EXPORTING.
Se a classe que vocB est' criando uma instancia tem um instance constructor sem umainterface& não se deve passar parmetros.
Se a classe que vocB est' criando uma instancia não possui um instance constructor e1pl4cito& vocB deve ol2ar na 'rvore de 2eran"a pela pró1ima superclasse que possua uminstance constructor e1pl4cito. aso 2aja uma interface& vocB deve passar valores usando%X-!RT67K& senão não 2' necessidade de passar qualquer valor.
• *sando A55 C%T,!D S*-%R=\!7STR*T!R
Se a superclasse direta tem um instance constructor com uma interface& vocB deve passar valores para ela usando EXPORTING.
Se a superclasse direta tem um instance constructor sem uma interface& não se passamparmetros.
44/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
45/74
OOP em ABAP
Se a superclasse direta não tem um instance constructor e1pl4cito& vocB deve ol2ar na'rvore de 2eran"a pela pró1ima superclasse com um instance constructor e1pl4cito. Sepossuir uma interface& vocB deve passar valores usando %X-!RT67K. Senão& não sedeve passar quaisquer valores.
%m ambos R%AT% !/%T e A55 C%T,!D S*-%R=\!7STR*T!R& vocB deve ol2ar aopró1imo instance constructor e1pl4cito dispon4vel e& se tiver uma interface& passar valores para ele.! mesmo se aplica para manipula"ão de e1ce"#es para instance constructors. uando se trabal2acom 2eran"a& necess'rio um con2ecimento preciso de toda a 'rvore de 2eran"a. uando vocBcria uma instancia para uma classe no n4vel inferior da 'rvore de 2eran"a& vocB pode precisar passar parmetros para o constructor de uma classe que esteja mais pró1ima do nó=rai$.
! instance constructor de uma subclasse dividido em duas partes pelo comando A55 C%T,!DS*-%R=\!7STR*T!R. 7as lin2as antes da c2amada& o construtor se comporta como ummtodo est'tico& isto & não pode acessar os atributos de instancia da sua classe. 0ocB não podeacessar atributos de instancia at depois da c2amada. *se os comandos antes da c2amada paradeterminar os parmetros atuais para a interface do instance constructor da superclasse. 0ocBpode apenas usar atributos est'ticos ou dados locais para fa$er isto.
uando vocB cria uma instancia de uma subclasse& o instance constructor c2amado2ierarquicamente. ! primeiro n4vel em qual vocB pode acessar atributos de instancia o n4vel maisalto superclasse. uando vocB retorna ao constructor da classe com n4vel mais bai1o& vocB podetambm sucessivamente acessar seus atributos de instancia.
%m um mtodo constructor& os mtodos das subclasses da classe não são vis4veis. Se um instanceconstructor c2ama um mtodo de instancia da mesma classe usando a auto=referBncia impl4citaC%=\& o mtodo c2amado como se fosse implementado na classe do instance constructor& e nãoem qualquer forma redefinida que pode ocorrer na subclasse que vocB que criar uma instance.%sta uma e1ce"ão F regra que determina que quando vocB c2amar mtodos de instances& osistema sempre c2ama o mtodo como se tivesse sido implementado na classe cuja instance areferBncia est' indicando.
S%a%ic C!n*%rc%!r*
Toda classe tem um static constructor c2amado 5ASSU!7STR*T!R. Assim como o espa"opara nomes dentro de uma 'rvore 2ier'rquica& as mesmas regras de um instance constructor seaplicam a um static constructor.
A primeira ve$ que vocB acessa uma subclasse em um programa& o static constructor e1ecutado.7o entanto& antes que possa ser e1ecutado& os statics constructors de todas as superclassesdevem j' ter sido e1ecutados. *m static constructor pode apenas ser c2amado uma ve$ por programa. -ortanto& quando vocB acessa uma subclasse& o sistema procura pela superclasse maispró1ima cujo static constructor ainda não foi e1ecutado& seguido de todas as classes entre aquela ea subclasse que vocB acessou.
41/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
46/74
OOP em ABAP
Gr#$ico Geral de /erança
/erança4 .isão Geral
A parte esquerda do gr'fico demonstra como vocB pode derivar uma subclasse c9 de umasuperclasse c usando a adi"ão 67,%RT67K ER!C no comando 5ASS. A parte direita do gr'fico
demonstra como a distribui"ão da subclasse dentro da 'rvore de 2eran"a& que alcan"a a classeva$ia default !/%T. *ma subclasse contm todos os componentes declarados acima dela na'rvore de 2eran"a& e pode acessar aqueles que são declarados p3blicos ou protegidos.
4?/%4
http://help.sap.com/saphelp_46csr2/helpdata/en/1d/df5f54127111d3b9390000e8353423/frameset.htm
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
47/74
OOP em ABAP
/erança 2imples
%ste gr'fico ilustra 2eran"a simples. *ma classe pode apenas ter uma superclasse direta& maspode ter mais do que uma subclasse direta. A classe va$ia !/%T o nó=rai$ de toda 'rvore de2eran"a em objetos AA-.
4%/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
48/74
OOP em ABAP
/erança e .ari#+eis 0e$erenciais
%ste gr'fico demonstra como vari'veis referenciais definidas com referBncia para uma superclassepodem indicar objetos de subclasses. ! objeto F direita uma instancia da classe class>. Asvari'veis referenciais de classe R%E& R%E9& e R%E> são digitadas com referBncia a class&class9& e class>. Todas as trBs vari'veis referenciam ao objeto. 7o entanto& R%E pode apenasacessar os componentes p3blicos da classe class& R%E9 pode acessar os componentes
p3blicos da class e class9. R%E> pode acessar os componentes p3blicos de todas as classes.
Se vocB redefinir um mtodo de uma superclasse em uma subclasse& vocB pode usar uma vari'velreferencial definida com referBncia a superclasse para acessar objetos com diferentesimplementa"#es de mtodos. uando se acessa a superclasse& o mtodo tem a implementa"ãooriginal& mas quando vocB acessa a subclasse& o mtodo tem a nova implementa"ão. ! uso deuma simples vari'vel de referBncia para c2amar mtodos com mesmo nome que se comportamdiferentemente c2amado polimorfismo. ! tipo est'tico sempre uma superclasse. ! tipodinmico(tipo da instncia) pode ser o da superclasse ou subclasse.
CLASS &"'% DEFINITION. PUBLIC SECTION. METHODS: *%' IMPORTING $!%(*%'_$!%) TYPE i,
i&%%', %' EXPORTING $!%(%'_$!%) TYPE i. PROTECTED SECTION .
DATA &"' TYPE i.ENDCLASS.
CLASS &"'% IMPLEMENTATION. METHOD *%'. &"' = *%'_$!%. ENDMETHOD.
4/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
49/74
OOP em ABAP
METHOD i&%%'. ADD 1 TO &"'. ENDMETHOD. METHOD %'. %'_$!% = &"'.
ENDMETHOD.ENDCLASS.
CLASS &"'%_'% DEFINITION INHERITING FROM &"'%.PUBLIC SECTION.
METHODS i&%%' REDEFINITION .DATA &"'_'%.
ENDCLASS.
CLASS &"'%_'% IMPLEMENTATION. METHOD i&%%'. DATA "@!" TYPE I. CALL METHOD *%+7i&%%' .
i'% ? &"'. "@!" = &"' "@ 1. IF "@!" = . &"'_'% = &"'_'% < 1. i'% &"'_'%. ENDIF. ENDMETHOD.ENDCLASS.
DATA: &"' TYPE REF TO &"'%, #% TYPE i VALUE .
START+OF+SELECTION.
CREATE OBECT &"' TYPE &"'%_'%
.
CALL METHOD &"'+7*%' EXPORTING *%'_$!% = #%.
DO - TIMES. CALL METHOD &"'+7i&%%'. ENDDO.
A classe !*7T%RUT%7 derivada de !*7T%R. %la redefine o mtodo67R%C%7T. -ara fa$er isto& deve=se modificar a visibilidade do atributo !*7Tde privado para protegido. ! mtodo redefinido c2ama o mtodo obscuro dasuperclasse usando a pseudo=referBncia S*-%R=\. ! mtodo redefinido uma
especiali$a"ão do mtodo 2erdado.
! e1emplo cria uma instancia da subclasse. A vari'vel referencial indicando paraela tem o tipo da superclasse (tipo est'tico). uando o mtodo 67R%C%7T c2amado usando a referBncia superclasse& o sistema e1ecuta o mtodo redefinidoda subclasse.
4/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
50/74
OOP em ABAP
'nter$aces
lasses& suas instancias (objetos)& e acesso a objetos usando vari'veis referenciais formam ob'sico de objetos AA-. %stes meios j' l2e permitem modelar aplica"#es t4picas de negócios&como consumidores& ordens& ordens de itens& entre outros& usando objetos& e para implementar solu"#es usando objetos AA-.
7o entanto& freqentemente necess'rio para classes similares fornecer fun"#es similares quesão codificadas diferentemente em cada classe& mas que deveria fornecer um ponto uniforme decontato com o usu'rio. -or e1emplo& vocB pode ter duas classes similares& conta poupan"a econtas corrente& ambas as quais tem um mtodo de calcular juros ao ano. As interfaces e nomesdos mtodos são os mesmos& mas a verdadeira implementa"ão diferente. ! usu'rio das classese suas instancias devem tambm estar aptos a e1ecutar o mtodo de final de ano para todas as
contas& sem ter de se preocupar individualmente com cada tipo de conta.
!bjetos AA- permitem isto atravs do uso de interfaces. 6nterfaces são estruturas independentesque vocB pode implementar em uma classe para ampliar o corpo da classe. ! corpo espec4fico deuma classe definido por seus componentes e se"#es de visibilidade. -or e1emplo& oscomponentes p3blicos de uma classe definem o seu corpo p3blico& j' que todos os seus atributospodem ser endere"ados por todos os usu'rios. !s componentes protegidos de uma classedefinem seu corpo em conjunto com suas subclasses.(7o entanto& 2eran"a não suportada noRelease ?.:).
6nterfaces ampliam o corpo de uma classe adicionando seus próprios componentes a se"ãop3blica. 6sto permite que usu'rios enderecem diferentes classes via um ponto universal de contato.6nterfaces& junto com 2eran"a& fornece um dos pilares do polimorfismo& j' que eles permitem um
mtodo simples dentro de uma interface se comporte diferentemente em diferentes classes.
De$inindo 'nter$aces
omo classes& vocB pode definir interfaces tanto globalmente no RL> Repositor8 ou localmente emum programa AA-. -ara informa"#es sobre como definir interfaces locais leia a se"ão lassuilder na documenta"ão de ferramentas do AA- Norbenc2. A defini"ão de uma interface local[intf\ inclu4da nos comandos+
67T%REA% [intf\.
...
%7D67T%REA%.
A defini"ão contm a declara"ão para todos os componentes (atributos& mtodos& eventos) dainterface. 0ocB pode definir os mesmos componentes em uma interface assim como em umaclasse. !s componentes de interfaces não tBm de ser atribu4dos individualmente para uma se"ãode visibilidade& j' que eles automaticamente pertencem a se"ão p3blica da classe em qual ainterface implementada. 6nterfaces não possuem uma parte de implementa"ão& j' que seusmtodos são implementados dentro da classe que implementa a interface.
17/%4
http://help.sap.com/saphelp_46csr2/helpdata/en/c3/225b6254f411d194a60000e8353423/frameset.htm
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
51/74
OOP em ABAP
'mplementando 'nter$aces
Ao contr'rio de classes& interfaces não possuem instancias. Ao invs& interfaces sãoimplementadas por classes. -ara implementar uma interface dentro de uma classe& use ocomando+
67T%REA%S [intf\.
7a parte de declara"#es da classe. %ste comando pode apenas aparecer na se"ão p3blica daclasse.
uando vocB implementa uma interface dentro de uma classe& os componentes da interface sãoadicionados aos outros componentes na se"ão p3blica. *m componente [icomp\ de uma interface[intf\ pode ser acessada como se fosse uma membro da classe sob o nome [intf_icomp\.
A classe deve implementar os mtodos de todas as interfaces implementadas nela. A parte deimplementa"ão da classe deve conter um mtodo de implementa"ão para cada mtodo deinterface [imet2\+
C%T,!D [intf_imet2\.
...
%7DC%T,!D.
6nterfaces podem ser implementadas por diferentes classes. ada uma destas classes ampliadapelo mesmo conjunto de componentes. 7o entanto& os mtodos da interface podem ser
implementados diferentemente dentro de cada classe.
6nterfaces permitem que vocB use diferentes classes em um modo uniforme usando referBncias deinterface (polimorfismo). -or e1emplo& interfaces que são implementadas em diferentes classes eampliam o corpo p3blico de cada classe em um mesmo conjunto de componentes. Se uma classenão tem nen2um componente p3blico espec4fico dela& as interfaces definem todo o corpo p3blicoda classe.
0e$er1ncia de 'nter$ace
0ari'veis referenciais l2e permitem acessar objetos. Ao invs de criar vari'veis referenciais comreferBncia a uma classe& vocB pode tambm defin4=los com referBncia a uma interface. %ste tipo devari'vel referencial pode conter referBncias a objetos de classes que implementam a interface
correspondente.
-ara definir uma referBncia de interface& use a adi"ão T;-% R%E T! [intf\ no comando T;-%S ouDATA. [intf\ deve ser uma interface que foi declarada ao programa antes da verdadeiradeclara"ão da referBncia ocorrer. *ma vari'vel referencial com a referBncia de interface t8pe c2amada uma vari'vel referencial de interface ou referBncia de interface.
*ma referBncia de interface [iref\ permite que um usu'rio utili$e a forma [iref\=\[icomp\ paraendere"ar todos os componentes vis4veis da interface [icomp\ do objeto cujo objeto de referBncia
1$/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
52/74
OOP em ABAP
est' indicando. 6sso permite que o usu'rio acesse todos os componentes do objeto que foramadicionados a sua defini"ão pela implementa"ão da interface.
"ndereçando Objetos Usando 0e$er1ncias de 'nter$aces
-ara criar um objeto da classe [class\& vocB deve primeiro ter declarado uma vari'vel referencial[cref\ com referBncia F classe. Se a classe [class\ implementa uma interface [intf\& vocB podeusar a seguinte atribui"ão entre a vari'vel referencial da classe [cref\ e uma referBncia deinterface [iref\ para fa$er com que a referBncia de interface em [iref\ indique o mesmo objeto dareferBncia de classe [cref\+
[iref\ W [cref\
Se a interface [intf\ contm um atributo de instancia [attr\ e um mtodo de instancia [met2\&vocB pode acessar os componentes da interface como a seguir+
*sando a &ari&$ r$/$r$ncia '$ ca**$ [cref\+
• -ara acessar um atributo [attr\+ [cref\=\[intf_attr\
• -ara c2amar um mtodo [met2\+ CALL METHOD >&%/7+7>i'/J%'K7
*sando a &ari&$ r$/$r$ncia '$ in%$r/ac$ [iref\+
• -ara acessar um atributo [attr\+ [ i%/7+7>$''7 • -ara c2amar um mtodo [met2\+ CALL METHOD >i%/7+7>%'K7
%m rela"ão a componentes est'ticos de interfaces& vocB pode apenas utili$ar o nome da interfacepara acessar constantes+
Acessando uma constante [const\+ [ i'/7=7>&"*'7
-ara todos os outros componentes est'ticos de uma interface& vocB pode apenas usar referBnciasa objetos ou a classe [class\ que implementa a interface.
%ndere"ando um atributo est'tico [attr\+ [ &!$**7=7>i'/J$''7
2amando um mtodo est'tico [met2\+ CALL METHOD >&!$**7=7>i'/J%'K7
Atribuição Usando 0e$er1ncias de 'nter$aces
Assim como referBncias de classes& vocB pode atribuir referBncias de interfaces para diferentes
vari'veis referenciais. 0ocB pode tambm fa$er atribui"#es entre vari'veis referenciais de classese vari'veis referenciais de interfaces. uando vocB usa o comando C!0% ou o operador deatribui"ão (W) para atribuir vari'veis referenciais& o sistema deve estar apto a recon2ecer naverifica"ão de sinta1e se a atribui"ão poss4vel.
Supon2a que ten2amos uma referBncia de classe [cref\ e referBncias de interfaces [iref\& [iref\&e [iref9\. As seguintes atribui"#es com referBncias de interfaces podem ser c2ecadasestaticamente+
1
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
53/74
OOP em ABAP
• [iref\ W [iref9\
Ambas referBncias de interfaces devem indicar F mesma interface& ou a interface de[iref\ deve conter a interface [iref9\ como um componente.
• [iref\ W [cref\
A classe da referBncia de classe [cref\ deve implementar a interface da referBncia deinterface [iref\.
• [cref\ W [iref\
A classe de [cref\ deve ser predefinida como a classe va$ia !/%T.
%m todos os outros casos& vocB teria que trabal2ar com o comando C!0% `=T! ou o ca*%in+!p$ra%!r (W). ! casting operator substitui o operador de atribui"ão (W). 7o comando C!0%`=T!& ou quando vocB utili$a o casting operator& não 2' verifica"ão de tipo est'tico. Ao invs& o
sistema verifica em %$-p! '$ $H$c()! se a referBncia do objeto na vari'vel de origem indica umobjeto cuja referBncia de objeto no alvo a vari'vel tambm pode indicar. Se a atribui"ão poss4vel&o sistema a fa$& senão& o erro em tempo de e1ecu"ão C!0%UASTU%RR!R ocorre.
0ocB deve sempre usar casting para atribuir uma referBncia de interface a uma referBncia declasse se [cref\ não indica a classe predefinida va$ia !/%T+
[cref\ W [iref\
para o t8pe cast ter sucesso& o objeto o qual [iref\ indica deve ser um objeto da mesma classecomo o tipo da vari'vel de classe [cref\.
1;/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
54/74
OOP em ABAP
Gr#$icos Gerais
'nter$aces
A figura F esquerda do diagrama demonstra a defini"ão de uma interface local 6 e as partes dadeclara"ão e implementa"ão da classe local que implementa a interface 6 em sua *$()!p"ica. ! mtodo de interface 6_C implementado na classe. 0ocB não pode implementar interfaces em outras se"#es de visibilidade.
A figura F direita ilustra a estrutura da classe com os componentes em suas respectivas 'reas devisibilidade& e a implementa"ão dos mtodos. !s componentes da interface ampliam o corpop3blico da classe. Todos os usu'rios podem acessar os componentes p3blicos espec4ficos daclasse e os componentes da interface.
14/%4
http://help.sap.com/saphelp_46csr2/helpdata/en/55/e47846b4d611d194f30000e8353423/frameset.htm
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
55/74
OOP em ABAP
*ma classe pode implementar um n3mero indefinido de interfaces em sua se"ão p3blica. A figura Fesquerda do diagrama demonstra a parte de declara"ão e implementa"ão de uma classe local &que implementa diversas interfaces em sua se"ão p3bica. A classe deve implementar todas osmtodos de interface em sua parte de implementa"ão.
A figura F direita ilustra a estrutura da classe com os componentes em suas respectivas 'reas devisibilidade& e a implementa"ão dos mtodos. !s componentes da interface ampliam a se"ãop3blica da classe em qual eles foram declarados.
'nter$aces - "xemplo 'ntrodut(rio
! e1emplo simples a seguir demonstra como se pode usar uma interface para implementar dois
contadores que são diferentes& mas podem ser acessados da mesma maneira. 0eja tambm oe1emplo da se"ão de lasses.
67T%REA% 6U!*7T%R. C%T,!DS+ S%TU!*7T%R 6C-!RT67K 0A5*%(S%TU0A5*%) T;-% 6& 67R%C%7TU!*7T%R&
11/%4
http://help.sap.com/saphelp_46csr2/helpdata/en/48/4aad83b75211d194f50000e8353423/frameset.htm
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
56/74
OOP em ABAP
K%TU!*7T%R %X-!RT67K 0A5*%(K%TU0A5*%) T;-% 6.%7D67T%REA%.
5ASS U!*7T%R D%E676T6!7. -*56 S%T6!7.
67T%REA%S 6U!*7T%R. -R60AT% S%T6!7. DATA !*7T T;-% 6.%7D5ASS.
5ASS U!*7T%R 6C-5%C%7TAT6!7. C%T,!D 6U!*7T%R_S%TU!*7T%R. !*7T W S%TU0A5*%. %7DC%T,!D. C%T,!D 6U!*7T%R_67R%C%7TU!*7T%R. ADD T! !*7T. %7DC%T,!D. C%T,!D 6U!*7T%R_K%TU!*7T%R.
K%TU0A5*% W !*7T. %7DC%T,!D.%7D5ASS.
5ASS U!*7T%R9 D%E676T6!7. -*56 S%T6!7. 67T%REA%S 6U!*7T%R. -R60AT% S%T6!7. DATA !*7T T;-% 6.%7D5ASS.
5ASS U!*7T%R9 6C-5%C%7TAT6!7. C%T,!D 6U!*7T%R_S%TU!*7T%R.
!*7T W ( S%TU0A5*% L M) V M. %7DC%T,!D. C%T,!D 6U!*7T%R_67R%C%7TU!*7T%R. 6E !*7T K% MM. C%SSAK% 6M?9(MM). !*7T W M. %5S%. ADD M T! !*7T. %7D6E. %7DC%T,!D. C%T,!D 6U!*7T%R_K%TU!*7T%R. K%TU0A5*% W !*7T. %7DC%T,!D.
%7D5ASS.
A interface 6U!*7T%R contm trBs mtodos+ S%TU!*7T%R&67R%C%7TU!*7T%R& e K%TU!*7T%R. As classes U!*7T%R eU!*7T%R9 implementam a se"ão p3blica da interface. Ambas as classesdevem implementar os trBs mtodos de interface em sua parte de implementa"ão.U!*7T%R uma classe para contadores que pode ter qualquer valor inicial eentão são acrescidos de um. U!*7T%R9 uma classe para contadores quepodem apenas ser acrescidos de M em M. Ambas as classes tem uma interfacede sa4da idBntica.
1?/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
57/74
OOP em ABAP
A se"ão a seguir e1plica como um usu'rio pode usar uma referBncia de interfacepara acessar os objetos em ambas as classes.
-rimeiro& duas vari'veis referenciais de classe R%E e R%E9 são declaradas para as classesU!*7T%R e U!*7T%R9. *ma referBncia de interface 6R%E tambm declarada para ainterface 6U!*7T%R. Todas as vari'veis referenciais são iniciais.
1%/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
58/74
OOP em ABAP
! comando R%AT% !/%T cria um objeto para cada classe que as referBncias R%E eR%E9 indicam.
1/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
59/74
OOP em ABAP
uando a referBncia de R%E atribu4da a 6R%E& a referBncia em 6R%E tambm indica ao objetocom o nome interno U!*7T%R[\.
Ati+ando e *anipulando "+entos
%m objetos AA-& ativar e manipular um evento significa que certos mtodos agem como +a%i2!*que disparam eventos& ao quais outros mtodos H os -anipa'!r$* H reagem. 6sto significa queos mtodos de manipula"ão são e1ecutados quando o evento ocorre.
%sta se"ão contm e1plica"ão de como trabal2ar com eventos em objetos AA-. -ara detal2esprecisos dos comandos AA- relevantes& procure a palavra=c2ave correspondente no AA-%ditor.
Ati+ando "+entos
-ara disparar um evento& uma classe deve
• Declarar o evento em sua parte de declara"#es• Ativar o evento em um de seus mtodos
1/%4
http://help.sap.com/saphelp_46csr2/helpdata/en/71/a8a77955bc11d194aa0000e8353423/frameset.htm
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
60/74
OOP em ABAP
Declarando "+entos
0ocB declara eventos na parte de declara"ão de uma classe ou interface. -ara declarar eventos deinstancia& use o seguinte comando+
%0%7TS [evt\ %X-!RT67K... 0A5*%([ei\) T;-% t8pe ]!T6!7A5^..
-ara declarar eventos est'ticos& use o comando a seguir+
5ASS=%0%7TS [evt\...
Ambos os comando tBm a mesma sinta1e.
uando se declara um evento& vocB pode usar a adi"ão %X-!RT67K para especificar parmetrosque são passados ao manipulador de eventos. !s parmetros são sempre passados por valor.%ventos de instancia sempre contm o parmetro impl4cito S%7D%R& que tem o tipo de umareferBncia para o tipo ou interface em qual o evento declarado.
Disparando "+entos
*m evento de instancia em uma classe pode ser disparado por qualquer mtodo na classe.%ventos est'ticos podem ser ativados por qualquer mtodo est'tico. -ara ativar um evento em ummtodo& use o comando a seguir+
RA6S% %0%7T [evt\ %X-!RT67K... [ei\ W [f i\...
-ara cada parmetro formal [e i \ que definido como obrigatório deve=se passar um parmetroatual correspondente [f i \ na adi"ão %X-!RT67K. A auto=referBncia C% automaticamentepassada para o parmetro impl4cito S%7D%R.
*anipulando "+entos
%ventos são manipulados usando mtodos especiais. -ara manipular um evento& um mtodo deve+
• Ser definido como manipulador para aquele evento• Ser registrado em tempo de e1ecu"ão para o evento.
Declarando *étodos de *anipulação de "+entos
ualquer classe pode conter mtodos de manipula"ão de eventos para eventos de outras classes.0ocB pode& claro& tambm definir mtodos de manipula"ão de eventos na mesma classe que o
próprio evento. -ara declarar um mtodo de manipula"ão de evento de instancia& use o comandoas seguir+
C%T,!DS [met2\ E!R %0%7T [evt\ !E [cif\ 6C-!RT67K.. [ei\..
-ara um mtodo est'tico& use 5ASS=C%T,!DS ao invs de C%T,!DS+ [evt+ um eventodeclarado na classe ou interface [cif\.
?7/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
61/74
OOP em ABAP
A interface de um mtodo de manipula"ão pode apenas conter parmetros formais definidos nadeclara"ão do evento [evt\. !s atributos do parmetro tambm são adotados pelos eventos. !mtodo de manipula"ão do evento não tem que usar todos os parmetros passados no comandoRA6S% %0%7T. Se vocB quer que o parmetro impl4cito S%7D%R seja usado tambm& vocB develist'=lo na interface. %ste parmetro permite que um manipulador de evento de instancia acesse o
gatil2o& por e1emplo& para permitir que retorne resultados.
Declarar um mtodo de manipula"ão de evento em uma classe significa que instancias da classeou a própria classe são& em princ4pio& capa$es de manipular um evento [evt\ disparado por ummtodo.
0egistrando *étodos de *anipulção de "+entos
-ara permitir que um mtodo de manipula"ão de eventos reaja a um evento& deve=se determinar em tempo de e1ecu"ão o gatil2o ao qual ele deve reagir. 0ocB pode usar o seguinte comando+
S%T ,A7D5%R... [2i\... ]E!R^...
%le conecta uma lista de mtodos de manipula"ão com mtodos de disparo correspondentes. ,'quatro mtodos diferentes de eventos.
-odem ser+
• *m evento de instancia declarado em uma classe• *m evento de instancia declarado em uma interface• *m evento est'tico declarado em uma classe• *m evento est'tico declarado em uma interface
A sinta1e e efeito do S%T ,A7D5%R depende de qual dos quatro casos se aplica.
-ara um evento de instancia& vocB deve usar a adi"ão E!R para especificar a instancia para a qualvocB quer registrar o 2andler. 0ocB pode tanto especificar uma 3nica instancia como o gatil2o&usando uma vari'vel referencial [ref\+
S%T ,A7D5%R... [2i\...E!R [ref\.
!u vocB pode registrar o 2andler para todas as instancia que podem disparar o evento+
S%T ,A7D5%R... [2i\...E!R A55 67STA7%S.
! registro então se aplica at mesmo a instancia de disparo que ainda não foram criadas quandovocB registra o 2andler.
0ocB não pode usar a adi"ão E!R para eventos est'ticos+
S%T ,A7D5%R... [2i\...
! registro se aplica automaticamente a classe inteira& ou a todas as classes que implementam ainterface contendo o evento est'tico. %m caso de interfaces& o registro tambm se aplica a classesque não carregadas at depois do 2andler ter sido registrado.
?$/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
62/74
OOP em ABAP
5iming de *anipulação de "+entos
Após o comando RA6S% %0%7T& todos os mtodos de manipula"ão registrados são e1ecutadosantes do pró1imo comando ser processado (manipula"ão de evento sincroni$ado). Se o própriomtodo de manipula"ão disparar o evento& seus mtodos de manipula"ão são e1ecutados antes do
mtodo de manipula"ão original continuar. -ara evitar a possibilidade de recursão sem fim& eventospodem apenas ser subdivididos em uma profundidade de ?.
Ctodos de manipula"ão são e1ecutados na ordem em qual são registrados. /' quemanipuladores de eventos são registrados dinamicamente& não se deve assumir que todos serãoprocessados em uma ordem particular. Ao invs& deve=se programar como se todos osmanipuladores de eventos fossem e1ecutados simultaneamente.
Gr#$ico Geral - "+entos
Supon2a que ten2amos duas classes& e 9+
A classe contm um evento %& que disparado pelo mtodo C. lasse 9 contm ummtodo C9& que pode manipular evento % da classe .
?
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
63/74
OOP em ABAP
! diagrama a seguir ilustra o registro de 2andler+
?;/%4
8/19/2019 Apostila Programação Orientada a Objeto No ABAP
64/74
OOP em ABAP
! programa cria uma instancia da classe e duas instancias da classe 9. !s valores dasvari'veis referenciais R& , e ,9 indicam estas instancias.
! comando S%T ,A7D5%R cria uma tabela de 2andler& invis4vel ao usu'rio& para cada evento queum mtodo de manipula"ão foi registrado.
A tabela de 2andlers contm nomes dos mtodos de manipula"ão e r$/$r0ncia* Fs instanciasregistradas. As entradas na tabela são administradas dinamicamente pelo comando S%T,A7D5%R. *ma referBncia para uma instancia em uma tabela de 2andler como uma referBnciaem uma vari'vel referencial. %m outras palavras& conta como um uso da instancia& e portantodiretamente afeta seu tempo de vida. 7o diagrama acima& isto significa que as instancias 9[\ e9[9\ não são e1clu4das pela coleta de li1o& mesmo se , e ,9 são initial & enquanto seu registronão e1clu4do da tabela de 2an