2. Diagrammi di classe

Una classe è formata da tre componenti:

Attributi: <attributo_visibilità> <nome> : <tipo_del_dato>[molteplicità] = [default_value]

Metodi: <attributo_visibilità> <nome> (<lista_parametri>) : <tipo_del_ritorno>

Attributi di visibilità:

  • + public
  • - private
  • # protected
  • ~ friendly

Parametri: <nome> : <tipo> = [default_value]

Associazioni

Un’associazione indica relazioni tra classi, ad esempio delle persone che lavorano in un’azienda.

Le associazioni possono avere:

  • Un nome, che di solito è un verbo
  • I ruoli giocati dalle varie classi

I dettagli di un’associazione sono “attributi impliciti” e hanno la stessa visibilità di un attributo.

Possono avere una molteplicità: 1, 0..1, 1..*, 4, 6-12

Esempio:

class Persona {
	private String nome; 
	private String cognome; 
	private String codFiscale; 
	private int stipendio;
}
class Banca {
	private Persona[] clienti;
}
class Prestito {
	private int ammontare; 
	private int rata;
	private Date dataInizio; 
	private Date dataFine; 
	private Persona intestatario; 
	private Banca banca;
}

Aggregazioni

Sono una forma speciale di associazione: descrivono la relazione “un oggetto è parte di un altro”.

Composizioni

Una relazione di composizione è un’aggregazione forte: i componenti non possono esistere senza il loro contenitore: la creazione e la distruzione avviene nel contenitore e le parti dei componenti non sono parte di altri oggetti.

Associazioni riflessive

Un’associazione è riflessiva se coinvolge oggetti della stessa classe.

class Persona {
	private String nome;
	private String cognome; 
	private Date dataNascita; 
	private static int numPersone; 
	public Persona marito;
	public Persona moglie;
	public boolean siSposa(Persona p) {...}
	public boolean compieAnni(Date d) {...} 
}

Ereditarietà

class Triciclo extends Bicicletta {...}

Classi astratte e Interfacce

Si ricorda che sia le classi astratte che le interfacce non possono avere istanze!

Package