SAP ABAP - Classi
Una classe viene utilizzata per specificare la forma di un oggetto e combina la rappresentazione dei dati e i metodi per manipolare tali dati in un unico pacchetto pulito. Vengono chiamati i dati e le funzioni all'interno di una classemembers of the class.
Definizione e implementazione della classe
Quando si definisce una classe, si definisce un progetto per un tipo di dati. Questo in realtà non definisce alcun dato, ma definisce cosa significa il nome della classe, in cosa consisterà un oggetto della classe e quali operazioni possono essere eseguite su tale oggetto. Cioè, definisce le caratteristiche astratte di un oggetto, come attributi, campi e proprietà.
La seguente sintassi mostra come definire una classe:
CLASS <class_name> DEFINITION.
..........
..........
ENDCLASS.
Una definizione di classe inizia con la parola chiave CLASS seguita dal nome della classe, DEFINITION e dal corpo della classe. La definizione di una classe può contenere vari componenti della classe come attributi, metodi ed eventi. Quando dichiariamo un metodo nella dichiarazione della classe, l'implementazione del metodo deve essere inclusa nell'implementazione della classe. La sintassi seguente mostra come implementare una classe:
CLASS <class_name> IMPLEMENTATION.
...........
..........
ENDCLASS.
Note- L'implementazione di una classe contiene l'implementazione di tutti i suoi metodi. Negli oggetti ABAP, la struttura di una classe contiene componenti come attributi, metodi, eventi, tipi e costanti.
Attributi
Gli attributi sono campi di dati di una classe che può avere qualsiasi tipo di dati come C, I, F e N. Sono dichiarati nella dichiarazione della classe. Questi attributi possono essere suddivisi in 2 categorie: istanza e attributi statici. Uninstance attributedefinisce lo stato specifico dell'istanza di un oggetto. Gli stati sono diversi per oggetti diversi. Un attributo di istanza viene dichiarato utilizzando l'istruzione DATA.
Static attributesdefinire uno stato comune di una classe condiviso da tutte le istanze della classe. Cioè, se modifichi un attributo statico in un oggetto di una classe, la modifica è visibile anche a tutti gli altri oggetti della classe. Un attributo statico viene dichiarato utilizzando l'istruzione CLASS-DATA.
Metodi
Un metodo è una funzione o una procedura che rappresenta il comportamento di un oggetto nella classe. I metodi della classe possono accedere a qualsiasi attributo della classe. La definizione di un metodo può anche contenere parametri, in modo da poter fornire i valori a questi parametri quando vengono chiamati i metodi. La definizione di un metodo è dichiarata nella dichiarazione di classe e implementata nella parte di implementazione di una classe. Le istruzioni METHOD e ENDMETHOD vengono utilizzate per definire la parte di implementazione di un metodo. La seguente sintassi mostra come implementare un metodo:
METHOD <m_name>.
..........
..........
ENDMETHOD.
In questa sintassi, <m_name> rappresenta il nome di un metodo. Note - È possibile chiamare un metodo utilizzando l'istruzione CALL METHOD.
Accesso ad attributi e metodi
I componenti di classe possono essere definiti in sezioni di visibilità pubblica, privata o protetta che controllano il modo in cui è possibile accedere a questi componenti. La sezione di visibilità privata viene utilizzata per negare l'accesso ai componenti dall'esterno della classe. È possibile accedere a tali componenti solo dall'interno della classe come un metodo.
È possibile accedere ai componenti definiti nella sezione visibilità pubblica da qualsiasi contesto. Per impostazione predefinita, tutti i membri di una classe sarebbero privati. In pratica, definiamo i dati nella sezione privata e i relativi metodi nella sezione pubblica in modo che possano essere chiamati dall'esterno della classe come mostrato nel programma seguente.
È possibile accedere agli attributi e ai metodi dichiarati nella sezione Pubblica di una classe da quella classe e da qualsiasi altra classe, sottoclasse del programma.
Quando gli attributi e i metodi sono dichiarati nella sezione Protetto di una classe, è possibile accedervi solo da quella classe e sottoclassi (classi derivate).
Quando gli attributi ei metodi vengono dichiarati nella sezione Private di una classe, è possibile accedervi solo da quella classe e non da qualsiasi altra classe.
Esempio
Report ZAccess1.
CLASS class1 Definition.
PUBLIC Section.
Data: text1 Type char25 Value 'Public Data'.
Methods meth1.
PROTECTED Section.
Data: text2 Type char25 Value 'Protected Data'.
PRIVATE Section.
Data: text3 Type char25 Value 'Private Data'.
ENDCLASS.
CLASS class1 Implementation.
Method meth1.
Write: / 'Public Method:',
/ text1,
/ text2,
/ text3.
Skip.
EndMethod.
ENDCLASS.
Start-Of-Selection.
Data: Objectx Type Ref To class1.
Create Object: Objectx.
CALL Method: Objectx→meth1.
Write: / Objectx→text1.
Il codice precedente produce il seguente output:
Public Method:
Public Data
Protected Data
Private Data
Public Data
Attributi statici
Un attributo Static viene dichiarato con l'istruzione CLASS-DATA. Tutti gli oggetti o le istanze possono utilizzare l'attributo statico della classe. Gli attributi statici sono accessibili direttamente con l'aiuto del nome della classe come class_name⇒name_1 = 'Some Text'.
Esempio
Di seguito è riportato un programma in cui vogliamo stampare un testo con numero di riga da 4 a 8 volte. Definiamo una classe class1 e nella sezione pubblica dichiariamo CLASS-DATA (attributo statico) e un metodo. Dopo aver implementato la classe e il metodo, accediamo direttamente all'attributo statico nell'evento Start-Of-Selection. Quindi creiamo semplicemente l'istanza della classe e chiamiamo il metodo.
Report ZStatic1.
CLASS class1 Definition.
PUBLIC Section.
CLASS-DATA: name1 Type char45,
data1 Type I.
Methods: meth1.
ENDCLASS.
CLASS class1 Implementation.
Method meth1.
Do 4 Times.
data1 = 1 + data1.
Write: / data1, name1.
EndDo.
Skip.
EndMethod.
ENDCLASS.
Start-Of-Selection.
class1⇒name1 = 'ABAP Object Oriented Programming'.
class1⇒data1 = 0.
Data: Object1 Type Ref To class1,
Object2 Type Ref To class1.
Create Object: Object1, Object2.
CALL Method: Object1→meth1,
Object2→meth1.
Il codice precedente produce il seguente output:
Costruttori
I costruttori sono metodi speciali che vengono chiamati automaticamente, durante la creazione di un oggetto o durante l'accesso ai componenti di una classe. Il costruttore viene attivato ogni volta che viene creato un oggetto, ma è necessario chiamare un metodo per attivare il metodo generale. Nell'esempio seguente, abbiamo dichiarato due metodi pubblici metodo1 e costruttore. Entrambi questi metodi hanno operazioni diverse. Durante la creazione di un oggetto della classe, il metodo del costruttore ne avvia l'operazione.
Esempio
Report ZConstructor1.
CLASS class1 Definition.
PUBLIC Section.
Methods: method1, constructor.
ENDCLASS.
CLASS class1 Implementation.
Method method1.
Write: / 'This is Method1'.
EndMethod.
Method constructor.
Write: / 'Constructor Triggered'.
EndMethod.
ENDCLASS.
Start-Of-Selection.
Data Object1 Type Ref To class1.
Create Object Object1.
Il codice precedente produce il seguente output:
Constructor Triggered
Operatore ME nei metodi
Quando dichiari una variabile di qualsiasi tipo nella sezione pubblica di una classe, puoi usarla in qualsiasi altra implementazione. Una variabile può essere dichiarata con un valore iniziale nella sezione pubblica. Possiamo dichiarare nuovamente la variabile all'interno di un metodo con un valore diverso. Quando scriviamo la variabile all'interno del metodo, il sistema stamperà il valore modificato. Per riflettere il valore precedente della variabile, dobbiamo utilizzare l'operatore "ME".
In questo programma, abbiamo dichiarato una variabile pubblica text1 e avviato con un valore. Abbiamo dichiarato di nuovo la stessa variabile, ma istanziata con un valore diverso. All'interno del metodo, stiamo scrivendo quella variabile con l'operatore "ME" per ottenere il valore avviato in precedenza. Otteniamo il valore modificato dichiarandolo direttamente.
Esempio
Report ZMEOperator1.
CLASS class1 Definition.
PUBLIC Section.
Data text1 Type char25 Value 'This is CLASS Attribute'.
Methods method1.
ENDCLASS.
CLASS class1 Implementation.
Method method1.
Data text1 Type char25 Value 'This is METHOD Attribute'.
Write: / ME→text1,
/ text1.
ENDMethod.
ENDCLASS.
Start-Of-Selection.
Data objectx Type Ref To class1.
Create Object objectx.
CALL Method objectx→method1.
Il codice precedente produce il seguente output:
This is CLASS Attribute
This is METHOD Attribute