SAP ABAP - Warisan

Salah satu konsep terpenting dalam pemrograman berorientasi objek adalah konsep inheritance. Inheritance memungkinkan kita untuk mendefinisikan kelas dalam istilah kelas lain, yang membuatnya lebih mudah untuk membuat dan memelihara aplikasi. Ini juga memberikan kesempatan untuk menggunakan kembali fungsionalitas kode dan waktu implementasi yang cepat.

Saat membuat kelas, alih-alih menulis anggota data dan metode yang benar-benar baru, pemrogram dapat menetapkan bahwa kelas baru harus mewarisi anggota kelas yang sudah ada. Kelas yang ada ini disebutbase class atau super class, dan kelas baru disebut sebagai derived class atau sub class.

  • Objek dari satu kelas dapat memperoleh properti kelas lain.

  • Kelas turunan mewarisi data dan metode kelas super. Namun, mereka dapat menimpa metode dan juga menambahkan metode baru.

  • Keuntungan utama dari warisan adalah dapat digunakan kembali.

Hubungan pewarisan ditentukan menggunakan tambahan 'INHERITING FROM' ke pernyataan definisi kelas.

Berikut ini adalah sintaksnya -

CLASS <subclass> DEFINITION INHERITING FROM <superclass>.

Contoh

Report ZINHERITAN_1. 
CLASS Parent Definition. 
PUBLIC Section. 
Data: w_public(25) Value 'This is public data'. 
Methods: ParentM. 
ENDCLASS. 

CLASS Child Definition Inheriting From Parent. 
PUBLIC Section. 
Methods: ChildM. 
ENDCLASS. 

CLASS Parent Implementation. 
Method ParentM. 
Write /: w_public. 
EndMethod. ENDCLASS. 

CLASS Child Implementation. 
Method ChildM. 
Skip. 
Write /: 'Method in child class', w_public.
EndMethod. 
ENDCLASS. 

Start-of-selection. 
Data: Parent Type Ref To Parent, 
Child Type Ref To Child. 
Create Object: Parent, Child. 
Call Method: Parent→ParentM, 
child→ChildM.

Kode di atas menghasilkan keluaran sebagai berikut -

This is public data 
Method in child class 
This is public data

Kontrol Akses dan Warisan

Kelas turunan dapat mengakses semua anggota non-privat dari kelas dasarnya. Jadi anggota kelas super yang seharusnya tidak dapat diakses oleh fungsi anggota sub kelas harus dideklarasikan sebagai pribadi di kelas super. Kami dapat meringkas jenis akses yang berbeda menurut siapa yang dapat mengaksesnya dengan cara berikut -

Mengakses Publik Terlindung Pribadi
Teman yang sama Iya Iya Iya
Kelas turunan Iya Iya Tidak
Di luar kelas Iya Tidak Tidak

Saat mendapatkan kelas dari kelas super, itu dapat diwariskan melalui warisan publik, dilindungi atau pribadi. Jenis warisan ditentukan oleh penentu akses seperti yang dijelaskan di atas. Kami hampir tidak menggunakan warisan yang dilindungi atau pribadi, tetapi warisan publik biasanya digunakan. Aturan berikut diterapkan saat menggunakan berbagai jenis warisan.

  • Public Inheritance- Saat memperoleh kelas dari kelas super publik, anggota publik kelas super menjadi anggota publik dari sub kelas dan anggota kelas super yang dilindungi menjadi anggota sub kelas yang dilindungi. Anggota privat kelas super tidak pernah dapat diakses langsung dari sub kelas, tetapi dapat diakses melalui panggilan ke publik dan anggota kelas super yang dilindungi.

  • Protected Inheritance - Saat berasal dari kelas super yang dilindungi, publik dan anggota kelas super yang dilindungi menjadi anggota subkelas yang dilindungi.

  • Private Inheritance - Saat berasal dari kelas super privat, publik dan anggota kelas super yang dilindungi menjadi anggota pribadi dari sub kelas.

Mendefinisikan Ulang Metode di Sub Kelas

Metode kelas super dapat diimplementasikan kembali di sub kelas. Beberapa aturan mendefinisikan ulang metode -

  • Pernyataan redefinisi untuk metode yang diwariskan harus berada di bagian yang sama dengan definisi metode asli.

  • Jika Anda mendefinisikan kembali suatu metode, Anda tidak perlu memasukkan antarmukanya lagi di subkelas, tetapi hanya nama metode tersebut.

  • Dalam metode yang didefinisikan ulang, Anda dapat mengakses komponen kelas super langsung menggunakan referensi super.

  • Referensi super pseudo hanya dapat digunakan dalam metode yang didefinisikan ulang.

Contoh

Report Zinheri_Redefine. 
CLASS super_class Definition. 
Public Section. 
Methods: Addition1 importing g_a TYPE I
                             g_b TYPE I
		   exporting g_c TYPE I.
ENDCLASS. 

CLASS super_class Implementation. 
Method Addition1. 
g_c = g_a + g_b. 
EndMethod. 
ENDCLASS. 

CLASS sub_class Definition Inheriting From super_class. 
Public Section. 
METHODS: Addition1 Redefinition. 
ENDCLASS. 

CLASS sub_class Implementation. 
Method Addition1. 
g_c = g_a + g_b + 10. 
EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
Parameters: P_a Type I, P_b TYPE I. 
Data: H_Addition1 TYPE I. 
Data: H_Sub TYPE I. 
Data: Ref1 TYPE Ref TO sub_class. 
Create Object Ref1. 
Call Method Ref1→Addition1 exporting g_a = P_a 
                                     g_b = P_b
		           Importing g_c = H_Addition1. 
Write:/ H_Addition1.

Setelah menjalankan F8, jika kita memasukkan nilai 9 dan 10, kode di atas menghasilkan keluaran sebagai berikut -

Redefinition Demo 
29