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