Le relazioni possibili tra le classi sono:
-
l’ereditarietà:
-
l’associazione:
-
la dipendenza:
-
un metodo riceve un oggetto della classe dipendente o come parametro o in conseguenza della chiamata di un altro metodo;
-
un metodo crea un nuovo oggetto della classe dipendente;
-
un metodo usa un metodo statico o una variabile statica della classe dipendente.
è una relazione tra una classe più generale e una più specializzata; viene indicata come relazione ISA (è un); è la relazione più comune e caratteristica; quando si deve progettare una classe, se è possibile, bisogna partire da classi già esistenti; ogni classe deve essere progettata in modo da poter essere estesa, se necessario.
La classe Studente
può estendere la classe Persona
: uno studente è una persona.
rappresenta un legame tra istanze di classi; si può pensare come una classe i cui attributi sono oggetti di altre classi; nel caso più semplice una classe ha come attributo un oggetto di un’altra classe (cioè ha una variabile istanza del tipo di un’altra classe); viene indicata come relazione HasA (ha un).
Date le classi Persona
e Provincia
si potrebbe definire la classe associazione Residenza
con un attributo di tipo Persona
e uno di tipo Provincia
.
Date le classi Persona
e Cane
si potrebbe definire la classe associazione ProprietarioCane
con un attributo di tipo Persona
e uno di tipo array
di Cane
.
Sono casi particolari di associazioni le associazioni di composizione e aggregazione.
La composizione indica le parti da cui è composto un oggetto; i componenti possono essere eterogenei e l’oggetto non esiste senza i suoi componenti.
Data la classe Punto
(con attributi le coordinate x
, y
di un punto):
– la classe Cerchio
ha un punto come centro,
– la classe Triangolo
ha tre punti come vertici del triangolo.
La composizione spesso è legata alla propagazione dei messaggi (per esempio un metodo che sposta un oggetto composto richiama i metodi per spostare le sue parti).
Un oggetto tagliato in pezzi può essere considerato una composizione di porzioni di oggetto.
L’aggregazione è un insieme di parti omogenee (e potrebbe esistere anche senza le sue parti).
Una Classe
(nel senso scolastico) è una aggregazione di oggetti Studente
.
Le relazioni di associazione e in particolare di composizione e aggregazione in genere sono realizzate da classi in cui uno o più attributi sono array di oggetti.
una classe dipende da un’altra se uno dei suoi metodi la usa in qualche modo:
In Java:
– tutte le applicazioni a linea di comando dipendono da System
perché usano la variabile statica System.out
;
– tutte le applet che visualizzano elementi grafici dipendono da Graphics
perché ricevono un oggetto Graphics
come parametro del metodo paint()
.
Accoppiamento
Un problema fondamentale nella progettazione delle classi è l’accoppiamento (chiamato da alcuni autori anche conascenza).
Si dice che c’è accoppiamento tra due classi se una classe è influenzata da modifiche che possono essere apportate all’altra.
L’accoppiamento può risultare per esempio da relazioni di dipendenza.
Bisogna analizzare le dipendenze tra le classi in modo da ridurre al minimo l’accoppiamento.