Διαφάνειες παρουσίασης #3

12
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ [email protected] Διδάσκων: Νίκος Παπασπύρου http://www.softlab.ntua.gr/~nickie/TUC/log201/ Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διαφάνειες παρουσίασης #3 Κλάσεις και αντικείμενα Ορισμός κλάσεων Ορισμός και χρήση αντικειμένων Ορισμός μεθόδων Κλάσεις και εμβέλεια

description

Διαφάνειες παρουσίασης #3. Κλάσεις και αντικείμενα Ορισμός κλάσεων Ορισμός και χρήση αντικειμένων Ορισμός μεθόδων Κλάσεις και εμβέλεια. Κλάσεις και αντικείμενα. Αντί ορισμών Αντικείμενο= δεδομένα + μέθοδοι Κλάση= τύπος αντικειμένων Παραλληλισμός με γνωστές έννοιες - PowerPoint PPT Presentation

Transcript of Διαφάνειες παρουσίασης #3

Page 1: Διαφάνειες παρουσίασης #3

ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

[email protected]Διδάσκων: Νίκος Παπασπύρου

http://www.softlab.ntua.gr/~nickie/TUC/log201/

1Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

Διαφάνειες παρουσίασης #3

Κλάσεις και αντικείμεναΟρισμός κλάσεωνΟρισμός και χρήση αντικειμένωνΟρισμός μεθόδωνΚλάσεις και εμβέλεια

Page 2: Διαφάνειες παρουσίασης #3

2Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

Κλάσεις και αντικείμενα

Αντί ορισμών Αντικείμενο = δεδομένα + μέθοδοι Κλάση = τύπος αντικειμένων

Παραλληλισμός με γνωστές έννοιες Αντικείμενο μεταβλητή Κλάση τύπος δεδομένων

Στη C++ class και struct είναι (σχεδόν) ισοδύναμα δεν υπάρχει αντικείμενο χωρίς κλάση

Page 3: Διαφάνειες παρουσίασης #3

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);

Page 4: Διαφάνειες παρουσίασης #3

4Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

Ορισμός κλάσεων (ii)

Μιγαδικοί αριθμοί, μια πρώτη κλάση

class complex{private: double re, im;public: void set (double r, double i); complex operator + (complex c); int operator == (complex c);};

Page 5: Διαφάνειες παρουσίασης #3

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";

Page 6: Διαφάνειες παρουσίασης #3

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]);

Page 7: Διαφάνειες παρουσίασης #3

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;}

Page 8: Διαφάνειες παρουσίασης #3

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}

Page 9: Διαφάνειες παρουσίασης #3

9Νίκος Παπασπύρου ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ

Κλάσεις και εμβέλεια (ii)

Απόκρυψη πληροφοριών Ο προγραμματιστής ορίζει τα πεδία των

αντικειμένων που θα είναι ορατά από τον υπόλοιπο κόσμο

Καλύτερη δόμηση προγραμμάτων Ανεξαρτησία διαπροσωπείας και υλοποίησης

Μειονεκτήματα Πολλές φορές απαιτούνται συναρτήσεις

πρόσβασης στα μη ορατά πεδίαdouble complex::getRe ();

Page 10: Διαφάνειες παρουσίασης #3

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

Page 11: Διαφάνειες παρουσίασης #3

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;}

Page 12: Διαφάνειες παρουσίασης #3

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;}