Инкапсуляция — это концепция объектно-ориентированного программирования (ООП), которая связывает воедино данные и функции, которые манипулируют данными, и защищает как от внешнего вмешательства, так и от неправильного использования. Инкапсуляция данных привела к важной ООП-концепции сокрытия данных. Инкапсуляция — это механизм связывания данных и функций, которые их используют, а абстракция данных — это механизм, представляющий только интерфейсы и скрывающий детали реализации от пользователя.
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
Инкапсулированные классы не имеют много зависимостей от внешнего мира. Более того, их взаимодействия с внешними клиентами контролируются через стабилизированный общедоступный интерфейс. То есть инкапсулированный класс и его клиенты слабо связаны. По большей части классы с четко определенными интерфейсами могут быть подключены к другому контексту. При правильной разработке инкапсулированные классы становятся программными активами многократного использования.
Разработка стратегии
Большинство из нас с помощью горького опыта научились делать членов класса закрытыми по умолчанию, если только нам действительно не нужно их разоблачать. Это просто хорошая инкапсуляция. Эта мудрость чаще всего применяется к членам данных, а также в равной степени ко всем членам.