Corso ABAP OO 02

39
ABAP OBJECTS Seconda parte

description

Seconda parte di un corso sulla programmazione ABAP ad Oggetti tenuto da me

Transcript of Corso ABAP OO 02

Page 1: Corso ABAP OO   02

ABAP OBJECTSSeconda parte

Page 2: Corso ABAP OO   02

2

Agenda del corso

• Dai function module agli oggett i• Definizione di una classe• Oggett i e metodi• Incapsulamento, ereditarietà, polimorf ismo• Interfacce• Eventi

Page 3: Corso ABAP OO   02

3

Agenda del corso

• Dai function module agli oggett i• Definizione di una classe• Oggett i e metodi• Incapsulamento, ereditarietà, polimorf ismo• Interfacce• Eventi

Page 4: Corso ABAP OO   02

Definizione di una Classe

• Oggetti e Classi sono le basi della programmazione ad oggetti

• Una Classe rappresenta l’astrazione di un Oggetto

4

Page 5: Corso ABAP OO   02

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

Page 6: Corso ABAP OO   02

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

Page 7: Corso ABAP OO   02

Definizione di una Classe

• In SAP è possibile distinguere due diversi tipi di classi:

• Classi Globali

• Classi Locali

7

Page 8: Corso ABAP OO   02

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

Page 9: Corso ABAP OO   02

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

Page 10: Corso ABAP OO   02

Definizione di una Classe

Dichiarazione di una Classe Locale

• La dichiarazione di una classe si compone di due parti:

• Definizione

• Implementazione

10

Page 11: Corso ABAP OO   02

Definizione di una Classe

• DefinizioneCLASS <nomeclasse> DEFINITION.

……. ENDCLASS.

• ImplementazioneCLASS <nomeclasse> IMPLEMENTATION.

……. ENDCLASS.

11

Page 12: Corso ABAP OO   02

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

Page 13: Corso ABAP OO   02

Definizione di una Classe

• Nella definizione di una classe devono essere dichiarati i componenti della classe stessa

• Attributi

• Metodi

• Eventi

13

Page 14: Corso ABAP OO   02

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

Page 15: Corso ABAP OO   02

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

Page 16: Corso ABAP OO   02

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

Page 17: Corso ABAP OO   02

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

Page 18: Corso ABAP OO   02

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

Page 19: Corso ABAP OO   02

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

Page 20: Corso ABAP OO   02

Definizione di una Classe

Esercitazione:

• Proviamo ora a definire una Classe in un programma ABAP

20

Page 21: Corso ABAP OO   02

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

Page 22: Corso ABAP OO   02

22

Agenda del corso

• Dai function module agli oggett i• Definizione di una classe• Oggett i e metodi• Incapsulamento, ereditarietà, polimorf ismo• Interfacce• Eventi

Page 23: Corso ABAP OO   02

Oggetti e Metodi

• I metodi possono essere di due tipi:

• Standard:METHODS: nome_metodo

• Evento:METHODS: nome_metodo FOR EVENT evento OF classe

23

Page 24: Corso ABAP OO   02

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

Page 25: Corso ABAP OO   02

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

Page 26: Corso ABAP OO   02

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

Page 27: Corso ABAP OO   02

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

Page 28: Corso ABAP OO   02

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

Page 29: Corso ABAP OO   02

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

Page 30: Corso ABAP OO   02

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

Page 31: Corso ABAP OO   02

Oggetti e Metodi

Auto Referenziazione di un oggetto

• Esempio:DATA: oggetto TYPE REF TO classe.

CREATE OBJECT oggetto.

CALL METHOD me->metodo.

31

Page 32: Corso ABAP OO   02

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

Page 33: Corso ABAP OO   02

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

Page 34: Corso ABAP OO   02

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

Page 35: Corso ABAP OO   02

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

Page 36: Corso ABAP OO   02

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

Page 37: Corso ABAP OO   02

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

Page 38: Corso ABAP OO   02

Oggetti e Metodi

Chiamate dinamiche a oggetti e metodi

• Anche i parametri di un metodo possono essere passati in modo dinamico:

CALL METHOD oggetto->metodoPARAMETER-TABLE tabella_parametriEXCEPTION-TABLE tabella_eccezioni

• La tabella_parametri e quella _eccezioni devono essere dichiarate come:

TYPE TABLE OF ABAP_PARMBIND_TAB

38

Page 39: Corso ABAP OO   02

ESSENTIA.COM srl

Via Druento, 290 - 10078 Venaria Reale (TO)Tel.: 011 – 4560.511 fax: 011 – 4560.577

Via Nizza, 56 – 00198 RomaTel.: 06 – 85305570 fax: 06 – 85800504

Mail: [email protected]: www.e-ssentia.com

Powerd by Bossù Piergiorgio