Você está na página 1de 4

De Grupos de Funes a Objetos

No centro de qualquer modelo orientado a objeto esto os objetos, que contm atributos (dados) e
mtodos (funes). Objetos deveriam permitir programadores a mapear um problema real e suas
solues propostas do software em uma base um-por-um. Objetos tpicos no ambiente de negcios
so, por exemplo, consumidor, ordem, ou pedido. Da release 3.1 em diante, o Business Object
Repository (BOR) contm exemplos de tais objetos. O objeto modelo dos objetos ABAP, a
extenso orientada a objeto do ABAP, compatvel com o objeto modelo do BOR.
Antes do R/3 Release 4.0, o equivalente mais prximo de objetos no ABAP eram mdulos de
funes e grupos de funes. Suponha que tenhamos um grupo de funes para processar
ordens. Os atributos de uma ordem correspondem ao dados globais do grupo de funo, enquanto
os mdulos funes individuais representam aes que manipulam aqueles dados (mtodos). Isto
significa que a verdadeira ordem dos dados encapsulada no grupo de funes. Deste modo, os
mdulos de funes podem garantir que os dados so consistentes.
Quando voc executa um programa ABAP, o sistema inicia uma nova sesso interna. A sesso
interna tem uma area de memria que contm o programa ABAP e os dados associados. Quando
voc chama um mdulo de funo, uma instance desse grupo de funes mais seus dados,
carregado na memria da sesso interna. Um programa ABAP pode carregar vrias instncias
atravs da chamda de mdulos de funes de diferentes grupos de funes.

A instncia de um grupo de funes na area de memria de uma sesso interna quase representa
um objeto no senso de orientao a objeto. Quando voc chama um modulo de funo, o
programa chamador usa a instncia de um grupo de funes, baseada na descrio usada no
Function Builder. O programa no pode acessar os dados no grupo de funes diretamente, mas

apenas atravs do modulo de funo. Os mdulos de funes e seus parmetros so a interface


entre o grupo de funes e o usurio.
A diferena principal entre a real orientao a objeto e grupo de funes que apesar de um
programa poder trabalhar com instances de diversos grupos de funes simultaneamente, ele no
pode trabalhar com diversas instances do mesmo grupo de funes. Suponha que um programa
necessite vrios contadores independents, ou processar vrias ordens ao mesmo tempo. Neste
caso, voc teria que adaptar ogrupo de funes a incluir administrao de instance, por exemplo,
usando nmeros para diferenci-las.
Na prtica, isto muito estranho. Consequentemente, os dados so usualmente guardados no
programa chamador, e os mdulos de funes so chamados para trabalhar com ele (programao
estruturada). Um problem , por exemplo, que todos os usurios do mdulo de funo devem
utilizar os mesmos dados assim como o grupo de funes. Modificando a estrura interna dos dados
de um grupo de funes afeta vrios usurios, e frequentemente difcil de prever implicaes. O
nico modo de evitar depender muito de interfaces e de uma tcnica que garante que as
estruturas internas das instances vo permanecer ocultas, permitindo que modifique-as mais tarde
sem causar problemas.
Este requerimento atingido por orientao a objeto. Olbjetos ABAP permite que voc defina
dados e funes em classes ao invs de grupo de funes. Usando classes, um programa ABAP
pode trabalhar com qualquer nmero de instances (objetos) baseados no mesmo template.

Ao invs de carregar uma nica instance de um grupo de funes dentro de uma memria implcita
quando um modulo chamado, o programa ABAP pode agora gerar as instances de classes
explicitamente usando o novo comando ABAP CREATE OBJECT. As instances individuais
represnetam objetos nicos. Voc enderea estes usando referencias a objetos. As referncias
aos objetos permitem que o programa ABAP acesse as interfaces das instances.

Exemplo
O exemplo a seguir demonstra o aspecto orientado a objeto de grupo de funes no simples caso
de um contador.

Suponha que tenhamos um grupo de funo chamado COUNTER:


FUNCTION-POOL COUNTER.
DATA COUNT TYPE I.

Local Interface

FUNCTION SET_COUNTER.
IMPORTING VALUE(SET_VALUE)
COUNT = SET_VALUE.
ENDFUNCTION.
FUNCTION INCREMENT_COUNTER.
ADD 1 TO COUNT.
ENDFUNCTION.

Local Interface

FUNCTION GET_COUNTER.
EXPORTING VALUE(GET_VALUE)
GET_VALUE = COUNT.
ENDFUNCTION.
O grupo de funes tem um campo inteiro global COUNT, e trs mdulos de
funes, SET_COUNTER, INCREMENT_COUNTER, e GET_COUNTER, que
trabalham com o campo. Dois dos mdulos de funes tm parmetros de sida e
de entrada. Estes formam a interface de dados do grupo de funes.
Qualquer programa ABAP pode ento trabalhar com este grupo de funes.
Exemplo:
DATA NUMBER TYPE I VALUE 5.
CALL FUNCTION 'SET_COUNTER' EXPORTING SET_VALUE = NUMBER.
DO 3 TIMES.
CALL FUNCTION 'INCREMENT_COUNTER'.
ENDDO.
CALL FUNCTION 'GET_COUNTER' IMPORTING GET_VALUE = NUMBER.
Aps esta seo do programa tiver sido processada, a varivel do programa
NUMBER ter valor 8. O programa ele prprio no pode acessar o campo COUNT

no grupo de funes. Operaes neste campo esto completamente encapsuladas


no mdulo de funes. O programa pode apenas comunicar com os grupos de
funes chamando os seus mdulos de funo.