SAP ABAP - Đóng gói

Đóng gói là một khái niệm Lập trình hướng đối tượng (OOP) liên kết dữ liệu và các chức năng thao tác dữ liệu với nhau, đồng thời giữ an toàn trước sự can thiệp và lạm dụng từ bên ngoài. Tính năng đóng gói dữ liệu đã dẫn đến khái niệm OOP quan trọng về ẩn dữ liệu. Đóng gói là một cơ chế gói dữ liệu và các chức năng sử dụng chúng, và trừu tượng hóa dữ liệu là cơ chế chỉ để lộ các giao diện và ẩn các chi tiết triển khai khỏi người dùng.

ABAP hỗ trợ các thuộc tính đóng gói và ẩn dữ liệu thông qua việc tạo ra các kiểu do người dùng định nghĩa được gọi là các lớp. Như đã thảo luận trước đó, một lớp có thể chứa các thành viên riêng tư, được bảo vệ và công khai. Theo mặc định, tất cả các mục được xác định trong một lớp là riêng tư.

Đóng gói bằng giao diện

Tính đóng gói thực sự có nghĩa là một thuộc tính và phương thức có thể được sửa đổi trong các lớp khác nhau. Do đó, dữ liệu và phương thức có thể có dạng và logic khác nhau có thể được ẩn để tách lớp.

Hãy xem xét đóng gói theo giao diện. Interface được sử dụng khi chúng ta cần tạo một phương thức với các chức năng khác nhau trong các lớp khác nhau. Ở đây tên của phương thức không cần thay đổi. Phương pháp tương tự sẽ phải được triển khai trong các triển khai lớp khác nhau.

Thí dụ

Chương trình sau chứa một Interface giao diện_1. Chúng tôi đã khai báo thuộc tính và một phương thức method1. Chúng tôi cũng đã định nghĩa hai lớp như Class1 và Class2. Vì vậy, chúng ta phải triển khai phương thức 'method1' trong cả hai lần triển khai lớp. Chúng tôi đã triển khai phương thức 'method1' khác nhau trong các lớp khác nhau. Trong phần bắt đầu, chúng ta tạo hai đối tượng Object1 và Object2 cho hai lớp. Sau đó, chúng ta gọi phương thức bởi các đối tượng khác nhau để lấy hàm được khai báo trong các lớp riêng biệt.

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ạn mã trên tạo ra kết quả sau:

Class 1 Interface method 
Class 2 Interface method

Các lớp được đóng gói không có nhiều phụ thuộc vào thế giới bên ngoài. Hơn nữa, các tương tác mà họ thực hiện với khách hàng bên ngoài được kiểm soát thông qua một giao diện công cộng ổn định. Đó là, một lớp được đóng gói và các máy khách của nó được liên kết lỏng lẻo. Đối với hầu hết các phần, các lớp có giao diện được xác định rõ ràng có thể được cắm vào một ngữ cảnh khác. Khi được thiết kế đúng cách, các lớp được đóng gói sẽ trở thành tài sản phần mềm có thể sử dụng lại.

Chiến lược thiết kế

Hầu hết chúng ta đã học được qua kinh nghiệm cay đắng để đặt các thành viên trong lớp ở chế độ riêng tư theo mặc định trừ khi chúng ta thực sự cần để lộ chúng. Đó chỉ là sự đóng gói tốt. Sự khôn ngoan này được áp dụng thường xuyên nhất cho các thành viên dữ liệu và nó cũng áp dụng như nhau cho tất cả các thành viên.