Corso ABAP OO 03
-
Upload
piergiorgio-bossu -
Category
Documents
-
view
853 -
download
16
description
Transcript of Corso ABAP OO 03
ABAP OBJECTSTerza parte
2
Agenda del corso
• Dai function module agli oggetti• Definizione di una classe• Oggetti e metodi• Incapsulamento, ereditarietà,
polimorfismo• Interfacce• Eventi
3
Agenda del corso
• Dai function module agli oggetti• Definizione di una classe• Oggetti e metodi• Incapsulamento, ereditarietà,
polimorfismo• Interfacce• Eventi
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
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
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
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
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
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
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
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
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
Ereditarietà
Esistono due tipi di ereditarietà
• Ereditarietà singola:una sottoclasse eredita da una sola superclasse
13
Ereditarietà
• Ereditarietà multipla:una sottoclasse eredita da due o più superclassi
• L’ABAP Object (cosi come il Java) supporta solo l’ereditarietà singola
14
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
Ereditarietà
• In ABAP per definire una sottoclasse che eredita da una superclasse scriveremo
• CLASS <sottoclasse> DEFINITION INHERITING FROM <superclasse>
16
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
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
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
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
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
Ereditarietà
• Una classe astratta può dichiarare e implementare metodi non astratti
• Questo permette di utilizzare questi metodi in una sottoclasse senza doverli ridefinire
22
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Ereditarietà
• Per realizzare un widening cast bisogna usare l’operatore di assegnazione ?=
obj2 = obj1. Errorobj2 ?= obj1. ok
38
Ereditarietà
• Inoltre bisogna definire il controllo della condizione di errore
CATCH SYSTEM-EXCEPTIONS.MOVE_CAST_ERROR = 4.obj2 = obj1.
ENDCATCH.
39
Polimorfismo
• Il polimorfismo indica la possibilità per i metodi di assumere forme, cioè implementazioni, diverse all’interno della gerarchia delle classi
40
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
Polimorfismo
42
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