8. Progettazione del Software

Slides:



Advertisements
Presentazioni simili
Il paradigma Object Oriented
Advertisements

Informatica II – Basi di Dati (08/09) – Parte 1
Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 2 1 Progettazione e Sviluppo di Software ad Oggetti 4 OBJECT-ORIENTED ANALYSIS Processo.
CORSO DI RECUPERO CONTROLLI AUTOMATICI Prof. Filippo D’Ippolito
Dietro la Curva di Offerta: Fattori Produttivi e Costi
Meccanismi di IPC Problemi classici di IPC
Il linguaggio della Matematica: Insiemi e operazioni
Scomposizione funzionale
1 Semantica Operazionale di un frammento di Java: lo stato.
Metodologie di Programmazione = decomposizione basata su astrazioni
1 Processi e Thread Meccanismi di IPC, Inter Process Communication (1)
Principi di Programmazione Object-Oriented
Principi di Programmazione Object-Oriented
Introduzione ai Sistemi Operativi
6. Catene di Markov a tempo continuo (CMTC)
1 Il punto di vista Un sistema è una parte del mondo che una persona o un gruppo di persone, durante un certo intervallo di tempo, sceglie di considerare.
DISEGNO TECNICO INDUSTRIALE
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
6. Catene di Markov a tempo continuo (CMTC)
3. Processi Stocastici Un processo stocastico è una funzione del tempo i cui valori x(t) ad ogni istante di tempo t sono v.a. Notazione: X : insieme di.
Implementazione dell algortimo di Viterbi attraverso la soluzione del problema di cammino mi- nimo tramite software specifico. Università degli studi di.
©Carlo Tasso 1999 Object Oriented Programming Slide 1 OO Analysis Vs. OO Design OOA – Object Oriented Analysis. –Specifica COSA, IN QUALE CONTESTO il sistema.
1 Defect testing Lobiettivo: scoprire difetti in un programma Un test ha successo se forza il programma a comportarsi in modo anomalo I test provano la.
Reaching Definitions. Tino CortesiTecniche di Analisi di Programmi 2 Reaching definitions Dato un punto del programma, quali sono i comandi di assegnamento.
1 9: Progettazione Architetturale Obiettivo: stabilire la struttura globale di un sistema software Descriveremo diversi tipi di modello di architettura,
1 14. Verifica e Validazione Come assicurarsi che il software corrisponda alle necessità dellutente? Introdurremo i concetti di verifica e validazione.
Semantiche dei linguaggi di programmazione
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie.
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
8. Reti di Code Nella maggior parte dei processi produttivi risulta troppo restrittivo considerare una sola risorsa. Esempio: linea tandem arrivi 1 v.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Problemi e algoritmi Anno Accademico 2009/2010.
eliana minicozzi linguaggi1a.a lezione2
CONTROLLO DI SUPPLY CHAIN MEDIANTE TECNICHE H-INFINITO E NEGOZIAZIONE
La Riflessione computazione Elisa Ferrando. Cos è la Riflessione La Riflessione Sistema riflessivo Sistema computazionale.
Master universitario di II livello in Ingegneria delle Infrastrutture e dei Sistemi Ferroviari Anno Accademico 2012/2013 Cultura dimpresa, valutazione.
Algoritmi.
Unità Didattica 2 I Linguaggi di Programmazione
Strutture di controllo in C -- Flow Chart --
Il marketing: costruire una relazione profittevole con il cliente
Strategia bottom-up Nella strategia bottom-up le specifiche iniziali sono suddivise in componenti via via sempre più piccole, fino a descrivere frammenti.
Modello E-R Generalizzazioni
A.Natali DL Maggio1999 Oggetti Concetti fondamentali.
Contatore: esempio di circuito sequenziale
Dall’algoritmo al programma.
1 Programmazione = decomposizione basata su astrazioni (con riferimento a Java)
Elementi di Informatica di base
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
L’ingegneria del software
Introduzione alla programmazione Object Oriented
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
1101 = x 10 x 10 x x 10 x = CORRISPONDENZE
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
14 marzo 2002 Avvisi:.
1 Guida per linsegnamento nei corsi per il conseguimento del CERTIFICATO DI IDONEITÀ ALLA GUIDA DEL CICLOMOTORE.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill,
Esercitazioni di Ingegneria del Software con UML
1 Progettazione Architetturale. 2 Obiettivo: stabilire la struttura globale di un sistema software Descriveremo diversi tipi di modello di architettura,
Programmazione ad oggetti
Lezione 1 Panoramica sui paradigmi di programmazione
Equazioni differenziali e applicazioni economiche
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
Commenti all’esempio del treno Nell’esempio del treno si è iniziato dalle attività generiche e/o attività operative che tipicamente costituiscono i passi.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Strategie di progetto Si possono utilizzare le strategie tipiche dello sviluppo di un processo di ingegnerizzazione (es. ingegneria del software). Strategie.
Ingegneria del software Modulo 1 - Introduzione al processo software Unità didattica 4 - Progettazione del software Ernesto Damiani Università degli Studi.
Per un nuovo orientamento nella progettazione dei linguaggi di programmazione Tesi di Laurea di: RICCARDO SOLMI Università degli Studi di Bologna Facoltà.
Diagramma degli Stati. Diagramma degli Stati … Definizione è un grafico con nodi ed archi in cui i nodi rappresentano gli stati di una classe e gli archi,
Transcript della presentazione:

8. Progettazione del Software Software Design = derivare soluzioni che soddisfino il documento dei requisiti Fasi del processo di progettazione Strategie di progettazione: approccio funzionale approccio orientato ad oggetti Attributi di qualità della progettazione software (coesione e accoppiamento)

Fasi della progettazione Comprensione del problema Guardare al problema da differenti angolature Identificare una o più soluzioni Valutare le soluzioni possibili e scegliere la più appropriata rispetto all’esperienza del progettista e dalle risorse disponibili Descrivere astrazioni delle soluzioni Usare notazioni grafiche, formali o d’altro tipo per descrivere le componenti del progetto Ripetere il processo per ogni astrazione identificata, finché la progettazione non è espressa in termini primitivi

Il processo della progettazione Un qualsiasi progetto può essere modellato da un grafo orientato, a partire da entità poste in relazione e dai loro attributi Il sistema deve essere descritto a diversi livelli di astrazione La progettazione si attua in tappe difficilmente distinguibili; ciò nonostante la strutturazione è utile.

Dall’informale al formale

Concetti di base Astrazione: procedere per livelli di dettaglio astrazione procedurale astrazione dei dati astrazione del controllo Raffinamento: decomposizione strutturazione elaborazione Modularità: Vantaggi dell’approccio “divide et impera”: osservando il costo C relativo alla progettazione di sistemi software, si ha che C(p1+p2) > C(p1)+C(p2). Il prezzo da pagare: i costi di integrazione

Modularità e costo del software Costo Totale Costo di integrazione Regione di costo minimo Costo Costo/modulo Numero dei moduli

Fasi della progettazione

Fasi della progettazione Architectural design Identifica i sottosistemi Abstract specification Progetta i sottosistemi Interface design Progetta le interfacce dei sottosistemi Component design Decomponi i sottosistemi Data structure design Progetta le strutture dati per gestire i dati del problema Algorithm design Progetta algoritmi per le funzionalità del problema

Struttura gerarchica di progetto

Progettazione top-down In teoria, progettazione top-down significa partire dalle componenti più generali nella gerarchia e scendere nella gerarchia lavorando livello per livello In pratica, la progettazione di sistemi di grandi dimensioni non è mai veramente top-down. Alcune componenti sono progettate prima di altre. I progettisti riusano esperienza (e componenti) durante il processo di progettazione

Metodi di progettazione I metodi strutturati sono insiemi di notazioni per esprimere un progetto software e linee guida per creare un progetto Tra i metodi più conosciuti: Structured Design (Yourdon), e JSD (Jackson Method) Il linguaggio “standard” per la progettazione: UML I metodi strutturati possono essere supportati da tools CASE

Componenti di un metodo strutturato Diagrammi di flusso, che mostrano le trasformazioni dei dati Diagrammi entità-relazioni, che descrivono le strutture logiche dei dati Diagrammi strutturali, che descrivono la divisione in componenti e la loro interazione

Limiti di questi metodi Offrono linee-guida piuttosto che “metodi” in senso matematico: progettisti diversi possono creare progetti di sistema alquanto diversi Non sono d’aiuto nella parte iniziale, quella creativa, della progettazione. Ma sono utili al progettista per strutturare e documentare meglio il lavoro.

Strategie di progettazione Progettazione Funzionale Lo stato del sistema è centralizzato e condiviso tra funzioni che operano su quello stato Progettazione Object-Oriented Il sistema è visto come collezione di oggetti che interagiscono. Il sistema è de-centralizzato ed ogni oggetto gestisce il proprio stato. Gli oggetti possono essere istanze di una classe e comunicano scambiando attraverso i propri metodi

Visione funzionale di un compilatore y n t a x T o k e n s T o k e n s O b j e c t A n a l y s e B u i d m b o t S c r G O p p r o g r a m t r e e c o d e E r r o r S y m b o l s S y m b o l s i n d i c a t o r E r r o r m e s s a g e s

Visione object-oriented di un compilatore

Progettazione mista C’è una complementarietà tra approccio funzionale e approccio object-oriented Di volta in volta un buon ingegnere del software dovrebbe scegliere l’approccio più appropriato per il sottosistema che sta progettando.

Sottosistemi di un vettore aereo

Oggetti di alto livello Il sistema di navigazione Il sistema radar Il sistema di comunicazione Il sistema di display della strumentazione Il sistema di controllo del motore ... Oggetti di livello inferiore Lo stato del motore La posizione dell’aereo L’altimetro 18

Le funzioni del sistema (legate ai sottosistemi) Traccia nel pannello di controllo (sottosistema radar) Tara la strumentazione tenendo conto della velocità del vento (sottosistema di navigazione) Diminuisci la potenza (sottosistema motore) Indica le condizioni di emergenza (sottosistema strumentazione) Lock onto frequency (sottosistema di comunicazione) ...

Qualità del progetto La qualità di un progetto è difficile da stabilire. Dipende da specifiche priorità Un “buon progetto” deve essere il più efficiente, il più economico, il più mantenibile, il più affidabile, ecc. Noi sottolineeremo gli attributi legati alla mantenibilità del progetto: coesione, accoppiamento, comprensibilità, adattabilità Le stesse caratteristiche di qualità si applicano sia alla progettazione funzionale che a quella orientata ad oggetti

Coesione Misura di quanto le parti di una componente “stanno bene assieme” Una componente dovrebbe implementare una singola entità logica o una singola funzione La coesione è un attributo importante in quanto, quando si dovesse effettuare un cambiamento al sistema, permette di rendere il cambiamento locale ad una singola componente Si possono individuare livelli diversi di coesione

Coesione Proprietà interna al singolo componente Funzionalità “vicine” devono stare nello stesso componente Vicinanza per tipologia, algoritmi, dati in ingresso e in uscita Vantaggi di un alto grado di coesione Vantaggi rispetto al riuso e alla manutenibilità Riduce l’interazione fra componenti Migliore comprensione dell’architettura del sistema

Tipologie e livelli di coesione Coesione accidentale (debole) Parti di una componente sono semplicemente raggruppate assieme Associazione logica (debole) Vengono raggruppate componenti che svolgono azioni simili Coesione temporale (debole) Vengono raggruppate componenti che sono attivate contemporaneamente Coesione procedurale (debole) Gli elementi in una componente costituiscono assieme un’unica sequenza di controllo

Tipologie e livelli di coesione Coesione di comunicazione (media) Tutti gli elementi di una componente operano su di uno stesso input o producono lo stesso output Coesione sequenziale (media) L’output di una parte di una componente è l’input di un’altra parte Coesione funzionale (forte) Ogni parte di una componente è necessaria solo per l’esecuzione di una singola funzione di quella componente Coesione d’oggetto (forte) Ogni operazione offre funzionalità che permettono di modificare o ispezionare attributi dell’oggetto

Coesione come attributo di progetto in progettazione OO Se si ereditano attributi da una superclasse si diminuisce la coesione: Per comprendere una classe, bisogna esaminare sia tutte le sue superclassi che le componenti della classe

Coupling (accoppiamento) Misura la strettezza di connessione tra le componenti di un sistema: quanto le componenti “si usano” tra di loro. Loose coupling (accoppiamento lasco) implica che cambiamenti di una componente non hanno forti effetti sul comportamento delle altre. La presenza di variabili condivise o lo scambio di informazione di controllo porta ad accoppiamento stretto (tight coupling) L’accoppiamento lasco può essere ottenuto decentralizzando gli stati e realizzando la comunicazione con passaggio di parametri

Coupling A module X module Y B C module Z Proprietà fra componenti: quanto i componenti si usano fra di loro U = M x M massimo accoppiamento U = Æ minimo accoppiamento A module X module Y B C module Z

Accoppiamento stretto

Accoppiamento lasco

Accoppiamento ed ereditarietà I sistemi orientati ad oggetti sono “loosely coupled” non condividono uno “stato” gli oggetti comunicano passando messaggi attraverso i metodi Tuttavia una classe è accoppiata con la sua superclasse. I cambiamenti effettuati su una classe si propagano a tutte le sottoclassi

Comprensibilità Legata a diverse caratteristiche delle componenti Naming. I nomi usati sono significativi? Documentazione Il progetto è ben documentato? Complessità Si usano algoritmi complicati? Un’elevata complessità significa molte relazioni tra diverse parti del sistema, quindi scarsa comprensibilità Metriche di qualità della progettazione: misurano la complessità.

Adattabilità Un progetto è adattabile se: Le sue componenti sono accoppiate lascamente E’ ben documentato e la documentazione è aggiornata C’è corrispondenza stretta tra livelli della progettazione Ogni componente è una entità “self-contained” Per adattare un progetto deve essere possibile tracciare i legami tra componenti del progetto, per poter analizzare le conseguenze di ogni cambiamento.

Tracciabilità del progetto

Adattabilità ed Ereditarietà L’ereditarietà migliora molto l’adattabilità. Le componenti possono essere adattate senza cambiamenti derivando una sotto-classe e modificando solo questa classe derivata Tuttavia, quando la profondità dell’ereditarietà aumenta, adattare un progetto diventa sempre più complesso. Il progetto richiede di essere rivisto e ristrutturato.