Object Oriented Software Design



Похожие документы
UML Diagrammi delle classi. UML Diagramma classi 1

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

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

Modellazione dei dati in UML

Strumenti di modellazione. Gabriella Trucco

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:

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

Programmi e Oggetti Software

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

Progetto di Applicazioni Software

Object Oriented Programming

Generazione Automatica di Asserzioni da Modelli di Specifica

Sequenza alternativa degli eventi: Variazione di prezzo superiore al 20% per almeno un articolo.

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010)

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

UML Component and Deployment diagram

Database. Si ringrazia Marco Bertini per le slides

Automazione Industriale 4- Ingegneria del Software

Java: Compilatore e Interprete

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci

Informatica (Basi di Dati)

Progettaz. e sviluppo Data Base

Concetti di base di ingegneria del software

Raccolta dei Requisiti con i Casi D'uso. Corso di Ingegneria del Software Anno Accademico 2012/13

Progettazione : Design Pattern Creazionali

Software di base. Corso di Fondamenti di Informatica

Soluzione dell esercizio del 2 Febbraio 2004

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

INGEGNERIA DEL SOFTWARE. Prof. Paolo Salvaneschi

UML Unified Modeling Language

Progettazione del Software, Laurea in Ingegneria Gestionale Progettazione del Software Laurea in Ing. Gestionale

SOMMARIO Gruppo 4 - All right reserved 1

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Introduzione agli Abstract Data Type (ADT)

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

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

Database 1 biblioteca universitaria. Testo del quesito

Università di Roma La Sapienza, Facoltà di Ingegneria

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

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

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

Realizzazione di una classe con un associazione

Capitolo 13. Interrogare una base di dati

Access. P a r t e p r i m a

ING SW. Progetto di Ingegneria del Software. e-travel. Requisiti Utente. Specifiche Funzionali del Sistema

Concetto di Funzione e Procedura METODI in Java

Ricorsione. Corso di Fondamenti di Informatica

RIFERIMENTI ATTORI GLOSSARIO. ERRORI COMUNI REV. REQUISITI INGEGNERIA DEL SOFTWARE Università degli Studi di Padova

Università degli Studi di Parma Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica. Ingegneria del Software. La fase di Analisi

Progettazione del Software A.A.2008/09

Test di Autovalutazione

UML - Unified Modeling Language

Vettori Algoritmi elementari di ordinamento

Osservazioni sulla continuità per le funzioni reali di variabile reale

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

Dalla progettazione concettuale alla modellazione di dominio

Organizzazione degli archivi

La Metodologia adottata nel Corso

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

Esercitazioni di PROGETTAZIONE DEL SOFTWARE A.A

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

ALGEBRA DELLE PROPOSIZIONI

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

Corso di Informatica

Introduzione Ai Data Bases. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San giovanni

La Progettazione Concettuale

Identificare le classi in un sistema

Appunti di informatica. Lezione 2 anno accademico Mario Verdicchio

4.1 Che cos è l ideazione

Università degli Studi di Roma La Sapienza, Facoltà di Ingegneria

Capitolo 2. Operazione di limite

Corso di Sistemi di Elaborazione delle Informazioni I Anno 2005/2006. Esercizi entità relazione risolti. a cura di Angela Campagnaro

Programmazione a Oggetti Modulo B

leaders in engineering excellence

TECNICHE DI SIMULAZIONE

Corso di Informatica

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

Progetto di Applicazioni Software

Funzioni in C. Violetta Lonati

Politecnico di Bari Corso di Laurea Specialistica in Ingegneria Informatica A.A Casi di Studio. Traccia n 1

Esercizi della lezione 5 di Java

Modellazione di sistema

12. Evoluzione del Software

Sequence Diagram e Collaboration Diagram

Introduzione alla teoria dei database relazionali. Come progettare un database

Laboratorio di Pedagogia Sperimentale. Indice

SPC e distribuzione normale con Access

11. Evoluzione del Software

Basi di dati. (Sistemi Informativi) teoria e pratica con Microsoft Access. Basi di dati. Basi di dati. Basi di dati e DBMS DBMS DBMS

Progettazione di Database. Un Esempio

Esercitazione N7:Gioco dei 21 fiammiferi (impariamo java giocando)

7. Architetture Software

Automazione Industriale (scheduling+mms) scheduling+mms.

Транскрипт:

Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Object Oriented Software Design Corso di Tecniche di Programmazione Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti e dei Sistemi Informatici - Polo di Rieti) Anno Accademico 2007/2008 Prof. Paolo Romano Si ringraziano il Prof. G. De Giacomo ed il Prof. Enrico Denti per aver reso disponibile il proprio materiale didattico sul quale si basano queste slides

Principi di base dell orientazione agli oggetti

SISTEMI A OGGETTI Un sistema a oggetti è composto da (classi e) oggetti che interagiscono fra loro Alcune domande: Cosa vuol dire sistema composto da oggetti? Come sono fatti gli oggetti complessi? Incorporano oggetti più semplici? Come interagiscono tutti questi oggetti fra loro? Progettare un sistema a oggetti o anche solo un oggetto complesso richiede un modello chiaro di cosa si vuol fare.

RELAZIONI FRA OGGETTI Per modellare un oggetto complesso e quindi per estensione anche un intero sistema bisogna chiarire bene le relazioni fra gli oggetti del dominio le descrizioni parole possono essere fuorvianti.. Qualche esempio: una flotta ha un ammiraglio una flotta ha delle navi un libro ha delle pagine un esagono ha sei vertici Il verbo avere NON HA LO STESSO SIGNIFICATO nelle varie frasi! Per modellare bene un oggetto complesso occorre chiarire bene i diversi possibili significati

RELAZIONI FRA OGGETTI: ESEMPI Ragioniamo su queste frasi: La flotta non è fatta di ammiragli però, è in relazione con uno (e un solo) ammiraglio che la comanda. una flotta ha un ammiraglio una flotta ha delle navi un esagono ha sei vertici La flotta è invece fatta di navi ma nessuna è indispensabile per l esistenza della flotta! Però, la flotta è tale finché (e solo se) c è almeno una nave. L esagono non è fatto di vertici, ma ne è caratterizzato in modo forte Tutti i vertici sono essenziali: se manca un vertice o ce n è uno in più, non è più un esagono!

UML UML (Unified Modeling Language) è un linguaggio grafico per esprimere il modello di un sistema a oggetti oggi ampiamente usato in tutte le fasi analisi, progettazione, implementazione di un sistema supportato da molti strumenti per analisi, progetto ma anche reverse engineering e generazione semiautomatica di codice (Java, C++, C# ) Fra i molti diagrammi, particolare importanza assume il diagramma delle classi

UML: CLASSI Una classe è rappresentata in UML mediante un disegno come il seguente: campi dati: - se privati, + se pubblici, # se package o protetti costruttori e metodi: - se privati, + se pubblici, # se package o protetti Eventuali dati o metodi statici sono tipicamente sottolineati Esistono strumenti sia per produrre automaticamente il diagramma a partire dal codice Java (reverse engineering), sia per generare lo scheletro del codice dal modello.

UML: PACKAGE Un package è rappresentato in UML mediante un disegno come il seguente: Fra parentesi si specifica il package di cui la classe fa parte.

UML: RELAZIONE DI USO Quando una classe ne usa un altra, si dice che vi è una relazione di uso o di dipendenza, rappresentata da una freccia tratteggiata. Indica che Esempio4 usa Counter, ossia dipende da esso, perché ne è cliente.

UML: ASSOCIAZIONI Quando una entità rappresentata da una classe possiede una o più entità rappresentate da un altra classe, si parla di associazione fra classi. Esempi di tipi diversi di associazioni: una flotta ha un ammiraglio una classe ha degli studenti un libro ha delle pagine un uomo ha un cuore, due polmoni, etc

ASSOCIAZIONI INTERESSANTI Casi di associazioni di particolare interesse sono le Aggregazioni e le Composizioni. Aggregazione esprime che un oggetto complesso è un aggregato di altri oggetti (le parti ), nessuna delle quali però è essenziale per l esistenza dell oggetto complesso o per il suo funzionamento ESEMPIO: una flotta ha delle navi Composizione esprime che l oggetto complesso è composto o caratterizzato da parti tutte essenziali: se ne manca anche una sola, l oggetto composto cessa di esistere. ESEMPIO: un triangolo ha tre vertici

RIFLETTENDO SU ALCUNI ESEMPI una flotta ha un ammiraglio associazione la flotta non è un aggregato di ammiragli ma non è neppure composta da ammiragli una classe ha degli studenti aggregazione la classe è fatta di studenti, ma nessuno è essenziale si può toglierne uno e la classe continua a esistere un libro ha delle pagine composizione il libro è fatto di pagine, tutte essenziali se ne togliamo una, non si può più leggere il libro, che quindi logicamente cessa di esistere. una linea ha dei punti composizione una linea è fatta di punti e sono tutti indispensabili se ne manca uno, non c è più la linea, ci sono due semirette!

Oggetti composti e delegazione

PROGETTAZIONE INCREMENTALE (1/2) Spesso capita di aver bisogno di un componente simile a uno già esistente, ma non identico avevamo Orologio, ma lo volevamo con display abbiamo il contatore che conta in avanti, ma ne vorremmo uno che contasse anche indietro Altre volte, l evoluzione dei requisiti comporta una corrispondente modifica dei componenti: necessità di nuovi dati e/o nuovi comportamenti necessità di modificare il comportamento di metodi già presenti Come evitare di dover riprogettare tutto da capo?

PROGETTAZIONE INCREMENTALE (2/2) 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 avanti al contatore avanti/indietro. DELEGAZIONE (USO): un CounterDec è composto da un Counter, sebbene si tratti solo di una scelta implementativa: non si vuole dire che un contatore avanti/indietro sia sempre costituito da un contatore solo avanti!

IL CONTATORE AVANTI/ INDIETRO Delegazione: ogni oggetto CounterDec ingloba un oggetto Counter al suo interno a cui delega le operazioni richieste riformulando quelle che Counter non sa fare. oggetto CounterDec oggetto Counter operazioni di CounterDec Delegazione

IMPLEMENTAZIONE Il contatore avanti/indietro (con decremento) public class CounterDec { private Counter c; public CounterDec() { c = new Counter(); } public CounterDec(int v){ c = new Counter(v); } public void reset() { c.reset(); } public void inc() { c.inc(); } Delegazione public int getvalue() { return c.getvalue(); } public void dec() {... } } Come definirlo?

ESEMPIO Il metodo dec() può essere così definito: recuperare il valore attuale V del contatore riportare il contatore in uno stato iniziale noto (0) riportarlo, tramite incrementi, al valore V = V-1 public void dec() { } int v = c.getvalue(); c.reset(); for (int i=0; i<v-1; i++) c.inc(); Problema: e se reset() non fosse fornita??

ESEMPIO:VARIANTE Alternativa: sostituire l attuale Counter c con uno nuovo..inizializzato direttamente al nuovo valore desiderato. public void dec() { } c = new Counter( c.getvalue() 1 );

BILANCIO PRO: Si può riusare un componente esistente per costruirne uno alle differenze MA se i campi privati non sono accessibili, bisogna riscrivere anche tutti i metodi che concettualmente rimangono uguali inoltre, non è detto che le operazioni già disponibili consentano di ottenere qualsiasi nuova funzionalità Occorre poter riusare le classi esistenti in modo più flessibile.

L OBIETTIVO Poter definire una nuova classe a partire da una già esistente Bisognerà dire: quali dati la nuova classe ha in più rispetto alla precedente quali metodi la nuova classe ha in più rispetto alla precedente quali metodi la nuova classe modifica rispetto alla precedente.