Modellazione di unauto
la modellazione di un oggetto (p.e. unauto) dipende dalle finalit che
si pone la persona che lo sta analizzando:
lettore di Quattroruote
guidatore
manutentore
progettista del motore
progettista/design della carrozzeria
Laboratorio di Informatica
3. Programmazione ad oggetti in C++
Caratterizzazione di unauto
Utilizzazione di unauto
Attributi
colore
potenza
marce
peso
cilindrata
Interfacciamento
pedale dellacceleratore
pedale del freno
leva del cambio
volante
Funzionalit
accelera
frena
cambia marcia
cambia direzione
Laboratorio di Informatica A.A. 2014-2015
10
11
12
Implicazione dellincapsulamento
Lincapsulamento
implementazione
determina
una
divisione
fra
interfaccia
e
La programmazione ad oggetti, attraverso lincapsulamento, consente di:
ridurre la dipendenza del codice di alto livello dalla rappresentazione
dei dati
riutilizzare codice di alto livello
sviluppare moduli indipendenti luno dallaltro
avere codice utente che dipende dalle interfacce ma non
dallimplementazione
Data Oriented
Object Oriented
13
14
Oggetto in C++
Un oggetto in C++ una entit software che incapsula un insieme di
attributi (o dati) e comprende un insieme di operazioni (o metodi o
funzioni) che manipolano i dati.
Linsieme dei valori assunti dai suoi attributi costituisce lo stato dell
oggetto.
15
16
Classe in C++
Classe in C++
17
18
Oggetti in C++
nome_classe
identificatore;
19
20
#include <iostream>
using namespace std;
class Rettangolo {
// attributi
double base, altezza;
// metodi
public:
void Set (double b, double h) {
base = b;
altezza = h;
}
int main ( ) {
Rettangolo tovaglia; // istanza oggetto
tovaglia.Set (12.0, 30.0);
cout<<larea e:<< tovaglia.Area( );
return 0;
}
double Area( ) {
return base * altezza;
int main ( ) {
orologio a;
// istanza oggetto a
a.init(12, 30, 20);
orologio b;
// istanza oggetto b
b.init(15, 05, 30);
// 12
cout << a.ora << "\n";
cout << a.minuti << "\n"; // 30
cout << b.ora << "\n";
// 15
b.ora = a.ora + 1;
cout << b.ora << "\n";
// 13
return 0;
}
}
};
Laboratorio di Informatica A.A. 2014-2015
21
22
23
24
#include <iostream>
using namespace std;
class orologio {
private:
// attributi
int ora;
int minuti;
int secondi;
public:
// metodi
void init(int h, int m, int s) {
ora = h;
minuti = m;
secondi = s;
}
void stampa( ) {
cout << ora << :" << minuti
<< :" << secondi << endl;
}
};
Modificatori (set)
Operatori
Iteratori
25
26
int main ( ) {
orologio a;
// istanza oggetto a
a.init(12, 30, 20);
orologio b;
// istanza oggetto b
b.init(15, 05, 30);
cout << a.ora << "\n"; // errore
a.minuti = 25; // errore
a.stampa( ); // 12 : 30 : 20
cout << b.ora << "\n"; // errore
b.ora = a.ora + 1; // errore
b.stampa( ); // 15 : 05 : 30
a = b; // loggetto b assegnato ad a
return 0;
}
int main ( ) {
orologio a;
// istanza oggetto a
a.init(12, 30, 20);
orologio b;
// istanza oggetto b
b.init(15, 05, 30);
cout << a.ora << "\n";
// errore
a.minuti = 25;
// errore
a.stampa( ); // 12 : 30 : 20
cout << b.ora << "\n";
// errore
b.ora = a.ora + 1;
// errore
b.stampa( ); // 15 : 05 : 30
return 0;
}
28
#include <iostream>
using namespace std;
class orologio {
private:
// attributi
int ora;
int minuti;
int secondi;
public:
// metodi
orologio(int h, int m, int s);
void stampa( );
};
orologio::orologio(int h, int m, int s){
ora = h;
minuti = m;
secondi = s;
}
void orologio::stampa( ) {
cout << ora << :" << minuti
<< :" << secondi << endl;
}
29
int main ( ) {
orologio a(12, 30, 20);
a.stampa( );
return 0;
}
// istanza oggetto a
// 12 : 30 : 20
30
32
#include <iostream>
using namespace std;
class Rettangolo {
// attributi
double base, altezza;
// metodi
public:
void Set (double b, double h);
double Area( );
// costruttore
Rettangolo ( ) {
base = 0.0;
altezza = 0.0;
};
// distruttore
Rettangolo ( ) {
cout<<Oggetto eliminato;
};
};
Laboratorio di Informatica A.A. 2014-2015
31
private:
// attributi
int ora;
int minuti;
int secondi;
public:
// metodi
orologio(int h, int m, int s);
void stampa( );
};
class data {
int giorno;
int mese;
int anno;
orologio time;
// metodi
.
}
33
34
complesso
Esempio
Rettangolo
pr : float
base
altezza
pi : float
complesso()
complesso()
cadd()
csub()
cmult()
visualizza()
Assegna()
Area()
35
36
#include <iostream>
#include <conio.h>
using namespace std;
class complesso {
private:
float pr, pi;
public:
complesso( ) {pr=0; pi=0; }
complesso(float x,float y);
void cadd(complesso arg);
void csub(complesso arg);
void cmult(complesso arg);
void visualizza();
//costruttore di default
//altro costruttore
//operazione addizione
//operazione sottrazione
//operazione moltiplicazione
};
37
a.csub(b);
a.visualizza();
b.visualizza();
// differenza a-b
a.cmult(b);
a.visualizza();
b.visualizza();
// moltiplicazione a*b
getch();
return 0;
a.visualizza();
b.visualizza();
c->visualizza();
a.cadd(b);
b.cadd(b);
a.visualizza();
b.visualizza();
38
void complesso::visualizza(){
if(pi<0.0)
cout << '\n' << "complesso: " << pr << "- j" << abs(pi);
else
cout << '\n' << "complesso: " << pr << "+ j" << pi;
}
int main(){
complesso a(1,3), b(2,2);
complesso *c;
c = new complesso(5.1,2.2);
// somma a+b
// somma b+b
39
40
Domande?
41
42