Slide di Università su Introduzione alla OOP. Il Pdf, utile per lo studio online, tratta la crisi del software, l'ingegneria del software e l'ereditarietà, con esempi specifici per C++ nell'ambito dell'Informatica.
Mostra di più23 pagine


Visualizza gratis il Pdf completo
Registrati per accedere all’intero documento e trasformarlo con l’AI.
1 / 59 Introduzione alla OOP 2/ 59 La crisi del software 3/ 59 Crisi dimensionale 4/ 59Crisi gestionale 5/ 59 Crisi qualitativa
6 / 59 Ingegneria del software 7 / 59 OOPProgrammazione Orientata agli Oggetti
La OOP stabilisce sei obiettivi fondamentali che un software deve soddisfare: Naturalità Affidabilità Riutilizzabilità Gestibilità Estendibilità Tempestività
8 / 59 Naturalità La OOP realizza un software molto vicino al nostro modo di pensare, rende i programmi più comprensibili. Non è più necessario sapere come funziona ogni parte del software ma basterà concentrarsi sull'azione che dovrà svolgere.
9 / 59Affidabilità La natura modulare degli oggetti permette di apportare modifiche a una parte del programma senza che queste si ripercuotino sul resto del programma. E' possibile verificare e convalidare ciascun componente in modo isolato così da rendere più affidabile l'intero sistema.
10 / 59 Riutilizzabilità La OOP permette il riutilizzo del codice affidabile, cioè testato, in una maniera molto più efficace rispetto a quello possibile tramite la programmazione procedurale.
11 / 59 Gestibilità Generalmente solo il 20% del tempo viene dedicato allaprogrammazione, il resto viene speso alla gestione del software. La OOP facilita la gestione: · eliminare un bug significa correggere in un solo posto, relativamente facile da trovare; · la struttura più semplice rispetto a quanto prodotto dalla programmazione procedurale rende più comprensibile il software.
12/ 59 Estendibilità Il paradigma messo a disposizione dalla OOP permette allo sviluppatore di estendere e far crescere il software in maniera più semplice e controllata.
13/ 59 Tempestività La OOP accorcia i tempi di sviluppo. Poter suddividere il programma in uncerto numero di oggetti permette lo sviluppo parallelo il che significa accelerare i tempi di consegna.
14 / 59 Warning La OOP non è un linguaggio di programmazione ma una metodologia!
15 / 59 OOP: Concetti fondamentali Incapsulamento Ereditarietà Polimorfismo
16 / 59 IncapsulamentoL'incapsulamento permette di costruire parti indipendenti di software (gli oggetti) nascondendo al mondo esterno i dettagli dell'implementazione delle funzionalità della parte. Per implementazione s'intende come vengono realizzate le diverse funzionalità dell'oggetto. Alcune funzionalità non sono accessibili dall'esterno, altre invece permettono di interagire con l'oggetto costituendo quella che si chiama interfaccia. L'interfaccia va vista come un contratto tra l'oggetto e il mondo esterno. Una volta definito il contratto non si può più cambiarlo altrimenti vanno modificate tutte le relazioni con l'oggetto.
17 / 59 Incapsulamento Caratteristiche dell'incapsulamento: Astrazione Divisione delle responsabilità Occultamento dell'implementazione
18/ 59 Incapsulamento: Astrazione L'astrazione permette di semplificare il mondo reale includendo solo gli aspetti che effettivamente servono. L'astrazione consente di trovare una soluzione generale e riutilizzabile nell'ambito di una certa casistica. E' un processo che si domina con l'esperienza!
19 / 59 Incapsulamento: Divisione delle responsabilità Ogni oggetto deve svolgere una sola funzione, intesa come responsabilità, e deve farla al meglio. Se l'oggetto è troppo articolato, cioè assomiglia ad un intero programma, allora è tempo di suddividerlo ulteriormente!
20 / 59 Incapsulamento: Occultamento dell'implementazione Vantaggi: protegge l'oggetto da manipolazioni esterne nasconde il funzionamento interno
21 / 59 Incapsulamento: riassumendo ... L'incapsulamento efficace è costituito dalla corretta combinazione di astrazione, occultamento dell'implementazione e divisione delle responsabilità. Trascurando l'astrazione si ottiene codice non riutilizzabile. Se non si occulta l'implementazione si ottiene codice poco robusto (i dati sono esposti a modifiche non controllate) e fortemente accoppiato (dipendente dalle altre parti del codice).Senza la divisione delle responsabilità il codice è incentrato sui dati, procedurale, fortemente accoppiato e decentralizzato.
22 / 59 Classe e oggetti Il risultato dell'incapsulamento non è subito un oggetto ma una classe. La classe può essere vista come la ricetta, il modello, il prototipo, il progetto per costruire oggetti.
23 / 59 Classe e oggetti La classe è composta da un insieme di attributi e da un insieme di metodi.I primi rappresentano le caratteristiche dell'oggetto che la classe modella, mentre i secondi sono le azioni, i comportamenti propri dell'oggetto. Attributi e metodi sono chiamati i membri della classe.
24 / 59 Classe e oggetti Un oggetto viene "creato" a partire da una classe: si dice allora che un oggetto è un'istanza di una classe, oppure 'istanziare un oggetto'. E' come costruire tante automobili a partire dallo stesso progetto: il progetto è sempre lo stesso ma ogni automobile "ha una vita propria".
25 / 59 Classe e oggetti in C++: esempio26 / 59 27 / 59 28 / 59
29 / 59 UML: Diagramma di Classe
30 / 59 UML: Diagramma degli Oggetti 31 / 59 32 / 59
33 / 59 UML: Diagramma di Classe
34 / 59 UML: Diagramma degli Oggetti
L'incapsulamento si ottiene tramite i livelli di accesso:pubblico: consente l'accesso dall'esterno (interfaccia) privato: non consente l'accesso protetto: consente l'accesso solo alle sottoclassi (vedremo ... ) OOP: Incapsulamento
35 / 59 OOP: Concetti fondamentali -Incapsulamento Ereditarietà Polimorfismo
36 / 59 Ereditarietà L'ereditarietà è il meccanismo che consente di basare una nuova classe a partire dalla definizione di una classe preesistente, dalla quale eredita tuttii suoi membri. La nuova classe aggiunge poi membri propri, estendendo le funzionalità della classe preesistente.
37 / 59 Ereditarietà La classe preesistente si chiama superclasse, classe padre o classe base. La classe che eredita si chiama sottoclasse, classe figlio o classe derivata.
38 / 59 Ereditarietà: quando usarla? Si risponde a questa domanda ponendosi un'altra domanda:"La nuova classe è un ....? " Esempio Abbiamo la classe Veicolo. Possiamo costruire la classe Bicicletta come sottoclasse di Veicolo? La risposta alla domanda "Bicicletta è un Veicolo?" è sì, pertanto possiamo usare l'ereditarietà!
39 / 59 Ereditarietà La relazione "is a" consiste nel fatto che a una classe figlio è consentito solo di ampliare o aggiungere le funzionalità del padre e non può in alcun modo eliderle o rinunciare a parte di esse. Le classi figlio possono avere comportamenti propri, attributi propri e/o ridefinire uno o più comportamenti ereditati.
40 / 59 Ereditarietà: esempio41 / 59
42 / 59 Ereditarietà: C++ 43 / 59
44 / 59 Ereditarietà: Gerarchia
45 / 59 OOP: Concetti fondamentali -Incapsulamento -Ereditarietà Polimorfismo
L'incapsulamento permette di creare componenti software autonomi mentre l'ereditarietà consente di riutilizzarli ed estenderli. Caratteristica del software è il continuo mutare a causa di nuove funzionalità richieste dagli utenti. E' possibile scrivere un software in grado di adattarsi senza alterarsi?
46 / 59 Polimorfismo Polimorfismo è la proprietà di un elemento di assumere più forme. In termini di programmazione questo significa che un singolo metodo può avere implementazioni diverse, sceltisulla base di un meccanismo automatico. Esempio: Si può aprire una porta, una scatola, una finestra o in conto in banca. Il verbo aprire può essere applicato a molti elementi diversi e, in relazione a ciascuno di essi, assume un significato diverso.
47 / 59 Polimorfismo Nei linguaggi ad oggetti sono presenti due tipi di polimorfismo: overriding (sovrapposizione dei metodi) overloading (sovraccarico dei metodi)
48 / 59 Overriding L'overriding di un metodo consiste nel ridefinire, nella classe derivata, un metodo ereditato, con lo scopo di modificarne il comportamento.Il nuovo metodo deve avere lo stesso nome e gli stessi parametri del metodo che viene sovrascritto.
49 / 59 Overriding 50 / 59 Overriding 51 / 59 Overriding52 / 59
Overriding Funzione virtuale
53 / 59 Overloading L'overloading di un metodo è la possibilità di utilizzare lo stesso nome del metodo, ereditato o non, avente un numero o un tipo diverso di parametri, per compiere operazioni diverse.
54 / 59 Overloading55 / 59 Overloading 56 / 59
Stesso costruttore? KO! OK! OK! OK!57 / 59 58 / 59 59 / 59