Programmazione a Oggetti
Ivano Salvo
Dipartimento di Informatica Università “La Sapienza”
Stanza 310
Alcune informazioni…
Ricevimento:
Mercoledi’ 11:30-12:30
Sito Web:
http://www.dsi.uniroma1.it/~poti
Esame:
progetto + scritto o orale
Laboratorio:
Gabbie, mer/gio/ven mattina
Materiali Didattici
• Lucidi
• Diversitutorialinrete(inglese)
• Numeroselettureconsigliate
• Tuttoprestodisponibilesulsito.
Obiettivi del Corso
• Studiogeneraledelparadigmaaoggetti
• Approccioobject-orientedallasoluzionedei problemi(linguaggio=mododipensare)
• SviluppoanalisicriticaLinguaggidi Programmazione
• AcquisizioneLinguaggiaOggetti:
– SmallTalk
– Java/C++
Linguaggi: perche?
• CosacisiaspettadaunLinguaggiodi Programmazione?
• Teoria:percalcolaretuttelefunzioni computabilisonosufficienti:
– Assegnazione,operazioniaritmetiche,sequenzae while;
– Anchemeno:saltocondizionato,successore, trasferimentodimemoria
Mavogliamoquesto?
Linguaggi: evoluzione (1)
• LinguaggiMacchina
– Istruzioni:stringhedibit
– Completocontrollodelprocessore – Tipididato:celledimemoria
– Controllo:salto(condizionato)
• LinguaggiAssembler
– Usodinomielabelsimbolici – 1:1conistruzionimacchina
– Usodilabelsimboliche:astrazioneutile?[Sugg:e
sedevoaggiungereun’istruzione?]
Linguaggi: evoluzione (2)
• LinguaggiImperativi
– Fortran(50),Algol(60),C,Pascal(70),
– Assegnazione/cicli
–
Tipididato:astrazionedellacelladimemoria
– Astrazioneprocedurale/funzionale
• Vantaggi?
– Orientatialproblema(almenounpo`)
– Definizioneditipididato
– Riuso:procedureefunzioni(opportunamente
parametrizzate)
Linguaggi: evoluzione (3)
• LinguaggiFunzionali
– LISP(58),ML(80),Haskell(90)
– FunzioniRicorsive
– NOstato,maambientedivalutazioneconassociazioni nome-valore
– HigherOrderFunction/Lazyness
• Vantaggi?
– Riccateoriaalgebrica
– Noalias,noside-effects(trasparenzareferenziale)
– Riuso:polimorfismo,funzionidiordinesuperiore
Linguaggi: evoluzione (4)
• LinguaggiLogici
– ProLog
– SignificatoDichiarativovs.SignificatoProcedurale
– Ladefinizionedellaspecificageneraunmeccanismo computazionale
• Vantaggi?
– Programmarecosapiuttostocheprogrammarecome
(sullacarta,almeno)
Linguaggi: evoluzione (5)
• LinguaggiObject-Oriented
– Unpo`dipazienza,abbiamomolto
tempoperparlarne
LdP: cosa ci aspettiamo
• Corelanguagecheofframetaforesemplicie uniformi(conchiarasemantica!)
–
Leggere:DanIngalls“DesignPrinciplesbehind SmallTalk”(sulsito)
• Metodidisuddivisioneericombinazione
–
Procedure/funzioni
–
moduli
• MeccanismidiAstrazione
• LibreriebenintegrabiliestrumentidiSviluppo
–
Debugger,IDE,integrazionecolsistema
Astrazione
• Identificareproprieta`importantidicosasivuole descrivere.
• Concentrarsisullequestionirilevantieignorarele altre.
• Cosae`rilevantedipendedalloscopodelprogetto .
• Essenzialepergestirelacomplessita`
• Astrazione
– Sulcontrollo
– Suidati
Astrazione e modularità
• Componente
– Unita`diprogramma:funzione,strutturadati,modulo
• Interfaccia
– Tipieoperazionidefinitiinuncomponentechesono visibilifuoridelcomponentestesso.
• Specifica
–
Funzionamento“inteso”delcomponente,espresso medianteproprieta`osservabiliattraversol'interfaccia.
• Implementazione
–
Strutturedatiefunzionidefinitidentroalcomponente,
nonnecessariamentevisibilidafuori.
Esempio: Componente
“funzione”
• Componente
– Funzionechecalcolalaradicequadrata
• Interfaccia
– floatsqroot(floatx)
• Specifica
–
Sex>1,allorasqroot(x)*sqroot(x)=x
• Implementazione
Float sqroot (float x) {
float y = x/2; float step = x/4; int i;
for (i=0; i<20; i++) {if ((y*y)<x) y=y+step;
else y=y-step; step=step/2;
return y;
}
Esempio: Tipo di dato
• Componente
– Codaapriorit_ :strutturadaticherestituisceelementiin ordinedecrescentedipriorit_
• Interfaccia
– Tipo: PrioQueue
– Operazioni: empty: PrioQueue
insert: ElemenType * PrioQueue -> PrioQueue
deletemax: PrioQueue -> ElemenType * PrioQueue
• Specifica
– insert :Aggiungeall'insiemedielementimemorizzati
– Deletemax :Restituiscel'elementoaamssimapriorit_
elacodadeglielementirimanenti
Astrazione: Tipi di Dato
• Celladimemoria
– Nessunaprotezionecontroaccessiincoerenti
• Variabili(contipo)
• CostruttoridiTipo
–
Ilprogrammatorepuo`costruirenuovitipi
• TipiAstrattidiDato
–
Separazionetrainterfacciaeimplementazione
• Classi/Oggetti
– Classificazioniespecificazionedeitipididato
Astrazione: Information Hiding
• Tipodidato=valorieoperazioni
– Valori:{-maxint..+maxint}
– Operazioni:{+, -, *, div, mod}
– Nonsonopossibilialtreoperazioni (p.e.,none`ammessoloshift)
• Informationhiding
– Laraprresentazionedeidatiedelleoperazioni_
inaccessibileall'utente.
Tipi di dato astratti
• Separazioneinterfaccia/implementazione
• Separazionegarantitadalcontrolloditipo
– L'utente(ilprogrammacheutilizzailtipodidatoastratto) haaccessoallesoleoperazionidell'interfaccia.
– L'implementazione_incapsulatainopportunicostrutti
• Indipendenzadallarappresentazione
– Dueimplementazionicorrettediuntipodidatoastratto nonsonodistinguibilidaiclientidiqueltipo.
• Lemodifichealleimplementazioninonrichiedono modifichealcliente.
• Ilclientedeveesserescrittosenzaconoscenzadei
dettaglidiimplementazionedeltipodidato.
Astrazione: controllo
• goto
– Nessunalimitazionesullastrutturadelcontrollo
• Cicli(programmazionestrutturata)
–
Linguaggiablocchi:ognibloccohaunasolaentrataeuna solauscita
–
Programmileggibiliedebuggabili
• Funzionieprocedure
–
Favorisconoilriuso(parametri)
–
Metodologiatop-down(miriferiscoaunesecutorepiu`
astratto)
–
Piu`facilevalutarelacorrettezza(statolocale, )
Verso l’OOP
•
Integrazionediastrazioneproceduraleesuidati (incapsulazione)
–
Oggetticompostidiunostatoedaoperazioni
•
Distinzionenettatrasignificatodichiarativo(interfaccia)e implementazione(black-boxes)
–
Perinteragireconun`automobilenondevoconoscerelastrutturadel motore
•
Riusofavoritodaun`organizzazionegerarchicadeglioggetti (ereditarieta`)
–
Fiat500eMaggiolinosonoentrambeautomobilieavranno caratteristichecomuni
•
Polimorfismo
–