SAP ABAP - Encapsulación
La encapsulación es un concepto de programación orientada a objetos (OOP) que une datos y funciones que manipulan los datos, y los mantiene a salvo de interferencias externas y uso indebido. La encapsulación de datos llevó al importante concepto de OOP de ocultación de datos. La encapsulación es un mecanismo para agrupar los datos y las funciones que los utilizan, y la abstracción de datos es un mecanismo para exponer solo las interfaces y ocultar los detalles de implementación al usuario.
ABAP admite las propiedades de encapsulación y ocultación de datos mediante la creación de tipos definidos por el usuario llamados clases. Como se discutió anteriormente, una clase puede contener miembros privados, protegidos y públicos. De forma predeterminada, todos los elementos definidos en una clase son privados.
Encapsulación por interfaz
La encapsulación en realidad significa que un atributo y método podrían modificarse en diferentes clases. Por lo tanto, los datos y el método pueden tener una forma y una lógica diferentes que se pueden ocultar en una clase separada.
Consideremos la encapsulación por interfaz. La interfaz se usa cuando necesitamos crear un método con diferentes funcionalidades en diferentes clases. Aquí no es necesario cambiar el nombre del método. El mismo método tendrá que implementarse en diferentes implementaciones de clases.
Ejemplo
El siguiente programa contiene una interfaz inter_1. Hemos declarado un atributo y un método method1. También hemos definido dos clases como Class1 y Class2. Entonces tenemos que implementar el método 'método1' en ambas implementaciones de clase. Hemos implementado el método 'método1' de manera diferente en diferentes clases. Al inicio de la selección, creamos dos objetos Object1 y Object2 para dos clases. Luego, llamamos al método por diferentes objetos para obtener la función declarada en clases 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.
El código anterior produce la siguiente salida:
Class 1 Interface method
Class 2 Interface method
Las clases encapsuladas no tienen muchas dependencias del mundo exterior. Además, las interacciones que tienen con clientes externos se controlan a través de una interfaz pública estabilizada. Es decir, una clase encapsulada y sus clientes están débilmente acoplados. En su mayor parte, las clases con interfaces bien definidas se pueden conectar a otro contexto. Cuando se diseñan correctamente, las clases encapsuladas se convierten en activos de software reutilizables.
Estrategia de diseño
La mayoría de nosotros hemos aprendido a través de una amarga experiencia a hacer que los miembros de la clase sean privados de forma predeterminada a menos que realmente necesitemos exponerlos. Eso es solo una buena encapsulación. Esta sabiduría se aplica con mayor frecuencia a los miembros de datos y también se aplica por igual a todos los miembros.