corso di fondamenti di informatica...
TRANSCRIPT
![Page 1: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/1.jpg)
Corso di Fondamenti di Informatica II
a.a. 2009/2010Francesco Fontanella
Introduzione alla programmazione orientata agli oggetti
![Page 2: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/2.jpg)
Esercitazione 3
■ Rendere il progetto indipendente dalla struttura dati utilizzata per memorizzare l'elenco degli studenti.
■ Creare il file studenti_lista.cpp. Nel file va ripetuta l'implementazione della esercitazione 1, ma usando una lista al posto vettore.
![Page 3: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/3.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 3
La Programmazione Modulare
■ Nelle lezioni precedenti abbiano visto i vantaggi della programmazione modulare.
■ Un programma può essere visto come un insieme di moduli che interagiscono tra di loro. Tutte le funzioni di un modulo sono scritte nello stesso file.
■ Ogni modulo è fatto di due parti, la specifica e l'implementazione. Questi due aspetti sono separati mettendoli in due file diversi: la specifica si trova nel suo file .h mentre l'implementazione nel file .cpp.
interfaccia
(Visibile dall'esterno)
corpo
(Nascosto all'esterno e protetto)
MODULO
![Page 4: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/4.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 4
La Programmazione Modulare
■ I moduli non fanno parte del linguaggio, ma sono un'organizzazione del codice da parte del programmatore.
■ La programmazione modulare offre enormi vantaggi nell'implementazione di programmi, in particolare al crescere della complessità dei programmi da scrivere.
■ Tra i principali vantaggi:– Suddivisione del lavoro tra diversi programmatori;– Semplificazione del riuso del software– Semplificazione della manutenzione;
![Page 5: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/5.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 5
La Programmazione ad Oggetti
■ La programmazione ad oggetti rappresenta un ulteriore sviluppo rispetto alla programmazione modulare.
■ La programmazione orientata agli oggetti ( Object Oriented Programming, OOP) è un paradigma di programmazione, in cui un programma viene visto come un insieme di oggetti che interagiscono tra di loro.
■ Nei linguaggi OOP esiste un nuovo tipo di dato, la classe. Questo tipo di dato serve appunto a modellare un insieme di oggetti dello stesso tipo.
■ In generale, un oggetto è caratterizzato da un insieme di attributi e da un insieme di funzionalità
Un paradigma di programmazione è caratterizzato dall'insieme di concetti e astrazioni che utilizza per rappresentare un programma e i passi che compongono un calcolo.Esempi di paradigmi sono: imperativo, funzionale, object oriented, logico:
![Page 6: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/6.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 6
Un Esempio di Oggetto
■ Un automobile può essere caratterizzata in questo modo:attributi funzionalitàpotenza frenamarce accellerapeso cambio marciacilindrata caqmbia direzione
■ È possibile interagire con l'automobile, per determinarne il suo comportamento attraverso il suo interfaccia che permette di effettuarele operazioni consentite:
– Pedale del freno– Pedale dell’acceleratore– Leva del cambio– volante
![Page 7: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/7.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 7
Un Ulteriore Esempio: un Videogioco
![Page 8: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/8.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 8
Classi e Oggetti: un Esempio
OrcoOrco CavaliereCavaliere
Classi
Istanze (Oggetti)
![Page 9: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/9.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 9
La Programmazione Orientata agli Oggetti
■ La programmazione orientata agli oggetti si basa su alcuni concetti fondamentali:
– Classe
– Incapsulamento
– Oggetto
– Ereditarietà
– Polimorfismo
![Page 10: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/10.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10
Linguaggi ad Oggetti
■ E’ possibile adottare tecniche di programmazione basate sugli oggetti anche in linguaggi tradizionali (ad es., in C o Pascal) adoperando opportune discipline di programmazione, aderendo cioè ad un insieme di regole.
■ Queste regole non fanno però parte del linguaggio e il loro uso non può essere forzato né verificato dal compilatore.
■ Un linguaggio di programmazione ad oggetti offre costrutti espliciti per la definizione di entità (oggetti) che incapsulano una struttura dati e le operazioni possibili su di essa.
■ Alcuni linguaggi, in particolare il C++, consentono di definire tipi astratti, e quindi istanze (cioè, variabili) di un dato tipo astratto. In tal caso il linguaggio basato sugli oggetti presenta costrutti per la definizione di classi e di oggetti.
![Page 11: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/11.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 11
Classi e oggetti
■ Nei linguaggi a oggetti, il costrutto class consente di definire nuovi tipi di dato e le relative operazioni.
■ Le operazioni possono essere definite sotto forma di operatori o di funzioni (dette metodi o funzioni membro), i nuovi tipi di dato possono essere gestiti quasi allo stesso modo dei tipi predefiniti del linguaggio:
– si possono creare istanze, e– si possono eseguire operazioni su di esse
■ Un oggetto è una variabile che appartiene ad un particolare tipo di dato definito dall'utente per mezzo del costrutto class.
■ Nel gergo dei linguaggi OO una variabile definita di un certo tipo (classe) rappresenta un'istanza della classe.
■ Lo stato di un oggetto, invece, è rappresentato dai valori correnti delle variabili che costituiscono la struttura dati utilizzata per implementare il tipo di dato rappresentato definito dalla classe.
![Page 12: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/12.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 12
L’istanziazione degli Oggetti
■ Un oggetto è una istanza (“esemplare”) di una classe.
■ Due esemplari della stessa classe sono distinguibili soltanto per il loro stato (i valori dei dati membro), mentre il comportamento (definto dalle funzioni membro) è sempre identico.
DV567AB
MK178NM
BV895GF
Automobile
a
b
c
valori
variabili
![Page 13: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/13.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 13
La Classe: Definizioni Generali
■ Una Classe è un tipo di dato definito dall'utente.
■ E costituita da:– Una struttura dati.– Un insieme di operazioni consentite sulla struttura dati.
■ Una Classe è rappresentata da due entità separate:– Una specifica– Un'implementazione
![Page 14: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/14.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 14
Caratteristiche di una Classe
■ La classe è un modulo software con le seguenti caratteristiche:
– E’ dotata di un’interfaccia (specifica) e di un corpo (implementazione);
– La struttura dati “concreta” di un oggetto della classe, e gli algoritmi che ne realizzano le operazioni, sono tenuti nascosti all’interno del modulo che implementa la classe;
– Lo stato di un oggetto evolve unicamente in relazione alle operazioni ad esso applicate;
– Le operazioni sono utilizzabili con modalità che prescindono completamente dagli aspetti implementativi; in tal modo è possibile modificare gli algoritmi utilizzati senza modificare l’interfaccia
![Page 15: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/15.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 15
Il Linguaggio C++
■ C++ è un linguaggio di programmazione general-purpose che supporta:– la programmazione procedurale (è un C “migliore”);– la programmazione orientata agli oggetti;– la programmazione generica.
■ C++ è quindi un linguaggio ibrido, nel senso che supporta più paradigmi di programmazione.
![Page 16: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/16.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 16
L'Incapsulamento
■ L'incapsulamento (in inglese: information hiding) è la suddivisione di un oggetto in due parti:
– Interfaccia:• costituito dall'insieme di metodi (detti anche messagi) che possono
essere invocati dall'utente per accedere alle funzionalità dell'oggetto;
– Implementazione• Contiene l'implementazione delle funzionalità dell'oggetto e delle
strutture dati necessarie• È nascosta all’utente
■ 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 publiche sono accessibili all'esterno
della classe.
![Page 17: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/17.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 17
Le classi in C++
■ Il linguaggio C++ supporta esplicitamente la dichiarazione e la definizione di tipi astratti da parte dell'utente mediante il costrutto class; le istanze di una classe vengono dette oggetti.
■ In una dichiarazione class occorre specificare sia la struttura dati che le operazioni consentite su di essa. Una classe possiede, in generale, una sezione pubblica ed una privata.
■ La sezione pubblica contiene tipicamente le operazioni (dette anche metodi) consentite ad un utilizzatore della classe. Esse sono tutte e sole le operazioni che un utente può eseguire, in maniera esplicita od implicita, sugli oggetti.
■ La sezione privata comprende le strutture dati e le operazioni che si vogliono rendere inaccessibili dall'esterno.
![Page 18: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/18.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 18
Le classi in C++: un Esempio
Interfaccia
Implementazione
c la s s Contatore { public : void Incrementa(); // operazione incremento void Decrementa(); // operazione decremento uns ig ned int give_value(); // restituisce il valore // corrente priva te: uns ig ned int value; // valore corrente cons t uns ig ned int max; // valore massimo};
![Page 19: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/19.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 19
Rappresentazione Grafica
■ La notazione grafica è una metafora nella quale sono rappresentati in tre sezioni contigue:
– il nome della Classe– la struttura dati (sequenza di variabili membro) – i metodi della Classe (funzioni membro della classe).
Nome della classe
-Nome variabile 1: Tipo-Nome variabile 2: Tipo
+funzione 1 (lista parametri formali): Tipo di ritorno+funzione 2 (lista parametri formali): Tipo di ritorno
![Page 20: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/20.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 20
Ruoli di una Classe
■ Una Classe può giocare un duplice ruolo:
– Ruolo Client: cioè può utilizzare le risorse messe a disposizione da altre Classi.
– Ruolo Server: cioè essere usata da altre Classi o da un Programma Utente.
Client Server
<< uso >>
![Page 21: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/21.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 21
Una Classe ha un'Interfaccia
Light
+on()+off()+brighten()+dim()
//Esempio di usoLight lt;lt.on();
Nome della classe
Interfaccia
Un altro esempio
Operazioni
![Page 22: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/22.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 22
La Specifica di una Classe
■ Rappresenta un'interfaccia per la classe stessa in cui sono descritte:– le risorse messe a disposizione ai suoi potenziali utenti;– le regole sintattiche per il loro utilizzo;
■ E' separata dalla implementazione, permette utilizzo senza che l'utente conosca i dettagli di implementazione.
■ È a cura dello sviluppatore della classe.
■ E' scritta in un apposito "file di intestazione".
![Page 23: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/23.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 23
Specifica: Notazione Base
//nome del file C.hc la s s C { public :
//prototipi delle funzioni membro T1 f1(....);
T2 f2(....);.........
priva te: //struttura dati
int i; c har c;
........}; //fine specifica della classe C
NOTAdi default tutti gli attributisono privatePertanto possiamo scrivere:
c la s s C { //struttura dati
int i; char c;
..... public : T1 f1(....);
T2 f2(....);.....
};
![Page 24: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/24.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 24
L’Implementazione di una Classe
■ E' la codifica in C++ delle singole operazioni presentate nell'interfaccia della Classe.
■ E' una particolare soluzione (può cambiare l'implementazione senza che cambi l'interfaccia)
■ È a cura dello sviluppatore della classe.
■ E' scritta in un apposito "file di implementazione " (con estensione .cpp)
![Page 25: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/25.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 25
Implementazione
//nome del file C.cpp#include "C.h"T1 C::f1(....) {
//realizzazione della funzione f1}T2 C::f2(....) {
//realizzazione della funzione f2...........}//fine del file C.cpp
deve includere anche l'header file
![Page 26: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/26.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 26
Uso di una Classe da Parte di un Modulo Utente.
■ Affinché un programma possa utilizzare un classe deve:– includere la specifica della classe (contenuta nel file nomeClasse.h) – dichiarare istanze della classe.
include
include
Utente.cpp C.h
C.cpp
![Page 27: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/27.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 27
Uso di una Classe
//PROGRAMMA UTENTE DELLA CLASSE C#include "C.h"
main() {C c1; //definisce oggetto c1 della classe CC c2; //definisce oggetto c2 della classe C..........c1.f1(....); //applica ad oggetto c1 la funzione membro f1c1.f2(....); //applica ad oggetto c1 la funzione membro f2c2.f1(....); //applica ad oggetto c2 la funzione membro f1
.
.
.} //fine programma utente
deve includere anche l'header file
![Page 28: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/28.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 28
Generazione del file eseguibile
C.h
C.cpp
include
Utente.cpp
include
Compilatore C++
C.o Utente.o
linker Utente.exe
![Page 29: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/29.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 29
Ereditarietà e polimorfismo
■ L’ereditarietà consente di definire nuove classi per specializzazione o estensione di classi preesistenti, in modo incrementale
■ Il polimorfismo consente di invocare operazioni su un oggetto, pur non essendo nota a tempo di compilazione la classe cui fa riferimento l’oggetto stesso
![Page 30: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/30.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 30
Vantaggi della programmazione OO
■ Rispetto alla programmazione tradizionale, la programmazione orientata agli oggetti (OOP) offre vantaggi in termini di:✔ modularità: le classi sono i moduli del sistema software;✔ coesione dei moduli: una classe è un componente software ben coeso in
quanto rappresentazione di una unica entità;✔ disaccoppiamento dei moduli: gli oggetti hanno un alto grado di
disaccoppiamento in quanto i metodi operano sulla struttura dati interna ad un oggetto; il sistema complessivo viene costruito componendo operazioni sugli oggetti;
✔ information hiding: sia le strutture dati che gli algoritmi possono essere nascosti alla visibilità dall'esterno di un oggetto;
✔ riuso: l'ereditarietà consente di riusare la definizione di una classe nel definire nuove (sotto)classi; inoltre è possibile costruire librerie di classi raggruppate per tipologia di applicazioni;
✔ estensibilità: il polimorfismo agevola l'aggiunta di nuove funzionalità, minimizzando le modifiche necessarie al sistema esistente quando si vuole estenderlo.
![Page 31: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/31.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 31
I Costruttori
■ È molto comune che una parte dell'oggetto debba essere inizializzata prima dell'uso. Per esempio nel caso della classe Contatore vista in precedenza è necessario inizilizzare il valore della variabile value.
■ Poiché l'inizializzazione degli oggetti è un'operazione molto comune, il C++ consente di inizializzare gli oggetti al momento della loro creazione.
■ Questa inizializzazione automatica è possibile utilizzando le funzioni costruttore.
![Page 32: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/32.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 32
I Costruttori
■ Un costruttore è una particolare funzione membro di una classe che porta lo stesso nome della classe.
■ Per le funzioni costruttore non deve essere specificato il tipo restituito, in quanto in C++ le funzioni costruttore non possono restituire valore .
Esempio
c la s s Contatore { public : Contatore();
.
.};
Contatore::Contatore(){ value = 0;}
![Page 33: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/33.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 33
I Costruttori
■ Il costruttore di un oggetto viene chiamato automaticamente nel momento in cui deve essere creato l'oggetto.
■ Questo significa che la funzione costruttore di un oggetto viene chiamata al momento della dichiarazione dell'oggetto.
■ Pertanto nella programmazione OO, la dichiarazione di una variabile di tipo oggetto, non è solo un'istruzione per così dire passiva di allocazione di memoria, ma implica l'esecuzione del codice contenuto nel costruttore della classe.
Esempio
#include “Contatore.h”Contatore cont1, cont2;
Il costruttore viene eseguito per ognuna delle variabili dichiarate
![Page 34: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/34.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 34
I Costruttori
■ I costruttori vengono chiamati anche per gli oggetti allocati dinamicamente.
■ In questo caso, il costruttore viene chiamato al momento dell'allocazione.
Esempio
#include “Contatore.h”Contatore *cont_ptr;
cont_ptr = new Contatore;
Il costruttore NON viene eseguito quando si dichiarano variabili di tipo puntaore
Il costruttore viene eseguito al momento dell allocazionedinamica
![Page 35: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/35.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 35
Costruttori parametrizzati
■ I costruttori possono ricevere anche degli argomenti.
■ Normalmente lo scopo degli argomenti è quello di passare un valore di inizializzazione.
Esempio
c la s s Contatore { public : Contatore(); Contatore(int val);
.
.};
Contatore::Contatore(){ value = 0;}Contatore::Contatore(int val){ value = val;}
![Page 36: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/36.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 36
Costruttori parametrizzati
■ È possibile definire costruttori con più parametri.
Esempio
C las s Myclass { public : Myclass(int i, int j);
.
. priva te: int a; int b;};
Myclass::Myclass(int i, int j){ a = i; b = j;}
![Page 37: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/37.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 37
Costruttori Parametrizzati
■ I costruttori parametrizzati possono essere utilizzati in fase di dichiarazione, o allocazione utilizzando la seguente sintassi:
#include “Contatore.h”#include “Myclass.h”
Contatore cont1, cont2(100), *cont_ptr;Myclass mc(0,0), *m_ptr;
cont_ptr = new Contatore(10);m_ptr = new Myclass(1, 10);
![Page 38: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/38.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 38
Costruttori con un Solo Parametro
■ Nel caso dei costruttori con un solo parametro è anche possibile la seguente sintassi:
#include “Contatore.h”Contatore cont = 100; Viene chiamato il costruttore
con parametro uguale a 100
![Page 39: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/39.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 39
Struttura degli Oggetti
■ Ciascun oggetto della classe è costituito:– da una parte base, allocata per effetto della definizione dell’oggetto nel
programma utente in area dati statici, stack o heap, in base alla classe di memorizzazione;
– da una eventuale estensione, allocata in area heap
a b c d e f g \0
int n
char * s
Parte base
estensione
![Page 40: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/40.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 40
Distruttori
■ Un distruttore è una funzione membro che:– è necessaria solo se l’oggetto presenta un’estensione dinamica– ha lo stesso nome della classe, preceduto da ~ (tilde) – non restituisce risultato (neanche void) – non ha alcun parametro
■ Generalmente lo scopo dei distruttori è quello di deallocare l’estensione dinamica di un oggetto
■ NON può essere invocata esplicitamente dal programma utente, ma viene invocata implicitamente dal compilatore quando viene deallocato lo spazio di memoria assegnato all'oggetto.
![Page 41: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/41.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 41
Esempio di Distruttore
■ Per quanto detto in precedenza, il costruttore serve per deallocare le estensioni dinamiche degli oggetti.
Esempio
C las s Stack { public : Stack(); ~Stack(); .
.
private: int *st_ptr; int num;
.
.};
stack.h
// CostruttoreStack::Stack(){ st_ptr = new int[SIZE]; num = 0;}
// DistruttoreStack::~Stack(){ delete [] st_ptr;}
stack.cpp
Allocazione dinamicadel vettore
Dealloca il vettoredinamico
![Page 42: Corso di Fondamenti di Informatica IIwebuser.unicas.it/.../dida/FI20910/Appunti/lezione12.pdfFrancesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 10 Linguaggi](https://reader030.vdocuments.pub/reader030/viewer/2022021701/5c66f21009d3f2c14e8cc718/html5/thumbnails/42.jpg)
Francesco Fontanella, Corso di Fondamenti di Informatica II a.a. 2008/2009 42
Esecuzione dei Distruttori
■ I distruttori vengono eseguiti anche quando vengono deallocati oggetti precedentemente allocati dinamicamente.
Esempio
void funz(){ Stack *st_ptr;
.str = new Stack;
.
. delete st_ptr;
}
Viene invocato il distruttore di stack