SAP ABAP - Encapsulamento
Encapsulamento é um conceito de Programação Orientada a Objetos (OOP) que une dados e funções que manipulam os dados e mantém ambos protegidos contra interferências externas e uso indevido. O encapsulamento de dados levou ao importante conceito OOP de ocultação de dados. O encapsulamento é um mecanismo de agrupar os dados e as funções que os utilizam, e a abstração de dados é um mecanismo de exposição apenas das interfaces e ocultação dos detalhes de implementação do usuário.
ABAP oferece suporte às propriedades de encapsulamento e ocultação de dados por meio da criação de tipos definidos pelo usuário chamados classes. Conforme discutido anteriormente, uma classe pode conter membros privados, protegidos e públicos. Por padrão, todos os itens definidos em uma classe são privados.
Encapsulamento por Interface
O encapsulamento realmente significa que um atributo e método podem ser modificados em classes diferentes. Conseqüentemente, dados e métodos podem ter formas e lógicas diferentes que podem ser ocultadas para separar classes.
Vamos considerar o encapsulamento por interface. Interface é usada quando precisamos criar um método com diferentes funcionalidades em diferentes classes. Aqui, o nome do método não precisa ser alterado. O mesmo método terá que ser implementado em diferentes implementações de classe.
Exemplo
O programa a seguir contém uma interface inter_1. Declaramos atributo e um método method1. Também definimos duas classes, como Class1 e Class2. Portanto, temos que implementar o método 'method1' em ambas as implementações de classe. Implementamos o método 'method1' de maneira diferente em classes diferentes. No início da seleção, criamos dois objetos Object1 e Object2 para duas classes. Em seguida, chamamos o método por diferentes objetos para obter a função declarada em classes separadas.
Report ZEncap1.
Interface inter_1.
Data text1 Type char35.
Methods method1.
EndInterface.
CLASS Class1 Definition.
PUBLIC Section.
Interfaces inter_1.
ENDCLASS.
CLASS Class2 Definition.
PUBLIC Section.
Interfaces inter_1.
ENDCLASS.
CLASS Class1 Implementation.
Method inter_1~method1.
inter_1~text1 = 'Class 1 Interface method'.
Write / inter_1~text1.
EndMethod.
ENDCLASS.
CLASS Class2 Implementation.
Method inter_1~method1.
inter_1~text1 = 'Class 2 Interface method'.
Write / inter_1~text1.
EndMethod.
ENDCLASS.
Start-Of-Selection.
Data: Object1 Type Ref To Class1,
Object2 Type Ref To Class2.
Create Object: Object1, Object2.
CALL Method: Object1→inter_1~method1,
Object2→inter_1~method1.
O código acima produz a seguinte saída -
Class 1 Interface method
Class 2 Interface method
As classes encapsuladas não têm muitas dependências no mundo externo. Além disso, as interações que eles têm com clientes externos são controladas por meio de uma interface pública estabilizada. Ou seja, uma classe encapsulada e seus clientes são fracamente acoplados. Na maioria das vezes, as classes com interfaces bem definidas podem ser conectadas a outro contexto. Quando projetadas corretamente, as classes encapsuladas tornam-se ativos de software reutilizáveis.
Estratégia de Projeto
A maioria de nós aprendeu por meio de experiências amargas a tornar os alunos privados por padrão, a menos que realmente precisemos expô-los. Isso é apenas um bom encapsulamento. Essa sabedoria é aplicada com mais frequência aos membros de dados e também se aplica igualmente a todos os membros.