2. Agenda del corso
• Dai function module agli oggetti
• Definizione di una classe
• Oggetti e metodi
• Incapsulamento, ereditarietà, polimorfismo
• Interfacce
• Eventi
2
3. Agenda del corso
• Dai function module agli oggetti
• Definizione di una classe
• Oggetti e metodi
• Incapsulamento, ereditarietà, polimorfismo
• Interfacce
• Eventi
3
4. Definizione di una Classe
• Oggetti e Classi sono le basi della programmazione
ad oggetti
• Una Classe rappresenta l’astrazione di un Oggetto
4
5. Definizione di una Classe
• Una classe specifica gli attributi, senza indicarne il
valore, e i metodi che devono avere gli oggetti che
appartengono alla classe
• Gli oggetti creati a partire da una classe vengono
chiamati istanze della classe
5
6. Definizione di una Classe
• Partendo da una classe quindi si possono creare
più oggetti tutti con gli stessi attributi, anche se con
valori diversi, e con gli stessi metodi
• Due istanze della stessa classe sono distinguibili
solo per il valore dei loro attributi, mentre il loro
comportamento (metodo) è lo stesso
6
7. Definizione di una Classe
• In SAP è possibile distinguere due diversi tipi di
classi:
• Classi Globali
• Classi Locali
7
8. Definizione di una Classe
Classi Globali
• Sono oggetti storicizzati nel repository SAP
• Sono accessibili da qualsiasi programma
• Devono avere un nome che inizia per Z o Y
8
9. Definizione di una Classe
Classi Locali
• Sono definite all’interno di un report ABAP
• Sono accessibili solo dal programma in cui sono
definite
• Non hanno regole fisse di nomenclatura
9
10. Definizione di una Classe
Dichiarazione di una Classe Locale
• La dichiarazione di una classe si compone di due
parti:
• Definizione
• Implementazione
10
11. Definizione di una Classe
• Definizione
CLASS <nomeclasse> DEFINITION.
…….
ENDCLASS.
• Implementazione
CLASS <nomeclasse> IMPLEMENTATION.
…….
ENDCLASS.
11
12. Definizione di una Classe
• La definizione di una classe non può essere
nidificata
• Una classe non può essere definita all’interno di
subroutine o di function module
• La definizione di una classe deve essere fatta nei
dati globali all’inizio del programma
12
13. Definizione di una Classe
• Nella definizione di una classe devono essere
dichiarati i componenti della classe stessa
• Attributi
• Metodi
• Eventi
13
14. Definizione di una Classe
• Ogni componente può essere definito come:
• Instance – ne esistono n copie una per ogni
istanza della classe
• Static – ne esiste solo uno per classe ed è valido
per tutte la istanze della classe
14
15. Definizione di una Classe
• I componenti dichiarati STATIC devono essere
dichiarati come CLASS-keyword
• I componenti dichiarati STATIC possono essere
usati anche se la classe non è stata istanziata
• I metodi dichiarati INSTANCE possono accedere
sia ad attributi INSTANCE che STATIC; mentre
quelli dichiarati STATIC possono accedere solo ad
attributi STATIC
15
16. Definizione di una Classe
• Per accedere ad un componente dichiarato
INSTANCE si usa il selettore ->
• Per accedere ad un componente dichiarato
STATIC si usa il selettore =>
16
17. Definizione di una Classe
• I componenti di una classe inoltre devono avere
attribuito un livello di accessibilità
• Public – sono visibili a tutti
• Protected – sono visibili solo dalla classe e dalle
sue sottoclassi
• Private – sono visibili solo all’interno della loro
classe
17
18. Definizione di una Classe
Definizione di una classe.
CLASS <nomeclasse> DEFINITION.
PUBLIC SECTION.
[Attributi; Metodi; Eventi]
PROTECTED SECTION.
[Attributi; Metodi; Eventi]
PRIVATE SECTION.
[Attributi; Metodi; Eventi]
ENDCLASS.
18
19. Definizione di una Classe
Implementazione di una classe.
• Nell’implementazione della classe devono
essere descritti i comportamenti e le azioni di
tutti i metodi della classe.
• In altre parole la parte di implementazione
conterrà il codice ABAP per il funzionamento dei
metodi
19
20. Definizione di una Classe
Esercitazione:
• Proviamo ora a definire una Classe in un
programma ABAP
20
21. Definizione di una Classe
Esercitazione:
CLASS lcl_clienti DEFINITION.
PUBLIC SECTION.
TYPES: BEGIN OF ty_clienti,
kunnr TYPE i,
name TYPE string,
END OF ty_clienti.
METHODS: constructor IMPORTING p_kunnr TYPE I
p_name TYPE string,
display_clienti.
CLASS-METHODS: display_num_clienti.
PROTECTED SECTION.
CLASS-DATA: num_clienti TYPE i.
PRIVATE SECTION.
DATA: s_clienti TYPE ty_clienti.
ENDCLASS.
21
22. Agenda del corso
• Dai function module agli oggetti
• Definizione di una classe
• Oggetti e metodi
• Incapsulamento, ereditarietà, polimorfismo
• Interfacce
• Eventi
22
23. Oggetti e Metodi
• I metodi possono essere di due tipi:
• Standard:
METHODS: nome_metodo
• Evento:
METHODS: nome_metodo FOR EVENT evento OF classe
23
24. Oggetti e Metodi
• Un metodo può avere varie estensioni
• IMPORTING - parametri di input
• EXPORTING - parametri di output
• RETURNING VALUE(P) - indica un valore di ritorno
• CHANGING - parametri che modificano il loro valore
• EXCEPTIONS - ritorna il valore di un’eccezione
• ABSTRACT - indica un metodo astratto
• FINAL - indica che non può essere esteso
• REDEFINITION - indica un metodo che è stato ridefinito
24
25. Oggetti e Metodi
Metodo Constructor
• Ogni classe ha un metodo costruttore predefinito
che è public ed instance
• I costruttori sono metodi speciali che definiscono lo
stato iniziale di un oggetto
• Il metodo costruttore viene eseguito in automatico
ogni volta che una classe viene istanziata
25
26. Oggetti e Metodi
Metodo Constructor
• E’ possibile ridefinire un metodo costruttore
all’interno di una propria classe
• Se si vuole definire un metodo instance questo
dovrà chiamarsi: CONSTRUCTOR
• Se si vuole definire un metodo static questo dovrà
chiamarsi: CLASS_CONSTRUCTOR
26
27. Oggetti e Metodi
Metodo Constructor
• Il metodo costruttore viene richiamato in
automatico dall’istruzione: CREATE OBJECT
e non può essere richiamato con l’istruzione CALL
METHOD
• Ridefinire il metodo costruttore è necessario
quando si deve inizializzare un oggetto con valori
dinamici
• Un metodo costruttore non ha parametri di
EXPORTING
27
28. Oggetti e Metodi
Referenziare un oggetto
• Un oggetto per poter essere creato deve essere
referenziato ad una classe
• Un oggetto si referenzia per mezzo dell’istruzione:
DATA: oggetto TYPE REF TO classe.
28
29. Oggetti e Metodi
Usare un oggetto
• Dichiarare una variabile di referenziazione:
DATA: oggetto TYPE REF TO classe.
• Creare un oggetto:
CREATE OBJECT oggetto.
• Usare i componenti dell’oggetto:
CALL METHOD oggetto->metodo.
29
30. Oggetti e Metodi
Auto Referenziazione di un oggetto
• Se un oggetto ha bisogno di fare riferimento a se
stesso si usa l’auto referenziazione
• Per fare riferimento all’oggetto attualmente
istanziato ed attivo si usa la variabile di
referenziazione ME
• ME è l’equivalente di THIS utilizzato nel C++ ed in
Java
30
31. Oggetti e Metodi
Auto Referenziazione di un oggetto
• Esempio:
DATA: oggetto TYPE REF TO classe.
CREATE OBJECT oggetto.
CALL METHOD me->metodo.
31
32. Oggetti e Metodi
Istanze multiple di un oggetto
• Un oggetto è un istanza di una classe
• Se si vogliono creare più istanze/oggetti di una
classe si devono referenziare n variabili oggetto di
quella classe
DATA: oggetto1 TYPE REF TO classe.
DATA: oggetto2 TYPE REF TO classe.
32
33. Oggetti e Metodi
Istanze multiple di un oggetto
• Le tabelle di puntamento possono essere usate per
storicizzare istanze/oggetti multiple di una classe
• Anziché definire ogni oggetto singolarmente
avremo:
DATA: oggetto TYPE REF TO classe.
DATA: tab_oggetto TYPE TABLE OF REF TO classe.
33
34. Oggetti e Metodi
Cancellare un oggetto
• Per cancellare un oggetto istanziato si usa
l’istruzione:
CLEAR oggetto.
• L’istruzione CLEAR inizializza il contenuto di
oggetto con l’effetto di cancellare l’oggetto
34
35. Oggetti e Metodi
Utilizzo dei metodi come funzioni
• Oltre che con l’istruzione CALL METHOD un
metodo può essere richiamato all’interno di una
funzione
• Possono essere utilizzati come funzioni sia metodi
static
risultato = classe=>metodo(parametri)
• che instance
risultato = oggetto->metodo(parametri)
35
36. Oggetti e Metodi
Utilizzo dei metodi come funzioni
• Un metodo può essere utilizzato come funzione nei
seguenti casi:
• Come sorgente dati in un istruzione MOVE
• Come operatore all’interno di espressioni logiche
• Come operatore in istruzioni CASE … WHEN
• Come operatore in condizioni WHERE di un LOOP
36
37. Oggetti e Metodi
Chiamate dinamiche a oggetti e metodi
• Oggetti e metodi possono essere richiamati
dinamicamente:
oggetto->(metodo)
me->(metodo)
classe=>(metodo)
(classe)=>metodo
(classe)=>(metodo)
37
38. Oggetti e Metodi
Chiamate dinamiche a oggetti e metodi
• Anche i parametri di un metodo possono essere
passati in modo dinamico:
CALL METHOD oggetto->metodo
PARAMETER-TABLE tabella_parametri
EXCEPTION-TABLE tabella_eccezioni
• La tabella_parametri e quella _eccezioni devono
essere dichiarate come:
TYPE TABLE OF ABAP_PARMBIND_TAB
38