SAP – Classes – Abap

Publicado: 24 de fevereiro de 2014 em Abap

Orientação a Objeto é geralmente considerada superior à programação procedural devido ao encapsulamento de dados com  funcionalidades relacionadas. ABAP Objects é conceitualmente semelhante as linguagens como C++ e Java, no entanto as duas linguagens estão entre as mais utilizadas atualmente e evoluem em alta velocidade, o mesmo não acontece com ABAP OO, podemos dizer que na pratica a diferença  na construção de classes é uma sintaxe um pouco mais pesada e a não permissão de criar métodos Overload dentro de uma classe, exemplo, não podemos ter um construtor vazio e um construtor utilizando parâmetros ao mesmo tempo.

Mas o ponto mais impactante entre o desenvolvimento ABAP OO e outras línguas orientadas a objeto segundo a própria SAP, “As instruções ABAP utilizadas para processamento de listas ainda não estão totalmente disponíveis em ABAP Objects“. Linguagens orientadas a objeto utilizam de forma intensa objetos de listas que são conhecidos como coleções ou Containers para manipular objetos, o ABAP possui algumas destas classes entretanto suas funcionalidades são precárias e não podem ser comparadas com os frameworks de coleções como STL para C++ e JCF para Java que praticamente definem conceitos para a manipulação de objetos.

Deste modo é comum mesmo em programas disponibilizados pela própria SAP, encontrarmos instruções consideradas procedurais como FORM e PERFORM entre outras sendo utilizada em conjunto com objetos, caso queira uma completa programação orientada a objeto como acontece em outras linguagens de programação, enquanto a SAP não disponibiliza a implementação total das coleções, você deve herdar as classes de coleções e estender as funcionalidades disponibilizadas pela SAP. Algumas construções da linguagem ABAP são consideradas obsoletas e ainda são suportadas em ABAP processual, não são permitidas em objetos ABAP.

ABAP Objects suporta:

  • Herança – uma classe compartilha a estrutura e comportamento com outra.
  • Polimorfismo – objetos diferentes (mas relacionados) têm a mesma interface de comunicação.
  • Eventos – respondem quando provocados. Os objetos podem disparar um evento.

Classe

A definição da estrutura e funcionalidade de um objeto. Define se o objeto de dados irá conter (atributos) e funcionalidades relacionadas (métodos).

Sintaxe da classe ABAP divide a definição de classe (contendo declarações de atributos e definições de interface do método) e a implementação da classe (definições de funcionalidade do método).

Sintaxe:

CLASS classe DEFINITION.

ENDCLASS.

CLASS classe IMPLEMENTATION.

ENDCLASS.

Uma classe pode ser definida localmente ou globalmente, usando a transação Class Builder SE24.

Objeto

A instanciação de uma classe, o armazenamento de dados reais e ou permitir a execução do método.

A definição de classe pode definir o seguinte: tipos, constantes, objetos de dados (atributos) e interfaces de método.

Os itens podem ser designados como:

  • PUBLIC (público) disponível a partir de fora do objeto.
  • PRIVATE (privada), disponível somente dentro do próprio objeto.
  • PROTECTED (protegida) disponível dentro do próprio objeto e suas sub classes.
  • STATIC (estático) é um atributo cujo valor é compartilhado entre todos os objetos em uma classe e não é dependente de instanciação, em ABAP a palavra chave Static não é utilizada e é referida como sendo “da classe” ou seja dados da classe, métodos da classes.

Um atributo público pode ser designado como somente leitura. Dentro da definição de classe, o setor público deve vir antes do setor privado.

Um atributo estático muitas vezes usado para coisas como contadores ocorrência de objeto e como os dados pertencem à classe e é compartilhado entre os objetos, ele é declarado como CLASS-DATA.

Método

  • Na definição de classe, a definição do método indica um método de interface.
  • Métodos podem ser designados como públicos ou privados.
  • Um método privado só pode ser chamado de dentro de outro método da classe.
  • Métodos de classe podem ser definidos e estes métodos só podem acessar atributos estáticos.
  • Métodos de classe podem ser invocados usando o nome da classe ou um objeto da classe.
  • Um objeto não precisa ser instanciado para chamar uma método de classe.
  • Código para a funcionalidade de um método é colocado na implementação da classe.
  • Os nomes de parâmetros e tipos não estão listados, pois eles já foram declarados na definição da classe.

Parâmetros do método:

IMPORTING – Parâmetros importador de entrada, usado para transferir dados de um método. Pode ser designado como opcional. Pode ter um valor padrão especificado.

EXPORTING – Parâmetros exportadores de saída. Parâmetros de exportação são sempre opcionais (por padrão).

CHANGING – Mudança de combinação acima. Passado para o método a ser utilizado. Pode ser alterado. Pode ser designado como opcional. Pode ter um valor padrão especificado.

Construtor

Uma classe pode definir um método construtor chamado constructor. O método deve ter parâmetros públicos e só importadores. O construtor não é chamado explicitamente, mas é chamado implicitamente quando um novo objeto é criado. Em ABAP Objects um método construtor não pode ser sobrecarregado (Overload) utilizando um outro método construtor, entretanto é possível criar este efeito através de parâmetros opcionais.

Construtores são úteis para:

  • Inicializar os atributos de um objeto.
  • Alocação de recursos para o objeto.
  • Modificando atributos estáticos (programação).
  • Disparando outras atividades que precisam acontecer quando um novo objeto é criado.

Auto Referencia

Dentro de um método, a referência aos atributos do objeto ou outros métodos geralmente não pode ser ambígua. Em caso de ambigüidade (um parâmetro tem o mesmo nome de um atributo), você pode se referir ao objeto, seus atributos e seus métodos usando: me.

Sintaxe:

me-> nomedotributo.

DIAGRAMA DE UMA CLASSE

Classe - Diagrama

Classe – Diagrama

CLASS BUILDER – SE24

O Class Builder permite criar e manter as classes ABAP globais e interfaces. Ambos os tipos de objetos, como os tipos de dados globais, são definidos no Repositório ABAP, compondo, assim, uma biblioteca de classes central. Juntos, eles formam uma biblioteca de classe central e são visíveis em todo o sistema. Você pode exibir as classes e interfaces existentes na biblioteca de classes usando o navegador de classe.

Criando Uma Classe no Class Builder

1 –  Entre com a transação SE24.

bicicleta1

2 – Crie a Classe ZBICICLETA como na imagem acima, utilizando os mesmos parâmetros mostrados em cada janela da imagem, na ultima janela acima escolha Local Object.

bicicleta2

3 – Na aba Attributes crie os atributos MODELO, QUADRO, RODAS, FREIOS como String, utilize a imagem acima para referencia.

bicicleta3

4 – Na aba Methods, crie o método BICICLETA utilizando a imagem acima como referencia.

bicicleta4

5 – Na barra de tarefas clique em Source Code Based para ver o código fonte da classe, também é permitido altera-lo caso seja necessário.

6 – Digite o código como mostra na imagem acima para o método BICICLETA e clique em salvar, volte uma tela e clique em ACTIVATE para ativar a classe.

7 – Pronto já temos nossa classe ZBicicleta com quatro atributos e um método BICICLETA, agora entre na transação SE38 e crie um programa para nosso exemplo abaixo onde utilizaremos nossa classe.

Exemplo:

Neste exemplo instanciaremos a classe ZBICICLETA criada no Class Builder utilizando os parâmetros acima, criaremos uma nova classe chamada MOUNTAINBIKE utilizando parâmetros em seu construtor.

Obs: Para que uma classe forme um objeto completo é necessário métodos de entrada e saída. A classe abaixo ainda não contempla o conceito de métodos Getter e Setter (C++, Java e Abap) também equivalentes a propriedades em outras linguagens de programação (Delphi, C#, Python). Estes métodos são essências na manipulação dos atributos, veremos estes métodos no tópico exclusivo com o assunto métodos.

Abap

*&---------------------------------------------------------------------*
*& Report  ZLOJA
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Classes ABAP
*&---------------------------------------------------------------------*

REPORT  ZLOJA.

* Define Classe dinamicamente.

class MOUNTAINBIKE definition.

PUBLIC SECTION.

data MODELO type STRING .
data QUADRO type STRING .
data FREIOS type STRING .
data RODAS  type STRING .

methods CONSTRUCTOR IMPORTING
                        PMODELO TYPE STRING
                        PQUADRO TYPE STRING
                        PFREIOS TYPE STRING
                        PRODAS  TYPE STRING.

methods BICICLETA .

ENDCLASS.

CLASS MOUNTAINBIKE IMPLEMENTATION.

method BICICLETA.

" Minha implementação.

WRITE: / ' Bicicleta:', modelo.
WRITE: / ' Quadro:', quadro.
WRITE: / ' Rodas:', rodas.
WRITE: / ' Freios:',  freios.

endmethod.

method CONSTRUCTOR.

me->MODELO = pmodelo.
me->QUADRO = pquadro.
me->RODAS  = prodas.
me->FREIOS = pfreios.

endmethod.

ENDCLASS.

* Cria objetos Bicicleta - definidos na CLASS BUILDER.

START-OF-SELECTION.
DATA BIKE1 TYPE REF TO ZBICICLETA.
CREATE OBJECT BIKE1.

DATA BIKE2 TYPE REF TO ZBICICLETA.
CREATE OBJECT BIKE2.

* Alimenta Variáveis
* Tem uma pegadinha aqui! você já descobriu?

* Objeto Bicicleta #1
MOVE 'BMX'       TO BIKE1->MODELO.
MOVE 'Ferro'     TO BIKE1->QUADRO.
MOVE 'Ferro'     TO BIKE1->RODAS.
MOVE 'Pastilhas' TO BIKE1->FREIOS.

* Objeto Bicicleta #2
MOVE 'Caloi'        TO BIKE1->MODELO.
MOVE 'Aluminio'     TO BIKE1->QUADRO.
MOVE 'Aluminio'     TO BIKE1->RODAS.
MOVE 'Pastilhas'    TO BIKE1->FREIOS.

* Chama o metodo bicicleta

CALL METHOD BIKE1->BICICLETA.

WRITE: / .

CALL METHOD BIKE2->BICICLETA.

* Objeto criado usando o  metodo Construtor

WRITE: / .

DATA BIKE3 TYPE REF TO MOUNTAINBIKE.

CREATE OBJECT BIKE3 EXPORTING

pMODELO = 'ZX-Track'
pQUADRO = 'Fibra de Carbono'
pFREIOS = 'Disco'
pRODAS  = 'Aluminio'.

CALL METHOD BIKE3->BICICLETA.
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s