• Non ci sono risultati.

Programmazione a Oggetti

N/A
N/A
Protected

Academic year: 2021

Condividi "Programmazione a Oggetti"

Copied!
20
0
0

Testo completo

(1)

Programmazione a Oggetti

Ivano Salvo

Dipartimento di Informatica Università “La Sapienza”

Stanza 310

(2)

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

(3)

Materiali Didattici

• Lucidi

• Diversitutorialinrete(inglese)

• Numeroselettureconsigliate

• Tuttoprestodisponibilesulsito.

(4)

Obiettivi del Corso

• Studiogeneraledelparadigmaaoggetti

• Approccioobject-orientedallasoluzionedei problemi(linguaggio=mododipensare)

• SviluppoanalisicriticaLinguaggidi Programmazione

• AcquisizioneLinguaggiaOggetti:

– SmallTalk

– Java/C++

(5)

Linguaggi: perche?

• CosacisiaspettadaunLinguaggiodi Programmazione?

• Teoria:percalcolaretuttelefunzioni computabilisonosufficienti:

– Assegnazione,operazioniaritmetiche,sequenzae while;

– Anchemeno:saltocondizionato,successore, trasferimentodimemoria

Mavogliamoquesto?

(6)

Linguaggi: evoluzione (1)

• LinguaggiMacchina

– Istruzioni:stringhedibit

– Completocontrollodelprocessore – Tipididato:celledimemoria

– Controllo:salto(condizionato)

• LinguaggiAssembler

– Usodinomielabelsimbolici – 1:1conistruzionimacchina

– Usodilabelsimboliche:astrazioneutile?[Sugg:e

sedevoaggiungereun’istruzione?]

(7)

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)

(8)

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

(9)

Linguaggi: evoluzione (4)

• LinguaggiLogici

– ProLog

– SignificatoDichiarativovs.SignificatoProcedurale

– Ladefinizionedellaspecificageneraunmeccanismo computazionale

• Vantaggi?

– Programmarecosapiuttostocheprogrammarecome

(sullacarta,almeno)

(10)

Linguaggi: evoluzione (5)

• LinguaggiObject-Oriented

– Unpo`dipazienza,abbiamomolto

tempoperparlarne

(11)

LdP: cosa ci aspettiamo

• Corelanguagecheofframetaforesemplicie uniformi(conchiarasemantica!)

Leggere:DanIngalls“DesignPrinciplesbehind SmallTalk”(sulsito)

• Metodidisuddivisioneericombinazione

Procedure/funzioni

moduli

• MeccanismidiAstrazione

• LibreriebenintegrabiliestrumentidiSviluppo

Debugger,IDE,integrazionecolsistema

(12)

Astrazione

• Identificareproprieta`importantidicosasivuole descrivere.

• Concentrarsisullequestionirilevantieignorarele altre.

• Cosae`rilevantedipendedalloscopodelprogetto .

• Essenzialepergestirelacomplessita`

• Astrazione

– Sulcontrollo

– Suidati

(13)

Astrazione e modularità

• Componente

– Unita`diprogramma:funzione,strutturadati,modulo

• Interfaccia

– Tipieoperazionidefinitiinuncomponentechesono visibilifuoridelcomponentestesso.

• Specifica

Funzionamento“inteso”delcomponente,espresso medianteproprieta`osservabiliattraversol'interfaccia.

• Implementazione

Strutturedatiefunzionidefinitidentroalcomponente,

nonnecessariamentevisibilidafuori.

(14)

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;

}

(15)

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

(16)

Astrazione: Tipi di Dato

• Celladimemoria

– Nessunaprotezionecontroaccessiincoerenti

• Variabili(contipo)

• CostruttoridiTipo

Ilprogrammatorepuo`costruirenuovitipi

• TipiAstrattidiDato

Separazionetrainterfacciaeimplementazione

• Classi/Oggetti

– Classificazioniespecificazionedeitipididato

(17)

Astrazione: Information Hiding

• Tipodidato=valorieoperazioni

– Valori:{-maxint..+maxint}

– Operazioni:{+, -, *, div, mod}

– Nonsonopossibilialtreoperazioni (p.e.,none`ammessoloshift)

• Informationhiding

– Laraprresentazionedeidatiedelleoperazioni_

inaccessibileall'utente.

(18)

Tipi di dato astratti

• Separazioneinterfaccia/implementazione

• Separazionegarantitadalcontrolloditipo

– L'utente(ilprogrammacheutilizzailtipodidatoastratto) haaccessoallesoleoperazionidell'interfaccia.

– L'implementazione_incapsulatainopportunicostrutti

• Indipendenzadallarappresentazione

– Dueimplementazionicorrettediuntipodidatoastratto nonsonodistinguibilidaiclientidiqueltipo.

• Lemodifichealleimplementazioninonrichiedono modifichealcliente.

• Ilclientedeveesserescrittosenzaconoscenzadei

dettaglidiimplementazionedeltipodidato.

(19)

Astrazione: controllo

• goto

– Nessunalimitazionesullastrutturadelcontrollo

• Cicli(programmazionestrutturata)

Linguaggiablocchi:ognibloccohaunasolaentrataeuna solauscita

Programmileggibiliedebuggabili

• Funzionieprocedure

Favorisconoilriuso(parametri)

Metodologiatop-down(miriferiscoaunesecutorepiu`

astratto)

Piu`facilevalutarelacorrettezza(statolocale, )

(20)

Verso l’OOP

Integrazionediastrazioneproceduraleesuidati (incapsulazione)

Oggetticompostidiunostatoedaoperazioni

Distinzionenettatrasignificatodichiarativo(interfaccia)e implementazione(black-boxes)

Perinteragireconun`automobilenondevoconoscerelastrutturadel motore

Riusofavoritodaun`organizzazionegerarchicadeglioggetti (ereditarieta`)

Fiat500eMaggiolinosonoentrambeautomobilieavranno caratteristichecomuni

Polimorfismo

Molteprocedurepossonoesseredefinitesulleautombiliingeneralee

applicabiliindipendementedalmodello.

Riferimenti

Documenti correlati

 definisce le variabili (memoria privata) ed i metodi (interfaccia) di tali oggetti.  altri punti

 definisce le variabili (memoria privata) ed i metodi (interfaccia) di tali oggetti.  altri punti

Una funzione virtuale di una classe base viene ereditata come virtuale da tutte le sue sottoclassi (nelle quali la parola chiave virtual è facoltativa), la sua intestazione in

quando viene istanziato da un altro oggetto della stessa classe. l’argomento è una reference ad un

■ La funzione costruttore di un oggetto locale (definito all'interno di una funzione o di un blocco di istruzioni) viene eseguita nel momento in cui viene incontrata l'istruzione

■ Le variabili static sono molto utili per gestire informazioni comuni a tutti gli oggetti di una classe (per esempio possono fornire i dati di default per l'inizializzazione

■ così come una classe è un modello per istanziare oggetti (della classe) a tempo d'esecuzione, un template è un modello per istanziare classi o funzioni (del template) a tempo

La somma dei valori assoluti degli scarti è più plausibile, cosí come la somma di qualunque funzione pari degli scarti. Si sceglie la somma dei quadrati degli scarti come funzione