SlideShare une entreprise Scribd logo
1  sur  43
ABAP OBJECTS
Terza 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_statico
o …
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. Corretto
obj1->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. Corretto
obj1->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. Error
obj2 ?= 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 Roma
Tel.: 06 – 85305570 fax: 06 – 85800504
Mail: inforoma@e-ssentia.it
Web: www.e-ssentia.com
Powerd by
Bossù Piergiorgio

Contenu connexe

Tendances

Principios orientacion-objetos
Principios orientacion-objetosPrincipios orientacion-objetos
Principios orientacion-objetoskarlalopezbello
 
Model-Driven Software Engineering in Practice - Chapter 2 - MDSE Principles
Model-Driven Software Engineering in Practice - Chapter 2 - MDSE PrinciplesModel-Driven Software Engineering in Practice - Chapter 2 - MDSE Principles
Model-Driven Software Engineering in Practice - Chapter 2 - MDSE PrinciplesMarco Brambilla
 
Model-Driven Software Engineering in Practice - Chapter 1 - Introduction
Model-Driven Software Engineering in Practice - Chapter 1 - IntroductionModel-Driven Software Engineering in Practice - Chapter 1 - Introduction
Model-Driven Software Engineering in Practice - Chapter 1 - IntroductionMarco Brambilla
 
ATL tutorial - EclipseCon 2009
ATL tutorial - EclipseCon 2009 ATL tutorial - EclipseCon 2009
ATL tutorial - EclipseCon 2009 William Piers
 
The Single Responsibility Principle
The Single Responsibility PrincipleThe Single Responsibility Principle
The Single Responsibility PrincipleLars-Erik Kindblad
 
Model driven software engineering in practice book - chapter 7 - Developing y...
Model driven software engineering in practice book - chapter 7 - Developing y...Model driven software engineering in practice book - chapter 7 - Developing y...
Model driven software engineering in practice book - chapter 7 - Developing y...Marco Brambilla
 
Dynamic Object-Oriented Requirements System (DOORS)
Dynamic Object-Oriented Requirements System (DOORS)Dynamic Object-Oriented Requirements System (DOORS)
Dynamic Object-Oriented Requirements System (DOORS)David Groff
 
Structural Design pattern - Adapter
Structural Design pattern - AdapterStructural Design pattern - Adapter
Structural Design pattern - AdapterManoj Kumar
 

Tendances (11)

Principios orientacion-objetos
Principios orientacion-objetosPrincipios orientacion-objetos
Principios orientacion-objetos
 
Factory Design Pattern
Factory Design PatternFactory Design Pattern
Factory Design Pattern
 
Model-Driven Software Engineering in Practice - Chapter 2 - MDSE Principles
Model-Driven Software Engineering in Practice - Chapter 2 - MDSE PrinciplesModel-Driven Software Engineering in Practice - Chapter 2 - MDSE Principles
Model-Driven Software Engineering in Practice - Chapter 2 - MDSE Principles
 
Model-Driven Software Engineering in Practice - Chapter 1 - Introduction
Model-Driven Software Engineering in Practice - Chapter 1 - IntroductionModel-Driven Software Engineering in Practice - Chapter 1 - Introduction
Model-Driven Software Engineering in Practice - Chapter 1 - Introduction
 
ATL tutorial - EclipseCon 2009
ATL tutorial - EclipseCon 2009 ATL tutorial - EclipseCon 2009
ATL tutorial - EclipseCon 2009
 
The Single Responsibility Principle
The Single Responsibility PrincipleThe Single Responsibility Principle
The Single Responsibility Principle
 
Model driven software engineering in practice book - chapter 7 - Developing y...
Model driven software engineering in practice book - chapter 7 - Developing y...Model driven software engineering in practice book - chapter 7 - Developing y...
Model driven software engineering in practice book - chapter 7 - Developing y...
 
Polymorphism
PolymorphismPolymorphism
Polymorphism
 
Thema: The new, global subject classification scheme
Thema: The new, global subject classification schemeThema: The new, global subject classification scheme
Thema: The new, global subject classification scheme
 
Dynamic Object-Oriented Requirements System (DOORS)
Dynamic Object-Oriented Requirements System (DOORS)Dynamic Object-Oriented Requirements System (DOORS)
Dynamic Object-Oriented Requirements System (DOORS)
 
Structural Design pattern - Adapter
Structural Design pattern - AdapterStructural Design pattern - Adapter
Structural Design pattern - Adapter
 

En vedette

En vedette (8)

Web dynpro for abap 02
Web dynpro for abap 02Web dynpro for abap 02
Web dynpro for abap 02
 
Web dynpro for abap 01
Web dynpro for abap 01Web dynpro for abap 01
Web dynpro for abap 01
 
Web dynpro for abap 03
Web dynpro for abap 03Web dynpro for abap 03
Web dynpro for abap 03
 
SAP SD Study material
SAP SD Study material SAP SD Study material
SAP SD Study material
 
Derga sap invoice management
Derga sap invoice managementDerga sap invoice management
Derga sap invoice management
 
Sapscript
SapscriptSapscript
Sapscript
 
sap script overview
sap script overviewsap script overview
sap script overview
 
Sap script made easy
Sap script made easySap script made easy
Sap script made easy
 

Corso ABAP OO 03

  • 2. 2 Agenda del corso • Dai function module agli oggetti • Definizione di una classe • Oggetti e metodi • Incapsulamento, ereditarietà, polimorfismo • Interfacce • Eventi
  • 3. 3 Agenda del corso • Dai function module agli oggetti • Definizione di una classe • Oggetti e metodi • Incapsulamento, ereditarietà, polimorfismo • Interfacce • Eventi
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. Ereditarietà Esistono due tipi di ereditarietà • Ereditarietà singola: una sottoclasse eredita da una sola superclasse 13
  • 14. Ereditarietà • Ereditarietà multipla: una sottoclasse eredita da due o più superclassi • L’ABAP Object (cosi come il Java) supporta solo l’ereditarietà singola 14
  • 15. 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
  • 16. Ereditarietà • In ABAP per definire una sottoclasse che eredita da una superclasse scriveremo • CLASS <sottoclasse> DEFINITION INHERITING FROM <superclasse> 16
  • 17. 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
  • 18. 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_statico o … sotto_classe=>attributo_statico 18
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. Ereditarietà • Una classe astratta può dichiarare e implementare metodi non astratti • Questo permette di utilizzare questi metodi in una sottoclasse senza doverli ridefinire 22
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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
  • 32. 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
  • 33. Ereditarietà DATA: obj1 TYPE REF TO class1, obj2 TYPE REF TO class2. CREATE OBJECT obj2. obj1 = obj2. obj1->component_obj1. Corretto obj1->component_obj2. Errore 33
  • 34. 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
  • 35. 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. Corretto obj1->component_obj2. Corretto 35
  • 36. 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
  • 37. 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
  • 38. Ereditarietà • Per realizzare un widening cast bisogna usare l’operatore di assegnazione ?= obj2 = obj1. Error obj2 ?= obj1. ok 38
  • 39. Ereditarietà • Inoltre bisogna definire il controllo della condizione di errore CATCH SYSTEM-EXCEPTIONS. MOVE_CAST_ERROR = 4. obj2 = obj1. ENDCATCH. 39
  • 40. Polimorfismo • Il polimorfismo indica la possibilità per i metodi di assumere forme, cioè implementazioni, diverse all’interno della gerarchia delle classi 40
  • 41. 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
  • 43. ESSENTIA.COM srl Via Druento, 290 - 10078 Venaria Reale (TO) Tel.: 011 – 4560.511 fax: 011 – 4560.577 Via Nizza, 56 – 00198 Roma Tel.: 06 – 85305570 fax: 06 – 85800504 Mail: inforoma@e-ssentia.it Web: www.e-ssentia.com Powerd by Bossù Piergiorgio