SAP ABAP - Đa hình

Thuật ngữ đa hình có nghĩa đen là 'nhiều dạng'. Từ quan điểm hướng đối tượng, tính đa hình hoạt động cùng với tính kế thừa để làm cho nhiều kiểu khác nhau trong cây kế thừa có thể được sử dụng thay thế cho nhau. Đó là, tính đa hình xảy ra khi có một hệ thống phân cấp của các lớp và chúng có liên quan với nhau bằng cách kế thừa. Tính đa hình của ABAP có nghĩa là một lệnh gọi đến một phương thức sẽ khiến một phương thức khác được thực thi tùy thuộc vào loại đối tượng gọi phương thức.

Chương trình sau chứa một lớp trừu tượng 'class_prgm', 2 lớp con (class_procedural và class_OO) và một lớp trình điều khiển thử nghiệm 'class_type_approach'. Trong cách triển khai này, phương thức lớp 'start' cho phép chúng ta hiển thị kiểu lập trình và cách tiếp cận của nó. Nếu bạn nhìn kỹ vào chữ ký của phương thức 'start', bạn sẽ thấy rằng nó nhận được một tham số nhập kiểu class_prgm. Tuy nhiên, trong sự kiện Start-Of-Selection, phương thức này đã được gọi tại thời điểm chạy với các đối tượng kiểu class_procedural và class_OO.

Thí dụ

Report ZPolymorphism1. 
CLASS class_prgm Definition Abstract. 
PUBLIC Section. 
Methods: prgm_type Abstract, 
approach1 Abstract. 
ENDCLASS. 

CLASS class_procedural Definition 
Inheriting From class_prgm. 
PUBLIC Section. 
Methods: prgm_type Redefinition, 
approach1 Redefinition. 
ENDCLASS. 

CLASS class_procedural Implementation. 
Method prgm_type. 
Write: 'Procedural programming'. 

EndMethod. Method approach1. 
Write: 'top-down approach'. 

EndMethod. ENDCLASS. 
CLASS class_OO Definition 
Inheriting From class_prgm. 
PUBLIC Section. 
Methods: prgm_type Redefinition, 
approach1 Redefinition. 
ENDCLASS. 

CLASS class_OO Implementation. 
Method prgm_type. 
Write: 'Object oriented programming'. 
EndMethod. 

Method approach1. 
Write: 'bottom-up approach'.
EndMethod. 
ENDCLASS. 

CLASS class_type_approach Definition. 
PUBLIC Section. 
CLASS-METHODS: 
start Importing class1_prgm 
Type Ref To class_prgm. 
ENDCLASS. 

CLASS class_type_approach IMPLEMENTATION. 
Method start. 
CALL Method class1_prgm→prgm_type. 
Write: 'follows'. 

CALL Method class1_prgm→approach1. 
EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
Data: class_1 Type Ref To class_procedural, 
class_2 Type Ref To class_OO. 

Create Object class_1. 
Create Object class_2. 
CALL Method class_type_approach⇒start 
Exporting 

class1_prgm = class_1. 
New-Line. 
CALL Method class_type_approach⇒start 
Exporting 
class1_prgm = class_2.

Đoạn mã trên tạo ra kết quả sau:

Procedural programming follows top-down approach  
Object oriented programming follows bottom-up approach

Môi trường thời gian chạy ABAP thực hiện ép kiểu thu hẹp ngầm trong quá trình gán tham số nhập class1_prgm. Tính năng này giúp phương pháp 'bắt đầu' được triển khai chung. Thông tin kiểu động được liên kết với một biến tham chiếu đối tượng cho phép môi trường thời gian chạy ABAP liên kết động một lệnh gọi phương thức với việc triển khai được xác định trong đối tượng được trỏ tới bởi biến tham chiếu đối tượng. Ví dụ: tham số nhập 'class1_prgm' cho phương thức 'start' trong lớp 'class_type_approach' đề cập đến một kiểu trừu tượng không bao giờ có thể tự khởi tạo được.

Bất cứ khi nào phương thức được gọi với một triển khai lớp con cụ thể chẳng hạn như class_procedural hoặc class_OO, thì kiểu động của tham số tham chiếu class1_prgm được liên kết với một trong những kiểu cụ thể này. Do đó, các lệnh gọi đến phương thức 'prgm_type' và 'method1' đề cập đến các triển khai được cung cấp trong các lớp con class_procedural hoặc class_OO thay vì các triển khai trừu tượng không xác định được cung cấp trong lớp 'class_prgm'.