SAP ABAP - Polimorfisme

Istilah polimorfisme secara harfiah berarti 'banyak bentuk'. Dari perspektif berorientasi objek, polimorfisme bekerja bersama dengan pewarisan untuk memungkinkan berbagai jenis dalam pohon pewarisan digunakan secara bergantian. Artinya, polimorfisme terjadi ketika ada hierarki kelas dan mereka terkait dengan pewarisan. Polimorfisme ABAP berarti bahwa panggilan ke suatu metode akan menyebabkan metode yang berbeda dijalankan bergantung pada jenis objek yang memanggil metode tersebut.

Program berikut berisi kelas abstrak 'class_prgm', 2 sub kelas (class_procedural dan class_OO), dan kelas driver uji 'class_type_approach'. Dalam implementasi ini, metode kelas 'start' memungkinkan kita untuk menampilkan jenis pemrograman dan pendekatannya. Jika Anda mencermati tanda tangan metode 'start', Anda akan mengamati bahwa metode ini menerima parameter pengimporan jenis class_prgm. Namun, dalam acara Start-Of-Selection, metode ini telah dipanggil saat run-time dengan objek berjenis class_procedural dan class_OO.

Contoh

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.

Kode di atas menghasilkan keluaran sebagai berikut -

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

Lingkungan waktu proses ABAP melakukan cast penyempitan implisit selama penetapan parameter pengimporan class1_prgm. Fitur ini membantu metode 'mulai' diimplementasikan secara umum. Informasi jenis dinamis yang terkait dengan variabel referensi objek memungkinkan lingkungan waktu proses ABAP untuk secara dinamis mengikat panggilan metode dengan implementasi yang ditentukan dalam objek yang ditunjukkan oleh variabel referensi objek. Misalnya, parameter pengimporan 'class1_prgm' untuk metode 'mulai' dalam kelas 'class_type_approach' mengacu pada tipe abstrak yang tidak pernah bisa dibuat instance-nya sendiri.

Setiap kali metode dipanggil dengan implementasi sub kelas yang konkret seperti class_procedural atau class_OO, jenis dinamis dari parameter referensi class1_prgm terikat ke salah satu jenis konkret ini. Oleh karena itu, panggilan ke metode 'prgm_type' dan 'approach1' merujuk pada implementasi yang disediakan di sub kelas class_procedural atau class_OO daripada implementasi abstrak yang tidak ditentukan yang disediakan di kelas 'class_prgm'.