Introduzione alla Programmazione Orientata agli Oggetti e all'ereditarietà

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

1 / 59
Introduzione alla OOP
2 / 59
La crisi del software
3 / 59
Crisi dimensionale
4 / 59
Crisi gestionale
5 / 59
Crisi qualitativa
6 / 59
Ingegneria del software
7 / 59
OOP

Visualizza gratis il Pdf completo

Registrati per accedere all’intero documento e trasformarlo con l’AI.

Anteprima

La crisi del software

1 / 59 Introduzione alla OOP 2/ 59 La crisi del software 3/ 59 Crisi dimensionale 4/ 59Crisi gestionale 5/ 59 Crisi qualitativa

Ingegneria del software e OOP

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à

Obiettivo: Naturalità

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.

Obiettivo: Affidabilità

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.

Obiettivo: Riutilizzabilità

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.

Obiettivo: Gestibilità

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.

Obiettivo: Estendibilità

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.

Obiettivo: Tempestività

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.

Warning: OOP non è un linguaggio

14 / 59 Warning La OOP non è un linguaggio di programmazione ma una metodologia!

Concetti fondamentali della OOP

15 / 59 OOP: Concetti fondamentali Incapsulamento Ereditarietà Polimorfismo

Incapsulamento

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.

Caratteristiche dell'incapsulamento

17 / 59 Incapsulamento Caratteristiche dell'incapsulamento: Astrazione Divisione delle responsabilità Occultamento dell'implementazione

Incapsulamento: Astrazione

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!

Incapsulamento: Divisione delle responsabilità

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!

Incapsulamento: Occultamento dell'implementazione

20 / 59 Incapsulamento: Occultamento dell'implementazione Vantaggi: protegge l'oggetto da manipolazioni esterne nasconde il funzionamento interno

Incapsulamento: riassunto

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.

Classe e oggetti

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.

Composizione di classe e 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.

Creazione di oggetti da una 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".

Esempio di classe e oggetti in C++

25 / 59 Classe e oggetti in C++: esempio26 / 59 27 / 59 28 / 59

UML: Diagramma di Classe

29 / 59 UML: Diagramma di Classe

UML: Diagramma degli Oggetti

30 / 59 UML: Diagramma degli Oggetti 31 / 59 32 / 59

UML: Diagramma di Classe (secondo esempio)

33 / 59 UML: Diagramma di Classe

UML: Diagramma degli Oggetti (secondo esempio)

34 / 59 UML: Diagramma degli Oggetti

Incapsulamento e livelli di accesso

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

Concetti fondamentali della OOP: Ereditarietà

35 / 59 OOP: Concetti fondamentali -Incapsulamento Ereditarietà Polimorfismo

Definizione di Ereditarietà

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.

Terminologia dell'Ereditarietà

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.

Quando usare l'Ereditarietà

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à!

La relazione "is a" nell'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.

Esempio di Ereditarietà

40 / 59 Ereditarietà: esempio41 / 59

Ereditarietà in C++

42 / 59 Ereditarietà: C++ 43 / 59

Gerarchia di Ereditarietà

44 / 59 Ereditarietà: Gerarchia

Concetti fondamentali della OOP: Polimorfismo

45 / 59 OOP: Concetti fondamentali -Incapsulamento -Ereditarietà Polimorfismo

Predire il futuro del software

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?

Definizione di Polimorfismo

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.

Tipi di Polimorfismo

47 / 59 Polimorfismo Nei linguaggi ad oggetti sono presenti due tipi di polimorfismo: overriding (sovrapposizione dei metodi) overloading (sovraccarico dei metodi)

Overriding: Sovrapposizione 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.

Esempio di Overriding

49 / 59 Overriding 50 / 59 Overriding 51 / 59 Overriding52 / 59

Funzione virtuale nell'Overriding

Overriding Funzione virtuale

Overloading: Sovraccarico dei metodi

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.

Esempio di Overloading

54 / 59 Overloading55 / 59 Overloading 56 / 59

Stesso costruttore?

Stesso costruttore? KO! OK! OK! OK!57 / 59 58 / 59 59 / 59

Non hai trovato quello che cercavi?

Esplora altri argomenti nella Algor library o crea direttamente i tuoi materiali con l’AI.