Appunti presi solo ai fini dell'esame

Concetti fondamentali

Analisi concettuale

Oggetti

Servono per descrivere elementi singoli particolarmente significativi oppure per descrivere esempi. In UML un oggetto modella un elemento del dominio che ha “vita propria” ed è identificato mediante l’identificatore di oggetto. Di base, è l’istanza di una classe.

In questo esempio div_comm è l’identificatore di un oggetto. Libro è la classe di cui l’oggetto ne è istanza.

Classi

Una classe modella un insieme di oggetti omogenei (le istanze della classe) ai quali sono associate proprietà statiche (attributi) e dinamiche (operazioni). Ogni classe è descritta da:

  • un nome
  • un insieme di proprietà

Info

Il diagramma delle classi impone che tutte le sue istanze abbiano un valore di tipo stringa per l’attributo “titolo”

Un’associazione modella la possibilità che oggetti di due (o più classi) abbiano dei legami. Le istanze di associazioni si chiamano link: se è un’associazione tra le classi e , un’istanza di è un link tra due oggetti, uno della classe e l’altro della classe .

Come gli oggetti sono istanze delle classi, così i link sono istanze delle associazioni. Al contrario degli oggetti, però, i link non hanno identificatori specifici. Il link è implicitamente identificato dalla coppia di oggetti che esso rappresenta.

Warning

Non sono ammessi link uguali

Esempio prenotazioni

Si vuole progettare un’app che permette ai clienti di prenotare hotel via web.

Si potrebbe pensare una cosa del genere:

Però questo diagramma è inadeguato. Dato che non possono esistere due link uguali che collegano le stesse classi, una stessa persona non potrebbe prenotare lo stesso hotel mai più. Per aggirare questo problema si può creare la classe Prenotazione.

Associazioni multiple tra due classi

Tra le stesse classi possono essere definite più associazioni che modellano legami di natura diversa

Vincoli di molteplicità

UML permette di definire vincoli in un diagramma delle classi. Un vincolo di integrità impone ulteriori restrizioni sui livelli estensionali ammessi.

  • : ogni istanza di Impiegato deve essere coinvolta in un numero di link dell’associazione “nascita” che va da a .
    • Dato che non possiamo avere più link tra la stessa coppia di oggetti, questo è equivalente a: ogni istanza di Impiegato deve essere legata a una e una sola istanza Città (tramite link dell’associazione nascita)
  • : ogni istanza di Città deve essere coinvolta in un numero di link dell’associazione nascita che va “da all’infinito. È equivalente a dire: ogni istanza di Città può essere legata ad un numero qualunque () di istanze di Impiegato (tramite link dell’associazione nascita)

Esempio sovrano

Supponiamo di voler modellare i sovrani di un regno ormai scomparso. Di ogni sovrano interessa il nome, il periodo in cui ha regnato e il predecessore

Creo la classe Sovrano

Come possiamo rappresentare il concetto di Predecessore? Il predecessore è comunque un sovrano che ha un nome, un periodo in cui ha regnato e a sua volta un predecessore. Perciò possiamo fare un’associazione che insiste più volte sulla stessa classe

Associazioni con attributi

Supponiamo di voler progettare un sistema che gestisca gli esiti dei test superati dagli studenti di un corso. Il corso è diviso in moduli e uno studente può superare il testa di ogni modulo al più di una volta.

Il problema nasce perché in questo modo non sappiamo dove mettere l’attributo voto, poiché non né attributo di Studente né di Modulo, ma è una proprietà del legame tra Studente e Modulo. E’ quindi una proprietà dell’associazione.

Warning

Anche in presenza di attributi, la natura dell’associazione non cambia. Il diagramma permette a una stesa coppia di oggetti di formare al più un link dell’associazione.