43
d. canonico ([email protected]) calcolatori elettronici III Politecnico di Torino sede di Alessandria C a l c o l a t o r i E l e t t r o n i c i I I I ing. Dino Canonico dip. di Automatica e Informatica telefono: 011 564 7036 posta elettronica: [email protected] Slide 1

Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

Embed Size (px)

Citation preview

Page 1: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

Politecnico di Torinosede di Alessandria

Calcolatori Elettronici III

ing. Dino Canonicodip. di Automatica e Informatica

telefono: 011 564 7036posta elettronica: di no@pol i t o. i t

Slide 1

Page 2: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

Indice

Slide 39

1342476568

7273747982868991

105111

Parte I dai linguaggi procedurali al paradigma ad oggettiIntroduzioneLinguaggi proceduraliLinguaggi ad oggettiClassiEreditarietàRidefinizioneClassi virtualiParte II: implementazione C++Implementazione C++Il costrutto classRegole di visibilitàImplementazione dei metodiCostruttori e distruttoriOverloading dei metodiAllocazione statica di oggettiAllcoazione dinamica di oggettiEreditarietà in C++Overloading degli operatori

Slide 2

Page 3: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

implementazione C++

il C++ implementa i meccanismi del paradigma ad oggetti con costrutti appositi

le classi descrivono le potenzialità degli oggetti da essi instanziati

vengono supportati i meccanismi di

ereditarietà (semplice e multipla)

data hiding

overloading di operatori e funzioni

vengono mantenuti inoltre i costrutti e le caratteristiche del linguaggio C

Slide 72

Page 4: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

il costrutto class...

il costrutto class definisce una classe

è idealmente simile al costrutto struct del C, con due differenze sostanziali

permette di raggruppare in una struttura non solo variabili ma anche funzioni

permette di dividere le variabili e li funzioni in pubbliche (visibili ed utilizzabili da elementi esterni alla classe) e private (utilizzabili solo all’ interno della classe)

viene scritto all’ interno di un file (generalmente .h), eventualmente insieme al resto del codice

Slide 73

Page 5: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

... il costrutto class...

esempio

sia data una classe che modelli un semplice contatore, capace di

incrementare e decrementare il proprio valore

fornire il proprio valore all’esterno

se ne scriva l’ implementazione C++

Slide 74

Page 6: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

... il costrutto class...

cl ass count er{

i nt val or e;publ i c:

voi d i ncr ement a ( ) ;voi d decr ement a ( ) ;i nt l eggi ( ) ;

}

dichiarazione del nomedichiarazione componenti private

dichiarazione componenti pubbliche

Slide 75

Page 7: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

... il costrutto class

le definizioni delle componenti pubbliche e private seguono la sintassi del costrutto struct

l’ insieme delle componenti pubbliche della classe corrisponde all’ interfaccia della classe stessa

le componenti private sono invece funzioni e variabili “di servizio”, utilizzabili liberamente all’ interno della classe e quindi da metodi (funzioni) sia pubblici che privati, ma vengono “nascosti” agli utilizzatori terzi della classe

questo procedimento si dice data hiding

Slide 76

Page 8: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

regole di visibilità

gli elementi (metodi e membri) di una classe possono essere dichiarati come

public: visibili a chi fa uso della classe

private: visibili solo alla classe stessa ma invisibili all’esterno

i membri possono anche esseer definiti protected: sono visibili alla classe stessa e alle classi che ereditano da essa

le variabili comuni mantengono le regole di visibilià del C

Slide 77

Page 9: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

funzioni friend

è possibile definire funzioni che, pur essendo esterne ad una classe, ne possono manipolare i valori privati

queste funzioni, pur essendo definite all’ interno dell’ interfaccia della classe non ne fanno parte

queste funzioni devono essere definite tramite la keyword friend

è possibile definire friend anche intere classi

è una metodologia molto usata nel campo dell’overloading degli operatori

Slide 78

Page 10: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

implementazione dei metodi...

dopo aver definito i metodi pubblici e privati occorre scriverne l’ implemetazione

i membri vengono implementati separatamente rispetto alla definizione della classe e vi si collegano tramite la dichiarazione <nome_cl asse>: : anteposta al nome del metodo

Slide 79

Page 11: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

... implementazione dei metodi ...

si scriva l’ implementazione dei metodi della classe counter

voi d count er : : i ncr ement a ( ){

val or e ++;}voi d count er : : decr ement a ( ){

val or e −−;}i nt count er : : l eggi ( ){

r et ur n val or e;}

Slide 80

Page 12: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

... implementazione dei metodi

i metodi vengono implementati all’ interno del listato

tutti i metodi (pubblici e privati) possono "maneggiare" le variabili pubbliche e private

all’esterno però sono visibili solo i metodi pubblici e le variabili (o membri o attributi) pubbliche

Slide 81

Page 13: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

costruttori e distruttori...

la maniera nella quale vengono create le istanze di una classe non è automatica, ma va specificata in un apposito metodo (o in una apposita serie di metodi) detto costruttore

allo stesso modo, alla fine dell’elaborazione, le variabili oggetto allocate devono liberare le risorse impiegate nelle modalità espresse dal distruttore

in una classe possono esistere più costruttori, tra i quali chi istanzia l’oggetto (il programmatore) sceglie volta per volta quello che ritiene opportuno, ma un solo distruttore

Slide 82

Page 14: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

... costruttori e distruttori ...

il costruttore che non richiede alcun parametro in ingresso è detto costruttore di default

il costruttore viene richiamato automaticamente se non si fa una allocazione esplicita

discorso è analogo per quanto riguarda il distruttore

i costruttori hanno lo stesso nome della classe, il distruttore ha lo stesso nome della classe preceduto dal simbolo tilde

costruttori e distruttore non hanno un valore di ritorno

Slide 83

Page 15: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

... costruttori e distruttori

cl ass count er{

. . .

publ i c :count er ( ) ;count er ( i nt ) ;~count er ( ) ;. . .

}

count er : : count er ( ){

pr i nt f ( " cost r ut t or e\ n" ) ;val or e = 0;

}count er : : count er ( i nt i ni t ){

pr i nt f ( " cost r ut t or e a %d\ n" , i ni t ) ;val or e = i ni t ;

}count er : : ~count er ( ){

pr i nt f ( " di st r ut t or e\ n" ) ;}

Slide 84

Page 16: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

membri statici di una classe

un membro statico di una classe è un membro in cui indirizzo è condiviso da tutte le istanze della classe in questione

cl ass count er{st at i c val or e;publ i c :

voi d i ncr ement a ( ) ;voi d decr ement a ( ) ;i nt l eggi ( ) ;

}

i nt count er : : val or e = 0

counter c1

counter c1

counter c1

valore

Slide 85

Page 17: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

overloading dei metodi...

è possibile che una classe abbia più metodi, identici per quanto riguarda nome e tipo del valore di ritorno, ma che accettino in ingresso parametri diversi

questo comportamento (detto polimorfismo o overloading dei metodi) aggiunge flessibiltà agli oggetti scritti in C++

Slide 86

Page 18: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

... overloading dei metodi

cl ass count er{

. . .

publ i c :voi d r eset ( ) ;voi d r eset ( i nt ) ;. . .

}

cambiano invecei parametri ingioco

nome e valoredi ritorno noncambiano

Slide 87

Page 19: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

primo programma completo#i ncl ude <st di o. h>

cl ass count er{

i nt val or e;publ i c:

count er ( ) ;count er ( i nt ) ;~count er ( ) ;voi d i ncr ement a ( ) ;voi d decr ement a ( ) ;i nt l eggi ( ) ;voi d r eset ( ) ;voi d r eset ( i nt ) ;

} ;

count er : : count er ( ){

pr i nt f ( " chi amo i l cost r ut t or e\ n" ) ;val or e = 0;

}

count er : : count er ( i nt val ){

pr i nt f ( " chi amo i l cost r ut t or e a val or e %d\ n" , val ) ;val or e = val ;

}

count er : : ~count er ( ){

pr i nt f ( " chi amo i l di st r ut t or e\ n" ) ;}

Voi d count er : : i ncr ement a ( ){

val or e ++;}

voi d count er : : decr ement a ( ){

val or e −−;}

i nt count er : : l eggi ( ){

r et ur n val or e;}

voi d count er : : r eset ( ){

val or e = 0;}

voi d count er : : r eset ( i nt val ){

val or e = val ;}

file count er . h

Slide 88

Page 20: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

allocazione statica di oggetti ...

come le variabili allocate staticamente nel C gli oggetti possono essere allocati staticamente nel C++

i membri e i metodi pubblici sono accessibili con una sintassi simile a quella utilizzata per le strutture

voi d mai n ( ){

count er c1, c2 ( 20) ;. . .c1. i ncr ement a ( ) ;pr i nt f ( " val or e di c2: %d\ n" , c2. l eggi ( ) ) ;

}

Slide 89

Page 21: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

... allocazione statica di oggetti

#i ncl ude <st di o. h>#i ncl ude " count er . h"

voi d mai n ( ){

count er c1, c2 ( 10) ;

c1. i ncr ement a ( ) ;c1. i ncr ement a ( ) ;

pr i nt f ( " c1 val e %d\ n" , c1. l eggi ( ) ) ;

c2. r eset ( 20) ;pr i nt f ( " c2 val e %d\ n" , c2. l eggi ( ) ) ;

}

file myPr ogr am. cpp

di no ~/ docs/ pol i / c3> gcc myPr ogr am. cppdi no ~/ docs/ pol i / c3> . / a. outchi amo i l cost r ut t or echi amo i l cost r ut t or e a val or e 10c1 val e 2c2 val e 20chi amo i l di st r ut t or echi amo i l di st r ut t or edi no ~/ docs/ pol i / c3>_

shell di sistema

Slide 90

Page 22: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

allocazione dinamica di oggetti...

come anche le variabili del C, nel C++ è possibile allocare dinamincamente gli oggetti mediante l’utilizzo di puntatori

come nel C è necessario riservare esplicitamente la memoria da utilizzare; a differenza del C non si usa la funzione mal l oc ( i nt ) ma la keyword new, seguita dai parametri del costruttore

per deallocare un oggetto non si usa la funzione f r ee ma il costrutto del et e, che invoca il distruttore specifico per la classe

Slide 91

Page 23: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

... allocazione dinamica di oggetti ...

anche in questo caso la sintassi è simile a quella usata per le strutture

voi d mai n ( ){

count er * c1, * c2;

c1 = new count er ( ) ;c2 = new count er ( 10) ;

. . .c2−>i ncr ement a ( ) ;pr i nt f ( " val or e di c1: %d\ n" , c1−>l eggi ( ) ) ;. . .

del et e c1;del et e c2;

}

Slide 92

Page 24: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

... allocazione dinamica di oggetti

#i ncl ude <st di o. h>#i ncl ude " count er . h"

voi d mai n ( ){

count er * c1;count er * c2;c1 = new count er ;c2 = new count er ( 10) ;

c1−>i ncr ement a ( ) ;c1−>i ncr ement a ( ) ;

pr i nt f ( " c1 val e %d\ n" , c1−>l eggi ( ) ) ;

c2−>r eset ( 20) ;pr i nt f ( " c2 val e %d\ n" , c2−>l eggi ( ) ) ;del et e c1;del et e c2;

}

file myPr ogr am. cpp

di no ~/ docs/ pol i / c3> gcc myPr ogr am. cppdi no ~/ docs/ pol i / c3> . / a. outchi amo i l cost r ut t or echi amo i l cost r ut t or e a val or e 10c1 val e 2c2 val e 20chi amo i l di st r ut t or echi amo i l di st r ut t or edi no ~/ docs/ pol i / c3>_

shell di sistema

Slide 93

Page 25: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

creazione per copia

normalmente gli oggetti vengono creati mediante l’uso degli appositi costruttori

esiste però un meccanismo collaterale detto "creazione per copia" che permette di creare un clone di un oggetto

questo si ottiene utilizzando l’oggetto da clonare come parametro del costruttore dell’oggetto da creare

voi d mai n ( ){

count er c1, c2 ( 10) , c3 ( c2) ;. . .

}

Slide 94

Page 26: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

passaggio di parametri per valore e per riferimento...

analogamente al C un oggetto può essere passato per valore o per riferimento: nel primo caso la funzione destinazione elabora una copia dell’oggetto passato, nel secondo ne manipola effettivamente il contenuto

valgono le stesse considerazioni fatte a suo tempo per il C (un puntatore passato per valore è come una variabile passata per riferimento...)

Slide 95

Page 27: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

... passaggio di parametri per valore e per riferimento

voi d t est : : aument a ( count er c){

c. i ncr ement a ( ) ;}

voi d t est : : aument a ( count er * c){

c−>i ncr ement a ( ) ;}

voi d mai n ( ){

count er c1, c2 ( 10) ;t est t ;. . .t . aument a ( c1) ;t . aument a ( &c2) ;

}

Slide 96

Page 28: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

Esercizio ...

si implementi in C++ la classe Stringa, che permetta di

inizializzare una stringa vuota, oppure di inizializzare una stringa a partire da un array di caratteri

conoscere la lunghezza della stringa

confrontare la stringa con un array di caratteri dato (uguale/diversa)

trasformare i caratteri minuscoli in maiuscoli

concatenare la stringa con un’altra data

Slide 97

Page 29: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

... esercizio#i ncl ude <st r i ng. h>#i ncl ude <mal l oc. h>

cl ass St r i nga{ char * val or e; i nt di mensi one;

publ i c: St r i nga ( ) ; St r i nga ( char * ) ; ~St r i nga ( ) ; i nt l unghezza ( ) ; i nt ugual eA ( char * ) ; voi d i nMai uscol o ( ) ; char * l eggi ( ) ; voi d concat ena ( char * ) ;} ;

St r i nga: : St r i nga ( ){ val or e = ( char * ) mal l oc ( 0) ; di mensi one = 0;}

St r i nga: : St r i nga ( char * val ){ val or e = ( char * ) mal l oc ( si zeof ( val ) + 1) ; val or e [ st r l en ( val ) − 1] = ’ \ 0’ ; st r cpy ( val or e, val ) ; di mensi one = st r l en ( val or e) ;}

St r i nga: : ~St r i nga ( ){ f r ee ( val or e) ;}

i nt St r i nga: : l unghezza ( ){ r et ur n di mensi one;}

i nt St r i nga: : ugual eA ( char * val ){ i f ( s t r cmp ( val , val or e) == 0) r et ur n 0; el se r et ur n −1;}

voi d St r i nga: : i nMai uscol o ( ){ f or ( i nt a = 0; a < di mensi one; a ++) i f ( val or e [ a] <= ’ z ’ && val or e [ a] >= ’ a’ )

val or e [ a] = val or e [ a] −’ a’ +’ A’ ;}

char * St r i nga: : l eggi ( ){ r et ur n val or e;}

voi d St r i nga: : concat ena ( char * al t r o){ st r cat ( val or e, al t r o) ; di mensi one = st r l en ( val or e) ;}

Slide 98

Page 30: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

esercizio

si scriva il programma testString che svolga le seguenti operazioni:

allocazione statica e dinamica di due oggetti Stringa

inizializzazione degli stessi dove necessario

manipolazione

distruzione dove necessario

Slide 99

Page 31: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

Esercizio ...

si scrivano le classi ritenute necessarie per implementare un sistema di archivio produttori / prodotti / ordini

si identifichino i produttori mediante nome e indirizzo

si identifichino i prodotti mediante nome

si identifichino gli ordini in base a produttore, prodotto ordinato e quntità di quest’ultimo

per semplicità si assuma che ogni ordine comprenda un solo prodotto

Slide 100

Page 32: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

... esercizio

pr odot t o

get Nome ( )

pr odut t or e

get Nome ( )get I ndi r i zzo ( )

or di ne

pr odot t opr odut t or equant i t à

Slide 101

Page 33: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

Esercizio...

si scrivano le classi necessarie per implementare un simulatore di pizzeria, comprendente clienti, tavoli, camerieri e forno

si assuma per semplicità che non esistano tavoli separati ma un’unica tavolata e che i clienti arrivino singolarmente

si prevedano per ogni classe parametri che descrivano il comportamento della classe stessa con il passare del tempo

Slide 102

Page 34: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

...esercizio ...cl ass t avol o{ i nt n_post i ; i nt n_post i _l i ber i ;publ i c : t avol o ( i nt ) ; ~t avol o ( ) ; voi d occupa ( ) ; voi d r i l asci a ( ) ; i nt get _num_post i _l i ber i ( ) ;}

cl ass cl i ent e{ i nt pr ef er enza; i nt pazi enza_mi nut i ; i nt past o_mi nut i ;publ i c : cl i ent e ( i nt , i nt ) ; ~cl i ent e ( ) ;}

cl ass camer i er e{ t avol o ser v i z i o;publ i c : camer i er e ( t avol o) ; ~camer i er e ( ) ; voi d i nt er r oga_cl i ent e ( c l i ent e) ; voi d passa_or di ne ( f or no) ;}

cl ass f or no{ i nt t empo_pr epar azi one; i nt * coda;publ i c : f or no ( ) ; ~f or no ( ) ; voi d accoda ( i nt ) ; voi d pr epar a ( i nt ) ;}

Slide 103

Page 35: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

...esercizio

classe cliente

ogni cliente ha una preferenza sulla pizza da scegliere e questa è codificata con un numero intero.

Inoltre ha un determinato "tempo di pasto" che è quello durante il quale occupa un posto di un tavolo

classe tavolo

un tavolo è caratterizzato dal numero totale di posti e dal numero di quelli liberi

classe cameriere

ogni cameriere è assegnato ad un tavolo (ipotesi semplicistica)

il cameriere può interrogare un cliente sulle sue preferenze e passare l’ordinazione così ad un forno

classe forno

un forno può accettare una serie di ordinazioni e accodarle in un array

è caratterizzato inoltre da un tempo tipico di preparazione

Slide 104

Page 36: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

ereditarietà in C++...

secondo il paradigma ad oggetti, è possibile da una classe generale derivare una classe più particolare, aggiungendo nuovo metodi o ridefinendone alcuni della classe principale

la classe derivata eredita dalla classe principale

tutti i membri (anche quelli privati)

tutti i metodi propri della classe tranne

costruttori e distruttori

overloading di operatori

Slide 105

Page 37: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

... ereditarietà in C++

per definire che una classe ne estende un’altra occorre modificare il costrutto class

in particolare occorre definire le regole che indichino quali parti originariamente private sono "raggiungibili" dalle classi derivate e quali no

Slide 106

Page 38: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

esempio

cl ass scaf f al e{ i nt al t ezza, l ar ghezza; i nt numer o_r i pi ani ;publ i c : scaf f al e ( ) ; ~scaf f al e ( ) ;

voi d set Al t ezza ( i nt ) ; voi d set Lar ghezza ( i nt ) ; voi d set Numer oRi pi ani ( i nt ) ; i nt get Al t ezza ( voi d) ; i nt get Lar ghezza ( voi d) ; i nt get Numer oRi pi ani ( voi d) ;}

cl ass ar madi o : publ i c scaf f al e{ i nt numer o_ant e;publ i c: ar madi o ( ) ; ~ar madi o ( ) ;

voi d set Numer oAnt e ( i nt ) ; i nt get Numer oAnt e ( voi d) ;}

eredita da...

non è il casodi ridefinirei metodi discaf f al e

Slide 107

Page 39: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

Costruttori nelle classi derivate

Se una classe B deriva da una classe A, può essere necessario dover invocare un costruttore specifico della classe A e non quello di default.

In questo caso si specifica la chiamata al construttore richiesto direttamente nella definizione del costruttore della classe derivata

La chiamata al costruttore della classe A va indicata immediatamente dopo la definizione del costruttore della classe B e va preceduta da un carattere ": "

Slide 108

Page 40: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

Esempio ...

si scriva una classe vei col o che esporti i seguenti metodi:

i nt l eggi _num_r uot e ( voi d) ;

i nt l eggi _peso ( voi d) ;

si scriva una classe auto che aggiunga alla classe veicolo il metodo

i nt l eggi _num_post i ( voi d) ;

Slide 109

Page 41: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

... esempiofile vei col o. h

file aut omobi l e. cpp

cl ass vei col o{ i nt num_r uot e; i nt peso;

publ i c:

vei col o ( i nt , i nt ) ; ~vei col o ( ) ;

i nt l eggi _num_r uot e ( voi d) ; i nt l eggi _peso ( voi d) ;} ;

vei col o: : vei col o ( i nt r , i nt p){ num_r uot e = r ; peso = p;}

vei col o: : ~vei col o ( voi d){ r et ur n;}

i nt vei col o: : l eggi _num_r uot e ( voi d){ r et ur n num_r uot e;}

i nt vei col o: : l eggi _peso ( voi d){ r et ur n peso;}

#i ncl ude " vei col o. h"

cl ass aut omobi l e : publ i c vei col o{ i nt num_post i ;publ i c: uut omobi l e ( i nt , i nt , i nt ) ; ~aut omobi l e ( ) ;

i nt l eggi _num_post i ( ) ;} ;

aut omobi l e: : aut omobi l e ( i nt nr uot e, i nt peso, i nt npost i ): vei col o ( nr uot e, peso){ num_post i = npost i ;}

aut omobi l e: : ~aut omobi l e ( ){}

i nt aut omobi l e: : l eggi _num_post i ( ){ r et ur n num_post i ;}

richiesta di un costruttore specifico

Slide 110

Page 42: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

Overloading degli operatori...

è possibile definire il comportamento degli operatori standard del C per compiere operazioni specifiche su particolari oggetti

il comportamento di un operatore si definisce come un metodo, con nome dato dall’operatore stesso e preceduto dalla keyword operator

generalmente è richiesta la dichiarazione friend dell’operatore per poter maneggiare i dati interni

Slide 111

Page 43: Calcolatori Elettronici III - Politecnico di Torinocorsiadistanza.polito.it/corsi/pdf/9036N/part2g.pdf · calcolatori elettronici III... il costrutto class le definizioni delle componenti

d. canonico ( di no@pol i t o. i t )

cal col at or i el et t r oni c i I I I

... overloading degli operatori (esempio)

cl ass compl ex{pr i vat e: i nt r eal ; i nt i mag;publ i c: . . . f r i end compl ex oper at or + ( compl ex, compl ex) ; . . .} ;

. . .

compl ex oper at or + ( compl ex a, compl ex b){ compl ex t emp; t emp. r eal = a. r eal + b. r eal ; t emp. i mag = a. i mag + b. i mag; r et ur n t emp;}

Slide 112