• Non ci sono risultati.

– Messaggio – Classe

N/A
N/A
Protected

Academic year: 2021

Condividi "– Messaggio – Classe"

Copied!
12
0
0

Testo completo

(1)

Object-Oriented Programming

• Concetti fondamentali

– Oggetto

• Incapsulazione

– Messaggio – Classe

– Ereditarietà – Polimorfismo

Una metodologia di programmazione che consente di

modellare la realtà in modo più naturale e vicino all’uomo

(2)

Oggetto

“A software bundle of variables and related methods”

• metodi

– frenare

– cambiare la cadenza di pedalata

– cambiare marcia

Esempio bicicletta

• Stato

– mantenuto in variabili

• Comportamento

– implementato con metodi

• variabili di stato

– velocità (12 Km/h) – cadenza di pedalata

(90 giri/min)

– marcia (cambio) (5a)

... cambiare velocità ? stato corrente

(3)

Incapsulazione

Metodi Variabili

• Information hiding

– variabili e/o metodi privati

• idealmente variabili private e metodi pubblici, ma in pratica ...

– per nascondere dettagli implementativi

• per cambiare marcia in bici non bisogna conoscere il meccanismo di cambio ... basta girare la leva

• Modularità

– il codice sorgente di un oggetto può essere scritto e mantenuto indipendentemente da altri oggetti

di variabili e metodi in una stessa “custodia protettiva”

Benefici

(4)

Messaggi

Un oggetto preso singolarmente è incapace di compiere alcuna attività ... per ottenere funzionalità di più alto livello e

comportamenti più complessi è necessaria l’interazione tra oggetti

la bicicletta è utile solo quando un altro oggetto (la persona) interagisce con essa (iniziando a pedalare)

Oggetti interagiscono e comunicano scambiandosi messaggi

Messaggio

L’invocazione di un metodo di un oggetto da parte di un altro oggetto con relativo

scambio di parametri Pippo

la bicicletta di Pippo cambia marcia (marcia più bassa)

(5)

Messaggi

• Componenti di un messaggio

– L’oggetto a cui inviare il messaggio (bicicletta) – Il nome del metodo da eseguire (cambia marcia)

– I parametri di cui il metodo ha bisogno (marcia più bassa)

• Benefici dei messaggi

– Il comportamento di un oggetto è espresso attraverso i suoi metodi, per cui il meccanismo del passaggio dei messaggi supporta tutte le possibili interazioni tra oggetti

• sebbene sia sconsigliato, è comunque possibile accedere direttamente alle variabili pubbliche di un oggetto

(6)

Classi e Istanze

Nel mondo reale ci sono oggetti dello stesso tipo

... la bicicletta di Pippo è solo una delle tante biciclette nel mondo:

essa è una istanza della classe di oggetti noti come biciclette.

Un oggetto è una istanza di una classe di oggetti che condividono lo stesso stato e comportamento

NB: lo stato di un’istanza è indipendente dallo stato di un’altra istanza

Classe: Un prototipo che definisce le variabili e i metodi comuni a tutti gli oggetti di un certo tipo

Instanziazione: Creazione di una istanza di una classe

istanze della stessa classe condividono la stessa implementazione dei metodi

(7)

Ereditarietà

Classi (sottoclassi o discendenti) possono essere definite a partire da classi preesistenti (superclassi o antenate)

Bikes

Mountain Bikes Racing Bikes Tandem Bikes

Gerarchia di Classi Ogni sottoclasse eredita stato (nella forma di dichiarazione di variabili) e metodi dalla superclasse

può aggiungere variabili e metodi a quelli forniti dalla superclasse e ...

sovrascrivere (override)

metodi ereditati fornendone implementazioni specializzate

... può raggiungere qualsiasi profondità

(8)

Benefici dell’Ereditarietà

• Riuso

– Le sottoclassi forniscono comportamenti specializzati sulla base di elementi comuni forniti dalle superclassi.

Grazie all’ereditarietà i programmatori possono riusare il codice delle superclassi più volte.

• Classi astratte

– Definiscono comportamenti “generici”. La superclasse astratta definisce e può implementare parzialmente il

comportamento, ma molto della classe è lasciato indefinito e non implementato. Dettagli specifici sono completati nelle sottoclassi specializzate.

(9)

Classi astratte: un esempio

Insetti

Insetti alati

Insetti non alati Mosche Farfalle Formiche

... visualizzare ed animare insetti sullo schermo ...

Stato: la posizione dell’insetto una coppia (X, Y) di coordinate

Metodi: Inizializza (X0, Y0) Visualizza

Cancella

Sposta (Xn, Yn)

Insetti, Insetti alati e Insetti non alati sono classi astratte (non hanno una immagine definita): l’implementazione dei metodi Visualizza e Cancella di tali classi può quindi restare non specificata

(10)

Polimorfismo

Ad un metodo viene assegnato un determinato nome condiviso dagli oggetti di una gerarchia, dove ogni oggetto implementa il metodo nel modo più appropriato

... stesso nome per diverse forme

• Metodi statici

– Tutti i riferimenti a tali metodi sono risolti a tempo di compilazione.

• Metodi Virtuali

– I riferimenti sono risolti a tempo di esecuzione.

(11)

Metodi Statici vs Metodi Virtuali

Riconsideriamo la gerarchia di insetti:

l’implementazione del metodo Sposta è la stessa per ogni classe, ma dipende dai metodi Cancella e Visualizza ...

• metodi statici

– Sposta deve essere reimplementato in ciascuna sottoclasse

• altrimenti non verrebbero richiamati i metodi Cancella e Visualizza appropriati

• metodi virtuali

– può essere ereditato il metodo Sposta della classe Insetti

• Necessità di un costruttore per inizializzare la tabella dei metodi virtuali

Sposta (Xn, Yn) Cancella;

(X,Y) := (Xn, Yn);

Visualizza;

(12)

Oggetti Dinamici

Oggetti possono essere allocati nello heap e manipolati con puntatori come qualsiasi variabile dinamica

Distruttore

Se un oggetto contiene a sua volta puntatori ad altre variabili e/o oggetti dinamici, può essere usato un distruttore per deallocare completamente tutta l’area di memoria non più necessaria.

Distruttori possono essere ereditati e dichiarati virtuali

Riferimenti

Documenti correlati

Risolvere i seguenti esercizi usando il metodo di Gram-Schmidt semplificando, dove possibile, il calcolo usando l’ortogonalit` a di insiemi noti di funzioni trigonometriche o

A differenza dei metodi di- retti (come ad esempio il metodo LU), in genere un metodo iterativo stazionario convergente calcola usualmente solo un approssimazione della soluzione x

Una volta trovata una tale matrice A simmetrica e definita positiva, si modifichi il file demo algebra lineare cos`ı da confrontare su un test il metodo di Jacobi, Gauss-Seidel,

Applicare i rispettivi metodi di Richardson ottimali e osservare sia i (possibili) miglioramenti in termini di errore dopo un numero prefissato di iterazioni sia il miglior

 Impostare Studente.corsoLaurea = nome; è corretto (metodo statico, campo statico)... Metodi statici privati.  A volte un

Il metodo del simplesso duale mantiene ad ogni iterazione una base ammissibile nel duale (ovvero una base per la quale i costi ridotti siano non-positivi) e termina quando determina

Utilizzando invece il metodo SCS-CN e supponendo che l’intensità di pioggia aumenti, il valore della portata di colmo massima, che si ottiene sempre per una durata della pioggia

Con tali valori è possibile applicare il metodo della corrivazione, in combinazione con i valori delle aree isocorrive (ordinate in funzione della quota crescente rispetto al