Classes – Interfaces – Abap

Publicado: 25 de fevereiro de 2014 em Abap

Os objetos definem sua interação com o mundo exterior através dos métodos que eles expõem. Métodos formam a interface do objeto com o mundo exterior; os botões na parte frontal do seu aparelho de televisão, por exemplo, são a interface entre você e a fiação elétrica do outro lado do seu invólucro de plástico. Você aperta o botão “Power” para ligar e desligar a televisão.

Na sua forma mais comum, uma interface é um conjunto de métodos relacionados com corpos vazios

A implementação de uma interface permite que uma classe se torne mais formal sobre o comportamento que promete proporcionar. Interfaces formam um contrato entre a classe e o mundo exterior, e este contrato é imposto em tempo de compilação.

Se sua classe reivindica implementar uma interface, todos os métodos definidos por essa interface deve aparecer em seu código-fonte antes da classe ser compilada com sucesso.

Em ABAP  a palavra chave interface é realmente levada ao pé da letra, obrigando o programador a referenciar a interface na instrução entre o objeto e o método.

Sintaxe:

CALL METHOD Objeto->Interface~Método.

Lembrando que a interface obriga a classe na qual foi implementada a cumprir o que nela foi declarado. Caso não cumpra o determinado pela interface obterá o seguinte erro de compilação:

Erro: Implementention missing for method “Interface~Method”.

Conceito de interfaces

  • Não pode ser instanciada.
  • Só pode possuir assinaturas de métodos de instância, públicos e abstratos (sem corpo).
  • Não pode possuir métodos concretos (com corpo), nem métodos estáticos.

Uso Comum de Interface

Já que sabemos que os objetos Abap são baseados em C++ e Java, vamos fazer uma curta analogia para que você entenda perfeitamente o uso de interfaces. As classes Abap separam a implementação da definição, assim como C++, mas também assim como Java não permitem heranças múltiplas.

Na linguagem de programação C++ pode se utilizar uma interface abstrata, mas este uso não é muito comum, pois a convenção de classes C++ já contempla que a interface seja separada da implementação na criação da própria classe, utilizando arquivos diferentes (.h e .cpp). Além da linguagem C++ permitir múltiplas heranças tornando raro a necessidade do uso de interfaces abstratas.

Java e Abap utilizam a interface pois não permitem múltiplas heranças, então a interface se torna necessária para criar um efeito deste tipo, por exemplo, imagine que temos a classe Casa e queremos que esta classe herde as classes Portas e Janelas, isto não será possível em Java e Abap, mas é possível em C++.

Para garantir que teremos os métodos paras portas e janelas na classe Casa, precisamos utilizar a interface Portas e a Interface Janelas, ainda não garantindo como em C++ os tipos de portas e janelas já que as interfaces são abstratas e não métodos concretos, Mas este recurso permite que a classe Casa tenha obrigatoriamente, portas e janelas de qualquer tipo.

Este também é o motivo de uso de uma interface abstrata em C++, quando queremos métodos abstratos para uma classe dizendo que você permite portas e janelas de qualquer tipo. Nota-se assim que C++ é uma linguagem mais flexível em termos de recursos na criação de objetos

Exemplo:

Neste exemplo simulamos um programa de I/O de arquivos, criamos uma interface contendo os métodos obrigatórios para qualquer classe, que reivindicar a interface:

Abap

*&---------------------------------------------------------------------*
*& Report  ZINTERFACE
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Interfaces
*&---------------------------------------------------------------------*

REPORT  ZINTERFACE.

* Declara Interface

INTERFACE Acao.

   METHODS :
          ABRE   IMPORTING ARQUIVO TYPE STRING,
          GRAVA  IMPORTING ARQUIVO TYPE STRING,
          DELETA IMPORTING ARQUIVO TYPE STRING.

ENDINTERFACE.

* Declara Classe

CLASS ARQUIVO DEFINITION.

   PUBLIC SECTION.

      INTERFACES ACAO.

ENDCLASS.

* Declara Implementação da Classe

CLASS ARQUIVO IMPLEMENTATION.

   METHOD ACAO~ABRE.

      " ... Implementa método para abrir o arquivo.

      WRITE: / 'Arquivo:', ARQUIVO, 'em uso'.

   ENDMETHOD.

   METHOD ACAO~GRAVA.

      " ... Implementa método para gravar o arquivo.

      WRITE: / 'Arquivo:', ARQUIVO, 'Gravado com sucesso'.

   ENDMETHOD.

   METHOD ACAO~DELETA.

      " ... Implementa método para deletar o arquivo.

      WRITE: / 'Arquivo:', ARQUIVO, 'Deletado com sucesso'.

   ENDMETHOD.

ENDCLASS.

* Cria Objetos

START-OF-SELECTION.
DATA ARQ1 TYPE REF TO ARQUIVO.
CREATE OBJECT ARQ1.

ARQ1->ACAO~ABRE( EXPORTING ARQUIVO = 'Texto.txt' ).
ARQ1->ACAO~GRAVA( EXPORTING ARQUIVO = 'Texto.txt' ).
ARQ1->ACAO~DELETA( EXPORTING ARQUIVO = 'Texto.txt' ).

* ou

CALL METHOD ARQ1->ACAO~ABRE( EXPORTING ARQUIVO = 'Texto.txt' ).
* ...
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 )

w

Conectando a %s