Download - Progettazione di software
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 diverseint 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