Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013



Documenti analoghi
Programmazione a oggetti e JAVA. Prof. B.Buttarazzi A.A. 2011/2012

UML Diagrammi delle classi. UML Diagramma classi 1

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore

Class Diagram. Catia Trubiani. Laboratorio di Ingegneria del Software a.a

Rappresentazione grafica di entità e attributi

UML Unified Modeling Language

Informatica 3. LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1)

Lezione 4. Modello EER

Il modello EER comprende tutti i concetti di modellazione del modello ER, cui si aggiungono:

Programmazione a Oggetti Lezione 10. Ereditarieta

I casi d uso corrispondono ai compiti che l attore (che può essere una persona fisica e non) può svolgere.

Soluzione dell esercizio del 2 Febbraio 2004

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Modellazione dei dati in UML

MODELLO E/R. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Concetto di Funzione e Procedura METODI in Java

PROGETTAZIONE CONCETTUALE

progettare buone gerarchie

APPUNTI DI MATEMATICA ALGEBRA \ INSIEMISTICA \ TEORIA DEGLI INSIEMI (1)

Identificare le classi in un sistema

Basi di dati. Concetti introduttivi ESEMPIO. INSEGNAMENTI Fisica, Analisi, Aule. Docenti. Entità Relazioni Interrogazioni. Ultima modifica: 26/02/2007

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe È qualcosa che abbiamo già visto varie volte

Modulo 4: Ereditarietà, interfacce e clonazione

Database. Appunti di Amaranto Oronzo e Giancane Diego Lezione dell Ing. Lucia Vaira 24/04/2014

Realizzazione di una classe con un associazione

Elementi di UML (7): Diagrammi dei componenti e di deployment

Metodologie di progetto Estensione di classi Implementazione di interfacce Composizione

Alcuni Design Pattern in Java

UML: Class Diagram. Ing. Orazio Tomarchio

LE BASI DI DATI. Seconda parte La progettazione di database Relazionali SCHEMA CONCETTUALE LE ASSOCIAZIONI

Basi di dati. Le funzionalità del sistema non vanno però ignorate

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Basi di dati. Concetti Introduttivi ESEMPIO. Fisica, Analisi, Informatica. Entità Relazioni Interrogazioni. Database 2

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 17 Dicembre 2005

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Progettazione del Software

Lezione 2. Il modello entità relazione

I Sistemi Informativi

Introduzione a Classi e Oggetti

Progettazione di basi di dati. Progettazione di basi di dati. Ciclo di vita dei sistemi informativi. Fasi del ciclo di vita [1]

Testo Esercizio. Un modello è ragionevole quando contiene queste tre caratteristiche.

Fondamenti di Informatica C Esercitazioni di Laboratorio / 3 Outline

Guida all uso di Java Diagrammi ER

Java Virtual Machine

Testo Esercizio. Un modello è ragionevole quando contiene queste tre caratteristiche.

Modello dei Dati ENTITÀ-RELAZIONE (ENTITY-RELATIONSHIP) é l insieme di concetti, simboli, regole che useremo per rappresentare il modello concettuale

DATABASE.

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

Informatica (Basi di Dati)

Java: Compilatore e Interprete

GESTIONE DEI PROCESSI

Database: collezione di fatti, registrabili e con un ben preciso significato, relazionati fra di loro

Funzioni in C. Violetta Lonati

Traccia di soluzione dell esercizio del 25/1/2005

Object Oriented Programming

Alessandra Raffaetà. Basi di Dati

DFD DISPENSA DEL CORSO DI SISTEMI INFORMATIVI UNIVERSITÀ DEGLI STUDI DI VERONA FACOLTÀ DI MM.FF.NN LAUREA SPECIALISTICA IN INFORMATICA

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Concetti di base di ingegneria del software

Esercitazione n 4. Obiettivi

MODELLO E/R. Modellazione dei dati

Soluzione dell esercizio del 12 Febbraio 2004

Progettare una basi di dati vuole dire progettare la struttura dei dati e le applicazioni

Ingegneria del Software: UML Class Diagram

La progettazione concettuale: il modello ER. 17/12/2007 Unità di Apprendimento A2 1

Programmazione A.A Programmazione Orientata agli Oggetti: Lavorare con gli oggetti ( Lezione XXVII)

Telematica II 17. Esercitazione/Laboratorio 6

Esercizi della lezione 5 di Java

Object Oriented Software Design

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:

Parola chiave extends

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci

UML. Unified Modeling Language (linguaggio di modellazione unificato) prof. Antonio Gervasi IIS «A.Meucci» Casarano

Sequence Diagram e Collaboration Diagram

Anno 1. Le relazioni fondamentali (equivalenza, d'ordine, inverse, fra insiemi)

L ambizione dei design pattern (letteralmente schemi di programmazione) è quella di offrire soluzioni a problemi ricorrenti che facilitano lo

Dalla progettazione concettuale alla modellazione di dominio

Un modello è ragionevole quando contiene queste tre caratteristiche.

Esercitazione di Basi di Dati

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Basi di Dati e Sistemi Informativi. Progettazione logica: Il modello relazionale

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi

Oggetti Lezione 3. aspetti generali e definizione di classi I

Progettazione di Basi di Dati

Claudia Raibulet

Progettazione : Design Pattern Creazionali

Corso di Amministrazione di Reti A.A. 2002/2003

Lo schema concettuale risultante dalla progettazione concettuale è l input alla fase di progettazione logica.

Introduzione alla Programmazione Orientata agli Oggetti. Classi, Oggetti e Messaggi

BASI DI DATI - : I modelli di database

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A Esercitazione. Programmazione Object Oriented in Java

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da

DB - Modello relazionale dei dati. DB - Modello Relazionale 1

Transcript:

Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013

Relazioni tra classi Ereditarietà Generalizzazione Specializzazione Aggregazione Composizione Dipendenza Associazione Sommario

Relazioni tra classi Ereditarietà Generalizzazione Specializzazione Aggregazione Composizione Associazione Dipendenza Sommario

Relazioni tra classi:ereditarietà Generalizzazione & Specializzazione L ereditarietà è il meccanismo attraverso il quale una classe detta Figlio eredita le caratteristiche di una classe detta Padre Il significato della generalizzazione è che ogni istanza della sottoclasse è anche istanza della superclasse pertanto la classe figlio può essere interpretata anche come un tipo di padre. A è una generalizzazione di B B è una specializzazione di A. B aggiunge caratteristiche strutturali e comportamentali ad A B ha i propri attributi e metodi + attributi e operazioni ereditati da A (con visibilità public,protected) B può ridefinire attributi e operazioni ereditati da A 16/01/2013 4

Relazioni tra classi:ereditarietà Generalizzazione & Specializzazione L ereditarietà è il meccanismo attraverso il quale una classe detta Figlio eredita le caratteristiche di una classe detta Padre Il significato della generalizzazione è che ogni istanza della sottoclasse è anche istanza della superclasse pertanto la classe figlio può essere interpretata anche come un tipo di padre. La relazione nel verso della generalizzazione può essere letta come Uno Studente è un tipo di Persona La relazione nel verso della specializzazione può essere letta come Una Persona può essere uno Studente 16/01/2013 5

Relazioni tra classi:ereditarietà Generalizzazione & Specializzazione L ereditarietà è il meccanismo attraverso il quale una classe detta Figlio eredita le caratteristiche di una classe detta Padre Il significato della generalizzazione è che ogni istanza della sottoclasse è anche istanza della superclasse pertanto la classe figlio può essere interpretata anche come un tipo di padre. Si dice che tra una sottoclasse e la sua superclasse esiste una relazione di tipo is-a Studente e un tipo di (is-a, is-a-kind-of) Persona 16/01/2013 6

Relazioni tra classi:ereditarietà Generalizzazione & Specializzazione Esempio UML:Class Diagram Mostra un insieme di classi (concrete, astratte, interfacce ) e le relazioni tra esse (dipendenza, associazione, aggregazione, composizione, generalizzazione) Può essere visto come un grafo dove i classi/interfacce e gli archi le relazioni nodi sono 16/01/2013 7

Esempio UML:Object Diagram I diagrammi degli oggetti sono una variante dei class diagram (hanno la stessa notazione ). Forniscono possibili fotografie del sistema in esecuzione. Mettono in relazione ISTANZE (oggetti) di classi specificando il loro nome e tipo(classe). 16/01/2013 8

Relazioni tra classi:ereditarietà Generalizzazione & Specializzazione 16/01/2013 9

Relazioni tra classi:ereditarietà Generalizzazione & Classi Astratte Una Classe Astratta contiene metodi privi di implementazione Per questa ragione non può essere istanziata Il corsivo permette di distinguere le parti astratte da quelle concrete 10

Relazioni tra classi:ereditarietà Generalizzazione & Classi Astratte Una Classe Astratta contiene metodi privi di implementazione Per questa ragione non può essere istanziata Il corsivo permette di distinguere le parti astratte da quelle concreteclasseastratta 11

Relazioni tra classi:ereditarietà Generalizzazione & Classi Astratte La classe astratta Veicolo definisce le caratteristiche comuni di tutti i veicoli ma la classe non è istanziabile in quanto non esiste un veicolo. Lo stesso vale per le altre classi astratte Veicolo Terrestre e Veicolo Aereo Le classi Automobile, Moto, Aereo ed Elicottero sono invece classi istanziabili perche si riferiscono ad entità esistenti nel mondo reale di cui è possibile definire una implementazione per tutte le operazioni. 12

Relazioni tra classi:ereditarietà multipla L'ereditarietà singola modella bene le relazioni insieme/sottoinsieme ma non le intersezioni di insiemi, che necessitano della ereditarietà multipla 13

Relazioni tra classi:ereditarietà multipla Diventa una tassonomia di INTERFACCE!! L'ereditarietà singola modella bene le relazioni insieme/sottoinsieme m non le intersezioni di insiemi, che necessitano della ereditarietà multipla 14

Relazioni tra classi:ereditarietà multipla Interfacce Una interfaccia è una specifica di comportamento Una interfaccia è definita da un insieme di operazioni astratte. Una classe che implementa una interfaccia fornisce una possibile realizzazione della specifica La relazione che lega una interfaccia alla classe che la implementa si chiama realizzazione La classe Elicottero implementa l interfaccia IVolante in quanto implementa tutte le sue operazioni (in questo caso vaia ) 15

Relazioni tra classi:ereditarietà multipla Interfacce Le interfacce rappresentano collezioni di operazioni che sono utilizzate per specificare un servizio di una classe e definiscono solo la segnatura delle operazioni 16

La freccia tratteggiata indica esattamente la realizzazione,ossia l implementazione di un interfaccia Da non confondere con la freccia continua dell ereditarietà Esempio di interface Le interfacce sono SEMPRE PUBBLICHE e dichiarano sempre e solo metodi PUBBLICI e costanti PUBBLICHE 16/01/2013 17

Relazioni tra classi:ereditarietà multipla Interfacce Una interfaccia può ereditare operazioni da un altra interfaccia 18

Relazioni tra classi:ereditarietà multipla Interfacce Una interfaccia può ereditare operazioni da un altra interfaccia Dopo extends può esservi un elenco di più interfacce 19

Relazioni tra classi:aggregazione L aggregazione è un vincolo debole (più debole della composizione) identifica classi con periodo di vita diverso ciò implica che quando l'oggetto ottenuto aggregando altri oggetti viene distrutto gli oggetti che lo caratterizzano rimangono comunque in vita. Nota:l aggregazione è indicata da un rombo vuoto rivolto verso la classe contenitore.

Relazioni tra classi:aggregazione L aggregazione è un vincolo debole (più debole della composizione) identifica classi con periodo di vita diverso ciò implica che quando l'oggetto ottenuto aggregando altri oggetti viene distrutto gli oggetti che lo caratterizzano rimangono comunque in vita. Nota:l aggregazione è indicata da un rombo vuoto rivolto verso la classe contenitore.

L'aggregazione (vincolo debole) indica che gli oggetti "contenuti" ha vita propria anche senza l'oggetto contenitore ovvero esistono anche se sparisce la relazione... Esempio: La classe A è formata da istanze delle classi B, C, D (precedentemente definite) messe in relazione per aggregazione. Il programmatore per utilizzare la classe A rispettando la relazione di aggregazione nel main crea prima le istanze dei tre oggetti (B;C;D) e poi li associa ai componenti dell'oggetto: public class A { private B oggettob; private C oggettoc; private D oggettod; public void setb(b ob); public void setc(c oc); public void setd(d od); } tipo identificatore 16/01/2013 22

L'aggregazione (vincolo debole) indica che l'oggetto "contenuto" ha vita propria anche senza l'oggetto contenitore. public static void main(string[] args) { B b = new B(); C c = new C(); D d = new D(); } } A a = new A(); a.setb(b); a.setc(c); a.setd(d); 16/01/2013 23

Esercizio sull Aggregazione 16/01/2013 24

Esercizio sull Aggregazione 16/01/2013 25

Esercizio sull Aggregazione 16/01/2013 26

Relazioni tra classi:composizione L aggregazione è un vincolo debole (più debole della composizione) identifica classi con periodo di vita diverso ciò implica che quando l'oggetto ottenuto aggregando altri oggetti viene distrutto gli oggetti che lo caratterizzano rimangono comunque in vita. Nota:l aggregazione è indicata da un rombo vuoto rivolto verso la classe contenitore.

La composizione identifica classi con stesso periodo di vita ciò implica che quando viene distrutto l'oggetto composito tutti gli oggetti che lo caratterizzano devono essere distrutti. Nota:la composizione è indicata da un rombo pieno rivolto verso la classe contenitore. 16/01/2013 28

La composizione identifica classi con stesso periodo di vita ciò implica che quando viene distrutto l'oggetto composito tutti gli oggetti che lo caratterizzano devono essere distrutti. Nota:la composizione è indicata da un rombo pieno rivolto verso la classe contenitore. L'aggregazione (vincolo forte) indica che l'oggetto contenuto non ha vita propria, quindi deve essere distrutto assieme al contenitore 16/01/2013 29

Esempio: La classe A è formata da istanze delle classi B, C, D (precedentemente definite) messe in relazione per composizione ( quindi per rispettare questa relazione il programmatore non può mai creare istanze di B, C e D al di fuori di un'istanza di A). Il programmatore per utilizzare la classe A rispettando la relazione di aggregazione deve creare prima nella classe A le istanze dei tre oggetti (B;C;D) che compongono i campi dell'oggetto A. public class A { } La composizione identifica classi con stesso periodo di vita ciò implica che quando viene distrutto l'oggetto composito tutti gli oggetti che lo caratterizzano devono essere distrutti. La composizione è una relazione più forte quindi gli oggetto contenuti non possono esistere senza il contenitore... public void usob() tipo { B b = new B(); b.metododib(); } identificatore public void usoc() { C c = new C(); c.metododic(); } public void usod() { D d = new D(); d.metododid(); 16/01/2013 } 30

La composizione identifica classi con stesso periodo di vita ciò implica che quando viene distrutto l'oggetto composito tutti gli oggetti che lo caratterizzano devono essere distrutti. La composizione è una relazione più forte quindi gli oggetto contenuti non possono esistere senza il contenitore... Nel main si crea l oggetto A e automaticamente si usano i suoi componenti. public static void main(string[] args) { A a = new A(); a.usob(); a.usoc(); a.usod(); } 16/01/2013 31

UML:Class Diagram Mostra un insieme di classi (concrete, astratte, interfacce ) e le relazioni tra di esse (dipendenza, associazione, aggregazione, composizione, generalizzazione) Può essere visto come un grafo dove i classi/interfacce e gli archi le relazioni nodi sono 16/01/2013 32

UML:Object Diagram I diagrammi degli oggetti sono una variante dei class diagram (hanno la stessa notazione ) cheforniscono possibili fotografie del sistema in esecuzione. Infatti mettono in relazione ISTANZE (oggetti) di classi identificati con il loro nome e non tipi di dato (classi). 16/01/2013 33

Relazioni tra classi:associazione L'associazione è una relazione simile all aggregazione che esprime una relazione fra una o più classi. E' caratterizzata da: un nome una molteplicità Può essere: simmetrica (navigabile nelle due direzioni) ricorsiva (ovvero tra oggetti della stessa classe) Si rappresenta con una linea continua di unione senza freccia (per indicare che il senso di lettura è bidirezionale) o con freccia. Ci sono fondamentalmente 3 tipi di associazioni: uno-a-uno uno-a-molti molti-a-molti Nel primo caso l'oggetto della classe A contiene il riferimento all'oggetto della classe B (Esattamente come nell'esempio dell'aggregazione). Nel secondo caso l'oggetto della classe A contiene il riferimento a un array di oggetti appartenenti alla classe B. 16/01/2013 34 L'ultimo caso, cambia dal secondo solo perché pure la classe B avrà un array che fa riferimento alla classe A.

L'associazione uno a uno Un Automobile ha al più un Proprietario Nel Proprietario Non c è il riferimento all automobile 16/01/2013 35

L'associazione uno a uno 16/01/2013 36

L'associazione uno a uno 16/01/2013 37

L'associazione uno a uno bidirezionale 16/01/2013 38

L'associazione uno a uno bidirezionale class CartaIdentita { private Persona possessore; private String numero; public void associapersona(persona partner); CartaIdentita (String numcarta); }; class Persona { private CartaIdentita documento; private String nome; public void associacartaidentita(cartaidentita partner); Persona (String nompersona); } Nella classe Persona c è il riferimento alla classe CartaIdentità 16/01/2013 39

L'associazione uno a uno bidirezionale { //istanziazione delle variabili CartaIdentita cartiden = new CartaIdentita( AC1234 ); Persona pers = new Persona( Tizio ); //creazione dell associazione tra i due oggetti cartiden.associapersona(pers); pers.associaazienda(cartiden); // segue }; 16/01/2013 40

L'associazione riflessiva 16/01/2013 41

Esercizio di associazione 16/01/2013 42

Esempio di associazione uno-a-molti. In una casa vivono una o più persone. Un oggetto della classe Casa contiene il riferimento a un array di classe Persona. La classe Persona, invece, contiene solamente un riferimento alla classe Casa. 16/01/2013 43

Associazione uno-a-molti Corso di Laurea Studente class CorsodiLaurea { private Studente [] studenti; private String denominazione; public void aggstudente (Studente newstud); CorsodiLaurea (String denomcorso); }; class Studente { private CorsodiLaurea iscrizione; private String matricola; private String nome; public void associacdl(corsodilaurea partner); Studente(String nome, String numeromat); }; 16/01/2013 44

Associazione uno-a-molti Impiegato Società 16/01/2013 45

Relazioni tra classi:dipendenze Una dipendenza è una relazione tra due elementi, dove un cambiamento ad uno di essi (il fornitore) può influenzare o fornire delle informazioni necessarie all altro (il cliente) La dipendenza va in un sola direzione: dal cliente al fornitore A differenza delle associazioni, una relazione di dipendenza non sussiste fra istanze nel dominio rappresentato, ma sussiste fra gli elementi del modello UML stesso o fra le astrazioni che tali elementi rappresentano 16/01/2013 46

Relazioni tra classi:dipendenze L automobile per viaggiare usa le strade (tratto percorribile) Al contrario le strade esistono indipendentemente dalle automobili void public class Automobile {public void percorri( TrattoPercorribile p){...}} 16/01/2013 47

Esercizio 16/01/2013 48

Esercizio 16/01/2013 49