SAP ABAP - Giao diện
Tương tự như các lớp trong ABAP, các giao diện hoạt động như kiểu dữ liệu cho các đối tượng. Các thành phần của giao diện giống như các thành phần của các lớp. Không giống như khai báo các lớp, khai báo một giao diện không bao gồm các phần hiển thị. Điều này là do các thành phần được định nghĩa trong khai báo của một giao diện luôn được tích hợp trong phần hiển thị công khai của các lớp.
Giao diện được sử dụng khi hai lớp giống nhau có phương thức trùng tên, nhưng các chức năng khác nhau. Các giao diện có thể xuất hiện tương tự như các lớp, nhưng các chức năng được định nghĩa trong một giao diện được thực hiện trong một lớp để mở rộng phạm vi của lớp đó. Các giao diện cùng với tính năng kế thừa cung cấp cơ sở cho tính đa hình. Điều này là do một phương thức được định nghĩa trong một giao diện có thể hoạt động khác nhau trong các lớp khác nhau.
Sau đây là định dạng chung để tạo giao diện:
INTERFACE <intf_name>.
DATA.....
CLASS-DATA.....
METHODS.....
CLASS-METHODS.....
ENDINTERFACE.
Trong cú pháp này, <intf_name> đại diện cho tên của một giao diện. Các câu lệnh DATA và CLASSDATA có thể được sử dụng để xác định các thuộc tính thể hiện và tĩnh của giao diện tương ứng. Các câu lệnh METHODS và CLASS-METHODS có thể được sử dụng để định nghĩa các phương thức instance và static của giao diện tương ứng. Vì định nghĩa của giao diện không bao gồm lớp thực thi, nên không cần thiết phải thêm mệnh đề DEFINITION trong khai báo giao diện.
Note- Tất cả các phương thức của một giao diện là trừu tượng. Chúng được khai báo đầy đủ bao gồm giao diện tham số của chúng, nhưng không được triển khai trong giao diện. Tất cả các lớp muốn sử dụng một giao diện phải triển khai tất cả các phương thức của giao diện. Nếu không, lớp sẽ trở thành một lớp trừu tượng.
Chúng tôi sử dụng cú pháp sau trong phần triển khai của lớp:
INTERFACE <intf_name>.
Trong cú pháp này, <intf_name> đại diện cho tên của một giao diện. Lưu ý rằng cú pháp này phải được sử dụng trong phần công khai của lớp.
Cú pháp sau được sử dụng để triển khai các phương thức của một giao diện bên trong việc triển khai một lớp:
METHOD <intf_name~method_m>.
<statements>.
ENDMETHOD.
Trong cú pháp này, <intf_name ~ method_m> đại diện cho tên được khai báo đầy đủ của một phương thức của giao diện <intf_name>.
Thí dụ
Report ZINTERFACE1.
INTERFACE my_interface1.
Methods msg.
ENDINTERFACE.
CLASS num_counter Definition.
PUBLIC Section.
INTERFACES my_interface1.
Methods add_number.
PRIVATE Section.
Data num Type I.
ENDCLASS.
CLASS num_counter Implementation.
Method my_interface1~msg.
Write: / 'The number is', num.
EndMethod.
Method add_number.
ADD 7 TO num.
EndMethod.
ENDCLASS.
CLASS drive1 Definition.
PUBLIC Section.
INTERFACES my_interface1.
Methods speed1.
PRIVATE Section.
Data wheel1 Type I.
ENDCLASS.
CLASS drive1 Implementation.
Method my_interface1~msg.
Write: / 'Total number of wheels is', wheel1.
EndMethod.
Method speed1.
Add 4 To wheel1.
EndMethod.
ENDCLASS.
Start-Of-Selection.
Data object1 Type Ref To num_counter.
Create Object object1.
CALL Method object1→add_number.
CALL Method object1→my_interface1~msg.
Data object2 Type Ref To drive1.
Create Object object2.
CALL Method object2→speed1.
CALL Method object2→my_interface1~msg.
Đoạn mã trên tạo ra kết quả sau:
The number is 7
Total number of wheels is 4
Trong ví dụ trên, my_interface1 là tên của một giao diện có chứa phương thức 'msg'. Tiếp theo, hai lớp, num_counter và drive1 được định nghĩa và thực hiện. Cả hai lớp này đều triển khai phương thức 'msg' và các phương thức cụ thể xác định hành vi của các cá thể tương ứng của chúng, chẳng hạn như phương thức add_number và speed1.
Note - Phương thức add_number và speed1 dành riêng cho các lớp tương ứng.