Учебники

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: Object1inter_1~method1,
                Object2inter_1~method1. 

Приведенный выше код производит следующий вывод —

Class 1 Interface method 
Class 2 Interface method

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

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

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