Ciclo di vita di un software
-
Studio di fattibilità
- comprendere i requisiti di alto livello
- valutare costi e benefici
- pianificare le attività e le risorse del progetto
- individuare l’ambiente di programmazione (hardware/software)
-
Raccolta dei requisiti
- Raccolta dei requisiti presso i diversi attori
- Stesura e sintesi iniziali
- Raffinamento dei requisiti
-
Analisi concettuale dei requisiti
- Obiettivo: produrre lo schema concettuale dell’applicazione, che definisca in dettaglio cosa l’applicazione dovrà realizzare, indipendentemente dal come
- Lo schema concettuale:
- Modella i dati di interesse, le loro articolazioni, interrelazioni ed evoluzioni possibili
- Specifica i servizi computazionali che l’applicazione dovrà offrire ai diversi utenti
- Lo schema concettuale è un modello logico-matematico dell’applicazione, e sarà la base da cui partire per le successive attività di progettazione
-
Design dell’applicazione
- specifica come l’applicazionen realizza le sue funzioni
-
Realizzazione dell’applicazione (implementazione)
- Equivale alla scrittura del codice e scrivere la documentazione
-
Integrazione dei componenti e verifica dell’applicazione
- Le diverse componenti dell’applicazione, sviluppate separatamente, vengono integrate
- Si valuta se l’applicazione svolge correttamente, completamente ed efficientemente i suoi compiti
-
Messa in esercizio
- L’applicazione viene messa in esercizio ed inizia a funzionare
-
Manutenzione dell’applicazione
- L’applicazione viene monitorata durante l’esercizio
- Correzioni ed aggiornamenti vengono prodotti ove e quando necessario
Modelli di ciclo di vita del software
Modello a cascata (waterfall model)
Questo significa che ogni attività inizia quando termina il precedente e ha uno scopo interamente didattico.
Modello a spirale (o iterativo)
E’ come una pipeline
Analisi concettuale
Diagramma delle classi e degli oggetti
Oggetti UML
E’ una porzione del mondo reale Identificato attraverso l’identificatore di oggetto
Libro è la classe più specifica di cui Libro
è l’istamza
Classe
Modella un insieme di oggetti omogenei ai quali sono associate proprietà statiche (attributi) e dinamiche (operazioni)
Ogni classe è descritta da:
- un nome
- un insieme di proprietà (astrazioni delle proprietà comuni degli oggetti che sono istanze delle classi)
Un oggetto è identificato da un identificatore univoco Un diagramma delle classi in generale permette la coesistenza di oggetti identici
Associazioni
Modellano la possibilità che oggetti di classi diverse abbiano dei legami
Le istanze di associazioni sono chiamate link. Se A è un’associazione tra classi C1 e C2, un’istanza di A è un link tra due oggetti.
I link non hanno identificatori espliciti e quindi non possono esistere link uguali per associazioni distinte.
Esempio
Si vuole progettare un’applicazione che permetta ai clienti di prenotare hotel via web
Esiste la classe
Hotel
e la classePrenota
, prenota significa che ogni persona può prenotare un hotel.
In questo caso significa che Alice ha prenotato all’hoter “La Pergola”
E se volessimo rappresentare una seconda prenotazione di ‘alice’ presso ‘h1’?
Il diagramma qui sopra impedirebbe ad una stessa persona di prenotare, nella sua vita, lo stesso hotel più volte!
Come si può fare?
Diciamo che una prenotazione è legata all’hotel tramite l’associazione
hotel_prenotato
e una prenotazione è legata a Persona tramite l’associazionecliente_prenotazione
.
Vincoli di integrità
Un vincolo di integrità impone ulteriori restrizioni (oltre quelle strutturali imposte dal diagramma) sui livelli estensionali ammessi.
Ogni istanza di Impiegato deve essere coinvolta in un numero di link dell’associazione “nascita” che va “da 1 a 1”
Ogni istanza di Città deve essere coinvolta in un numero di link dell’associazione “nascita” che va “da 0 all’infinito”
Associazioni con attributi
Supponiamo di voler progettare un sistema per la gestione degli esiti dei voti dei test superati dagli studenti di un corso. Il corso è diviso in moduli e uno studente può superare il test di ogni modulo al più una volta.
Non possiamo aggiungere un attributo “voto” né nella classe Studente né nella classe Modulo. Quindi, come si possono rappresentare i voti conseguiti dagli studenti nei test durante i diversi moduli?
Un voto, non è una proprietà locale di uno studente, né di un modulo, ma è una proprietà del legame tra uno studente e un modulo, è quindi una prprietà dell’associazione.
Tipi
Sono dati concettuali, che siano facilmente realizzabili con qualsiasi tecnologia informatica. I tipi base sono: Intero, Reale, Booleano, Data, Ora, DataOra
Tipi specializzati
Serve per rappresentare, per esempio, degli intervalli
Vincoli di identificazione
Mettendo un id
diciamo che non possono esistere due oggetti con lo stesso attributo.
Ereditarietà
Il linguaggio UML permette di implementare l’ereditarietà, quindi il concetto di “sottoclasse”.
Per esempio, prendiamo le classi Studente
e Persona
. Studente
può essere considerata una sottoclasse di Persona
.
Studente
eredita tutti gli attributi di Persona
(come in Java).
Operazioni
Un’operazione di una classe ci indica che su quella classe di possono eseguire dei calcoli.
- Si può calcolare un valore a partire da altri dati o operazioni
- Effettuare cambiamenti di stato dell’oggetto, dei link in cui è coinvolto e/o degli oggetti a esso collegati