Download - Εισαγωγή στον αντικειμενοστραφή π ρογραμματισμό

Transcript
Page 1: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

11

Εισαγωγή στον αντικειμενοστραφή προγραμματισμό

Κλάσεις και αντικείμεναΚλάσεις και αντικείμενα Κληρονομικότητα (inheritance)Κληρονομικότητα (inheritance) Υπερκάλυψη (Υπερκάλυψη (overriding)overriding) Υπερφόρτωση Υπερφόρτωση (overloading)(overloading) Κατασκευαστές κλάσεων (constructors)Κατασκευαστές κλάσεων (constructors) Προσδιοριστές πρόσβασης (access specifiers)Προσδιοριστές πρόσβασης (access specifiers) Τροποποιητές (modifiers)Τροποποιητές (modifiers) Διασυνδέσεις (Διασυνδέσεις (interfaces)interfaces) Πακέτα (packages)Πακέτα (packages)

Page 2: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

2

ΚλάσειςΚλάσεις

Σε αντικειμενοστραφείς γλώσσες προγραμματισμού δίνεται η Σε αντικειμενοστραφείς γλώσσες προγραμματισμού δίνεται η δυνατότητα σχεδιάσης νέων και σύνθετων τύπων δεδομένωνδυνατότητα σχεδιάσης νέων και σύνθετων τύπων δεδομένων

Κλάση: σύνθετη δομή δεδομένων σχεδιασμένη από τον Κλάση: σύνθετη δομή δεδομένων σχεδιασμένη από τον προγραμματιστήπρογραμματιστή

Μια κλάση περιέχει ως μέλη της μεταβλητές (member Μια κλάση περιέχει ως μέλη της μεταβλητές (member variables) και συναρτήσειςvariables) και συναρτήσεις-μέθοδοι (-μέθοδοι (member functions)member functions)Ορισμός κλάσης:Ορισμός κλάσης:

class myClassclass myClass{{

Δήλωση μεθόδων και μεταβλητών . . . Δήλωση μεθόδων και μεταβλητών . . . }}

Page 3: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

3

Κλάσεις και ΑντικείμεναΚλάσεις και ΑντικείμεναΤο αντικείμενο αυτό καθ' εαυτό είναι μια οντότητα στη Το αντικείμενο αυτό καθ' εαυτό είναι μια οντότητα στη μνήμη η οποία περιέχει δεδομένα καθώς και μεθόδουςμνήμη η οποία περιέχει δεδομένα καθώς και μεθόδους..

MMέσω τέσω τωων ν μεθόδωνμεθόδων μπορούμε να επικοινωνήσουμε με μπορούμε να επικοινωνήσουμε με το αντικείμενο το αντικείμενο και να και να αλλάξουμε τα δεδομένα αλλάξουμε τα δεδομένα τουτου. .

Αντίθετα η κλάση είναι απλώς ένα πρότυπο για την Αντίθετα η κλάση είναι απλώς ένα πρότυπο για την δημιουργία αντιγράφων του ίδιου αντικειμένου. δημιουργία αντιγράφων του ίδιου αντικειμένου.

Μια κλάση είναι το αντίστοιχοΜια κλάση είναι το αντίστοιχο των ττων τύπύπωνων δδεδομένων για εδομένων για τις μεταβλητές (στον τις μεταβλητές (στον δομημένοδομημένο προγραμματισμό). προγραμματισμό).

Οι γνωστοί τύποι δεδομένων Οι γνωστοί τύποι δεδομένων int, float, double, charint, float, double, char θεωρούνται θεωρούνται πρωτογενείς τύποι δεδομένωνπρωτογενείς τύποι δεδομένων. .

Page 4: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

4

Ένα παράδειγμα κλάσης (μητρώο εργαζομένων)

class EmployeeRecordclass EmployeeRecord

{{

String name;String name;

String address;String address;

int salary;int salary;

public void setSalary (int employeeSalary )public void setSalary (int employeeSalary )

{ salary = employeeSalary; }{ salary = employeeSalary; }

public int getSalary ( )public int getSalary ( )

{ return salary; }{ return salary; }

}}

Πρότυπο δημιουργίας μητρώου εργαζομένων:

•Ονοματεπώνυμο•Διεύθυνση•Μηνιαίες αποδοχές

Το πρότυπο (κλάση) καθορίζει τη δομή του μητρώου κάθε εργαζομένου (αντικείμενο)

Page 5: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

5

Πρόσβαση σε δεδομένα και μεθόδους Πρόσβαση σε δεδομένα και μεθόδους αντικειμένων κλάσεων (που έχουν δηλωθεί public)αντικειμένων κλάσεων (που έχουν δηλωθεί public)

•Πρόσβαση σε public μεταβλητές μέλη:

<object>.<member variable>

Π.χ. someEmployeeRecord.salary = 1500;

( ανάθεση της τιμής 1500 στη μεταβλητή salary )

•Κλήση μεθόδων:

<object>.<member function>

Π.χ.

1. income=someEmployeeRecord.getSalary( );

( Η μεταβλητή income λαμβάνει την τιμή που επιστρέφει η getSalary ( ) )

2. someEmployeeRecord.setSalary(1500);

(εκτέλεση της μεθόδου setSalary περνώντας ως όρισμα την τιμή 1500)

Page 6: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

6

Παράδειγμαclass Employeeclass Employee{{ int salary;int salary; int bonus;int bonus; public void setSalary (int employeeSalary ) public void setSalary (int employeeSalary ) { salary = employeeSalary }{ salary = employeeSalary } int getSalary ( )int getSalary ( ) { return salary; }{ return salary; }}}Employee Employee JohnJohn;;John John =new Employee ( ); //=new Employee ( ); //Sos Sos αγνοείτε πάντα τις εντολές με κόκκινο !!!!!!!!!αγνοείτε πάντα τις εντολές με κόκκινο !!!!!!!!!

//Είναι απαραίτητες αλλά εξηγούνται σε επόμενες //Είναι απαραίτητες αλλά εξηγούνται σε επόμενες // διαφάνειες!!! // διαφάνειες!!!

JJohn.setSalary (1200);ohn.setSalary (1200);John.bonus = 500;John.bonus = 500;int someSalary =John.getSalary ( );int someSalary =John.getSalary ( );

Page 7: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

7

Κληρονομικότητα (inheritance)Κληρονομικότητα (inheritance)

Συχνά δημιουργούμε κλάσεις που εμπεριέχουν δεδομένα Συχνά δημιουργούμε κλάσεις που εμπεριέχουν δεδομένα και μεθόδους που έχουν οριστεί σε προϋπάρχουσες και μεθόδους που έχουν οριστεί σε προϋπάρχουσες κλάσειςκλάσεις

Βολική η δημιουργία μιας νέας κλάσης Βολική η δημιουργία μιας νέας κλάσης (υποκλάση)(υποκλάση) που που εμπεριέχει τη λειτουργικότητα μιας της προϋπάρχουσας εμπεριέχει τη λειτουργικότητα μιας της προϋπάρχουσας κλάσης κλάσης (υπερκλάση)(υπερκλάση)

Ορισμός μιας υποκλάσης: με τη χρήση της δεσμευμένης Ορισμός μιας υποκλάσης: με τη χρήση της δεσμευμένης λέξης λέξης extendsextends

Page 8: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

8

Ένα παράδειγμα κληρονομικότηταςΈνα παράδειγμα κληρονομικότητας

class Parentclass Parent{{ int a;int a; public void foo () {…..}public void foo () {…..}}}

class Child extends Parentclass Child extends Parent{{ int b;int b; public void test( );public void test( );}}

Child myChild;

myChild = new Child( );

myChild.foo();

myChild.a = someInteger ;

Έγκυρες κλήσεις, εφόσον η κλάση Child κληρονομεί μεταβλητές και μεθόδους της κλάσης Parent

Parent

Child

// Please ignore this red line for now

Page 9: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

9

ΥπερκάλυψηΥπερκάλυψη μεταβλητών και μεθόδων μεταβλητών και μεθόδων (overriding)(overriding)

class Parentclass Parent{{ public void foo()public void foo() { ……. }{ ……. }}}

class Child extends Parentclass Child extends Parent{{ public void foo()public void foo() { διαφοροποιημένος κώδικας }{ διαφοροποιημένος κώδικας }}}

Child myChild;

myChild = new Child(); //ignore!!

myChild.foo();

Εκτελείται η συνάρτηση foo() που ορίστηκε στο σώμα της υποκλάσης Child. Η συνάρτηση foo() που ορίστηκε στην κλάση Parent παρακάμπτεται.

Πώς καλούμε μέσα από την κλάση Child τη foo() της κλάσης Parent;

Page 10: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

10

Η λέξη superΗ λέξη super Η δεσμευμένη λέξη Η δεσμευμένη λέξη supersuper προσφέρει πρόσβαση σε προσφέρει πρόσβαση σε

μεταβλητές και μεθόδους της υπερκλάσηςμεταβλητές και μεθόδους της υπερκλάσης

class Parent

{

public void foo( ) {……..}

}

class Child extends Parent

{

public void foo( ) {……} Παράκαμψη της foo( ) της υπερκλάσης

public void someChildFunction( )

{

super.foo( ); Εκτελείται ο κώδικας της foo( ) της κλάσης Parent

}

}

Page 11: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

11

Η δεσμευμένη λέξη thisΗ δεσμευμένη λέξη thisΗ δεσμευμένη λέξη this αποτελεί έναν τρόπο αναφοράς Η δεσμευμένη λέξη this αποτελεί έναν τρόπο αναφοράς στο τρέχον αντικείμενο.στο τρέχον αντικείμενο.Χρήσιμη για τον διαχωρισμό μεταβλητών-μελών από Χρήσιμη για τον διαχωρισμό μεταβλητών-μελών από ορίσματα συναρτήσεων σε περίπτωση που τα ονόματά ορίσματα συναρτήσεων σε περίπτωση που τα ονόματά τους ταυτίζονται.τους ταυτίζονται.

class EmployeeRecord

{

int salary;

public void setInt (int salary)

{ this.salary = salary; }

}

Page 12: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

12

Υπερφόρτωση Υπερφόρτωση (overloading)(overloading) Στις Στις objectobject orientedoriented γλώσσες επιτρέπεται ο ορισμός μίας γλώσσες επιτρέπεται ο ορισμός μίας

μεθόδου με τμεθόδου με τoo ίδιο όνομα δύο ή περισσότερες φορές αρκεί να ίδιο όνομα δύο ή περισσότερες φορές αρκεί να έχουν διαφορετικές λίστες παραμέτρων. έχουν διαφορετικές λίστες παραμέτρων.   

class number {int a;

 void add(int x) {

a += x;}void add(int x, int y) {

a = x+y;}void add(number n) {

a += n.getA();}

 int getA() {

return a;}

}

Number N1, N2;

N1 = new number(); N2 = new number();

N1.add(3); // καλεί την 1η add

N1.add(3, 5); // καλεί την 2η add

N1.add(N2); // καλεί την 3η add

Page 13: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

13

Σχέση κλάσεων-αντικειμένωνΣχέση κλάσεων-αντικειμένων

int aint aintint

Ορισμός μεταβλητής Ορισμός μεταβλητής αντίστοιχου τύπουαντίστοιχου τύπου

Τύπος ΔεδομένωνΤύπος Δεδομένων

Employee John=new Employee( )Employee John=new Employee( )Class Employee{…..}Class Employee{…..}

Αρχικοποίηση αντικειμένου Αρχικοποίηση αντικειμένου κλάσηςκλάσης

Ορισμός κλάσηςΟρισμός κλάσης

Κλάση: σύνθετος τύπος δεδομένων

Αντικείμενο: στιγμιότυπο (instance) μιας κλάσης

Page 14: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

14

Κατασκευαστές (Constructors)Κατασκευαστές (Constructors)

Συναρτήσεις που εκτελούνται κατά την αρχικοποίηση του Συναρτήσεις που εκτελούνται κατά την αρχικοποίηση του αντικειμένου μιας κλάσης. Χρησιμοποιούνται για την αντικειμένου μιας κλάσης. Χρησιμοποιούνται για την απόδοση τιμών στις μεταβλητές-μέλη ενός αντικειμένου απόδοση τιμών στις μεταβλητές-μέλη ενός αντικειμένου κατά τη δημιουργία του.κατά τη δημιουργία του.

Έχουν το ίδιο όνομα με την κλάση την οποία Έχουν το ίδιο όνομα με την κλάση την οποία αρχικοποιούν.αρχικοποιούν.

Οι κατασκευαστές ΔΕΝ ΕΠΙΣΤΡΕΦΟΥΝ ΤΙΜΗ.Οι κατασκευαστές ΔΕΝ ΕΠΙΣΤΡΕΦΟΥΝ ΤΙΜΗ.

Page 15: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

15

Παραδείγματα κατασκευαστών

class Rectangleclass Rectangle

{{ int height;int height; int width;int width; public Rectangle ( )public Rectangle ( ) {{ height = 1;height = 1; width = 1;width = 1; }}}}

class Rectangleclass Rectangle

{{

int height;int height;

int width;int width;

public Rectangle (int rectHeight, int rectWidth)public Rectangle (int rectHeight, int rectWidth)

{{

height = rectHeight;height = rectHeight;

width = rectWidth;width = rectWidth;

}}

}}

Page 16: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

16

Πολλαπλοί κατασκευαστές

Για μια κλάση μπορούν να οριστούν περισσότεροι Για μια κλάση μπορούν να οριστούν περισσότεροι του ενός κατασκευαστές και να επιλεγεί ένας από του ενός κατασκευαστές και να επιλεγεί ένας από αυτούς κατά την αρχικοποίησηαυτούς κατά την αρχικοποίηση (constructor (constructor overloading)overloading)

Αν ο προγραμματιστής δεν ορίσει κατασκευαστή, Αν ο προγραμματιστής δεν ορίσει κατασκευαστή, υφίσταται ο default constructor (κατασκευαστής υφίσταται ο default constructor (κατασκευαστής χωρίς ορίσματα). Υλοποίηση ενός κατασκευαστή χωρίς ορίσματα). Υλοποίηση ενός κατασκευαστή από τον προγραμματιστή αυτομάτως αναιρεί τον από τον προγραμματιστή αυτομάτως αναιρεί τον default constructor.default constructor.

Page 17: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

17

Παράδειγμα πολλαπλών κατασκευαστώνΠαράδειγμα πολλαπλών κατασκευαστών

class myClassclass myClass{{ int a;int a; int b;int b; myClass()myClass() {{ a = 0;a = 0; b = 0;b = 0; }} myClass( int alpha, int beta )myClass( int alpha, int beta ) {{ a = alpha;a = alpha; b=beta;b=beta; }}}}

myClass Test1 = new myClass( );

Καλείται ο constructor χωρίς ορίσματα (default constructor), συνεπώς:

a = 0

b = 0

myClass Test2 = new myClass( 2 , 3 );

a = 2

b = 3

α)

β)

Page 18: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

18

Διαδικασία αρχικοποίησης υποκλάσηςΔιαδικασία αρχικοποίησης υποκλάσηςΕπιτελείται διαδοχική εκτέλεση των κατασκευαστών με Επιτελείται διαδοχική εκτέλεση των κατασκευαστών με τρόπο ιεραρχικό (από τις υπερκλάσεις προς τις τρόπο ιεραρχικό (από τις υπερκλάσεις προς τις υποκλάσεις).υποκλάσεις).

class Parentclass Parent {{ Parent( ) {………}Parent( ) {………} }} class Child extends Parentclass Child extends Parent {{ Child( ) {……..}Child( ) {……..} }}

Parent ( )

Child ( )

Κατά τη δημιουργία ενός νέου αντικειμένου μιας υποκλάσης.

Πχ. Child Nik = new Child( );

Eκτελείται αρχικά πάντα ο default constructor της υπερκλάσης (εκτός κι αν ο προγραμματιστής αλλάξει τη συμπεριφορά του constructor της υποκλάσης)

Page 19: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

19

Αρχικοποίηση υποκλάσεωνΑρχικοποίηση υποκλάσεων (πολλαπλοί κατασκευαστές) (πολλαπλοί κατασκευαστές)

class Parentclass Parent{{ int a;int a; int b;int b; Parent ( ) Parent ( ) {{ a = 0;a = 0; b = 0;b = 0; }} Parent(int alpha, int beta)Parent(int alpha, int beta) {{ a = alpha;a = alpha; b = beta;b = beta; }}}}

class Child extends Parent

{

Child( )

{ }

Child (int alpha, int beta)

{ super (alpha,beta); }

}

Child myChild = new Child();

Καλεί τον default constructor του Parent, άρα α = b = 0

Child myChild = new Child ( 1 , 2 );

a = 1, b = 2

Page 20: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

20

Καταστροφή αντικειμένωνΚαταστροφή αντικειμένων

Σε αντίθεση με τη γλώσσα Σε αντίθεση με τη γλώσσα C, C, στη στη Java Java η η κατάργηση αντικειμένων δεν επιτελείται από το κατάργηση αντικειμένων δεν επιτελείται από το χρήστη αλλά από το χρήστη αλλά από το rutime system rutime system της της Java.Java.

Garbage collector: Garbage collector: Εντοπίζει αντικείμενα που Εντοπίζει αντικείμενα που δεν πρόκειται να ξαναχρησιμοποιηθούν στο δεν πρόκειται να ξαναχρησιμοποιηθούν στο μέλλον και τα καταργεί, αποδεσμεύοντας τη μέλλον και τα καταργεί, αποδεσμεύοντας τη μνήμη που καταλαμβάνουν.μνήμη που καταλαμβάνουν.

Page 21: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

21

Προσδιοριστές πρόσβασηςΠροσδιοριστές πρόσβασης

Καθορίζουν τα δικαιώματα πρόσβασης στις μεταβλητές Καθορίζουν τα δικαιώματα πρόσβασης στις μεταβλητές και στις μεθόδους της κλάσηςκαι στις μεθόδους της κλάσης

public:public: ορατά από οποιασδήποτε κλάσηορατά από οποιασδήποτε κλάση

private:private: ορατά μόνο από την κλάση στην οποία ορατά μόνο από την κλάση στην οποία ανήκουνανήκουν

protected:protected: ορατά από την κλάση στην οποια ορατά από την κλάση στην οποια ανήκουν και από υποκλάσεις τηςανήκουν και από υποκλάσεις της

Χωρίς δήλωση:Χωρίς δήλωση: ορατά από κλάσεις που ανήκουνορατά από κλάσεις που ανήκουν στο ίδιο packageστο ίδιο package

Page 22: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

22

ΠαράδειγμαΠαράδειγμα

class Aclass A{{ private int a;private int a; public int getInt()public int getInt() {return a;}{return a;}}}

class Bclass B{{ private int b;private int b; void foo()void foo() {{ A myA = new A();A myA = new A(); b = myA .a;b = myA .a; ΛΑΘΟΣ ΛΑΘΟΣ b = myA .getInt();b = myA .getInt(); ΣΩΣΤΟΣΩΣΤΟ }}}}

Παρατηρήσεις:

•Αν και η μεταβλητή a είναι private, η τιμή της μπορεί να παραληφθεί από την κλάση B μέσω της public συνάρτησης getInt ().

•Συνήθως οι μεταβλητές δηλώνονται private και οι όποιες τροποποιήσεις των τιμών τους επιτελούνται από μεθόδους που ορίζονται public. Δηλ. οι public μέθοδοι ορίζουν ένα interface, αποκρύπτοντας την εσωτερική δομή της κλάσης

Page 23: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

23

Προσδιοριστές πρόσβασης σε κλάσειςΠροσδιοριστές πρόσβασης σε κλάσεις

public:public: κλάση ορατή απο οποιαδήποτε κλάση ορατή απο οποιαδήποτε άλλη κλάσηάλλη κλάση

Χωρίς δήλωση:Χωρίς δήλωση: κλάση ορατή μόνο από κλάση ορατή μόνο από κλάσεις που ανήκουν στο ίδιο packageκλάσεις που ανήκουν στο ίδιο package

Page 24: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

24

Ο τροποποιητής finalΟ τροποποιητής final

α) Για μεταβλητές: Δεν αλλάζει η τιμή τους μετά την α) Για μεταβλητές: Δεν αλλάζει η τιμή τους μετά την αρχικοποίησή τουςαρχικοποίησή τους

β) Για μεθόδους: Δεν παρακάμπτονται σε υποκλάσειςβ) Για μεθόδους: Δεν παρακάμπτονται σε υποκλάσεις

γ) Για κλάσεις: Δεν κληρονομούνταιγ) Για κλάσεις: Δεν κληρονομούνται

Page 25: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

25

ΠαραδείγματαΠαραδείγματαprivate final int a = 5;private final int a = 5;

a = 6 ;a = 6 ; ΛΑΘΟΣΛΑΘΟΣ

class Aclass A {{ public final void foo();public final void foo(); }}

class B extends Aclass B extends A {{ public void foo( ) {...}public void foo( ) {...} ΛΑΘΟΣΛΑΘΟΣ }}

final class A { ….. }final class A { ….. } class B extends A { …}class B extends A { …} ΛΑΘΟΣΛΑΘΟΣ

Page 26: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

26

Ο τροποποιητής abstractΟ τροποποιητής abstractΣε κλάσεις που κληρονομούνται (παρέχουν κοινό Σε κλάσεις που κληρονομούνται (παρέχουν κοινό εννοιολογικό υπόβαθρο στις υποκλάσεις τους), συχνά εννοιολογικό υπόβαθρο στις υποκλάσεις τους), συχνά ορίζουμε κενές συναρτήσεις που υλοποιούνται στις ορίζουμε κενές συναρτήσεις που υλοποιούνται στις υποκλάσειςυποκλάσεις

abstract <returned type> methodName(abstract <returned type> methodName( ) ;) ;

Οι abstract συναρτήσεις παρακάμπτονται σε υποκλάσειςΟι abstract συναρτήσεις παρακάμπτονται σε υποκλάσεις

Κλάσεις μέσα στις οποίες δηλώνεται έστω και μία Κλάσεις μέσα στις οποίες δηλώνεται έστω και μία abstract μέθοδος, χαρακτηρίζονται επίσης abstract.abstract μέθοδος, χαρακτηρίζονται επίσης abstract.

abstract public class Aabstract public class A {{ abstract public void foo ( );abstract public void foo ( ); }}

ΔΕΝ μπορούμε να αρχικοποιήσουμε abstract κλάσεις.ΔΕΝ μπορούμε να αρχικοποιήσουμε abstract κλάσεις.

Page 27: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

27

ΠαράδειγμαΠαράδειγμαabstract public class Shapeabstract public class Shape

{{ abstract public void Draw ( );abstract public void Draw ( ); }}

public class Circle extends Shapepublic class Circle extends Shape {{ public void Draw ( )public void Draw ( ) { κώδικας σχεδίασης κύκλου}{ κώδικας σχεδίασης κύκλου} }}

public class Rectangle extends Shape public class Rectangle extends Shape {{

public void Draw ( )public void Draw ( ) { κώδικας σχεδίασης ορθογωνίου}{ κώδικας σχεδίασης ορθογωνίου} }}

Page 28: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

28

Ο τροποποιητής staticΟ τροποποιητής static

Κάθε αντικείμενο έχει τις δικές του μεταβλητές και Κάθε αντικείμενο έχει τις δικές του μεταβλητές και μεθόδουςμεθόδους

ΟΜΩΣ: Μεταβλητές και μέθοδοι που δηλώνονται ως ΟΜΩΣ: Μεταβλητές και μέθοδοι που δηλώνονται ως static είναι κοινές για όλα τα αντικείμενα της ίδιας κλάσηςstatic είναι κοινές για όλα τα αντικείμενα της ίδιας κλάσης

Για τη χρήση static μεταβλητών και μεθόδων ΔΕ Για τη χρήση static μεταβλητών και μεθόδων ΔΕ χρειάζεται η δημιουργία στιγμιοτύπου κλάσης.χρειάζεται η δημιουργία στιγμιοτύπου κλάσης.

Μέθοδοι που έχουν δηλωθεί static βλέπουν και Μέθοδοι που έχουν δηλωθεί static βλέπουν και τροποποιούν ΜΟΝΟ static μεταβλητές.τροποποιούν ΜΟΝΟ static μεταβλητές.

Page 29: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

29

ΠαράδειγμαΠαράδειγμαclass myClassclass myClass{{ public static int a = 1;public static int a = 1;}}

myClass first = new myClass ( ); myClass first = new myClass ( ); myClass second = new myClass ( );myClass second = new myClass ( );first.a = 2 ;first.a = 2 ;

Η μεταβλητή a παίρνει την τιμή 2 και στα δύο αντικείμενα Η μεταβλητή a παίρνει την τιμή 2 και στα δύο αντικείμενα δηλ. ισχύει δηλ. ισχύει first.a = 2first.a = 2 KAI KAI second.a = 2second.a = 2

Page 30: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

30

InterfacesInterfaces

Πολλαπλή κληρονομικότητα: Σχηματισμός μιας υποκλάσης χρησιμοποιώντας Πολλαπλή κληρονομικότητα: Σχηματισμός μιας υποκλάσης χρησιμοποιώντας περισσότερες από μία υπερκλάσεις. ΔΕΝ ΥΠΟΣΤΗΡΙΖΕΤΑΙ ΣΤΗ JAVAπερισσότερες από μία υπερκλάσεις. ΔΕΝ ΥΠΟΣΤΗΡΙΖΕΤΑΙ ΣΤΗ JAVA

class Child extrends Parent1 extends Parent2class Child extrends Parent1 extends Parent2 ΛΑΘΟΣΛΑΘΟΣ

Εναλλακτική προσέγγιση: η χρήση των interfaces ( κλάσεις που περιέχουν μόνο Εναλλακτική προσέγγιση: η χρήση των interfaces ( κλάσεις που περιέχουν μόνο abstract μεθόδους )abstract μεθόδους )

Οι abstract μέθοδοι των interfaces υλοποιούνται στις υποκλάσεις που τα υλοποιούν.Οι abstract μέθοδοι των interfaces υλοποιούνται στις υποκλάσεις που τα υλοποιούν.

Ορισμός ενός interface:Ορισμός ενός interface: <access specifier> interface myInterface<access specifier> interface myInterface {{ <access specifier> <returned type> functionOne( ); <access specifier> <returned type> functionOne( ); Δεν είναι αναγκαίο ναΔεν είναι αναγκαίο να

<access specifier> <returned type> functionTwo( ); <access specifier> <returned type> functionTwo( ); δηλωθούν ρητά ως abstract.δηλωθούν ρητά ως abstract. }}

Ορισμός υποκλάσης που υλοποιεί ένα interface:Ορισμός υποκλάσης που υλοποιεί ένα interface: class myClass extends someParentClass implements myInterfaceclass myClass extends someParentClass implements myInterface

Υποκλάση που υλοποιεί ένα interface πρέπει να Υποκλάση που υλοποιεί ένα interface πρέπει να υυλοποιεί όλες τις μεθόδους που λοποιεί όλες τις μεθόδους που ορίζονται σε αυτό.ορίζονται σε αυτό.

Page 31: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

31

Interfaces - ΠαράδειγμαInterfaces - Παράδειγμα

public interface myInterfacepublic interface myInterface {{ public void foo( );public void foo( ); public void foo2( String str );public void foo2( String str ); }}

public class Test extends someParentClass implements myInterfacepublic class Test extends someParentClass implements myInterface {{ public void foo ( )public void foo ( ) { Function code here…}{ Function code here…} public void foo2 ( String str )public void foo2 ( String str ) { Function code here…}{ Function code here…} }}

Page 32: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

32

Πακέτα (packages)Πακέτα (packages)

Kλάσεις συναφούς λειτουργικότητας ομαδοποιούνται σε Kλάσεις συναφούς λειτουργικότητας ομαδοποιούνται σε πακέτα πακέτα (packages)(packages)

Κλάσεις του ίδιου πακέτου βρίσκονται στο ίδιο directoryΚλάσεις του ίδιου πακέτου βρίσκονται στο ίδιο directory

Η δήλωση του πακέτου στο οποίο ανήκει μια κλάση γίνεται Η δήλωση του πακέτου στο οποίο ανήκει μια κλάση γίνεται στην αρχή του πηγαίου κώδικαστην αρχή του πηγαίου κώδικα

package <packageName>;package <packageName>;

Ένα πακέτο έχει το ίδιο όνομα με το όνομα του directory στο Ένα πακέτο έχει το ίδιο όνομα με το όνομα του directory στο οποίο αποθηκεύονται οι κλάσεις του.οποίο αποθηκεύονται οι κλάσεις του.

Κλάσεις ενσωματωμένες σα packages προσαρτώνται στον Κλάσεις ενσωματωμένες σα packages προσαρτώνται στον κώδικα άλλων κλάσεων με τη δήλωσηκώδικα άλλων κλάσεων με τη δήλωση import <packageName>.<className>;import <packageName>.<className>;

Page 33: Εισαγωγή στον αντικειμενοστραφή  π ρογραμματισμό

33

ΠαράδειγμαΠαράδειγμα

A11.java:A11.java:package Folder1;package Folder1;class A11class A11{ Class Implementation…..}{ Class Implementation…..}

A12.java:A12.java:package Folder1;package Folder1;class A12class A12{ class implementation……}{ class implementation……}

A21.java:

package Folder2;

class A21

{ Class implementation}

A22.java:

package Folder2;

import Folder1.A11;

class A22

{ Class implementation}

Folder 1

A11.java

A12.java

Folder 2

A21.javaA22.java