Introduzione
In una generalizzazione, una sottoclasse non solo può avere proprietà aggiuntive rispetto alla super-classe, ma può anche specializzare le proprietà ereditate dalla super-classe, restringendone il tipo.
Specializzazione degli Attributi
In una sotto classe possiamo specializzare gli attributi della super classe, ovvero possiamo respingere il tipo:
- Super-classe
Reale
→ Sotto-classeIntero
(ammesso) - Super-classe
Intero
→ Sotto-classeIntero >= 2
(ammesso) - Super-classe
Intero
→ Sotto-classeReale
(non ammesso, non abbiamo ridotto il tipo)
Esempio
Specializzazione di Associazioni
Anche un association class, essendo una classe, può essere specializzata ed essere soggetta alle specializzazioni che effettuiamo sulle classi.
In particolare importante ricordare che le molteplicità delle associazioni devono essere sempre uguale restrittive, ovvero:
- Super-associazione
1..*
→ Sotto-associazione2..*
(ammesso) - Super-associazione
1..*
→ Sotto-associazione2..5
(ammesso) - Super-associazione
2..*
→ Sotto-associazione1..1
(non ammesso)
Esempio
- Un
ArticoloNuovo
può partecipare ad un solo linkvend_nuovo
ma ad ad infiniti linkvenditore
.- Ogni articolo è venduto da almeno un utente.
- Gli articoli nuovi devono essere venduti da almeno un venditore professionale.
Specializzazione di operazioni di classe
Anche le operazioni di classe possono essere oggetto di specializzazione nelle sottoclassi.
La segnatura dell’operazione nella sottoclasse deve essere compatibile con quella dell’operazione definita nella supercasse, ovvero:
- Stesso numero e tipo di argomenti
- Il tipo di ritorno dell’operazione nella sottoclasse è dello stesso tipo o un sotto-tipo di quello dell’operazione nella superclasse.
Esempio
In questo esempio il prezzo di ogni articolo va calcolato perché influenzato da fattori che variano (numero di ardi nazione) questo viene fatto attraverso l’operazione
prezzo
.Da notare che non cambia l’intestazione de metodo
prezzo
nella sottoclasse (resta compatibile) ma cambia la specifica.