La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

OOP Object Oriented Programming Programmazione Orientata agli Oggetti

Presentazioni simili


Presentazione sul tema: "OOP Object Oriented Programming Programmazione Orientata agli Oggetti"— Transcript della presentazione:

1 OOP Object Oriented Programming Programmazione Orientata agli Oggetti
INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

2 Cos’è un Oggetto? Gli oggetti sono la chiave per comprendere la tecnologia OO. Se ci guardiamo attorno vedremo molti esempi di Oggetti nel mondo reale: un masterizzatore, una mela, un cane, una televisione, una bicicletta …… Gli oggetti del mondo reale hanno 2 proprietà: hanno delle caratteristiche compiono delle azioni

3 Es. Masterizzatore Marca Velocità di scrittura su supporti CD-R
Velocità di scrittura su supporti CD-RW Velocità di lettura Interfaccia Dimensione del buffer dati CARATTERISTICHE (STATO) Scrivi su CD Scrivi su DVD Leggi CD Espelli CD AZIONI

4 CARATTERISTICHE (STATO) AZIONI
Es. bicicletta Marca Colore Velocità (es. 12 km/h) CARATTERISTICHE (STATO) Frenare Accelerare AZIONI

5 Azioni: sono le cose che un oggetto è in grado di fare
Caratteristiche: sono i dati che le azioni stesse possono utilizzare per eseguire le operazioni che da esse ci si aspetta. In OOP L’oggetto: modello astratto più naturale per descrivere la realtà Le proprietà o attributi: sono le caratteristiche di un oggetto I metodi: sono le azioni/operazioni che l’oggetto può compiere

6 Concetti chiave Es. bicicletta
ATTRIBUTI : insieme dei valori delle sue proprietà in un determinato istante di tempo. Se cambia anche una sola proprietà di un oggetto, il suo stato varierà di conseguenza. COMPORTAMENTO (behavior): insieme dei metodi che un oggetto è in grado di eseguire INTERFACCIA: insieme dei metodi accessibili dall’esterno Es. bicicletta attributi: velocità corrente, rapporto corrente, pedalata Comportamento/metodi: frena, accelera, cambia rapporto

7 Che cos’è una classe? Nel mondo reale si trovano molti oggetti dello stesso tipo. Vi sono ad esempio, i masterizzatori in grado di scrivere su CD e DVD o quelli che scrivono solo su CD. Tutti però sono in grado di eseguire la scrittura di dati o file multimediali su CD e tutti hanno alcune proprietà comuni (Marca, Velocità di scrittura su supporti CD-R, …) Diremo allora che più oggetti software che hanno le stesse proprietà e gli stessi metodi possono essere raggruppati in una classe ben definita di oggetti: nel nostro caso particolare, nella classe masterizzatore

8 Riassumendo:CLASSE - terminologia
costrutto base per definire tipi di dati astratti member variables: descrivono i dati contenuti nel tipo di dato astratto (STATO) member functions: definiscono le OPERAZIONI possibili sul tipo di dato Solo alcune delle variabili ed alcune delle operazioni verranno rese visibili all'esterno(interfaccia) Invisibilità della realizzazione del servizio

9 QUINDI… Un’istanza (oggetto) è un’entità concreta, che esiste nel tempo (viene costruita e poi distrutta) e nello spazio (occupa memoria) Una classe è il modello astratto che rappresenta le proprietà comuni (struttura e comportamento) ad un insieme di oggetti concreti (istanze), cioè la classe rappresenta un tipo di cui un oggetto è una sua istanza

10 DEFINIZIONE DI UNA CLASSE
Si tratta di un’estensione della struct class NomeClasse{ // attributi tipo1 attributo1; tipo2 attributo2; ….. // metodi NB. Presenza di funzioni tipo1 Funzione1(); tipo2 Funzione2(); }

11 Dichiarazione di un oggetto
NomeClasse NomeOggetto; Es. MiaBicicletta di classe Bicicletta Per accedere ad un attributo e ai metodi: NomeOggetto.NomeAttributo NomeOggetto.NomeFunzione

12 Esempio class Rettangolo{ //attributi float base,altezza; public: (vedi slide successive) //metodi void Assegna(float b,float h){ base=b; altezza=h; } float Area(){ return base*altezza; };

13 Una volta definita la classe si può definire l’oggetto ad esempio tovaglia tramite l’istruzione:
Rettangolo tovaglia;

14 Il prototipo e la dichiarazione delle funzioni in una classe
Invece di scrivere all’interno di una classe i metodi sotto forma di funzione, si possono scrivere qui solo i prototipi e le funzioni vengono dichiarate fuori Dichiarazione delle funzioni appartenenti a una classe: tipo NomeClasse::Funzione{ //attenzione a :: ….. return; }

15 A confronto class Rettangolo{ //attributi float base,altezza;
public: (vedi slide successive) //metodi void Assegna(float b,float h){ base=b; altezza=h; } float Area(){ return base*altezza; }; class Rettangolo{ //attributi float base,altezza; public: (vedi slide successive) //metodi void Assegna(float b,float h); float Area(); }; void Rettangolo::Assegna(float b, float h){ base=b; altezza=h; return; } void Rettangolo::Area(){ return base*altezza;

16 N.B: il codice dei metodi di una classe può essere definito in un file separato: una valida consuetudine prevede che la classe sia definita in un file di intestazione con estensione .H e implementata in una file di codice con estensione CPP e che entrambi i file abbiano come nome il nome della classe stessa.

17 Visibilità dei membri( attributi e metodi di una classe )
Public vs private public : deve essere specificata quando si vuole che i membri specificati siano disponibili anche al di fuori della classe di appartenenza private: (di default) sta ad indicare che tutti i membri che seguono, siano essi attributi o metodi, non possono essere visti al di fuori della classe

18 I concetti base della OOP
Astrazione Incapsulamento Ereditarietà Polimorfismo

19 ASTRAZIONE Processo logico che porta alla creazione di modelli (classi) generici (senza entrare nella situazione specifica) a partire dai quali verranno costruiti oggetti via via più specializzati. Es: Progetto di una casa: Se cerchiamo una definizione generica della casa, possiamo dire che ogni casa è formata da muri che ne delimitano il perimetro, è coperta da un tetto che ne delimita l'altezza, ha una porta di ingresso ed ha zero o più finestre. Questa definizione di casa costituisce la classe casa. Questo è un modello astratto in quanto si applica sia ad una capanna, che alla villetta con quattro stanze e allo stesso modo si applica all'Empire State Building o a Buckingham Palace. Da questa classe casa potranno discendere varie classi eredi: casa di legno casa di mattoni casa di pietra

20 Incapsulamento o Information Hiding
Incapsulamento: è la proprietà per cui un oggetto contiene ("incapsula") al suo interno le proprietà e i metodi per accedere agli stessi dati. E’ una tecnica utilizzata per nascondere una parte di un programma, in modo da proteggere le altre parti del programma da eventuali cambiamenti L'incapsulamento è realizzato per mezzo delle istruzioni: – Private: le funzioni e le variabili definite private NON sono accessibili all'esterno della classe. – Public: le funzioni e le variabili definite pubbliche sono accessibili all'esterno della classe. L'oggetto quindi diviene una black-box di cui, attraverso l'Interfaccia, sappiamo cosa fa e come interagisce con l'esterno ma non come lo fa. I vantaggi principali sono: robustezza indipendenza riusabilità degli oggetti

21 Ereditarietà (INHERITANCE)
E’ un meccanismo che permette di creare nuovi oggetti a partire da oggetti già definiti. Ciò si basa sul fatto che diversi tipi di oggetti hanno spesso una certa quantità di cose in comune fra loro. Es. In un sistema bancario esistono varie tipologie di conto (es. conti correnti bancario, libretti di risparmio, carte di credito e certificati di deposito.) Tutte queste differenti tipologie di conto hanno in comune alcune caratteristiche: un numero di conto, un tasso di interesse ed un sottoscrittore. Ognuno di questi conti possiede però anche delle specifiche caratteristiche, ad es. la carta di credito avrà un limite di spesa mentre il conto corrente bancario avrà uno o più libretti di assegni associati.

22 Certificati di deposito
In OOP, per rappresentare tale esempio si definisce un oggetto padre Conto che ingloba tutte le caratteristiche comuni ad ogni conto, e da esso, poi, si derivano i 4 oggetti figli: carta di credito,… Vantaggi Maggiore facilità nella manutenzione del software Se qualcosa dovesse variare per l'intera classe Conto, sarà sufficiente modificare soltanto l'oggetto padre per consentire che tutti gli oggetti figli ereditino la nuova caratteristica. Conto Carta di Credito Libretti di risparmio Carte di credito Certificati di deposito

23 Quindi grazie all’ereditarietà possiamo creare una nuova classe che estende un classe già esistente
Su questa classe possiamo: Introdurre nuovi comportamenti Modificare i comportamenti esistenti Attenzione: la classe originale non viene assolutamente modificata. Le modifiche vengono fatte sulla classe derivata E’ un concetto del tutto nuovo: non esiste nulla di simile nella programmazione procedurale

24 Prima le alternative erano:
Scrivere una nuova classe: fattibile ma è un peccato rifare tutto da zero Modificare quella esistente, ma se facciamo un errore potremmo mettere in crisi tutti i programmi che la usano già.

25 POLIMORFISMO Un aspetto fondamentale della programmazione oggetti è il polimorfismo. Possiamo inserire nella classe dei metodi che hanno lo stesso nome (e gli stessi parametri) di metodi già esistenti nella classe padre. Il fatto che siano gli stessi di quelli esistenti causa il comportamento di ridefinizione, ovvero di sostituzione del vecchio comportamento con uno nuovo. Vantaggio: facilità di manutenzione del codice Es. costruiamo un sistema software in grado di disegnare delle figure geometriche.

26 Esempio Definiamo una classe padre chiamata FiguraGeometrica
Deriviamo da questa tutte le classi che si occupano della gestione di una figura geometrica ben precisa. Quando l'utente desidera rappresentare una di tali figure, egli esegue una determinata azione che produce l'invio al sistema di un messaggio che, a sua volta, scatena l'invocazione del metodo disegnaFigura della classe FiguraGeometrica.. Con l'utilizzo del polimorfismo, il sistema è in grado di capire autonomamente quale figura geometrica debba essere disegnata ed invocarne direttamente il metodo disegnaFigura appartenente alla classe figlia coinvolta. Esempio

27 Concetti chiave STATO di un oggetto: insieme dei valori delle sue proprietà in un determinato istante di tempo. Se cambia anche una sola proprietà di un oggetto, il suo stato varierà di conseguenza. COMPORTAMENTO (behavior): insieme dei metodi che un oggetto è in grado di eseguire INTERFACCIA: insieme dei metodi attraverso i quali il mondo esterno ha accesso ai dati Es. mia bicicletta stato: velocità corrente, rapporto corrente, pedalata comportamento: frena, accelera, cambia rapporto

28 I messaggi Un oggetto non manipola mai direttamente i dati interni (le proprietà) di un altro oggetto ma ogni tipo di comunicazione tra oggetti deve sempre essere gestita tramite l'uso di messaggi, ovvero tramite le chiamate ai metodi che un oggetto espone all'esterno In altre parole un messaggio è una sollecitazione che proviene all’oggetto dall’esterno e che scatena l’esecuzione di un azione, ovvero di un metodo Es: l'oggetto masterizzatore esegue il metodo Scrivi_CD, perché un altro oggetto (per esempio, il controller) gli avrà precedentemente inviato una simile richiesta sollecitandone l'azione di scrittura.

29 Alcune volte l’oggetto B necessità di maggiori informazioni per sapere cosa fare esattamente
Per esempio: quando si vuole cambiare marcia, devo indicare quale inserire Queste informazioni sono passate tramite parametri

30 In conclusione La programmazione ad oggetti rappresenta quindi un modo diverso di pensare le applicazioni. Ogni applicazione è composta da un certo numero di oggetti, ognuno dei quali è indipendente dagli altri ma comunica con gli altri attraverso lo scambio di messaggi. Vantaggio: grande flessibilità e enorme potenza di utilizzo Si costruiscono i componenti una sola volta e si possono riutilizzarli successivamente ogniqualvolta ce ne sia bisogno.

31 Altri Vantaggi Lo scrivere codice all’interno di separati oggetti software fornisce un elevato numero di benefici: Facilità di lettura e di comprensione: Il codice sorgente di un oggetto può essere letto e compreso anche da persone diverse dall’autore Manutenzione del programma nel tempo per correzioni o miglioramenti Riutilizzo del codice: Se esiste già un oggetto (forse scritto da un altro sviluppatore), possiamo usare questo oggetto nel nostro programma. Pluggability and debugging ease: Se un particolare oggetto crea dei problemi si potrà rimuovere con facilità e sostituirlo con un altro. Simile alla sostituzione di parti meccaniche. 1 2 3 4

32 N.B: pluggability Gli Anglosassoni usano questo termine molto efficace per descrivere l’insieme di proprietà che consentono di costruire un nuovo sistema, prendendo alcune componenti già esistenti e mettendole insieme. Il termine deriva da plug, la normale spina elettrica: le spine però vanno infilate nelle prese. La metafora suggerisce quindi che l’insieme delle caratteristiche che rendono il componenete pluggabile, non dipendono solo dal componente stesso, ma è necessario che esso svolga una funzione ben precisa all’interno del sistema. Un aspetto ancora più importante è la sua compatibilità con gli altri componenti.

33 I LINGUAGGI IMPERATIVI
SONO BASATI SU I LINGUAGGI AD OGGETTI SONO BASATI SU Strutture dati (come i dati sono memorizzati: vettori, matrici, liste, alberi, …) Istruzioni (cosa deve fare il calcolatore: calcola espressioni, esegui test, leggi dati …) Il problema è visto dal “punto di vista” della macchina Il concetto di oggetto (entità logica in grado di effettuare determinate operazioni) Come gli oggetti interagiscono fra di loro Il problema è visto dal punto di vista della logica sottostante

34 Linguaggi ad oggetti Linguaggi ad OGGETTI PURI: le classi e gli oggetti sono le uniche astrazioni del linguaggio, cioè tutte le entità del linguaggio sono oggetti che appartengono a qualche classe es. java Linguaggi ad OGGETTI IBRIDIi: aggiungono l’astrazione di classe e oggetto ai costrutti tradizionali della programmazione, ed esistono oggetti es. C++, Object Pascal, Visual Basic


Scaricare ppt "OOP Object Oriented Programming Programmazione Orientata agli Oggetti"

Presentazioni simili


Annunci Google