progettazione di software
DESCRIPTION
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. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/1.jpg)
Progettazione di software
![Page 2: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/2.jpg)
Pericoli dell’ereditarietà
• Spesso si usa l’ereditarietà dove non si dovrebbe
![Page 3: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/3.jpg)
Aggregati errati
• Usare l’ereditarietà dove serve aggregazione– Aereo usa le operazioni di ala, coda, motore…– Aereo è composto da…
![Page 4: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/4.jpg)
Gerarchie invertite
• Dipendente eredita da Dirigente che eredita da MembroConsiglioAmministrazione
• È il contrario!!!!!!!!!!
![Page 5: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/5.jpg)
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
![Page 6: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/6.jpg)
Applicazione errata di è-un (is-a)
• Stanza eredita da Parallelepipedo• E se ho una stanza cilindrica?• Errato: Stanza ha una Forma uguale a
Parallelepipedo
![Page 7: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/7.jpg)
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)
![Page 8: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/8.jpg)
Conascenza – esempio banale
int i;…i=7;
Le due linee sono conascenti
![Page 9: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/9.jpg)
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
![Page 10: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/10.jpg)
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…
![Page 11: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/11.jpg)
Conascenza di algoritmo
• Una classe usa un certo algoritmo per eseguire una certa operazione basato su certe ipotesi sui dati (input o output)
![Page 12: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/12.jpg)
Conascenza temporale
• Esiste nei sistemi real-time• Esempio: il cancello va chiuso 20 secondi
dopo essere stato aperto
![Page 13: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/13.jpg)
Conascenza di valore
• Vincoli aritmetici sui valori– Gli angoli di un quadrilatero hanno somma 360
• Nasce dalla ridondanza
![Page 14: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/14.jpg)
Contronascenza
• Due cose devono essere diverseint i;int j;
• È una conascenza dove invece dell’uguale c’è il diverso
![Page 15: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/15.jpg)
Conascenza e incapsulamento
• L’incapsulamento riduce la conascenza• Meno conascenza c’è meglio è• Quella residua deve essere documentata
![Page 16: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/16.jpg)
Manutenibilità
• Il software può essere mantenuto se:– Si riduce al minimo la conascenza– Tutta la conascenza residua è confinata
nell’incapsulamento
![Page 17: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/17.jpg)
Domini delle classi di oggetti
• Le classi non sono tutte uguali• 4 domini
– Dominio applicativo– Dominio aziendale– Dominio architetturale– Dominio fondazionale
![Page 18: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/18.jpg)
Dominio applicativo
• Classi per riconoscere eventi– BottoneCliccato– TemperaturaTroppoAlta
• Classi per gestire eventi– RiscaldamentoPazienteIpotermico
![Page 19: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/19.jpg)
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
![Page 20: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/20.jpg)
Dominio architetturale
• Classi per l’interfaccia utente• Classi per la gestione delle basi di dati• Classi per la comunicazione di rete
![Page 21: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/21.jpg)
Dominio fondazionale
• Classi fondamentali– Boolean, Char, …
• Classi strutturali– Vector, Stack, …
• Classi semantiche– Angolo, Ora, Massa, Linea, Cerchio, …
![Page 22: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/22.jpg)
In ordine di riutilizzabilità
• Nessuno scrive più le ultime, tutti devono farsi le prime
• In mezzo dipende…
![Page 23: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/23.jpg)
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)
![Page 24: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/24.jpg)
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• …
![Page 25: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/25.jpg)
Ingombro
• L’ingombro è più basso nelle classi fondamentali e cresce nelle altre
• Da ridurre il più possibile…
![Page 26: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/26.jpg)
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
![Page 27: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/27.jpg)
Violazioni della coesione
• Coesione a istanza mista• Coesione a dominio misto• Coesione a ruolo misto
– In ordine decrescente di gravità
![Page 28: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/28.jpg)
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!!!!!!
![Page 29: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/29.jpg)
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
![Page 30: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/30.jpg)
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
![Page 31: Progettazione di software](https://reader035.vdocuments.site/reader035/viewer/2022081512/56816733550346895ddbdf33/html5/thumbnails/31.jpg)
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