Διαφάνειες παρουσίασης #3
description
Transcript of Διαφάνειες παρουσίασης #3
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ
[email protected]Διδάσκων: Νίκος Παπασπύρου
http://www.softlab.ntua.gr/~nickie/TUC/log201/
1Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ
Διαφάνειες παρουσίασης #3
Κλάσεις και αντικείμεναΟρισμός κλάσεωνΟρισμός και χρήση αντικειμένωνΟρισμός μεθόδωνΚλάσεις και εμβέλεια
2Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ
Κλάσεις και αντικείμενα
Αντί ορισμών Αντικείμενο = δεδομένα + μέθοδοι Κλάση = τύπος αντικειμένων
Παραλληλισμός με γνωστές έννοιες Αντικείμενο μεταβλητή Κλάση τύπος δεδομένων
Στη C++ class και struct είναι (σχεδόν) ισοδύναμα δεν υπάρχει αντικείμενο χωρίς κλάση
3Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ
Ορισμός κλάσεων (i)
Μιγαδικοί αριθμοί, χωρίς κλάση
struct complex { double re, im;}
void set (complex &c, double r, double i);complex operator + (complex a, complex b);int operator == (complex a, complex b);
4Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ
Ορισμός κλάσεων (ii)
Μιγαδικοί αριθμοί, μια πρώτη κλάση
class complex{private: double re, im;public: void set (double r, double i); complex operator + (complex c); int operator == (complex c);};
5Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ
Ορισμός και χρήση αντικειμένων (i)
complex a, b, c;
a.set(3, 4);b.set(1, 0);
c = a + b;
if (c == b + a) cout << "correct.\n";else cout << "mistake!\n";
6Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ
Ορισμός και χρήση αντικειμένων (ii)
complex cneg (complex c);
complex c[50], *pc, result;
for (int i=0, pc=&c; i<50, i++, pc++) pc->set(2*i, 3+i);
result.set(0,0);for (int i=0; i<50; i++) result += cneg(c[i]);
7Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ
Ορισμός μεθόδων
void complex::set (double r, double i){ re = r; im = i;}
complex complex::operator + (complex c){ complex result; result.set(re + c.re, im + c.im); return result;}
int complex::operator == (complex c){ return re == c.re && im == c.im;}
8Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ
Κλάσεις και εμβέλεια (i)
class complex{private: double re, im;public: void set (double r, double i); // ...}
int main (){ complex c; c.set(1, 0); // correct c.re = 1; // wrong}
9Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ
Κλάσεις και εμβέλεια (ii)
Απόκρυψη πληροφοριών Ο προγραμματιστής ορίζει τα πεδία των
αντικειμένων που θα είναι ορατά από τον υπόλοιπο κόσμο
Καλύτερη δόμηση προγραμμάτων Ανεξαρτησία διαπροσωπείας και υλοποίησης
Μειονεκτήματα Πολλές φορές απαιτούνται συναρτήσεις
πρόσβασης στα μη ορατά πεδίαdouble complex::getRe ();
10Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ
Κλάσεις και εμβέλεια (iii)
Οι μέθοδοι δεν επαρκούν πάντα
complex complex::operator + (complex c);
complex c1, c2, c;
c = c1 + c2;
complex complex::operator + (double d);
double d;
c = c1 + d;
c = d + c2; // wrong!!!
z1 + z2 z + r r + zz1 + z2 z + r r + z
11Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ
Κλάσεις και εμβέλεια (iv)
Με χρήση κοινών συναρτήσεωνcomplex operator + (complex a, complex b){ complex result; result.set(a.getRe() + b.getRe(), a.getIm() + b.getIm()); return result;}
complex operator + (double a, complex b){ complex result; result.set(a + b.getRe(), b.getIm()); return result;}
12Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ
Κλάσεις και εμβέλεια (v)
Με χρήση φιλικών συναρτήσεωνclass complex operator{friend complex operator + (double a, complex b);private: double re, im;};
complex operator + (double a, complex b){ complex result; result.set(a + b.re, b.im); return result;}