SAP ABAP - инкапсуляция

Инкапсуляция - это концепция объектно-ориентированного программирования (ООП), которая связывает вместе данные и функции, которые манипулируют данными, и защищает их от внешнего вмешательства и неправомерного использования. Инкапсуляция данных привела к важной концепции сокрытия данных в ООП. Инкапсуляция - это механизм объединения данных и функций, которые их используют, а абстракция данных - это механизм, открывающий только интерфейсы и скрывающий детали реализации от пользователя.

ABAP поддерживает свойства инкапсуляции и сокрытия данных посредством создания определяемых пользователем типов, называемых классами. Как обсуждалось ранее, класс может содержать закрытые, защищенные и открытые члены. По умолчанию все элементы, определенные в классе, являются частными.

Инкапсуляция по интерфейсу

Инкапсуляция фактически означает, что один атрибут и метод могут быть изменены в разных классах. Следовательно, данные и метод могут иметь разную форму и логику, которые могут быть скрыты для отдельного класса.

Рассмотрим инкапсуляцию по интерфейсу. Интерфейс используется, когда нам нужно создать один метод с разной функциональностью в разных классах. Здесь название метода менять не нужно. Один и тот же метод придется реализовать в разных реализациях классов.

пример

Следующая программа содержит интерфейс inter_1. Мы объявили атрибут и метод method1. Мы также определили два класса, такие как Class1 и Class2. Поэтому мы должны реализовать метод method1 в обеих реализациях класса. Мы реализовали метод method1 по-разному в разных классах. В начале выбора мы создаем два объекта Object1 и Object2 для двух классов. Затем мы вызываем метод разными объектами, чтобы получить функцию, объявленную в отдельных классах.

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.

Приведенный выше код дает следующий вывод -

Class 1 Interface method 
Class 2 Interface method

Инкапсулированные классы не имеют особых зависимостей от внешнего мира. Более того, их взаимодействие с внешними клиентами контролируется через стабилизированный общедоступный интерфейс. То есть инкапсулированный класс и его клиенты слабо связаны. По большей части классы с четко определенными интерфейсами можно подключить к другому контексту. При правильном проектировании инкапсулированные классы становятся повторно используемыми программными активами.

Разработка стратегии

Большинство из нас на горьком опыте научились делать членов класса закрытыми по умолчанию, если нам действительно не нужно их раскрывать. Это просто хорошая инкапсуляция. Эта мудрость чаще всего применяется к элементам данных, а также в равной степени ко всем элементам.