Corso ABAP OO 03

43
ABAP OBJECTS Terza parte

description

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

Transcript of Corso ABAP OO 03

Page 1: Corso ABAP OO  03

ABAP OBJECTSTerza parte

Page 2: Corso ABAP OO  03

2

Agenda del corso

• Dai function module agli oggetti• Definizione di una classe• Oggetti e metodi• Incapsulamento, ereditarietà,

polimorfismo• Interfacce• Eventi

Page 3: Corso ABAP OO  03

3

Agenda del corso

• Dai function module agli oggetti• Definizione di una classe• Oggetti e metodi• Incapsulamento, ereditarietà,

polimorfismo• Interfacce• Eventi

Page 4: Corso ABAP OO  03

Incapsulamento

• Con il termine incapsulamento si indica la proprietà degli oggetti di incorporare al loro interno sia gli attributi che i metodi, cioè le caratteristiche e i comportamenti dell’oggetto.

• Gli attributi e i metodi sono incapsulati nell’oggetto. In questo modo tutte le informazioni utili che riguardano un oggetto sono al suo interno.

4

Page 5: Corso ABAP OO  03

Incapsulamento

Semplificazione

• Un oggetto viene utilizzato attraverso i metodi che esso mette a disposizione

• Per ogni metodo vengono indicati anche il numero e il tipo dei parametri di input e di output

• In questo modo chi utilizza l’oggetto può sapere quali metodi possono essere invocati, quali sono i parametri da passare e che cosa ricaverà come valore di ritorno

5

Page 6: Corso ABAP OO  03

Incapsulamento

Sicurezza

• Per poter leggere o modificare il valore di un attributo, si dovrebbe utilizzare un metodo che esegue l’operazione richiesta

• Questo garantisce l’information hiding, ma comporta che per ogni attributo dell’oggetto siano definiti il metodo per leggere e il metodo per modificare il suo valore

6

Page 7: Corso ABAP OO  03

Incapsulamento

Sicurezza

• Nell’ABAP come in altri linguaggi è comunque possibile accedere e manipolare gli attributi in maniera diretta

• Questa modalità di accesso agli attributi viola la regola dell’information hiding, perché gli attributi non restano più nascosti all’interno dell’oggetto, ma offre la facilitazione di poter manipolare gli attributi senza usare i metodi

7

Page 8: Corso ABAP OO  03

Ereditarietà

• L’ereditarietà è una delle più importanti caratteristiche della programmazione ad oggetti

• Essa è lo strumento che permette di costruire nuove classi utilizzando quelle già sviluppate

8

Page 9: Corso ABAP OO  03

Ereditarietà

• Quando una classe viene creata attraverso il meccanismo di ereditarietà a partire da un’altra classe, essa riceve in eredità tutti gli attributi e i metodi della classe generatrice

• Questo incrementa notevolmente le possibilità di riutilizzo del codice

9

Page 10: Corso ABAP OO  03

Ereditarietà

• La classe che è stata derivata da un’altra usando l’ereditarietà prende il nome di sottoclasse. La classe generatrice di una sottoclasse si chiama superclasse

• Queste relazioni tra le classi individuano una gerarchia che nasce da un processo di specializzazione

10

Page 11: Corso ABAP OO  03

Ereditarietà

Mezzi di trasporto

Veicoli a motore Mezzi non a motore

Auto Moto Autobus Bicicletta Cavallo

11

• Le classi che si trovano in cima alla gerarchia sono le più generali e man mano che si scende si trovano classi più specializzate

Page 12: Corso ABAP OO  03

Ereditarietà

• Nell’ ABAP tutte le classi possono essere rappresentate in un albero di discendenza

• Il nodo più alto di questo albero è rappresentato dalla superclasse OBJECT

• Se per una classe non viene specificata nessuna ereditarietà allora questa erediterà in maniera implicita direttamente dalla superclasse OBJECT

12

Page 13: Corso ABAP OO  03

Ereditarietà

Esistono due tipi di ereditarietà

• Ereditarietà singola:una sottoclasse eredita da una sola superclasse

13

Page 14: Corso ABAP OO  03

Ereditarietà

• Ereditarietà multipla:una sottoclasse eredita da due o più superclassi

• L’ABAP Object (cosi come il Java) supporta solo l’ereditarietà singola

14

Page 15: Corso ABAP OO  03

Ereditarietà

• L’ereditarietà serve a definire nuove classi, derivate da altre, che ereditano gli attributi e i metodi, con la possibilità di ridefinirli o di aggiungerne di nuovi

• La sottoclasse eredita dalla sopraclasse tutti gli attributi e tutti i metodi con la possibilità di inserire le differenze

15

Page 16: Corso ABAP OO  03

Ereditarietà

• In ABAP per definire una sottoclasse che eredita da una superclasse scriveremo

• CLASS <sottoclasse> DEFINITION INHERITING FROM <superclasse>

16

Page 17: Corso ABAP OO  03

Ereditarietà

• I componenti public e protected della superclasse saranno visibili nella sottoclasse

• I componenti private resteranno visibili solo nella superclasse

• E’ possibile assegnare ai componenti private della sottoclasse gli stessi nomi di quelli della superclasse

17

Page 18: Corso ABAP OO  03

Ereditarietà

• I componenti STATIC (public e protected) di una superclasse sono visibili dalla sottoclasse

• Si può accedere ad un componente STATIC utilizzando entrambe le classi

… super_classe=>attributo_staticoo … sotto_classe=>attributo_statico

18

Page 19: Corso ABAP OO  03

Ereditarietà

• La nuova classe si differenzia dalla sopraclasse in due modi

• per estensione, quando la sottoclasse aggiunge nuovi attributi e metodi che si sommano a quelli ereditati

• per ridefinizione, quando la sottoclasse ridefinisce i metodi ereditati

19

Page 20: Corso ABAP OO  03

Ereditarietà

• Una classe definita ABSTRACT non può essere istanziata

• Una classe astratta per essere utilizzata deve essere ereditata da una sottoclasse

• Si può accedere comunque ai componenti static di una classe astratta

20

Page 21: Corso ABAP OO  03

Ereditarietà

• Se un metodo viene definito ABSTRACT allora tutta la classe diventa ABSTRACT

… METHODS <metodo> ABSTRACT.

• Un metodo astratto deve essere ridefinito all’interno della sottoclasse

… METHODS <metodo> REDEFINITION.

21

Page 22: Corso ABAP OO  03

Ereditarietà

• Una classe astratta può dichiarare e implementare metodi non astratti

• Questo permette di utilizzare questi metodi in una sottoclasse senza doverli ridefinire

22

Page 23: Corso ABAP OO  03

Ereditarietà

• Una classe definita FINAL non può essere ereditata

• Tutti i metodi di una classe FINAL sono da considerarsi FINAL a loro volta e non devono essere dichiarati come FINAL

23

Page 24: Corso ABAP OO  03

Ereditarietà

• Un metodo definito FINAL non può essere ridefinito in una sottoclasse

… METHODS <metodo> FINAL.

• Se in una classe c’è un metodo FINAL la classe può essere ereditata ma quel metodo non può essere ridefinito

24

Page 25: Corso ABAP OO  03

Ereditarietà

• Un qualsiasi metodo non final può essere ridefinito nella sottoclasse utilizzando la key-word REDEFINITION

• I parametri del metodo tuttavia restano gli stessi definiti nella superclasse

25

Page 26: Corso ABAP OO  03

Ereditarietà

Ridefinire un metodo costruttore

• Il metodo CONSTRUCTOR non segue le regole di ridefinizione normali

• Il CONSTRUCTOR è un metodo speciale in quanto viene richiamato in automatico dalla CREATE OBJECT e serve ad instanziare un oggetto

26

Page 27: Corso ABAP OO  03

Ereditarietà

Ridefinire un metodo costruttore

• Il CONSTRUCTOR viene ereditato automatica-mente dalla superclasse OBJECT e quindi può non essere definito nella CLASS … DEFINITION

• Se si desidera ri-definirlo esso è l’unico metodo che può avere indicati dei parametri di import perché deve essere dichiarato nella CLASS … DEFINITION

27

Page 28: Corso ABAP OO  03

Ereditarietà

Ridefinire un metodo costruttore

• Quando una sottoclasse eredita da una superclasse in cui è stato ri-definito il metodo CONSTRUCTOR essa può a sua volta ri-definrlo

• Per ridefinire il CONSTRUCTOR in una sottoclasse si seguono le stesse regole utilizzate per ri-definirlo nella superclasse

28

Page 29: Corso ABAP OO  03

Ereditarietà

Ridefinire un metodo costruttore

• Il CONSTRUCTOR deve essere definito nella CLASS … DEFINITION

• I parametri del CONSTRUCTOR della sottoclasse possono essere differenti da quelli della definiti nella superclasse

• Nella CLASS … IMPLEMENTATION non si deve usare RIDEFINITION

29

Page 30: Corso ABAP OO  03

Ereditarietà

Ridefinire un metodo costruttore

• L’unica regola quando si ri-definisce un metodo CONSTRUCTOR in una sottoclasse è che all’interno dell’implementazione deve essere richiamato il CONSTRUCTOR della superclasse

CALL METHOD SUPER->constructor EXPORTING param1 =

param

30

Page 31: Corso ABAP OO  03

Ereditarietà

Ridefinire un metodo costruttore

• I costruttori static funzionano in maniera molto simile a quelli instance

• Ci sono però due differenze fondamentali• I costruttori static non possono mai avere

parametri• Se un costruttore static viene ri-definito

all’interno di una sottoclasse non è necessario richiamare il CONSTRUCTOR della superclasse perché questo avviene in automatico

31

Page 32: Corso ABAP OO  03

Ereditarietà

Referenziazione e utilizzo degli oggetti

• Ad un oggetto referenziato ad una superclasse possono essere attribuiti i valori di un oggetto di una sua sottoclasse

• Tuttavia esso potrà utilizzare solo i componenti presenti nella superclasse

32

Page 33: Corso ABAP OO  03

Ereditarietà

DATA: obj1 TYPE REF TO class1, obj2 TYPE REF TO class2.

CREATE OBJECT obj2.

obj1 = obj2.obj1->component_obj1. Correttoobj1->component_obj2. Errore

33

Page 34: Corso ABAP OO  03

Ereditarietà

Referenziazione e utilizzo degli oggetti

• Durante la CREATE OBJECT può essere specificata la referenziazione alla classe con cui l’oggetto viene istanziato.

• Questo modifica solo i componenti instance mentre quelli static restano referenziati alla classe presente nella dichiarazione

34

Page 35: Corso ABAP OO  03

Ereditarietà

DATA: obj1 TYPE REF TO class1, obj2 TYPE REF TO class2.

CREATE OBJECT obj1 TYPE class2.CREATE OBJECT obj2.

obj1 = obj2.obj1->component_obj1. Correttoobj1->component_obj2. Corretto

35

Page 36: Corso ABAP OO  03

Ereditarietà

• In generale una sottoclasse sarà sempre più specializzata della sua superclasse

• L’attribuzione dei valori di una sottoclasse alla sua superclasse viene definito “narrowing cast”

• Il narrowing cast è permesso e non genera errori di consistenza

36

Page 37: Corso ABAP OO  03

Ereditarietà

• L’attribuzione dei valori di una superclasse ad una sottoclasse viene definito “widening cast”

• Il widening cast generalmente non è permesso e può generare errori di consistenza

37

Page 38: Corso ABAP OO  03

Ereditarietà

• Per realizzare un widening cast bisogna usare l’operatore di assegnazione ?=

obj2 = obj1. Errorobj2 ?= obj1. ok

38

Page 39: Corso ABAP OO  03

Ereditarietà

• Inoltre bisogna definire il controllo della condizione di errore

CATCH SYSTEM-EXCEPTIONS.MOVE_CAST_ERROR = 4.obj2 = obj1.

ENDCATCH.

39

Page 40: Corso ABAP OO  03

Polimorfismo

• Il polimorfismo indica la possibilità per i metodi di assumere forme, cioè implementazioni, diverse all’interno della gerarchia delle classi

40

Page 41: Corso ABAP OO  03

Polimorfismo

• Utilizzando le proprietà del narrowing cast unite al polimorfismo potremo richiamare un metodo da un oggetto utilizzando a seconda delle necessità implementazioni differenti

41

Page 42: Corso ABAP OO  03

Polimorfismo

42

Page 43: Corso ABAP OO  03

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