Ideologie a confronto Bibliografia Criteri di raffronto Classi ed oggetti

Modelli di supporto al paradigma OOP
Modelli di supporto al paradigma OOP
Ideologie a confronto
Premessa
– Il paradigma OOP ( object-oriented programming)
è es press ione di una metodologia di s viluppo, che
rafforza la necessaria correlaz ione tra progettazione e
programmazione
Segmento del modulo
Linguaggi di
Programmazione
di Programma
zione
Laur ea Triennale in Informatica
Università di Padova
Approcci possibili
Tullio Vardanega, 2004
– OO P come fondamento del linguaggio
Tu tto è visto p er classi → Java ( , S mall talk, E iffel)
– OO P come e lemento opzi onale del linguaggio
Vist a per classi sol o per scelta d el pr ogetti sta
→ Ad a 95 (, C++)
Modell i di s upporto al paradigma O OP
Bibliografia
LT in I nf orm ati ca , UniP D - T. Var da neg a, 2 004
Pagina 1
Criteri di raffronto
A Comparison of the Object-Oriented
Features of Ada 95 and Java
Benjamin M Brosgol
http://www.gnat.com/texts/papers/adajava-00-comparison.pdf
E la relativa bibliografia …
Classi ed oggetti
– Costrutto “classe”
– Incaps ulazione e controllo di visibilità
– Name space gerarchico
Ereditarietà
– Forma singola / forma m ultipla
Aspetti a va nzati di OOP
– Overloading, polimorfismo, binding
Controllo da progra mma
– Costruzione, iniz ializ zazione, finalizzazione
Modell i di s upporto al paradigma O OP
LT in I nf orm at ica, UniP D - T. Va rda neg a, 2 004
Pagina 2
Classi ed oggetti - 1
Modell i di s upporto al paradigma O OP
LT in I nf orm ati ca , UniP D - T. Var da neg a, 2 004
Classe, istanza e riferimento
Costrutto “classe”
Memori a del prog ramma
– Elementi caratterizzanti della visione Java
Classe AA
Class e come tipo di dato
– Gl i “o ggetti ” ne son o istan za a llo ca ta esplicitamente e
ri ferita indirettamente trami te varia bil e dich iarat a ch e ne
d enota implic itamente il r iferim ento
– Alcun i tip i “p rimi tivi ” (boolean, char, byte, short,
int, long, float, and double) non hanno q uesta
caratt eristica ( anoma lia ?)
– I n omi d i vari abi le den otan o rifer imen ti al le en tità
corr ispon dent i
• Non esi st ono p unta tori
• Deal locazi one i mpli cita, gar bage co llector
au tomatizzabi le
Modell i di s upporto al paradigma O OP
LT in I nf orm at ica, UniP D - T. Va rda neg a, 2 004
Pagina 3
Pagina 4
Variabile a
istanza
Oggetto a
rifer iment o
Allocazion e imp licit a
( dimen sion e del l’og getto )
Sp azi o del le d ichia razion i
Allocazio ne esplicita
( dimen sion e del r iferi mento)
Modell i di s upporto al paradigma O OP
Linguaggi di Programmazione, LT in Informatica, UniPD - T. Vardanega, 2004
LT in I nf orm ati ca , UniP D - T. Var da neg a, 2 004
Pagina 5
1
Modelli di supporto al paradigma OOP
Classi ed oggetti - 2
Classi ed oggetti - 3
Costrutto “classe”
Costrutto “classe”
– Elementi neutr i della visione Java
– Elementi caratterizzanti della visione Java
La classe ha membri
Class e anche come modulo
– Lu ogo ( ido neo?) d el con trol lo sul la visib il ità de i su oi
memb ri
– La memo ria d el p rogra mma è un o sp azio sostanzia lmen te
p iatto d i classi ed og getti
• Heap
– Campo , me todo, cla sse in tern a, i nterfa cci a
La cui interpretaz ione (“vis ta”) può essere
– Per classe
• L’a ttribu to static rend e il me mbro unico nel lo
spazio d ell a classe ed in vocabi le senza i sta nza
– Per istanza (caso nor male)
• Una cop ia, an ch e costante, pe r ci ascu na i stan za
• I re lati vi metod i ri ce vono u n par ametro this
implicito che è r iferi mento a lla spe ci fica istan za
sinta ssi: ogge tto.metod o (…)
– S car sa mente effi ca ce p er il co ntro llo del n ame space
• Package, come strum ento d i contro llo del la visi bil ità
trami te agg rega zi one d i pro dotti di comp il azi one e loro
imp ortazi one selet tiva
Modell i di s upporto al paradigma O OP
LT in I nf orm at ica, UniP D - T. Va rda neg a, 2 004
Pagina 6
Modell i di s upporto al paradigma O OP
Classi ed oggetti - 4
Costrutto “classe”
– Elementi caratterizzanti della visione Java
L’attributo final “blocca” le proprietà dell’entità
cui ess o è applicato
– Appl icato a “cl asse” ne pr oib isce le specia lizzazi on i
– Appl icato a “camp o”, n e rend e co st ante i l valo re
– Appl icato a “metodo ”, ne p roib isce la ri defin izio ne
• Un attri buto static final per u n meto do è
si ntatti ca mente l egal e, ma se nza valo re semanti co ,
perché l’attr ibu to static già n e blo cca l ’ered itar ietà
Poiché tutto è intrinsecamente OO, è neces sario
usare espli ci tamente attributi (final oppure
static) per dis abilitarne l ocalme nte la natura
LT in I nf orm at ica, UniP D - T. Va rda neg a, 2 004
Pagina 8
– Elementi caratterizzanti della visione Ada
Un costrutto s intattico per realizzare moduli
– Per i l contr oll o di visibi lit à (name sp ace ) e come un ità d i
compi lazion e
• Costru tto package d otato d i specific a (sia p ub bli ca
ch e ristretta ) e di realizzazione (d el tutto pri vata)
Uno specifico elemento del linguaggio per
realiz zare il tipo di dato “class e”
– Part e del sistema d ei ti pi, ma no n l’ uni co tipo
• Tip i specia lizzabi li tagged type di sti nti d ai ti pi
tradi zi ona li
Modell i di s upporto al paradigma O OP
Pagina 9
Costrutto “classe”
Costrutto “classe”
– Elementi car atterizzanti della visione A da
– Elementi caratterizzanti della visione Ada
Un modulo è a tutti gli effetti un ADT la cui
s pecifica ne descrive i membri visibili
Un modulo che racchiuda un tipo specializ zabile e le
operaz ioni ad esso as sociate è l’analogo della classe
Java
I moduli non sono tipi (scelta opinabile?), ma sono
istanziabili se marcati con attributo generic
– Le corr ispon dent i istanze sono completamente distinte
tra l oro
• Nessu na re lazio ne di tipo co n la matr ice
LT in I nf orm at ica, UniP D - T. Va rda neg a, 2 004
LT in I nf orm ati ca , UniP D - T. Var da neg a, 2 004
Classi ed oggetti - 7
Classi ed oggetti - 6
Modell i di s upporto al paradigma O OP
Pagina 7
Classi ed oggetti - 5
Costrutto “classe”
Modell i di s upporto al paradigma O OP
LT in I nf orm ati ca , UniP D - T. Var da neg a, 2 004
Pagina 10
Un a variabile è l’oggetto di uno specifico tipo,
che ess a denota
– Il ri ferime nto al l’o ggett o è es plicito ed è distinto
per tipo da ll’ ogg etto rif erito
Il tagged type ha solo membri “campi”
– Co n solo vista pe r istanza, vari abi le o costant e
• Vista pe r classe r esa tramite appar tenen za a llo
stesso modu lo a llo stesso li vell o di vi sibi lità
L’invocazione di un metodo su un oggetto lo
richiede come parametro espli ci to
– Sin tassi : modulo.metodo (oggetto, …)
Modell i di s upporto al paradigma O OP
Linguaggi di Programmazione, LT in Informatica, UniPD - T. Vardanega, 2004
LT in I nf orm ati ca , UniP D - T. Var da neg a, 2 004
Pagina 11
2
Modelli di supporto al paradigma OOP
Classi ed oggetti - 8
Tipo, oggetto e riferimento
Memori a del p rogr amma
Tipo access A
– Riferimenti impliciti ad og getti e controllo automatico
della memoria del programm a (Java) permettono
Ogge tto
Ref_a
Concisio ne sint attica e flessib ili tà di nami ca
Oggetto aa
Di ch iar azion i di o gget ti
Modell i di s upporto al paradigma O OP
– Non occorre creare espl ici tamente né usare al cun puntatore
Lib ertà da l contro llo a prog ramma
– Meno s pazio per errori potenzial i (dangling references, memory
leakage)
– Le stesse caratteristiche impediscono:
Tipo A
Sp azio de i tip i
Elementi di analisi critica
Uso del l in guag gio per programmazione di sistema
– Manca, per esempio, un costrutto struct allocabile in
posiz ioni specifiche in memoria (p.es . per mappare regi stri)
Allocazion e esp licita
(di mension e del tipo
e valo ri cong ruen ti)
LT in I nf orm at ica, UniP D - T. Va rda neg a, 2 004
– Discutibile distinzione tra classi e “tipi primitivi”
Pagina 12
Modell i di s upporto al paradigma O OP
Classi ed oggetti - 9
– Elementi caratterizzanti della visione Java
Incaps ulazione e controllo di visibilità
– Elementi caratterizzanti della visione Java
Attributi espli ci ti ( access control modifiers )
applicati a clas si o loro membri
Una classe dichiarata public è visibile ovunque lo
sia il package che la contiene
– Altrim enti sol o li mitata mente al package di d estina zi one
La visibilità di una class e determina quella dei suoi
membri
– Raffina bil e medi ante l ’app licazi one d i attri buti sp ecifici a
membr i
LT in I nf orm at ica, UniP D - T. Va rda neg a, 2 004
Pagina 14
Un membro public ha la s tessa visibilità della
clas se di appartenenza
Un membro protected è visibile entro lo s tesso
package ed ad ogni specializ zazione della clas se
Un membro private è visibile solo a codice della
stess a clas se di appartenenza
In as senza di attributi specifici ( default) il membro
è visibile s olo entro il package di destinazione
Modell i di s upporto al paradigma O OP
Classi ed oggetti - 11
– Elementi caratterizzanti della visione Java
Pagina 15
Incapsulazione e controllo di visibilità
– Elementi caratterizzanti della visione Ada
Mancando separazione tra specifica e realizz az ione il
contenuto di un modulo è i nter amente vi si bile
– Grossolan a vio lazio ne del pri ncip io di incap su lazio ne
(informat ion h id ing )
– Maggi ore sempl icità reali zzati va del co mpil ator e
Sono cons entiti “riferi me nti in avanti” (forward
reference) verso clas si e metodi
– Non vi è instal lazio ne de l contesto d el p rogra mma
(elaborazione) come p rereq ui si to all ’esecuzio ne
– Scelt a co eren te con il pri ncipi o de l dyn amic bin ding
LT in I nf orm at ica, UniP D - T. Va rda neg a, 2 004
LT in I nf orm ati ca , UniP D - T. Var da neg a, 2 004
Classi ed oggetti - 12
Incapsulazione e controllo di visibilità
Modell i di s upporto al paradigma O OP
Pagina 13
Classi ed oggetti - 10
Incapsulazione e controllo di visibilità
Modell i di s upporto al paradigma O OP
LT in I nf orm ati ca , UniP D - T. Var da neg a, 2 004
Pagina 16
Il contesto di dichiarazione del membro di un
modulo (package) ne determina la visibilità
– Il package è stru ttura a blo cch i (sco pe) , i don ea ad
otten ere el evato l ivel lo di co ntro llo di accesso
Nessuna analogia diretta con il controllo di vis ibilità
offerto dal package Java (necess ario?)
Difficile rendere una clas se con membro private e
vista per istanza
– La sua visib il ità non è d iretta mente n egab ile a membri di
classi deri vate (l imi te espressivo?)
Modell i di s upporto al paradigma O OP
Linguaggi di Programmazione, LT in Informatica, UniPD - T. Vardanega, 2004
LT in I nf orm ati ca , UniP D - T. Var da neg a, 2 004
Pagina 17
3
Modelli di supporto al paradigma OOP
Classi ed oggetti - 13
Classi ed oggetti - 14
Incapsulazione e controllo di visibilità
Name space gerarchico
– Elementi caratterizzanti della visione Ada
Str etta se parazi one tra specifica e realizz azione
– La s pecifica è unità di compi lazione a s e s tan te, “in attes a di
completamento” della sua parte realizz ativa (body )
– Forte supporto al data abstraction dal lato utente al costo di
maggi ore compless ità di compilazi one
Il leg ali i “ri fe rimen ti in avant i”, pe rch é il co mpil atore non
cono sce l a natu ra del l’o ggetto rifer ito
Po ssib ili però “di ch iar azi oni incom plete ”, ch e ren don o visib ile
il nome d i un tipo m a non la sua stru ttura
– Il completamento deve avvenire ent ro il modulo contenitore
– Visione Java
Package per controllo del name space
a v alle della compilaz ione
Classi interne per name s pace gerarchico
a programma
– Accresciut o rischi o di er rore d i ri fe rimen to
• Un metod o st atico non può riferi re ent ità no n
stati che
Risch i d i access befo re elab orat ion i n assenza di co ntrol lo
ute nte sull a “sequ enza di elab orazio ne”
Modell i di s upporto al paradigma O OP
LT in I nf orm at ica, UniP D - T. Va rda neg a, 2 004
Pagina 18
Modell i di s upporto al paradigma O OP
Classi ed oggetti - 15
Forma singola
– Elementi caratterizzanti della visione Java
– Visione Ada
Il compilatore ha controllo sulla denominazione dei
prodotti della compilaz ione, il programmatore
sulla denominazione delle unit à di compilaz ione
Child unit per name space gerarchico costruito a
programma su unità di compilazione
– Coeren temente co n la p reservazion e di ortog onal ità tr a
mod uli e cl assi
LT in I nf orm at ica, UniP D - T. Va rda neg a, 2 004
Pagina 20
Estens ione di class e semplice ed immediata
– Cl asse sorg ente = su perclass , classe sp eciali zzata =
su bcla ss
– Implicitamente ere dita to ogn i meto do non private
e non static
– Metodi eredi tati e non final possono e ssere r idefi niti
Gerarchia di derivazione ris alibile di 1 solo livel lo
– Notazio ne super.member
La clas se ancestrale Object è vista come
sorgente di ogni classe non derivata
Modell i di s upporto al paradigma O OP
Ereditarietà
Ereditarietà - 2
Pagina 21
Forma singola
– Elementi caratterizzanti della visione Java
Shadowing cons eguenz a ineluttabile di overriding
– Nomi dei campi d i classe deri vata po sson o oscurare
campi d i no me ug uali del la classe so rgen te
• super.fieldname != this.fieldname
– Lo stesso n ome pu ò ri ferire ogg etti di qualunque cl asse
comunque d erivat a dal la classe (tip o) d el no me
• Cast sempre con sentito verso la radice dell a
gerar ch ia e permesso, ma con contro llo di l egal ità a
tempo d ’esecuzion e, in d irezi one op posta
• Possibi le i nterro gare su ll’ appa rtenen za ad un a
gerar ch ia d i der ivazion e (x instanceof T)
LT in I nf orm at ica, UniP D - T. Va rda neg a, 2 004
LT in I nf orm ati ca , UniP D - T. Var da neg a, 2 004
Ereditarietà
Ereditarietà - 3
Forma singola
Modell i di s upporto al paradigma O OP
Pagina 19
Ereditarietà
Ereditarietà - 1
Name space gerarchico
Modell i di s upporto al paradigma O OP
LT in I nf orm ati ca , UniP D - T. Var da neg a, 2 004
Pagina 22
– Elementi caratterizzanti della visione Ada
Ottenuta mediante specializzazione di tipo
Tipo specializ zabile ≠ classe (importante!)
I tipi Controlled e Limited_Controlled
cos tituiscono un a sorta di clas se ancestral e
– Ma non a fin i di gener icità né di ete roge nei tà, ch e
sono sod disfatti in altro modo
– Meno ri cca d i meto di p redefi niti di Java.Object
Modell i di s upporto al paradigma O OP
Linguaggi di Programmazione, LT in Informatica, UniPD - T. Vardanega, 2004
LT in I nf orm ati ca , UniP D - T. Var da neg a, 2 004
Pagina 23
4
Modelli di supporto al paradigma OOP
Ereditarietà
Ereditarietà - 4
Ereditarietà
Ereditarietà - 5
Forma multipla
Forma singola
– Elementi caratterizzanti della visione Java
– Elementi caratterizzanti della visione Ada
Shadowing ill egale sulla specializ zazione di tipo,
ma cons entito sui moduli “classe”
– Un cambi o di nome ad un d ato li vell o di u na g erarchi a di
der ivazion e pu ò rend ere i lleg ali i di scen dent i (i mportan te!)
Convers ioni di vis ta consentite entro l’intera
gerarchia di derivazione ( clas s-wide)
– Cast sogg etto ag li stessi vin co li d i le gali tà visti p er Java
– Po ssib ile i nter rogar e su ll’ app arten enza ad un a ger archia di
der ivazion e (X in T’Class)
Modell i di s upporto al paradigma O OP
LT in I nf orm at ica, UniP D - T. Va rda neg a, 2 004
Pagina 24
Ereditarietà di retta (extends) solo a partire da 1
singol a classe sorgente
Ereditarietà indire tta (implements) da un
numero illimitato di entità di tipo interface
– En tità non istanziabili per ch é prive di impl ementa zi one
e stato in terno
– Estend ibi li (in fo rma astratta) e co ncreti zzab ili , m a sol o
trami te real izza zi one d i tutti i meto di speci ficati
Buon compromess o a fronte di una problematica di
grande compless ità
Modell i di s upporto al paradigma O OP
Ereditarietà
Ereditarietà - 6
Forma multipla
– Elementi caratterizzanti della visione Ada
– Elementi caratterizzanti della visione Java
La condivi si one di codice è tra i fattori di
complicazione dell’ereditarietà multipla
Per evitarla s trutturalmente, l’entità interface
deve essere distinta dall’entità class
– Ogni metod o imp lici tamente m arcato abstract e
public
– Nessun metod o marcato static
– Ogn i vari abi le i mpli citamen te marcata static e final
Buon compromess o tra potenza espressiva e
complessità realizzativa
LT in I nf orm at ica, UniP D - T. Va rda neg a, 2 004
Pagina 26
– I param etri for niscono eredi tari età singola, i n mod o
anal ogo al la cla sse da spe ci ali zzare tr amite extends
– Il mod ulo co nten itore fo rni sce l a stru ttur a ch e racchiu de
le proprietà astratte da attr ibu ire al le classi d erivate ,
in mod o ana log o all ’ implements di Java
– Con cr etizzazion i dive rse non costitu isco no ge rarchi a
(li mite!)
Modell i di s upporto al paradigma O OP
LT in I nf orm ati ca , UniP D - T. Var da neg a, 2 004
Pagina 27
Aspetti avanzati di OOP - 1
Elementi di analisi critica
Overloading
– L’approccio interface all’ereditarietà m ultipla
pres enta svariati vantaggi
– Java più restrittivo di Ada
No tazi one su ccin ta, bu ona p otenza espre ssiva , o ttima
chi arezza
I l tip o interface p artecip a pien amen te all a gerar ch ia d i
d eriva zi one r isu ltan te
– Ma s offre anche di alcuni limiti dovuti ad altre
caratteristiche del linguaggio
Nessun a stru ttura zi one d i visib il ità
P roib ito l ’uso d ello ste sso no me per met odi d iver si
( overloading)
LT in I nf orm at ica, UniP D - T. Va rda neg a, 2 004
Ottenuta tramite circonlocuzione compl essa,
mediante unità generic con parametri formali di
tipo tagged
La vers ione 2005 del linguaggio prevede
interface (chiaro segnale!)
Ereditarietà
Ereditarietà - 8
Modell i di s upporto al paradigma O OP
Pagina 25
Ereditarietà
Ereditarietà - 7
Forma multipla
Modell i di s upporto al paradigma O OP
LT in I nf orm ati ca , UniP D - T. Var da neg a, 2 004
Pagina 28
Non lo consente né per s imboli di operatori (p.es.
+) con operandi di tipo diverso né per funz ioni
con valore di ritorno di tipo divers o
interface Interface1{
int func();
}
Metodi inco mpatib il i
interface Interface2 {
se n ell a ste ssa en tità
boolean func();
}
Modell i di s upporto al paradigma O OP
Linguaggi di Programmazione, LT in Informatica, UniPD - T. Vardanega, 2004
LT in I nf orm ati ca , UniP D - T. Var da neg a, 2 004
Pagina 29
5
Modelli di supporto al paradigma OOP
Aspetti avanzati di OOP - 3
Aspetti avanzati di OOP - 2
Forme di associa zione (binding)
Polimorfismo
– Java comporta prevalentemente associazione
dinamica
– Java più espressivo di Ada
Una stess a variabile può implicitamente
appartenere, in tempi diversi, a più cl assi di
una gerarchia di derivazione
– La su a vista è sempre p roi ettata sul la ger archi a
Una variabile di tipo Object, la classe
ancestrale, è massimamente polimorfa
Modell i di s upporto al paradigma O OP
LT in I nf orm at ica, UniP D - T. Va rda neg a, 2 004
Pagina 30
Modell i di s upporto al paradigma O OP
L’i nvocazio ne imp li ci ta segue l’i nizia lizzazion e imp licit a del le
vari abi li d ell’ istanza
L’i nvocazio ne espl icita deve essere il p rimo coma ndo d i un
altr o costrutto re
– I tipi nella gerarchia [Limited_]Controlled di
Ada sono dotati di metodi di inizializzaz ione
specializzabili invocati im plicitamente alla creaz ione
dell’oggetto corrispondente
Pagina 32
– La classe ancestrale Object di Java fornis ce un
metodo finalize() marcato protected, la cui
ridefinizione consente di ges tire a programm a il
rilascio controllato di risors e, prima dell’invocazione
del garbage collector
– I tipi nella gerarchia [Limited_]Controlled di
Ada sono dotati del metodo Finalize la cui
ridefinizione viene invocata quando l’oggetto cessa
di esistere come tale
Deall ocazion e, uscita da am bito di de fini zi one ,
so vrascr ittur a per assegn azi one
Modell i di s upporto al paradigma O OP
Conclusione - 1
LT in I nf orm ati ca , UniP D - T. Var da neg a, 2 004
Pagina 33
Conclusione - 2
In Java il paradigma OOP è l’essenza stessa
del linguaggio
– Il programmatore deve esplicitamente disatti vare
la natura OO di specifiche entità per ottenere
comportamento distinto
L’a ttrib uto final ap pli ca to a classi o meto di
L’a ttrib uto static app licato a tu tti i membri di u na classe
Come ogni scelta radicale, questa comporta
qualche convoluzione nella resa di aspetti
ortogonali al paradigma OOP
– Strutture e tipi primitivi, unità generiche
Criteri di economicità
– Di e se cuzione
Gene razion e di cod ice sempl ice ed esecuzio ne vel oce
– Di compilazi one
Facil ità d i int egrazio ne i ncremen tale
– Di svil uppo su piccola scala
Compi lazion e corrett a garan tisce esecu zion e corretta
– Di svil uppo su larga scala
Sep arazion e tra i nterfa cce (r igi damen te fissa te) e
real izza zi oni (mod ificab ili sen za impat to)
– Di apprendime nto
… e maggior costo a tempo di esecuzione
LT in I nf orm at ica, UniP D - T. Va rda neg a, 2 004
Pagina 31
Finalizzazione
– Le classi Java sono dotate di metodi speciali
“costruttori” a definizione es plicita, invocati
implicitamente all’allocazione delle istanze
corrispondenti
Modell i di s upporto al paradigma O OP
LT in I nf orm ati ca , UniP D - T. Var da neg a, 2 004
Controllo a programma - 2
Costruzione ed inizializzazione
LT in I nf orm at ica, UniP D - T. Va rda neg a, 2 004
– Java consente as sociazione statica
Ovvia mente p er super.method()
Per l ’in vocazion e di u n metod o marcato final, o ppu re
static ( opp ure an ch e private, ma solo se i nvocato
nel la stessa cla sse di defin izio ne)
Controllo a programma - 1
Modell i di s upporto al paradigma O OP
p.method()→ la classe che p rifer isce a te mpo
d’e secuzi one d etermin a la ve rsi on e di method da i nvocare
Ma ggi ore espre ssivi tà per ma ggi or on ere rea lizzativo e
compu tazi ona le
Orto gon ali tà di costru tti, inte razion i chi are
Pagina 34
Modell i di s upporto al paradigma O OP
Linguaggi di Programmazione, LT in Informatica, UniPD - T. Vardanega, 2004
LT in I nf orm ati ca , UniP D - T. Var da neg a, 2 004
Pagina 35
6