Progettazione ad oggetti Gli elementi reali vengono modellati tramite degli oggetti Le reazioni esistenti nel modello reale vengono trasformate in relazioni tra gli oggetti Cos'è un oggetto? Entità dotata di uno stato (informazione) Entità che offre un numero di operazioni (comportamento) Un oggetto è caratterizzato da un numero di operazioni e da uno stato che tiene traccia delle operazioni eseguite
Esempio: una famiglia Modelliamo una famiglia e le relazioni fra di esse Il nostro oggetto modella una persona i due termini sono spesso utilizzati come sinonimi, in realtà l'oggetto persona è sempre una rappresentazione della persona reale Ogni persona ha associate le informazioni (es. età) ad essa relative (attributi) Operazioni (metodi) per accedere alle informazioni ed eventualmente modificarle Operazioni per modellare il comportamento (cammina, balla, etc) - stimoli
Relazioni fra gli oggetti Relazioni statiche due oggetti conoscono l'esistenza uno dell'altro relazioni a lungo termine aggregati partizioni Relazioni dinamiche scambio di informazioni fra i due oggetti collegati agli stimoli Balla Balla
Data hiding Separazione netta tra mondo esterno ed interno interagisco con gli oggetti attraverso le operazioni messe a disposizione dall'esterno non ho conoscenza di come l'oggetto compie l'operazione La realizzazione delle funzionalità interne non dipende dall'interfaccia e viceversa Concetto di tipo di dati astratto
Classi e istanze Le persone dell'esempio hanno tutte proprietà comuni La classe è un template per costruire oggetti e descrive come gli oggetti sono strutturati e quali sono le loro operazioni (abstract data type) La classe inoltre definisce come vengono eseguite queste operazioni (implementazione del data type) Ogni persona ha però una propria identità diversa da tutte le altre L'istanza è un oggetto appartenente ad una classe La classe definisce il comportamento e l'istanza definisce lo stato dell'oggetto
Raffiniamo il modello Alcune proprietà od operazioni non sono uguali per tutti gli oggetti Es: distinguo le persone in uomini e donne Alcune operazioni sono comuni, altre sono diverse o specifiche di una delle due nuove classi Posso definire la classe uomo e la classe donna come classi distinte
Polimorfismo La classe uomo può avere un attributo migliore amico l'attributo migliore amico può fare riferimento sia a un (istanza della classe) uomo o ad una donna Questa situazione si chiama polimorfismo chi invia uno stimolo non ha necessità di sapere a che classe appartiene l'istanza della classe a cui si riferisce Lo stimolo può essere interpretato in diversi modi a seconda della classe che lo riceve Posso imporre limiti al polimorfismo (l'amico può essere un uomo o una donna ma non una macchina)
Ereditarietà Le classi uomo e donna hanno molte parti in comune Estraiamo le parti comuni a formare una classe persona Le classi uomo e donna derivano o ereditano dalla classe persona Se la classe B deriva dalla classe A, tutte le informazioni e metodi di A appartengono anche a B Vantaggi dell'ereditarietà le parti comuni sono definite in un solo punto riduzione delle ridondanze semplificazione delle modifiche
Terminologia Persona Antenati Generalizzazione Specializzazione Uomo Donna Discendenti Classi astratte: progettate per essere derivate (non si creano istanze) Classi concrete: progettate per creare istanze
Gerarchie di classi Esempio: vogliamo definire la classe anziano Persona Persona Uomo Donna Anziano Uomo Donna Anziano Persona maschio Donna Anziano Uomo
Ragioni dell'ereditarietà Riutilizzo le parti comuni di codice possono essere inseriti in un unica classe padre Tipizzazione (subtyping) La classe derivata aggiunge nuove funzioni alla classe da cui deriva il comportamento non è modificato Specializzazione Elimino o modifico i comportamenti della classe padre Concettuale L'ereditarietà modella una relazione concettuale presente nel mondo reale
Analisi orientata agli oggetti Individuare gli oggetti Quali oggetti sono presenti nel dominio? Quali sono quelli essenziali? Organizzare gli oggetti relazioni statiche tra oggetti gerarchie ed ereditarietà Descrivere le interazioni degli oggetti use case Descrivere le operazioni degli oggetti deriva dalla formalizzazione degli use case Descrivere l'interno degli oggetti attributi macchine a stati
Diagrammi degli oggetti Interfaccia utente Controllo Entità
Differenti tipologie di oggetti funzioni comportamento dati informazione presentazione
Macchina del caffè gettoniera display tastiera resto gestore cuoco gestione denaro cassa prodotto caffè cioccolata motore valvola produzione bevande
Interfacce Le interfacce sono il punto di contatto con l'esterno (estraibili dagli use case) Allocazione delle funzionalità controllo dominante: l'interfaccia non include funzionalità di gestione od elaborazione dialogo dominante: l'interfaccia include le funzionalità di controllo del flusso controllo misto: le funzionalità di controllo sono divise tra interfaccia e entità controllo separato: le funzioni sono separate da entrambi gli oggetti e messe in un oggetto specifico
Entità Oggetti destinati a mantenere informazioni oltre la durata di uno use case Informazioni centrali per il funzionamento del sistema Attributi ed entità hanno funzioni simili due informazioni si associato ad entità diverse se sono in qualche modo indipedenti Operazioni comuni: Salvare e caricare informazioni creare e distruggere l'oggetto comportamenti che sono legati alla struttura dei dati
Oggetti di controllo Avendo definito interfacce ed entità ci sono funzioni che non hanno una collocazione In prima approssimazione abbiamo un oggetto di controllo per ogni use case Le informazioni associate ad un oggetto di controllo sono a breve termine Solitamente abbiamo un oggetto di controllo per ogni attore
Progettazione e produzione Traduzione dei modelli di analisi nei modelli realizzativi Si deve tenere conto delle esigenze realizzative (linguaggio, database, architettura...) Il diagramma ideale può essere modificato elementi aggiunti elementi modificati elementi rimossi Tracciabilità
Modelli realizzativi Diagramma delle interazioni Diagramma degli stati Diagramma delle classi
Interaction diagram esterno gettoniera gestore resto display tastiera cuoco moneta moneta(imp) totale(imp) pressione tasto selezione costo selezione eroga preparazione in corso t
Macchine a stati In molti sistemi l'uscita al tempo t dipende da quello che è accaduto prima di t Si può esprimere l'uscita in funzione degli ingressi I(t) e della storia H(t) Si parla di sistema a stati finiti quando esistono un numero finito di storie che hanno effetti diversi L'intera storia può essere rappresentata da un vettore X(t) con un numero finito di elementi
Equazioni di stato Out(t) = f(i(t), X(t)) X(t+1) = g(i(t), X(t)) I(t) X(t) f() O(t) I(t) X(t) g() X(t+1) Ritardo
Diagramma di transizione b,c A a a,c B A,B,C: stati a,b,c: eventi c b C a,b
IEC 62304: ciclo di vita
Tipi di test Correttezza il programma deve dare i risultati attesi Affidabilità non si devono avere crash o problemi in situazioni limite Performance le risorse richieste e il tempo necessario devono essere accettabili Sicurezza protezione contro accessi non autorizzati