OGGETTI COMPOSTI Una classe può contenere riferimenti a altre classi (o anche a se stessa): public class Orologio { Counter ore, minuti; } Loggetto Orologio.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

© 2007 SEI-Società Editrice Internazionale, Apogeo Unità B1 Le basi della programmazione a oggetti.
Oggetti Java.
Costruttori e Distruttori
Recupero debito quarto anno Primo incontro
Sviluppo di programmi strutturati
Programmazione object oriented in C++
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
1 Semantica Operazionale di un frammento di Java: lo stato.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
MultiSet, Liste Ordinate
Le gerarchie di tipi.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Introduzione alla Object Oriented Programming, OOP E.Mumolo. DEEI
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
E.Mumolo. DEEI Introduzione alla programmazione ad oggetti in C++ Object Oriented Programming, OOP E.Mumolo. DEEI
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 1 Programmi concorrenti: quanto è lungo un millisecondo? In un normale personal computer.
Gestione dei Progetti Software 2 (a.a. 2004/05) - Lezione 3 1 JAVA e Internet: il World Wide Web Internet: milioni di computer collegati fra di loro attraverso.
Oggetti e dati primitivi
Programmazione Corso di laurea in Informatica
Approfondimento delle classi
Selezione (=scelta) con “if-else”
Type int_stack = struct { int top; int P[100]; } int_stack creapila() { int_stack s = new int_stack; s.top = 0; return s; } int_stack push(int_stack s,
Type int_stack = struct { int top; int P[100]; } int_stack creapila() { int_stack s = new int_stack; s.top = 0; return s; } int_stack push(int_stack s,
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Lezione IX Laboratorio di Programmazione. Le Classi Una classe C++ è definita come segue: class Nomeclasse { private: // metodi e attrib. visibili solo.
LA DOCUMENTAZIONE È noto che un buon programma dovrebbe essere ben documentato.. ma lesperienza insegna che quasi mai ciò viene fatto! –non cè tempo, ci.
IL CONCETTO DI PACKAGE Una applicazione è spesso composta di molte classi (eventualmente correlate) Un package è un gruppo di classi che costi- tuiscono.
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice.
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice.
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A /02/2008 Alessandra Toninelli
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
2000 Prentice Hall, Inc. All rights reserved. Attivazione di funzioni La chiamata/attivazione di funzione viene indicata citando il nome della funzione.
I metodi F. Bombi Campi e metodi Abbiamo visto che una classe può contenere – Campi – Metodi stato I campi sono utilizzati per memorizzare.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 Un esempio con iteratore: le liste ordinate di interi.
1 novembre I nomi in Java F. Bombi 1 novembre 2002.
Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
OBJECT ORIENTED DATABASE introduzione. OGGETTO Ha due componenti:  stato: valore di alcune variabili (variabili di istanza)  comportamento: insieme.
Astrazione di dati Esercizio 1. Si completi l’implementazione Poly.add data a lezione con la specifica e l’implementazione degli ausiliari min e max data.
Primo Compitino Primo esercizio Identificare gli errori segnalati dal compilatore Verifica statica del codice Regole di binding per i nomi (quelle.
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
1 Progettare un Tipo di Dato Astratto. 2 Scelte di Progetto (astrazione) 4 Caratteristiche degli oggetti –Modificabilità 4 Scelta delle operazioni –Realizzare.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
Esercizi iteratori. Matrice import java.util.Iterator; public class MatrixIterator implements Iterator { private Matrix matrix; private int currentRow.
LIP: 15 Marzo 2005 Vettori di interi. Esercizio proposto Definire una classe VectorInt i cui oggetti sono vettori omogenei di interi ordinati in modo.
Fondamenti di informatica T-A Esercitazione 5 : Stringhe ed array AA 2012/2013 Tutor : Domenico Di Carlo.
ESERCITAZIONE Problema Scrivere una funzione che scambi due interi non opera su oggetti  funzione statica scritta dentro a una classe contenitore.
1 Java secondo contatto Nel tunnel una luce…. 2 Esercizio - Contatore Definire la classe Contatore con le seguenti caratteristiche:  Il metodo getValore.
Fondamenti di informatica T-A Esercitazione 3 : Classi, metodi, visibilità, metodi statici AA 2012/2013 Tutor : Domenico Di Carlo.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Introduzione alle Classi e agli Oggetti in Java 1.
Eccezioni in Java. Le eccezioni in Java Exception handling: insieme di costrutti e regole sintattiche e semantiche presenti nel linguaggio allo scopo.
Esercizi.
Transcript della presentazione:

OGGETTI COMPOSTI Una classe può contenere riferimenti a altre classi (o anche a se stessa): public class Orologio { Counter ore, minuti; } Loggetto Orologio (contenitore) può usare gli oggetti Counter ore e minuti …..ma non può accedere ai loro campi privati può accedere a dati e funzioni pubbliche e a quelli con visibilità package (se la classe conte- nitore è definita nello stesso package)

OGGETTI COMPOSTI - COSTRUZIONE In fase di costruzione: –il costruttore delloggetto contenitore deve costruire esplicitamente, con new, gli oggetti interni public class Orologio { Counter ore, minuti; public Orologio() { ore = new Counter(0); minuti = new Counter(0); }

OGGETTI COMPOSTI - COSTRUZIONE Quindi: –prima si costruisce loggetto contenitore (fase 1) … Orologio clock = new Orologio(); clock oggetto Orologio ore minuti

OGGETTI COMPOSTI - COSTRUZIONE Quindi: –prima si costruisce loggetto contenitore (fase 1)... –poi esso costruisce gli oggetti interni (fase 2) ore = new Counter(0); minuti= new Counter(0); clock oggetto Orologio due oggetti Counter lo fa il costruttore di Orologio

OGGETTI COMPOSTI - DISTRUZIONE In fase di distruzione: –quando il riferimento alloggetto contenitore viene distrutto, loggetto passa al garbage collector, che lo distruggerà quando vorrà –la stessa fine fanno gli oggetti referenziati da esso (se non referenziati da altri oggetti) clock oggetto Orologio due oggetti Counter Quando scompare questo...

OGGETTI COMPOSTI - DISTRUZIONE In fase di distruzione: –quando il riferimento alloggetto contenitore viene distrutto, loggetto passa al garbage collector, che lo distruggerà quando vorrà –la stessa fine fanno gli oggetti referenziati da esso (se non referenziati da altri oggetti) clock oggetto Orologio due oggetti Counter Quando scompare questo... … gli oggetti refe- renziati diventano preda del G.C.

OGGETTI COMPOSTI - USO Solo i metodi delloggetto contenitore possono accedere agli oggetti interni public class Orologio { Counter ore, minuti; public tic() { minuti.inc(); if (minuti.getValue()==60) { minuti.reset(); ore.inc(); if (ore.getValue()==24) ore.reset(); } clock oggetto Orologio due oggetti Counter

VANTAGGI E LIMITI Gli oggetti composti consentono: di aggregare componenti complessi a partire da componenti più semplici già disponibili di mantenere l unitarietà del componente, assicurarne la protezione e lincapsulamento E se invece occorre specializzare componenti già esistenti ? aggiungere loro nuovo dati o metodi ? Ad esempio, un contatore con decremento?

PROGETTAZIONE INCREMENTALE Spesso si incontrano problemi che richiedo- no componenti simili ad altri già disponibili, ma non identici Altre volte, levoluzione dei requisiti compor- ta una corrispondente modifica dei compo- nenti: –necessità di nuovi dati e/o nuovi comportamenti –necessità di modificare il comportamento di metodi già presenti Come fare per non dover rifare tutto da capo?

PROGETTAZIONE INCREMENTALE Finora, abbiamo solo due possibilità: ricopiare manualmente il codice della classe esistente e cambiare quel che va cambiato creare un oggetto composto –che incapsuli il componente esistente... –… gli inoltri le operazioni già previste… –… e crei, sopra di esso, le nuove operazioni richieste (eventualmente definendo nuovi dati) –sempre che ciò sia possibile!

ESEMPIO Dal contatore (solo in avanti) … public class Counter { private int val; public Counter() { val = 1; } public Counter(int v) { val = v; } public void reset() { val = 0; } public void inc() { val++; } public int getValue() { return val;} }

ESEMPIO … al contatore avanti/indietro (con decremento) Concettualmente, ogni oggetto Counter2 ingloba un oggetto Counter al suo interno Ogni operazione richiesta a Counter2 viene delegata alloggetto Counter interno Delegazione oggetto Counter oggetto Counter2 operazioni di Counter2

ESEMPIO … al contatore avanti/indietro (con decremento) public class Counter2 { private Counter c; public Counter2() { c = new Counter(); } public Counter2(int v){ c = new Counter(v); } public void reset() { c.reset(); } public void inc() { c.inc(); } public int getValue() { return c.getValue(); } public void dec() {... } } Delegazione

ESEMPIO Il metodo dec() –recuperare il valore attuale V del contatore –resettare a zero il contatore –riportarlo, tramite incrementi, al valore V = V-1 public void dec() { int v = getValue(); reset(); for (int i=0; i<v-1; i++) inc(); } I metodi agiscono sullistanza corrente ( this ): reset() equivale a this.reset() inc() equivale a this.inc()...

CONCLUSIONE Poiché i campi privati non sono accessibili, bisogna riscrivere anche tutti i metodi che concettualmente rimangono uguali, procedendo per delegazione Non è detto che le operazioni già disponibili consentano di ottenere qualsiasi nuova funzionalità si renda necessaria (potrebbe essere necessario accedere ai dati privati) Occorre poter riusare le classi esistenti in modo più flessibile.