UML (2°lez) UML: “un immagine vale più di mille parole ” • UML: Unified Modelling Language, rappresenta un insieme di diagrammi usati per la descrizione di sistemi software, basati sul paradigma Orientato agli Oggetti. • Lo UML 2.0 è costituito da una serie di diagrammi (circa 14) che consento di rappresentare tutti gli aspetti legati alla progettazione, sviluppo, utilizzo di un sistema SW. • Tra i tanti: i Diagrammi delle Classi sono quelli più utilizzati in fase di progettazione delle classi. E quelli di Sequenza per descrivere come gli oggetti interagiscono tra loro per portare a compimento un un’ operazione. 2 Diagrammi di classe • Illustrano le classi che costituiscono una parte significativa del sistema: – le relazioni tra esse – la loro struttura interna cioè i metodi e gli attributi – Gli elementi statici – Gli elementi astratti …. ed altre caratteristiche tecniche presenti in molti linguaggi di programmazione. 3 Rappresentazione di una classe • La classe cliente è rappresentata da un rettangolo, all’interno del quale si specifica il nome della classe. • Il corrispondente codice Java è: Public class Cliente { } Cliente • Diagramma composto da una sola classe. 4 Generalizzazione (derivazione) • Per rappresentare che una classe B deriva da una classe A si usa : Es: per indicare che la classe Cliente deriva da una classe Soggetto: Il codice Java corrispondente è: public class Soggetto { } public class Cliente extends Soggetto{ }//ereditarietà Soggetto Cliente 5 Generalizzazione .. Il codice Java corrispondente è: Public class Soggetto {.. ..} public class Cliente extends Soggetto {.. ..} public class Dipendente extends Soggetto {.. ..} public class Docente extends Soggetto {.. ..} 6 • Esercizio: Modellare la gerarchia delle classi con l’UML, che descrivono i veicoli a motore. Individuare le sottoclassi che possono derivare dalla classe base. Scrivere la struttura in linguaggio JAVA del diagramma prodotto. Associazioni • Si usano quando è necessario indicare che una classe è utilizzata da un’altra classe • Es: per indicare che la classe Soggetto utilizza la classe Indirizzo per memorizzare le informazioni sull’indirizzo del soggetto. In questo caso nella classe Soggetto c’è un attributo di tipo Indirizzo , usato per il funzionamento della classe principale. 8 Es: associazione • in questi diagrammi si indica che un soggetto ha un solo indirizzo • un commesso lavora in un solo negozio 9 Associazioni • Il codice JAVA corrispondente è: public class Soggetto { Indirizzo ind; } public class Indirizzo{ } ---------------------------------------------------public class Negozio{ Commesso comm; } public class Commesso{ } Associazioni • La classe Soggetto usa la classe Indirizzo: Nella classe Soggetto è presente un attributo di tipo Indirizzo Nella classe Negozio è presente un attributo di tipo Commesso • Le associazioni nei diagrammi di classe consentono di specificare alcune informazioni aggiuntive: – Molteplicità – Eventuali vincoli • Molteplicità: permette di definire quanti oggetti possono essere contenuti nella proprietà, nell’esempio (molteplicità 1) • Se un Soggetto può avere da 0 (indice minimo non è obbligatorio) a 5 (inidce massimo è obbligatorio) indirizzi si indica cosi: 12 Associazioni: - molteplicità • Le varianti di questa situazione possono essere: – 0..n indica fino ad un massimo di n – 1..n indica minimo 1 fino ad un massimo di n – 0..* indica che non ci sono limiti sul numero massimo – 1..* indica che il valore minimo è uno e quello massimo non è definito (teoricamente infinito) 13 Associazioni • Il codice JAVA corrispondente, userà un vettore, che è dinamico per definizione. Spetta al codice implementare i controlli sugli indici. • Vediamo il codice JAVA Traduzione in JAVA - Associazione • Codice: SoggettoVettore.java • Il costruttore ci è servito per definire (cioè assegnare la sua dimensione, che non potrà più essere modificata) il vettore di cinque elementi che la classe Soggetto usa. • Il metodo setIndirizzo(), imposta l’indirizzo nella posizione specifica dall’indice, dopo aver controllato che indice ha un valore accettabile. • Il metodo getIndirizzo() restituisce l’indirizzo specificato nella posizione indicata da indice sempre dopo aver controllato gli indici. Associazione 1:N • Supponiamo di dover tradurre in JAVA la seguente associazione 1:N • In questo caso il controllo diventa più accurato perché si deve verificare che esista almeno un indirizzo. • Codice: SoggettoList1..N.java • In questo esempio si è scelto di usare la classe predefinita ArrayList che implementa un elenco di oggetti senza limite di numero, in quanto più efficiente della struttura vettore usa prima. • Il controllo sulla presenza di almeno un elemento con la struttura vettore sarebbe stato più laborioso. 17 18