Corso di Progettazione del Software

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Corso di Progettazione del Software"

Transcript

1 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 1/35 Università degli Studi di Roma La Sapienza Facoltà di Ingegneria Corso di Laurea in Ingegneria Gestionale Corso di Progettazione del Software Proff. Toni Mancini e Monica Scannapieco Dipartimento di Informatica e Sistemistica Università di Roma La Sapienza S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola versione del February 26, 2008

2 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 2/35 odifiche rispetto alle precedenti versioni Rispetto alla versione del 6 Marzo 2007 Modificata slide n. 25 (Realizz. di assoc. di molt. 0..* (cont.)) aggiungendo la versione di getlinkassoc() che utilizza le versioni generics delle interfacce e delle classi del Java Collection Framework.

3 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 3/35 Associazioni a resp. singola Consideriamo il caso più semplice, in cui: l associazione è binaria, di molteplicità 0..1 da C a D Dal diagramma delle classi realizzativo si evince che la classe C è l unica ad avere responsabilità sull associazione assoc (cioè dobbiamo realizzare un solo verso della associazione) Nel diagramma realizzativo abbiamo convertito l associazione in aggregazione, dato che assoc non ha attributi.

4 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 4/35 Associazioni a resp. singola (cont.) La realizzazione dell associazione è simile a quella di un attributo. Infatti, oltre a quanto stabilito per gli attributi e le operazioni, per ogni associazione assoc del tipo mostrato in figura, aggiungiamo alla class Java C: un campo dato assoc di tipo D private (o protected) che rappresenta, per ogni oggetto x della classe C, l eventuale oggetto della classe D connesso ad x tramite l associazione assoc. Per un oggetto x della class C, il campo assoc sarà pari a null se x non partecipa ad alcun link di associazione assoc; Un metodo public D getassoc() { return assoc; che ritorna, per ogni oggetto x della classe C, l oggetto della classe D connesso a x tramite l associazione assoc (la funzione restituisce null se x non partecipa ad alcuna istanza di assoc); un metodo public void setassoc(d d) { assoc = d;, che, quando invocato sull oggetto x della class C, implementa la creazione del link x, d dell associazione assoc, eliminando l eventuale link già presente che coinvolge x. Utilizzando tale metodo con l argomento pari a null, il cliente può cancellare l eventuale link esistente di associazione assoc che coinvolge x.

5 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 5/35 Esempio public class Persona { private Azienda lavorain = null; public Azienda getlavorain() { return lavorain; public void setlavorain(azienda a) { lavorain = a; La class Azienda non conterrà alcun attributo o metodo relativo alla gestione dell associazione assoc, dato che la corrispondente classe UML Azienda non ha responsabilità su di essa.

6 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 6/35 Esercizio Estendere la classe Azienda aggiungendo l operazione dimensione() : String che ritorna una stringa tra piccola, media, oppure grande, a seconda che il suo capitale sociale sia 50, tra 50 e 250, o maggiore di 250. Scrivere le specifiche concettuale (relativa alla fase di Analisi) e realizzativa (relativa alla fase di Progetto) della classe Azienda che contenga la specifica di tale operazione. Scrivere inoltre le specifiche concettuale e realizzativa della operazione redditomedioingrandiaziende() dello use case Analisi Statistica, che, preso in input un insieme S di persone, calcola il reddito medio delle persone di S che lavorano in grandi aziende. Scrivere la class Java Azienda con la definizione del metodo dimensione(). Scrivere la class Java che realizza lo use case.

7 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 7/35 Realizzazione di associazioni riflessive Quanto detto vale anche per il caso in cui l associazione coinvolga più volte la stessa classe. In questo caso il concetto di responsabilità si attribuisce ai ruoli, piuttosto che alla classe. Supponiamo che la classe Azienda abbia la responsabilità su holding, solo nel ruolo controllata. public class Azienda { // il nome del campo e uguale al ruolo private Azienda controllante = null; public Azienda getcontrollante() { return controllante; public void setcontrollante(azienda a) { controllante = a; //:

8 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 8/35 Associazioni {0,1 con attributi In questo caso dobbiamo mantenere una rappresentazione esplicita dei link per per gestire opportunamente gli attributi dell associazione assoc. A tale scopo si introduce un ulteriore class Java TipoLinkAssoc le cui istanze rappresentano link dell associazione assoc, ovvero coppie c : C, d : D con un valore per ogni attributo di associazione (attr in questo caso).

9 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 9/35 Assoc. {0,1 con attributi (cont.) La classe Java TipoLinkAsssoc: Sarà definita public e final, perché non vogliamo che i clienti possano sottoclassarla; Avrà un campo dato private final per ogni oggetto coinvolto nel link; private final C c; private final D d; Avrà un campo dato private per ogni attributo di associazione. Avrà un costruttore public che prende in input gli oggetti coinvolti nel link ed i valori per gli attributi, e crea un oggetto che rappresenta un link dell associazione assoc. Avrà i metodi public C getc() e public D getd() che ritornano il riferimento agli oggetti coinvolti nel link (attenzione: non avrà metodi setc() e setd(), perché non vogliamo che il cliente possa cambiare gli oggetti coinvolti nel link: a parte il valore degli attributi, i link sono oggetti immutabili!); Avrà ulteriori metodi per gestire gli attributi di associazione, analogamente agli attributi delle classi (ad es. un metodo get() e un metodo set() per gli attributi mutabili). Ridefinirà i metodi equals() e hashcode() ereditati da Object allo scopo di rispettare la semantica di UML, secondo la quale due link sono uguali (e quindi i corrispondenti oggetti di classe TipoLinkAssoc devono essere equal) se e solo se coinvolgono la stessa coppia di oggetti, indipendentemente dal valore degli attributi di associazione.

10 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 10/35 Class Java TipoLinkAssoc La class Java TipoLinkAssoc relativa all associazione assoc della figura precedente, avrà quindi la seguente forma: public final class TipoLinkAssoc { // Oggetti coinvolti nel link: private final C c; private final D d; // Attributi di associazione: private T attr; // final se immutabile e noto alla nascita // Costruttore: public TipoLinkAssoc(C cc, D dd, T a) throws EccezionePrecondizioni { if (cc == null dd == null) throw new EccezionePrecondizioni( "Gli oggetti linkati non possono essere null"); if (/* verifica eventuali cond. di ammissibilita per a */) { c = cc; d = dd; attr = a; else throw new EccezionePrecondizioni( "Il valore per l attributo a non e legale"); public C getc() { return c; public D getd() { return d;

11 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 11/35 Class Java TipoLinkAssoc (cont.) // Gestione attributi di associazione: come gia visto per le classi public T getattr() { return attr; // se T non permette side-effect // altrimenti: return (T)attr.clone(); // Se attr e mutabile public void setattr(t a) throws EccezionePrecondizioni { public boolean equals(object o) { // Ridefinizione di Object.equals() if (o == null) return false; if (!o.getclass().equals(getclass())) return false; TipoLinkAssoc l = (TipoLinkAssoc)o; return c == l.c && d == l.d; /* Attenzione: il valore degli attributi di associazione non contribuisce al controllo dell uguaglianza!! */ public int hashcode() { return c.hashcode() + d.hashcode(); // idem per hashcode()! //:

12 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 12/35 Associazioni {0,1 con attributi (cont.) Per quanto riguarda la class Java C (l unica responsabile): Avrà un campo private TipoLinkAssoc linkassoc (e non più di tipo D). Tale campo sarà pari a null per un oggetto c di classe C se c non è coinvolto in alcun link di associazione assoc. Avrà un metodo public TipoLinkAssoc getlinkassoc() { return linkassoc; (e non più public D getassoc() );

13 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 13/35 Associazioni {0,1 con attributi (cont.) Avrà un metodo public void inseriscilinkassoc(tipolinkassoc l) per consentire l inserimento di un nuovo link, nel caso sia possibile. Tale metodo segue lo schema seguente: public void inseriscilinkassoc(tipolinkassoc l) throws EccezionePrecondizioni, EccezioneMolteplicita { if (linkassoc!= null) throw new EccezioneMolteplicita("L oggetto ha gia un link"); if (l == null) throw new EccezionePrecondizioni("Il link non puo essere null"); if (l.getc() == this) linkassoc = l; else throw new EccezionePrecondizioni("Il link non coinvolge this"); Avrà un metodo public void eliminalinkassoc(tipolinkassoc l) per consentire l eliminazione del link dato come argomento, nel caso esista. Tale metodo segue lo schema seguente: public void eliminalinkassoc(tipolinkassoc l) throws EccezionePrecondizioni { if (l == null) throw new EccezionePrecondizioni("Il link non puo essere null"); if (l.equals(linkassoc)) { linkassoc = null; else throw new EccezionePrecondizioni( "this non ha questo link");

14 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 14/35 Esempio Consideriamo il seguente frammento di diagramma delle classi concettuale: public final class TipoLinkLavora { private final Persona persona; // Oggetti coinvolti nel link private final Azienda azienda; private final Data datainizio; // Attributo di associazione // Costruttore: public TipoLinkLavora(Persona p, Azienda a, Data d) throws EccezionePrecondizioni { if (p == null a == null) throw new EccezionePrecondizioni( "Gli oggetti linkati non possono essere null"); if (d!= null) { persona = p; azienda = a; datainizio = d; else throw new EccezionePrecondizioni( "Il valore per l attributo datainizio non e legale"); public Persona getpersona() { return persona; public Azienda getazienda() { return azienda;

15 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 15/35 Esempio (cont.) // public final class TipoLinkLavora { // Gestione attributi di associazione: come gia visto per le classi public Data getdatainizio() { return datainizio; // se Data non permette side-effect // altrimenti: return (Data)dataInizio.clone(); // datainizio e immutabile: niente metodo setdatainizio(). // Ridefinizione di Object.equals() public boolean equals(object o) { if (o == null) return false; if (!o.getclass().equals(getclass())) return false; TipoLinkLavora l = (TipoLinkLavora)o; return persona == l.persona && azienda == l.azienda; public int hashcode() { return persona.hashcode() + azienda.hashcode(); //:

16 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 16/35 Esempio (cont.) Per la classe Persona, responsabile dell associazione lavora: public class Persona { private TipoLinkLavora linklavora = null; public void inseriscilinklavora(tipolinklavora l) throws EccezionePrecondizioni, EccezioneMolteplicita { if (linklavora!= null) throw new EccezioneMolteplicita("Il link gia esiste"); if (l == null) throw new EccezionePrecondizioni("Il link non puo essere null"); if (l.getpersona() == this) linklavora = l; else throw new EccezionePrecondizioni("Il link non coinvolge this"); public void eliminalinklavora(tipolinklavora l) throws EccezionePrecondizioni { if (l == null) throw new EccezionePrecondizioni("Il link non puo essere null"); if (l.equals(linklavora)) { linklavora = null; else throw new EccezionePrecondizioni( "this non ha questo link"); public TipoLinkLavora getlinklavora() { return linklavora; //:

17 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 17/35 Esempio: Possibile stato della memoria nome "Mario" "3/2/1997" nome "IBM" cognome "Rossi" persona datainizio azienda linklavora nome "Aldo" cognome "Bianchi" linklavora null Due oggetti di classe Persona, di cui uno che lavora ed uno no. La situazione dell esempio può essere ottenuta dal seguente frammento di codice cliente: Persona mario = new Persona("Mario", "Rossi", ); Persona aldo = new Persona("Aldo", "Bianchi", ); Azienda ibm = new Azienda("IBM", ); try { TipoLinkLavora l = new TipoLinkLavora(mario, ibm, new Data(3,2,1997)); mario.inseriscilinklavora(l); catch(eccezioneprecondizioni ep) { catch(eccezionemolteplicita em) {

18 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 18/35 Osservazioni Dal precedente codice cliente si osservi come, per inserire un link di associazione lavora tra gli oggetti mario e ibm, il cliente deve, nell ordine: Creare un oggetto di classe TipoLinkLavora: TipoLinkLavora l = new TipoLinkLavora(mario, ibm, new Data(3,2,1997)); Il costruttore della classe TipoLinkLavora si occuperà di controllare che gli argomenti non siano null e che il valore dell attributo sia legale (verifica precondizioni lato server). Assegnare il link appena creato all oggetto mario: mario.inseriscilinklavora(l); Il metodo inseriscilinklavora() della classe Persona si occuperà di controllare che: L oggetto di invocazione non sia già coinvolto in un link di associazione lavora (i vincoli di molteplicità sull associazione sono {0..1!) Il link passato per argomento non sia null; Il link passato per argomento si riferisca all oggetto di invocazione this

19 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 19/35 Osservazioni (cont.) Si noti come tale metodologia di realizzazione influenza negativamente alcuni fattori di qualità, in particolare porta ad un alto accoppiamento tra le classi TipoLinkAssoc e C (la classe responsabile), perché: Il cliente, per assegnare un link a mario deve prima crearlo, e poi assegnarlo a mario; Il metodo Persona.inserisciLinkLavora() deve controllare che il link passato per argomento si riferisca all oggetto Persona di invocazione this, evitando di inserire il link in caso contrario. Infatti, il cliente potrebbe tentare di assegnare il link appena creato ad un altro oggetto di classe Persona, ad esempio scrivendo il seguente codice: TipoLinkLavora l = new TipoLinkLavora(mario, ibm, new Data(3,2,1997)); aldo.inseriscilinklavora(l); //!!!

20 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 20/35 Una metod. di realizz. di migliore qualità Per migliorare la qualità complessiva della realizzazione, si può procedere come segue: Nella classe responsabile dell associazione, C, si modifica il metodo inseriscilinkassoc(), cambiandone anche la segnatura. Il metodo diventa: // Ora gli argomenti sono l oggetto da linkare e il valore per // gli attributi public void inseriscilinkassoc( D d, T attr ) throws EccezionePrecondizioni, EccezioneMolteplicita { if (linkassoc!= null) // this ha gia un link throw new EccezioneMolteplicita("this ha gia un link"); TipoLinkAssoc l = new TipoLinkAssoc(this, d, attr); // Da qui posso invocare il costruttore di TipoLinkAssoc. // Se d == null o attr non e legale, il costruttore di TipoLinkAssoc // genera un eccezione EccezionePrecondizioni // e questo metodo viene interrotto. // Qui non devo fare piu alcun controllo! linkassoc = l; Il metodo eliminalinkassoc(tipolink l) resta invece invariato, perché vogliamo che il cliente espliciti, dandolo per argomento, il link da eliminare (ottenuto ad es. mediante il metodo getlinkassoc()).

21 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 21/35 Una met. di real. di migl. qual. (cont.) Tornando all esempio dell associazione lavora tra le classi Persona e Azienda (di cui Persona è l unica responsabile), il cliente, per creare un link tra mario e ibm deve semplicemente scrivere: Persona mario = new Persona(); Persona ibm = new Azienda(); try { mario.inseriscilinklavora(ibm, new Data(3,2,1997)); catch(eccezioneprecondizioni ep) { catch(eccezionemolteplicita em) { Si noti come abbiamo semplificato sia la gestione da parte del cliente, sia quella da parte della classe.

22 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 22/35 Esercizio: use case Con riferimento al diagramma delle classi che contiene le classi Persona e Azienda e l associazione lavora, si considerino le seguenti operazioni dello use-case Ristrutturazione aziendale: 1. Dato un insieme P di persone, un azienda a e una data d, si vuole modificare lo stato del sistema in modo che tutte le persone in P siano assunte dall azienda a a partire dalla data d; 2. Dato un insieme P di persone, un azienda a e due date dv e d, si vuole modificare lo stato del sistema in modo che tutte le persone in P che lavorano in una qualsiasi azienda diversa da a da prima di dv siano assunte dall azienda a a partire dalla data d. Si richiede di: Scrivere la specifica concettuale dello use case; Scrivere la specifica realizzativa dello use case; Realizzare lo use case in Java.

23 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 23/35 Realizz. di associazioni di molt. {0..* In questo caso, dobbiamo permettere alla class C di mantenere un insieme di oggetti di class TipoLinkAssoc, per rappresentare l insieme di link in cui i suoi oggetti sono coinvolti. Pertanto: Prevediamo, come al solito, la class TipoLinkAssoc per la rappresentazione esplicita dei link; La class C avrà ora il campo dato linkassoc di tipo Set, inizializzato all insieme vuoto di oggetti di classe TipoLinkAssoc: private Set linkassoc = new InsiemeArrayOmogeneo(TipoLinkAssoc.class); oppure private Set<TipoLinkAssoc> linkassoc = new HashSet<TipoLinkAssoc>();

24 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 24/35 Realizz. di assoc. di molt. {0..* (cont.) Il metodo C.inserisciLinkAssoc(D d, T attr) avrà la seguente definizione: public void inseriscilinkassoc( D d, T attr ) throws EccezionePrecondizioni { TipoLinkAssoc l = new TipoLinkAssoc(this, d, attr); linkassoc.add(l); Si noti come il link this, d viene aggiunto all insieme dei link dell oggetto di class C this. Inoltre, dato che il campo linkassoc è di tipo Set, il metodo add() invocato su linkassoc si occuperà di evitare di inserire un link che è equal ad uno già inserito (coincidente quindi nella coppia degli oggetti linkati, indipendentemente dal valore degli attributi, cf. definizione del metodo TipoLinkAssoc.equals()), rispettando quindi la semantica di UML. Il metodo C.eliminaLinkAssoc(TipoLinkAssoc l) avrà la seguente definizione: public void eliminalinkassoc(tipolinkassoc l) throws EccezionePrecondizioni { if (l == null) throw new EccezionePrecondizioni("Il link non puo essere null"); linkassoc.remove(l);

25 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 25/35 Realizz. di assoc. di molt. {0..* (cont.) Infine, il metodo C.getLinkAssoc() restituirà una copia dell insieme dei link (dato che l interfaccia Set permette side-effect): public Set getlinkassoc() { return (Set)((InsiemeArrayOmogeneo)linkAssoc).clone(); oppure public Set<TipoLinkAssoc> getlinkassoc() { return (Set<TipoLinkAssoc>) ((HashSet<TipoLinkAssoc>)linkAssoc).clone();

26 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 26/35 Aggregazioni {0..* (ass. senza attrib.) Ovviamente, nel caso in cui l associazione assoc non abbia attributi, possiamo, in fase di Progetto, convertirla in aggregazione, ed evitare, in fase di Realizzazione, di mantenere una rappresentazione esplicita dei link. In particolare, in questo caso possiamo: Evitare di creare la classe TipoLinkAssoc; Modificare, nella classe C, la definizione dl campo dato per la rappresentazione dei link, che ora viene inizializzato ad insieme vuoto di oggetti di classe D): private Set<D> assoc = new HashSet<D>();

27 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 27/35 Aggregazioni {0..* (cont.) Modificare, nella classe C i metodi per l inserimento, la rimozione, e l interrogazione dei link nel modo seguente: // Non si chiama piu inseriscilinkassoc()! public void inserisciassoc(d d) throws EccezionePrecondizioni { if (D == null) throw new EccezionePrecondizioni("d non puo essere null"); assoc.add(d); public void eliminaassoc(d d) throws EccezionePrecondizioni { if (D == null) throw new EccezionePrecondizioni("d non puo essere null"); linkassoc.remove(d); public Set<D> getassoc() { return (Set<D>)((HashSet<D>)assoc).clone();

28 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 28/35 Esempio Consideriamo il seguente frammento di diagramma delle classi concettuale: public final class TipoLinkHaLavorato { private final Persona persona; // Oggetti coinvolti nel link private final Azienda azienda; private final Data da; // Attributi di associazione private final Data a; public TipoLinkHaLavorato(Persona p, Azienda az, Data da, Data a) throws EccezionePrecondizioni { if (p == null az == null) throw new EccezionePrecondizioni( "Gli oggetti linkati non possono essere null"); if (da!= null && a!= null) { persona = p; azienda = az; this.da = da; this.a = a; else throw new EccezionePrecondizioni( "I valori per gli attributi non sono tutti legali"); public Persona getpersona() { return persona; public Azienda getazienda() { return azienda;

29 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 29/35 Esempio (cont.) // public final class TipoLinkHaLavorato { // Gestione attributi di associazione: come gia visto per le classi public Data getda() { return da; // se Data non permette side-effect // altrimenti: return (Data)da.clone(); // da e immutabile: niente metodo setda(). public Data geta() { return a; // se Data non permette side-effect // altrimenti: return (Data)a.clone(); // a e immutabile: niente metodo seta(). // Ridefinizione di Object.equals() public boolean equals(object o) { if (o == null) return false; if (!o.getclass().equals(getclass())) return false; TipoLinkHaLavorato l = (TipoLinkHaLavorato)o; return persona == l.persona && azienda == l.azienda; public int hashcode() { return persona.hashcode() + azienda.hashcode(); //:

30 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 30/35 Esempio (cont.) Per la classe Persona, responsabile dell associazione halavorato: import java.util.*; public class Persona { private Set<TipoLinkHaLavorato> linkhalavorato = new HashSet<TipoLinkHaLavorato>(); public void inseriscilinkhalavorato(azienda az, Data da, Data a) throws EccezionePrecondizioni { linkhalavorato.add( new TipoLinkHaLavorato(this, az, da, a) ); public void eliminalinkhalavorato(tipolinkhalavorato l) throws EccezionePrecondizioni { if (l == null) throw new EccezionePrecondizioni("Il link non puo essere null"); linkhalavorato.remove(l); public Set<TipoLinkHaLavorato> getlinkhalavorato() { return (Set<TipoLinkHaLavorato>)((HashSet<TipoLinkHaLavorato>)linkHaLavorato).clone(); //:

31 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 31/35 Esempio di cliente La seguente funzione stampa la ragione sociale di tutte le aziende per cui una certa persona ha lavorato (si assume che la classe Azienda abbia un attributo realizzativo ragionesociale: String, e che quindi la class Azienda, omessa, ha un metodo public String getragionesociale(): public static void stampaaziende(persona p) { System.out.println("La persona " + p.getnome() + " ha lavorato nelle seguenti aziende:"); Interator<TipoLinkHaLavorato> it = p.getlinkhalavorato().iterator(); while (it.hasnext()) { TipoLinkHaLavorato l = it.next(); // Nota: se avessimo usato la classe InsiemeArrayOmogeneo (non generic) // avremmo dovuto usare l interfaccia Iterator (non generic) e // avremmo dovuto scrivere: TipoLinkHaLavorato l = (TipoLinkHaLavorato)it.next(); System.out.println(l.getAzienda().getRagioneSociale());

32 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 32/35 Esercizio: use-case Relativamente al diagramma delle classi contenente le classi Persona, Azienda e l associazione halavorato, si considerino le seguenti funzionalità, appartenenti allo use-case AnalisiMercatoLavoro: 1. Data una persona p, si vuole conoscere qual è il periodo consecutivo più lungo nel quale p ha lavorato per la stessa azienda. 2. Data due persone p1 e p2, si vuole conoscere se queste sono stati mai colleghi, avendo lavorato contemporaneamente per la stessa azienda. Si richiede di: Scrivere la specifica concettuale dello use-case (fase di Analisi), modificando, se necessario, la specifica concettuale del tipo di dato Data, aggiungendo funzionalità; Effettuare la fase di Progetto, dando la specifica realizzativa dello use-case e della struttura dati Data (se modificata); Realizzare lo use-case.

33 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 33/35 ssoc. con molt. n..m (con n 1 ed m>1) In questo caso, dovremmo fare in modo che gli oggetti della class C siano sempre coinvolti in un numero di link di associazione assoc maggiore o uguale ad n e minore o uguale ad m. I metodi C.inserisciLinkAssoc(D d, T attr) ed C.eliminaLinkAssoc(TipoLinkAssoc l) dovrebbero allora controllare che l inserimento o la cancellazione del link non porti alla violazione del vincolo n..m : public void inseriscilinkassoc(d d, T attr) throws EccezionePrecondizioni, EccezioneMolteplicita { if (linkassoc.size() >= m) // << throw new EccezioneMolteplicita("Il vincolo di moltepl. sarebbe violato!"); TipoLinkAssoc l = new TipoLinkAssoc(this, d, attr); linkassoc.add(l); public void eliminalinkassoc(tipolinkassoc l) throws EccezionePrecondizioni, EccezioneMolteplicita { if (l == null) throw new EccezionePrecondizioni("Il link non puo essere null"); if (linkassoc.size() <= n) // << throw new EccezioneMolteplicita("Il vincolo di moltepl. sarebbe violato!"); linkassoc.remove(l);

34 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 34/35 Assoc. con molt. n..m (cont.) Tuttavia, appare chiaro come, in alcune situazioni, tale politica di gestione è inadeguata. Si consideri, ad es., un associazione con il vincolo Come sarebbe possibile inserire il primo link? Per questo motivo, adottiamo la seguente metodologia, che semplifica di molto la gestione dell associazione, pur mantenendola corretta: Accettiamo che il cliente possa inserire ed eliminare i link incondizionatamente (come se il vincolo fosse {0..*). I metodi C.inserisciLinkAssoc(D d, T attr) ed C.eliminaLinkAssoc(TipoLinkAssoc l) non effettuano alcun controllo sul rispetto del vincolo di molteplicità. Sarà il metodo Set C.getLinkAssoc() che, in caso il numero di link non soddisfi il vincolo n..m, genera un eccezione, informando il cliente: public Set<TipoLinkAssoc> getlinkassoc() throws EccezioneMolteplicita { if (linkassoc.size() < n linkassoc.size() > m) throw new EccezioneMolteplicita( "Il vincolo di molteplicita e violato"); return (Set<TipoLinkAssoc>)((HashSet<TipoLinkAssoc>)linkAssoc).clone();

35 T. Mancini & M. Scannapieco S.R.3 La fase di Realizzazione: realizzazione di associazioni a resp. singola February 26, 2008 p. 35/35 Associazioni con molteplicità 1..1 La gestione di questo caso può essere effettuata in modo analogo: La class C ha un campo private TipoLinkAssoc linkassoc; I metodi C.inserisciLinkAssoc() e C.eliminaLinkAssoc() restano invariati rispetto al caso 0..1 : public void inseriscilinkassoc( D d, T attr ) throws EccezionePrecondizioni, EccezioneMolteplicita { if (linkassoc!= null) throw new EccezioneMolteplicita("this ha gia un link"); linkassoc = new TipoLinkAssoc(this, d, attr); public void eliminalinkassoc(tipolinkassoc l) throws EccezionePrecondizioni { if (l == null) throw new EccezionePrecondizioni("Il link non puo essere null"); if (l.equals(linkassoc)) { linkassoc = null; else throw new EccezionePrecondizioni( "this non ha questo link"); Il metodo C.getLinkAssoc() diventa invece: public TipoLinkAssoc getlinkassoc() throws EccezioneMolteplicita { if (linkassoc == null) throw new EccezioneMolteplicita("Il vincolo di molteplicita e violato"); return linkassoc;

Corso di Progettazione del Software

Corso di Progettazione del Software T. Mancini & M. Scannapieco S.R.1 La fase di Realizzazione: realizzazione di strutture dati February 26, 2008 p. 1/22 Università degli Studi di Roma La Sapienza Facoltà di Ingegneria Corso di Laurea in

Dettagli

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Esercitazioni di PROGETTAZIONE DEL SOFTWARE (Corso di Laurea in Ingegneria Informatica ed Automatica Corso

Dettagli

Corso di Progettazione del Software

Corso di Progettazione del Software T. Mancini & M. Scannapieco E.P.1 Segreteria Studenti (SOLUZIONE) February 25, 2008 p. 1/20 Università degli Studi di Roma La Sapienza Facoltà di Ingegneria Corso di Laurea in Ingegneria Gestionale Corso

Dettagli

SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.) Sapienza - Università di Roma Facoltà di Ingegneria

SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.) Sapienza - Università di Roma Facoltà di Ingegneria Sapienza - Università di Roma Facoltà di Ingegneria Requisiti Corso di PROGETTAZIONE DEL SOFTWARE I (Corso di Laurea in Ingegneria Informatica) Prof. Giuseppe De Giacomo Canali A-L & M-Z A.A. 2006-07 Compito

Dettagli

Requisiti. Requisiti (cont.) Sapienza - Università di Roma Facoltà di Ingegneria

Requisiti. Requisiti (cont.) Sapienza - Università di Roma Facoltà di Ingegneria Sapienza - Università di Roma Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE I (Corso di Laurea in Ingegneria Informatica) Prof. Giuseppe De Giacomo Canali A-L & M-Z A.A. 2006-07 Compito d esame

Dettagli

Corso di Progettazione del Software

Corso di Progettazione del Software T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 1/21 Università degli Studi di Roma La Sapienza Facoltà di Ingegneria Corso di Laurea in Ingegneria Gestionale Corso

Dettagli

Progettazione del Software

Progettazione del Software Progettazione del Software Simulazione di esame II Domenico Fabio Savo Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Sapienza Università di Roma Requisiti L applicazione

Dettagli

Progettazione del Software

Progettazione del Software Progettazione del Software simulazione di esame III Domenico Fabio Savo Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Requisiti L'applicazione da progettare riguarda la

Dettagli

SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.)

SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.) SAPIENZA Università di Roma Facoltà di Ingegneria Sede di Latina Corso di Laurea in Ingegneria Informatica e dell Informazione Requisiti Corso di PROGETTAZIONE DEL SOFTWARE Prof. Domenico Lembo A.A. 2008-09

Dettagli

SOLUZIONE. Requisiti. Requisiti (cont.) Fase di analisi. Università di Roma La Sapienza Facoltà di Ingegneria

SOLUZIONE. Requisiti. Requisiti (cont.) Fase di analisi. Università di Roma La Sapienza Facoltà di Ingegneria Università di Roma La Sapienza Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE I (Corso di Laurea in Ingegneria Informatica) Proff. Marco Cadoli e Giuseppe De Giacomo Canali A-L & M-Z A.A. 2005-06

Dettagli

Progettazione del Software

Progettazione del Software Progettazione del Software La fase di realizzazione (parte I) Domenico Fabio Savo Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Sapienza Università di Roma Anno Accademico

Dettagli

La fase di progetto e realizzazione. PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Diagramma delle classi realizzativo

La fase di progetto e realizzazione. PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Diagramma delle classi realizzativo Università di Roma La Sapienza, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Prof. Giuseppe De Giacomo & Monica Scannapieco Anno Accademico 2003/04 LA FASE DI PROGETTO E

Dettagli

Corso di Progettazione del Software

Corso di Progettazione del Software T. Mancini & M. Scannapieco S.JOO.3 Java: le classi Object e Class February 2, 2008 p. 1/12 Università degli Studi di Roma La Sapienza Facoltà di Ingegneria Corso di Laurea in Ingegneria Gestionale Corso

Dettagli

Progettazione del Software

Progettazione del Software Progettazione del Software Simulazione di esame Domenico Fabio Savo Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Sapienza Università di Roma Requisiti L applicazione

Dettagli

Progettazione del Software

Progettazione del Software Progettazione del Software Simulazione di esame Domenico Fabio Savo Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Sapienza Università di Roma Anno Accademico 2015/2016

Dettagli

Corso di Progettazione del Software

Corso di Progettazione del Software T. Mancini & M. Scannapieco S.JOO.5 Java: copia profonda February 2, 2008 p. 1/22 Università degli Studi di Roma La Sapienza Facoltà di Ingegneria Corso di Laurea in Ingegneria Gestionale Corso di Progettazione

Dettagli

Progettazione del Software

Progettazione del Software Progettazione del Software La fase di realizzazione Domenico Fabio Savo Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Sapienza Università di Roma Le slide di questo corso

Dettagli

La fase di realizzazione. Realizzazione di una classe UML con soli attributi. Traduzione in Java del diagramma delle classi

La fase di realizzazione. Realizzazione di una classe UML con soli attributi. Traduzione in Java del diagramma delle classi SAPIENZA Università di Roma, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE Laurea in Ingegneria Informatica Prof. Giuseppe De Giacomo A.A. 2008/09 La fase di realizzazione si occupa di: La

Dettagli

Diagramma delle classi UML. Diagramma e specifica degli use case. Specifica delel classi del diagramma

Diagramma delle classi UML. Diagramma e specifica degli use case. Specifica delel classi del diagramma Università di Roma La Sapienza, Facoltà di Ingegneria Diagramma delle classi UML Corso di PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Giuseppe De Giacomo e Monica Scannapieco, A.A. 2003-04 SOLUZIONE ESAME

Dettagli

La fase di realizzazione

La fase di realizzazione SAPIENZA Università di Roma, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE Laurea in Ingegneria Informatica Prof. Giuseppe De Giacomo LA FASE DI REALIZZAZIONE (Diagrammi delle classi) La fase

Dettagli

La fase di realizzazione

La fase di realizzazione SAPIENZA Università di Roma, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE I Laurea in Ingegneria Informatica Prof. Giuseppe De Giacomo A.A. 2007/08 QUARTA PARTE: LA FASE DI REALIZZAZIONE (versione

Dettagli

Realizzazione di una classe con un associazione

Realizzazione di una classe con un associazione Realizzazione di una classe con un associazione Nel realizzare una classe che è coinvolta in un associazione, ci dobbiamo chiedere se la classe ha responsabilità sull associazione. Diciamo che una classe

Dettagli

SOLUZIONE. Requisiti. Requisiti (cont.) Fase di analisi. Università di Roma La Sapienza, Facoltà di Ingegneria

SOLUZIONE. Requisiti. Requisiti (cont.) Fase di analisi. Università di Roma La Sapienza, Facoltà di Ingegneria Università di Roma La Sapienza, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE I (Ing. Informatica) Proff. Marco Cadoli e Maurizio Lenzerini, Canali A-L & M-Z A.A. 2003-04 Compito d esame del

Dettagli

Progettazione del Software Anno Accademico

Progettazione del Software Anno Accademico Università di Roma La Sapienza, Facoltà di Ingegneria Corso di Progettazione del Software Anno Accademico 2003-2004 Corso di Laurea in Ingegneria Gestionale Prof. Giuseppe De Giacomo & Prof. Monica Scannapieco

Dettagli

Introduzione al Java Collections Framework. Progettazione del Software Anno Accademico Interfacce del Collections Framework

Introduzione al Java Collections Framework. Progettazione del Software Anno Accademico Interfacce del Collections Framework Università di Roma La Sapienza, Facoltà di Ingegneria Corso di Progettazione del Software Anno Accademico 2003-2004 Corso di Laurea in Ingegneria Gestionale Prof. Giuseppe De Giacomo & Prof. Monica Scannapieco

Dettagli

Diagramma delle classi UML

Diagramma delle classi UML Università di Roma La Sapienza, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Giuseppe De Giacomo e Monica Scannapieco, A.A. 2003-04 SOLUZIONE ESAME DEL 11/07/2003 Roma, 9

Dettagli

Uguaglianza e copia di oggetti

Uguaglianza e copia di oggetti Uguaglianza e copia di oggetti Sommario 1. Classi Object e Class 2. Uguaglianza superficiale e uguaglianza profonda 3. Copia superficiale e copia profonda 4. Uguaglianza e copia in classi derivate 1 La

Dettagli

Università di Roma La Sapienza Facoltà di Ingegneria

Università di Roma La Sapienza Facoltà di Ingegneria Università di Roma La Sapienza Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE I (Corso di Laurea in Ingegneria Informatica) Proff. Giuseppe De Giacomo e Marco Cadoli Canali A-L & M-Z A.A. 2004-05

Dettagli

//UML-class-diagram.txt. entrambe Molo e PostoBarca hanno responsabilità su contiene. solo PostoBarca ha responsabilità su assegnato, e

//UML-class-diagram.txt. entrambe Molo e PostoBarca hanno responsabilità su contiene. solo PostoBarca ha responsabilità su assegnato, e Università di Roma La Sapienza, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Prof. Giuseppe De Giacomo, A.A. 2001-02 SOLUZIONE ESAME DEL 25/06/2002 //UML-class-diagram.txt

Dettagli

Diagramma delle classi UML

Diagramma delle classi UML Università di Roma La Sapienza, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Prof. Giuseppe De Giacomo, A.A. 2001-02 SOLUZIONE ESAME DEL 25/06/2002 Roma, 23 giugno 2003 1

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 09 ADT: Lista, Pila, Coda A. Miola Marzo 2007 http://www.dia.uniroma3.it/~java/fondinf2/ ADT: Lista, Pila, Coda 1 Contenuti Tipo

Dettagli

Progettazione del Software

Progettazione del Software Progettazione del Software La fase di progetto Domenico Fabio Savo Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Sapienza Università di Roma Le slide di questo corso sono

Dettagli

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Esercitazioni di PROGETTAZIONE DEL SOFTWARE (Corso di Laurea in Ingegneria Informatica ed Automatica Corso

Dettagli

Progettazione del Software

Progettazione del Software Progettazione del Software La fase di progetto Domenico Fabio Savo Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Sapienza Università di Roma Anno Accademico 2015/2016

Dettagli

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array Classi e array Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array Si vuole definire una classe Polinomio per la rappresentazione di polinomi a

Dettagli

SAPIENZA Università di Roma, Facoltà di Ingegneria

SAPIENZA Università di Roma, Facoltà di Ingegneria SAPIENZA Università di Roma, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE Laurea in Ingegneria Informatica Prof. E.Casalicchio A.A. 2008/09 QUARTA PARTE: Soluzioni Esercizi 13-23 Soluzione

Dettagli

SAPIENZA Università di Roma, Facoltà di Ingegneria

SAPIENZA Università di Roma, Facoltà di Ingegneria SAPIENZA Università di Roma, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE Laurea in Ingegneria Informatica Prof. E.Casalicchio A.A. 2008/09 QUARTA PARTE: LA FASE DI REALIZZAZIONE Responsabilità

Dettagli

Obiettivi dell esercitazione. Requisiti (cont.) Requisiti. Sapienza Università di Roma A.A

Obiettivi dell esercitazione. Requisiti (cont.) Requisiti. Sapienza Università di Roma A.A Sapienza Università di Roma A.A. 2010-2011 Laurea in Ingegneria dell Informazione Sede di Latina Laurea in Ingegneria dell Informazione consorzio Nettuno Corso di PROGETTAZIONE DEL SOFTWARE Esercitazione

Dettagli

Fondamenti di Informatica I

Fondamenti di Informatica I Sapienza Università di Roma, Facoltà di Ingegneria Corso di Fondamenti di Informatica I Canale 1 (A-K) Anno Accademico 2009-2010 Corso di Laurea in Ingegneria Informatica Docente: Camil Demetrescu Esercitatore:

Dettagli

Corso di Progettazione del Software

Corso di Progettazione del Software T. Mancini & M. Scannapieco S.JOO.4 Java: uguaglianza superficiale e profonda February 2, 2008 p. 1/31 Università degli Studi di Roma La Sapienza Facoltà di Ingegneria Corso di Laurea in Ingegneria Gestionale

Dettagli

Fasi del ciclo di vita del software (riassunto)

Fasi del ciclo di vita del software (riassunto) Università degli Studi di Roma La Sapienza Corso di Laurea in Ingegneria dell Informazione (sede di Latina) Corso di Laurea in Ingegneria dell Informazione (consorzio Nettuno) Insegnamento di PROGETTAZIONE

Dettagli

Fasi del ciclo di vita del software (riassunto) Progetto: generalità. Progetto e realizzazione (riassunto)

Fasi del ciclo di vita del software (riassunto) Progetto: generalità. Progetto e realizzazione (riassunto) Università degli Studi di Roma La Sapienza Corso di Laurea in Ingegneria dell Informazione (sede di Latina) Corso di Laurea in Ingegneria dell Informazione (consorzio Nettuno) Fasi del ciclo di vita del

Dettagli

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Classi e oggetti A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Oggetti La programmazione orientata agli oggetti, OOP (Object-Oriented Programming),

Dettagli

Proff. Toni Mancini & Monica Scannapieco Dipartimento di Informatica e Sistemistica Università di Roma La Sapienza

Proff. Toni Mancini & Monica Scannapieco Dipartimento di Informatica e Sistemistica Università di Roma La Sapienza Università di Roma La Sapienza Facoltà di Ingegneria - Laurea in Ing. Gestionale Progettazione del Software Proff. Toni Mancini & Monica Scannapieco Dipartimento di Informatica e Sistemistica Università

Dettagli

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza

Dettagli

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals() Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals() Ereditarietà (Inheritance) RIASSUMIAMO DALLA SCORSA

Dettagli

Java: Definire Classi e Creare Oggetti

Java: Definire Classi e Creare Oggetti Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica lezione del 21 marzo 2014 Introduzione Programmare con gli Oggetti Un programma Java è costituito

Dettagli

se invoco un metodo di Object che è ridefinito in Point, viene invocato il metodo definito in Point

se invoco un metodo di Object che è ridefinito in Point, viene invocato il metodo definito in Point Gli HashSet Tipo predefinito che rappresenta insiemi di Object Cosa succede se... Posso mettere un riferimento a un Point in una variabile Object Object o=new Point(12,3); è quasi tutto come se l oggetto

Dettagli

La fase di progetto e realizzazione. PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Diagramma delle classi realizzativo

La fase di progetto e realizzazione. PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Diagramma delle classi realizzativo Università di Roma La Sapienza, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Prof. Giuseppe De Giacomo & Monica Scannapieco Anno Accademico 2003/04 LA FASE DI PROGETTO E

Dettagli

Parte I Java. Metodologie di Programmaziona Secondo Appello, 14/2/2006 1

Parte I Java. Metodologie di Programmaziona Secondo Appello, 14/2/2006 1 Metodologie di Programmaziona 05 06 Secondo Appello, 14/2/2006 1 Parte I Java Considerate le seguenti definizioni di classe. class T { class S extends T { class A { public void print(string s) { System.out.println(s);

Dettagli

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 18 - Vettori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it Corso di

Dettagli

La classe Object. Ce li ha anche HelloWorld!!!

La classe Object. Ce li ha anche HelloWorld!!! La classe Object Ogni classe estende implicitamente la classe java.lang.object La classe java.lang.object contiene dei metodi che vengono implicitamente ereditati I metodi ereditati sono: clone equals

Dettagli

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

STRUTTURE DATI: OLTRE GLI ARRAY LISTE STRUTTURE DATI: OLTRE GLI ARRAY le strutture dati progettate per ospitare una collezione di elementi, sono variazioni di array Ma l'array ha dimensione fissa anche in Java determinata a priori, in linguaggi

Dettagli

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso;

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso; Un esempio di definizione di classe con array di oggetti Sia data la classe StudUniv per gli studenti universitari (definita in una lezione precedente). Scrivere una nuova classe Corso, dove ciascun corso

Dettagli

Si usano quando serve accesso rapido sia in lettura che in scrittura su un insieme non ordinato

Si usano quando serve accesso rapido sia in lettura che in scrittura su un insieme non ordinato Le tavole hash È il modo con cui sono realizzati gli HashSet Si usano quando serve accesso rapido sia in lettura che in scrittura su un insieme non ordinato Principio base Gli array hanno le caratteristiche

Dettagli

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 9 - Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea

Dettagli

Fondamenti di Informatica T-1

Fondamenti di Informatica T-1 Fondamenti di Informatica T-1 Interfaccia Comparable e Collezioni Tutor: Allegra De Filippo allegra.defilippo@unibo.it a.a. 2015/2016 Fondamenti di Informatica T-1 Allegra De Filippo 1 / 22 Interfaccia

Dettagli

Fondamenti di Informatica T1 Interfaccia Comparable Collezioni

Fondamenti di Informatica T1 Interfaccia Comparable Collezioni Fondamenti di Informatica T1 Interfaccia Comparable Collezioni Tutor Melissa Licciardello melissa.licciardell2@unibo.it Melissa Licciardello Fondamenti di Informatica T1 1 / 19 Interfaccia Comparable Fa

Dettagli

Prova d Esame Compito A

Prova d Esame Compito A DOMANDA1 Si analizzi il codice seguente e si scriva l output prodotto dai metodi main public class General { protected int value; public static boolean flag = false; public General() { value = 1; public

Dettagli

Alberi Binario in Java

Alberi Binario in Java Alberi Binario in Java Realizzare un albero binario di ricerca. L albero binario è di ricerca se esiste una relazione di ordinamento tra i valori dei nodi (valori comparabili). In particolare, dato un

Dettagli

Stringhe ed Array. Fondamenti di Informatica A-K

Stringhe ed Array. Fondamenti di Informatica A-K Stringhe ed Array Fondamenti di Informatica A-K Esercitazione 4 Introduzione al calcolatore e Java Linguaggio Java, basi e controllo del flusso I metodi: concetti di base Stringhe ed array Classi e oggetti,

Dettagli

Preparazione allo scritto di Programmazione Comunicazione Digitale / Informatica - A.A. 2012/2013

Preparazione allo scritto di Programmazione Comunicazione Digitale / Informatica - A.A. 2012/2013 Preparazione allo scritto di Programmazione Comunicazione Digitale / Informatica - A.A. 2012/2013 Matricola:...................... Cognome:...................... Nome:...................... Informatica

Dettagli

Esercitazione n 2. Obiettivi

Esercitazione n 2. Obiettivi Esercitazione n 2 Obiettivi Progettazione di una applicazione Java Utilizzo di classi come schemi Utilizzo di costruttori Utilizzo di stringhe Uguaglianza tra oggetti Utilizzo di classi come componenti

Dettagli

Interfacce. Esempio: interfaccia I con una sola funzione g() public interface I {

Interfacce. Esempio: interfaccia I con una sola funzione g() public interface I { Interfacce Una interfaccia è un astrazione per un insieme di funzioni pubbliche delle quali si definisce solo la segnatura, e non le istruzioni. Un interfaccia viene poi implementata da una o più classi

Dettagli

Esercitazione n 2. Obiettivi

Esercitazione n 2. Obiettivi Esercitazione n 2 Obiettivi Progettazione di una applicazione Java Utilizzo di classi come schemi Utilizzo di costruttori Utilizzo di stringhe/array Uguaglianza tra oggetti Utilizzo di classi come componenti

Dettagli

Concetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio

Concetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica Introduzione Ereditarietà in Sintesi È uno dei concetti chiave della programmazione orientata agli

Dettagli

La classe java.lang.object

La classe java.lang.object La classe java.lang.object In Java: Gerarchia di ereditarietà semplice Ogni classe ha una sola super-classe Se non viene definita esplicitamente una super-classe, il compilatore usa la classe predefinita

Dettagli

SAPIENZA Università di Roma, Facoltà di Ingegneria

SAPIENZA Università di Roma, Facoltà di Ingegneria SAPIENZA Università di Roma, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE Laurea in Ingegneria Informatica Prof. E.Casalicchio A.A. 2008/09 QUARTA PARTE: LA FASE DI REALIZZAZIONE La fase di

Dettagli

Programmazione a Oggetti. Astrazione sui Dati e Iteratori

Programmazione a Oggetti. Astrazione sui Dati e Iteratori Programmazione a Oggetti Astrazione sui Dati e Iteratori Sommario Astrazione sui dati Specifica di classi Invariante di rappresentazione Funzione di astrazione Iteratori inner classes astrazione sul controllo

Dettagli

Progetto PI , passo A.1 versione del 16 marzo 2007

Progetto PI , passo A.1 versione del 16 marzo 2007 Università degli Studi di Roma La Sapienza Facoltà di Ingegneria Corso di Laurea in Ingegneria Gestionale Corso di Progettazione del Software Proff. Toni Mancini e Monica Scannapieco Progetto PI.20050411,

Dettagli

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false; Metodi iterativi con array monodimensionali 1. Scrivere un metodo che, dato un array di interi a, restituisce il valore minimo in a. public static int minimo (int[] a) { int min = a[0]; for (int i=1; i

Dettagli

La fase di realizzazione. La fase di realizzazione (cont.) Traduzione in Java del diagramma degli use case

La fase di realizzazione. La fase di realizzazione (cont.) Traduzione in Java del diagramma degli use case Università degli Studi di Roma La Sapienza Corso di Laurea in Ingegneria dell Informazione Sede di Latina Corso di Laurea in Ingegneria dell Informazione Consorzio Nettuno La fase di realizzazione si occupa

Dettagli

Introduzione al Java Collections Framework. Java Collections Framework (cont.) Interfacce del Collections Framework

Introduzione al Java Collections Framework. Java Collections Framework (cont.) Interfacce del Collections Framework Università degli Studi di Roma La Sapienza Corso di Laurea in Ingegneria dell Informazione (sede di Latina) Corso di Laurea in Ingegneria dell Informazione (consorzio Nettuno) Introduzione al Java Collections

Dettagli

Ereditarietà. Unità 9. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Ereditarietà. Unità 9. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico

Dettagli

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05 Strutture dati Il che cosa e il come Il che cosa ed il come Struttura dati: descrive come sono organizzati i dati e come sono realizzate le operazioni su di essi (cioe come si accede ai dati) Specifica

Dettagli

Progetto PI , passo A.3 versione del 28 marzo 2007

Progetto PI , passo A.3 versione del 28 marzo 2007 Università degli Studi di Roma La Sapienza Facoltà di Ingegneria Corso di Laurea in Ingegneria Gestionale Corso di Progettazione del Software Proff. Toni Mancini e Monica Scannapieco Progetto PI.20050411,

Dettagli

Introduzione al Java Collections Framework

Introduzione al Java Collections Framework Università degli Studi di Roma La Sapienza Corso di Laurea in Ingegneria dell Informazione (sede di Latina) Corso di Laurea in Ingegneria dell Informazione (consorzio Nettuno) Insegnamento di PROGETTAZIONE

Dettagli

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E14 F. Gasparetti, C. Limongelli Maggio 2012 1 Verifica presenza di elementi comuni V1 - Date due liste di stringhe scrivere

Dettagli

Esercizio. Scrivere una classe ListMap<K, V> che implementa la mappa con una lista. Strutture Dati

Esercizio. Scrivere una classe ListMap<K, V> che implementa la mappa con una lista. Strutture Dati Esercizio Scrivere una classe ListMap che implementa la mappa con una lista Esercizio Si scriva un metodo public static PositionList preorder(linkedbinarytree T) che preso in

Dettagli

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO CENTRO STUDI ULISSE Via Buccino, n. 22 - C.a.p. 84018 - Scafati (SA) Tel. Fax. 081.19970299-339.2365416-349.4152010 E-mail: info@centrostudiulisse.it - www.centrostudiulisse.it OCA JAVA 7 SE PROGRAMMER

Dettagli

La Ricorsione. Carla Binucci e Walter Didimo

La Ricorsione. Carla Binucci e Walter Didimo La Ricorsione Carla Binucci e Walter Didimo Definizione induttiva di funzioni Una funzione definita in modo induttivo è una funzione definita in termini di sé stessa ad esempio la funzione f(n) = n! (fattoriale

Dettagli

semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente

semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente Liste doppie Liste: semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente Rappresentazione grafica semplice: doppia: Gli

Dettagli

Progettazione del Software

Progettazione del Software Progettazione del Software Programmazione in Java (6) The Collections Framework Domenico Fabio Savo Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Sapienza Università di

Dettagli

Tipi riferimento e stringhe

Tipi riferimento e stringhe Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 8 Tipi riferimento e stringhe A. Miola Novembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Tipi riferimento e stringhe 1

Dettagli

Vincenzo Gervasi, Laura Semini Ingegneria del Software Dipartimento di Informatica Università di Pisa

Vincenzo Gervasi, Laura Semini Ingegneria del Software Dipartimento di Informatica Università di Pisa Vincenzo Gervasi, Laura Semini Ingegneria del Software Dipartimento di Informatica Università di Pisa Con riferimento al caso di studio REBU si consideri un nuovo requisito. Per motivi di sicurezza, sono

Dettagli

Esercizi su array di array

Esercizi su array di array Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E10 C. Limongelli Gennaio 2010 1 Contenuti Fusione di due array ordinati, con eliminazione di duplicati Verifica array bidimensionale

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E16 Esercizi Strutture Collegate e Oggetti C. Limongelli Maggio 2012 1 Contenuti q Verifiche universali ed esistenziali su strutture

Dettagli

Programmazione II Compitino (Vers. B)

Programmazione II Compitino (Vers. B) Programmazione II Compitino (Vers. B) 15 gennaio 2015 Cognome Jackson Nome Michael Matricola 696969 Anno di corso 1 Nei seguenti quesiti, quando vi è richiesto di scrivere un programma, potete limitarvi

Dettagli

Progetto PI , passo A.3 versione del 6 febbraio 2007

Progetto PI , passo A.3 versione del 6 febbraio 2007 Università degli Studi di Roma La Sapienza Facoltà di Ingegneria Corso di Laurea in Ingegneria Gestionale Corso di Progettazione del Software Proff. Toni Mancini e Monica Scannapieco Progetto PI.20061102,

Dettagli

Proprietà delle Classi e degli Oggetti in Java

Proprietà delle Classi e degli Oggetti in Java Fondamenti di Informatica Proprietà delle Classi e degli Oggetti in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Proprietà object-oriented di Java Definendo le caratteristiche e le operazioni di

Dettagli

Alcuni diagrammi. OCL (Object Constraint Language)

Alcuni diagrammi. OCL (Object Constraint Language) UML e Java UML Alcune discipline ingegneristiche dispongono di validi mezzi di rappresentazione (schemi, diagrammi di prestazioni e consumi,...) Il software non dispone ancora di tecniche efficaci per

Dettagli

Programmazione con Java

Programmazione con Java Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:

Dettagli

Fondamenti di Informatica T-1 Modulo 2

Fondamenti di Informatica T-1 Modulo 2 Fondamenti di Informatica T-1 Modulo 2 1 Obiettivi di questa esercitazione 1. Array e funzioni 2. Array e funzioni ricorsive 3. Array e confronto di array 2 Esercizio 1 Creare un programma che legga da

Dettagli

Informazioni generali

Informazioni generali Informazioni generali Esercitazioni del corso di Fondamenti di informatica Tutor: Ing. Rughetti Diego Esercitazione: Giovedì 14.30-16.00 Tutoraggio: Giovedì 16.15-17.45 Contatto: rughettidiego@tiscali.it

Dettagli

1 Catena di officine, versione 2

1 Catena di officine, versione 2 Università degli Studi di Roma La Sapienza Facoltà di Ingegneria Corso di Laurea in Ingegneria Gestionale Corso di Progettazione del Software Proff. Toni Mancini e Monica Scannapieco Esercitazione E.A.3

Dettagli