Apostila Programação Orientada a Objeto No ABAP

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