Progettazione di software
Pericoli dell’ereditarietà
• Spesso si usa l’ereditarietà dove non si
dovrebbe
Aggregati errati
• Usare l’ereditarietà dove serve
aggregazione
– Aereo usa le operazioni di ala, coda, motore…
– Aereo è composto da…
Gerarchie invertite
• Dipendente eredita da Dirigente che eredita
da MembroConsiglioAmministrazione
• È il contrario!!!!!!!!!!
Confusione tra classe e istanza
• Panda eredita da Orso e da SpecieProtetta
• Errato:
– un’istanza di Orso è Yoghi
– Un’istanza di Panda è Ling-Ling
– Un’istanza di SpecieProtetta è Panda
• Soluzione corretta: un animale ha un
attributo specie che nel caso della classe
Panda è istanza di SpecieProtetta
Applicazione errata di è-un (is-a)
• Stanza eredita da Parallelepipedo
• E se ho una stanza cilindrica?
• Errato: Stanza ha una Forma uguale a
Parallelepipedo
Conascenza
• Letteralmente: “essere nati insieme” o
“avere destini intrecciati nella propria vita”
• Due elementi software conascenti derivano
da esigenze software correlate
• A e B sono conascenti se è possibile
postulare dei cambiamenti di A che
richiederebbero cambiamenti di B (o
viceversa)
Conascenza – esempio banale
int i;
…
i=7;
Le due linee sono conascenti
Conascenza di nome
• Due variabili devono avere lo stesso nome
per fare riferimento alla stessa cosa
• Nell’esempio entrambe le righe usano i
• Se una sottoclasse usa un attributo di una
sovraclasse deve identificarlo col nome dato
nella sovraclasse
Conascenza di convenzione
• Più parti sono costruite in base a una
convenzione fissata
– Esempio: i conti delle persone hanno un id
positivo, quelli delle società negativo
• Nascono ad esempio da costanti nel codice
– 0:nord 1:sud…
Conascenza di algoritmo
• Una classe usa un certo algoritmo per
eseguire una certa operazione basato su
certe ipotesi sui dati (input o output)
Conascenza temporale
• Esiste nei sistemi real-time
• Esempio: il cancello va chiuso 20 secondi
dopo essere stato aperto
Conascenza di valore
• Vincoli aritmetici sui valori
– Gli angoli di un quadrilatero hanno somma 360
• Nasce dalla ridondanza
Contronascenza
• Due cose devono essere diverse
int i;
int j;
• È una conascenza dove invece dell’uguale
c’è il diverso
Conascenza e incapsulamento
• L’incapsulamento riduce la conascenza
• Meno conascenza c’è meglio è
• Quella residua deve essere documentata
Manutenibilità
• Il software può essere mantenuto se:
– Si riduce al minimo la conascenza
– Tutta la conascenza residua è confinata
nell’incapsulamento
Domini delle classi di oggetti
• Le classi non sono tutte uguali
• 4 domini
–
–
–
–
Dominio applicativo
Dominio aziendale
Dominio architetturale
Dominio fondazionale
Dominio applicativo
• Classi per riconoscere eventi
– BottoneCliccato
– TemperaturaTroppoAlta
• Classi per gestire eventi
– RiscaldamentoPazienteIpotermico
Dominio aziendale
• Classi di attributo: catturano le proprietà tipiche di
un certo dominio aziendale
– Saldo, TemperaturaCorporea
• Classi di ruolo: derivano dai diversi ruoli che
un’entità può avere
– Paziente, Cliente
• Classi di relazione: derivano da associazioni
tipiche dei diversi contesti
– IntestazioneConto, SupervisionePaziente
Dominio architetturale
• Classi per l’interfaccia utente
• Classi per la gestione delle basi di dati
• Classi per la comunicazione di rete
Dominio fondazionale
• Classi fondamentali
– Boolean, Char, …
• Classi strutturali
– Vector, Stack, …
• Classi semantiche
– Angolo, Ora, Massa, Linea, Cerchio, …
In ordine di riutilizzabilità
• Nessuno scrive più le ultime, tutti devono
farsi le prime
• In mezzo dipende…
Ingombro
• Misura l’equipaggiamento ausiliario di una
classe
• Conta le classi a cui una classe si deve
affidare per funzionare (contando anche
quelle a cui fanno riferimento quelle a cui fa
riferimento, e così via)
Ingombro
• C eredita da D
• C contiene un attributo di tipo D
• C ha un’operazione con un parametro di
tipo D
• C ha una variabile di tipo D
• C ha un metodo con tipo restituito di tipo D
• …
Ingombro
• L’ingombro è più basso nelle classi
fondamentali e cresce nelle altre
• Da ridurre il più possibile…
Coesione di classe
• È la misura della corrispondenza reciproca
fra le caratteristiche (attributi e metodi)
situati nell’interfaccia esterna di una classe
• Bassa coesione: insieme di caratteristiche
slegate
• Alta coesione: insieme di caratteristiche che
insieme contribuiscono a costruire
l’astrazione rappresentata dalla classe
Violazioni della coesione
• Coesione a istanza mista
• Coesione a dominio misto
• Coesione a ruolo misto
– In ordine decrescente di gravità
Coesione a istanza mista
• Ha caratteristiche indefinite per alcuni
oggeti della classe
– Dipendenti: solo alcuni possono prendere
provvigioni
– Il metodo emettiPagamentoProvvigioni
– Potrebbe emettere un pagamento pari a 0
• Orrendo!!!!!!
Coesione a dominio misto
• Contiene un elemento che la ingombra
direttamente con una classe estrinseca
appartenente a un dominio diverso
– Mettere nella classe Real il metodo
equivalenteInGradiCelsius
Coesione a ruolo misto
• Contiene un elemento che ingombra la
classe con una classe estrinseca
appartenente allo stesso dominio
– Mettere in persona l’attributo
numeroDiCaniPosseduti
Conformità di tipo
• Se S è un sottotipo di T, allora S può essere
fornito dovunque ci si aspetti T e la
correttezza viene mantenuta
– Cerchio sottotipo di Ellisse
Scarica

ppt