SAP ABAP - Incapsulamento
L'incapsulamento è un concetto di programmazione orientata agli oggetti (OOP) che unisce dati e funzioni che manipolano i dati e li protegge da interferenze esterne e usi impropri. L'incapsulamento dei dati ha portato all'importante concetto OOP di nascondere i dati. L'incapsulamento è un meccanismo di raggruppamento dei dati e delle funzioni che li utilizzano e l'astrazione dei dati è un meccanismo per esporre solo le interfacce e nascondere i dettagli di implementazione all'utente.
ABAP supporta le proprietà di incapsulamento e occultamento dei dati tramite la creazione di tipi definiti dall'utente chiamati classi. Come discusso in precedenza, una classe può contenere membri privati, protetti e pubblici. Per impostazione predefinita, tutti gli elementi definiti in una classe sono privati.
Incapsulamento tramite interfaccia
Incapsulamento significa in realtà che un attributo e un metodo possono essere modificati in classi diverse. Quindi i dati e il metodo possono avere forma e logica diverse che possono essere nascoste in classi separate.
Consideriamo l'incapsulamento per interfaccia. L'interfaccia viene utilizzata quando è necessario creare un metodo con funzionalità diverse in classi diverse. Qui non è necessario modificare il nome del metodo. Lo stesso metodo dovrà essere implementato in diverse implementazioni di classi.
Esempio
Il seguente programma contiene un'interfaccia inter_1. Abbiamo dichiarato un attributo e un metodo method1. Abbiamo anche definito due classi come Class1 e Class2. Quindi dobbiamo implementare il metodo 'method1' in entrambe le implementazioni della classe. Abbiamo implementato il metodo "metodo1" in modo diverso nelle diverse classi. All'inizio della selezione, creiamo due oggetti Object1 e Object2 per due classi. Quindi, chiamiamo il metodo con oggetti diversi per ottenere la funzione dichiarata in classi separate.
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.
Il codice precedente produce il seguente output:
Class 1 Interface method
Class 2 Interface method
Le classi incapsulate non hanno molte dipendenze dal mondo esterno. Inoltre, le interazioni che hanno con i client esterni sono controllate tramite un'interfaccia pubblica stabilizzata. Cioè, una classe incapsulata ei suoi client sono accoppiati in modo lasco. Per la maggior parte, le classi con interfacce ben definite possono essere inserite in un altro contesto. Se progettate correttamente, le classi incapsulate diventano risorse software riutilizzabili.
Strategia di progettazione
La maggior parte di noi ha imparato attraverso l'amara esperienza a rendere privati i membri della classe per impostazione predefinita, a meno che non sia davvero necessario esporli. Questo è solo un buon incapsulamento. Questa saggezza viene applicata più frequentemente ai membri dei dati e si applica anche a tutti i membri.