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