User Tools

Site Tools


oop:introduction

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

oop:introduction [2018/02/03 16:07] – [Περιεχόμενα της Κλάσης] gthanosoop:introduction [2020/02/21 11:17] (current) – external edit 127.0.0.1
Line 21: Line 21:
 Για παράδειγμα, όταν παράγεται ένα αυτοκίνητο, αυτό αποτελεί υλοποίηση του βασικού σχεδίου του αυτοκινήτου, έτσι όπως αυτό υλοποιείται από το εργοστάσιο κατασκευής. Μέρος του **σχεδίου** είναι η ύπαρξη κάποιων παραμέτρων όπως το χρώμα ή το επίπεδο του εξοπλισμού. Για παράδειγμα, όταν παράγεται ένα αυτοκίνητο, αυτό αποτελεί υλοποίηση του βασικού σχεδίου του αυτοκινήτου, έτσι όπως αυτό υλοποιείται από το εργοστάσιο κατασκευής. Μέρος του **σχεδίου** είναι η ύπαρξη κάποιων παραμέτρων όπως το χρώμα ή το επίπεδο του εξοπλισμού.
  
-Τον ρόλο του **σχεδίου** με την έννοια που αναφέρεται παραπάνω τον παίζει η **κλάση**. Η κλάση αποτελεί το σχέδιο με βάση το οποίο αντικείμενα του συγκεκριμένου τύπου (της συγκεκριμένης κλάσηςυλοποιούνται σε ένα πρόγραμμα. +Στον αντικειμενοστραφή προγραμματισμό, το ρόλο του **σχεδίου** με την έννοια που αναφέρεται παραπάνω τον παίζει η **κλάση**. Η κλάση αποτελεί το σχέδιο με βάση το οποίο αντικείμενα του τύπου της συγκεκριμένης κλάσης υλοποιούνται σε ένα πρόγραμμα. 
  
-Όλα τα αντικείμενα της ίδιας κλάσης διέπονται από τις ίδιες //εσωτερικές μεταβλητές// (που αποτελούν τα δεδομένα ή πεδία της κλάσης) και από τις ίδιες //συμπεριφορές// (//μεθόδους ή συναρτήσεις//). Τα αντικείμενα της ίδιας κλάσης μπορεί να διαφέρουν ως προς τις τιμές των //εσωτερικών τους μεταβλητών//{{ :oop:class-object2.png ?200|}}+Όλα τα αντικείμενα της ίδιας κλάσης διέπονται από τις ίδιες //εσωτερικές μεταβλητές// (που αποτελούν τα δεδομένα ή πεδία της κλάσης) και από τις ίδιες //συμπεριφορές// (//μεθόδους ή συναρτήσεις//). Τα αντικείμενα της ίδιας κλάσης μπορεί να διαφέρουν ως προς τις τιμές των //εσωτερικών τους μεταβλητών//
  
-Το διπλανό σχήμα απεικονίζει διαφορετικές υλοποιήσεις ενός αυτοκινήτου με βάση το αρχικό σχέδιο του συγκεκριμένου μοντέλου. Αντιστρέφοντας το παράδειγμα του αυτοκινήτου, όλα τα αυτοκίνητα του συγκεκριμένου μοντέλου αποτελούν υλοποιήσεις του ίδιου αρχικού σχεδίου. {{:oop:astra-class-object.png?250 }} |+ 
 +{{ :oop:class-object2.png ?400 }} 
 + 
 +Το παρακάτω σχήμα απεικονίζει διαφορετικές υλοποιήσεις ενός αυτοκινήτου με βάση το αρχικό σχέδιο του συγκεκριμένου μοντέλου. Αντιστρέφοντας το παράδειγμα του αυτοκινήτου, όλα τα αυτοκίνητα του συγκεκριμένου μοντέλου αποτελούν υλοποιήσεις του ίδιου αρχικού σχεδίου.  
 + 
 +{{ :oop:astra-class-object.png?500 }}
  
 ==== Κατασκευαστές της Κλάσης (Class Constructors) ==== ==== Κατασκευαστές της Κλάσης (Class Constructors) ====
Line 31: Line 36:
 Στον πραγματικό κόσμο μπορούμε να έχουμε διαφορετικές υλοποιήσεις ενός σχεδίου, διαφοροποιώντας κάποιες αρχικές παραμέτρους στο σχέδιο αυτό. Χαρακτηριστικό παράδειγμα από τον πραγματικό κόσμο αποτελεί το αυτοκίνητο. Για ένα συγκεκριμένο μοντέλο αυτοκινήτου μπορούμε να έχουμε διαφοροποίηση στο επίπεδο του εξοπλισμού ή στο χρώμα. Για κάθε μοντέλο παράγονται χιλιάδες αυτοκίνητα, όπου το κάθε ένα έχει συγκεκριμένα χαρακτηριστικά όπως ο κυβισμός, το χρώμα και το επίπεδο του εξοπλισμού. Στον πραγματικό κόσμο μπορούμε να έχουμε διαφορετικές υλοποιήσεις ενός σχεδίου, διαφοροποιώντας κάποιες αρχικές παραμέτρους στο σχέδιο αυτό. Χαρακτηριστικό παράδειγμα από τον πραγματικό κόσμο αποτελεί το αυτοκίνητο. Για ένα συγκεκριμένο μοντέλο αυτοκινήτου μπορούμε να έχουμε διαφοροποίηση στο επίπεδο του εξοπλισμού ή στο χρώμα. Για κάθε μοντέλο παράγονται χιλιάδες αυτοκίνητα, όπου το κάθε ένα έχει συγκεκριμένα χαρακτηριστικά όπως ο κυβισμός, το χρώμα και το επίπεδο του εξοπλισμού.
  
-Ανάλογα, στον αντικειμενοστραφή προγραμματισμό, οποιαδήποτε κλάση μπορεί να δώσει πολλαπλά διαφορετικά αντικείμενα. Η κλάση για τα αντικείμενα είναι το βασικό σχέδιο μέσω του οποίου δημιουργούνται. Τα αντικείμενα που παράγει μία κλάση μπορεί να διαφοροποιούνται ως προς τα χαρακτηριστικά τους. Σκεφτείτε το ανάλογο ενός μοντέλου-τύπου αυτοκινήτου, όπου όλα τα αυτοκίνητα που παράγονται υπακούουν  στο ίδιο βασικό σχέδιο, αλλά διαφοροποιούνται ως προς τα χαρακτηριστικά που αναφέραμε παραπάνω.+Ανάλογα, στον αντικειμενοστραφή προγραμματισμό, οποιαδήποτε κλάση μπορεί να δώσει πολλαπλά διαφορετικά αντικείμενα. Η κλάση είναι το βασικό σχέδιο μέσω του οποίου δημιουργούνται τα αντικείμενα. Τα αντικείμενα μίας κλάσης, φέρουν τον τύπο της κλάσης που τα δημιούργησεαλλά διαφοροποιούνται ως προς τα επιμέρους χαρακτηριστικά τους.  
 + 
 +Σκεφτείτε το ανάλογο ενός μοντέλου αυτοκινήτου, όπου όλα τα αυτοκίνητα που παράγονται υπακούουν  στο ίδιο βασικό σχέδιο, αλλά διαφοροποιούνται ως προς τα χαρακτηριστικά που αναφέραμε παραπάνω.
  
-Κάθε αντικείμενο υλοποιείται από μία μέθοδο που καλείται κατασκευαστής (//constructor//). Ο κατασκευαστής της κλάσης υλοποιεί το κάθε αντικείμενο με βάση το σχέδιο της κλάσης και μπορεί να κληθεί για διαφορετικά αντικείμενα με διαφορετικές παραμέτρους, οδηγώντας τελικά σε διαφοροποιημένα αντικείμενα ως προς τα χαρακτηριστικά τους. +Στον αντικειμενοστραφή προγραμματισμό τα αντικείμενα υλοποιούνται από μία ειδικίη μέθοδο που καλείται κατασκευαστής (//constructor//). Ο κατασκευαστής της κλάσης μπορεί να κληθεί για διαφορετικά αντικείμενα με διαφορετικές παραμέτρους, οδηγώντας τελικά σε διαφοροποιημένα αντικείμενα ως προς τα επιμέρους χαρακτηριστικά τους. 
  
-Μία κλάση έχει τουλάχιστον ένα κατασκευαστή. Οι κατασκευαστές είναι μέθοδοι (//συναρτήσεις//) που κάνουν τα εξής:+Μία κλάση έχει τουλάχιστον ένα κατασκευαστή.  Συνοπτικά, οι κατασκευαστές είναι μέθοδοι (//συναρτήσεις//) που κάνουν τα εξής:
   - Δεσμεύουν την απαραίτητη μνήμη για το νέο αντικείμενο.   - Δεσμεύουν την απαραίτητη μνήμη για το νέο αντικείμενο.
-  - Αρχικοποιούν το αντικείμενο με βάση τις αρχικές τιμές των παραμέτρων με τις οποίες καλείται ο κατασκευαστής της κλάσης.+  - Αρχικοποιούν το αντικείμενο με βάση τις αρχικές τιμές των παραμέτρων με τις οποίες καλούνται.
  
 ==== Περιεχόμενα της Κλάσης ==== ==== Περιεχόμενα της Κλάσης ====
Line 48: Line 55:
   - **Μεθόδους**: Συναρτήσεις οι οποίες μπορεί να λαμβάνουν τυπικές παραμέτρους, αλλά σε κάθε περίπτωση έχουν πρόσβαση σε όλα τα πεδία (δεδομένα) της κλάσης.   - **Μεθόδους**: Συναρτήσεις οι οποίες μπορεί να λαμβάνουν τυπικές παραμέτρους, αλλά σε κάθε περίπτωση έχουν πρόσβαση σε όλα τα πεδία (δεδομένα) της κλάσης.
  
 +/* 
 === Αντικείμενα ως πεδία της κλάσης === === Αντικείμενα ως πεδία της κλάσης ===
  
Line 61: Line 69:
 class Box { class Box {
   int width, length, height;   int width, length, height;
 +}
 +
 +class Colour {
 +  int red, green, blue;
 } }
  
Line 79: Line 91:
 </code> </code>
  
-Δείτε την παραπάνω σχέση κλάσεων, στις κλάσεις αυτές περιέχονται μόνο τα πεδία και παραλείπονται οι κατασκευαστές και μέθοδοι. Η κλάση Colour έχει τρία (3) ακέραια πεδία που προσδιορίζουν τις παραμέτρους RGB για κάθε χρώμα. Η κλάση Βοx έχει τρία (3) ακέραια πεδία που προσδιορίζουν τις διαστάσεις ενός κουτιού. Η κλάση ColouredBox αποτελείται από δύο πεδία που είναι τύπου colour (για το χρώμα) και box (για το κουτί). Επομένως, τα πεδία της κλάση ColouredBox είναι αντικείμενα άλλων κλάσεων. +Δείτε την παραπάνω σχέση κλάσεων, στις κλάσεις αυτές περιέχονται μόνο τα πεδία και παραλείπονται οι κατασκευαστές και μέθοδοι. Η κλάση **Colour** έχει τρία (3) ακέραια πεδία που προσδιορίζουν τις παραμέτρους RGB για κάθε χρώμα. Η κλάση **Βοx** έχει δύο (2) ακέραια πεδία που προσδιορίζουν τις διαστάσεις του κουτιού. Η κλάση **ColouredBox** αποτελείται από δύο πεδία τα οποία είναι είναι a) **colour** (τύπου **Colour** - για το χρώμα του κουτιού) και b) **box** (τύπου **Βox** - για τις διαστάσεις του κουτιού). Επομένως, τα πεδία της κλάση **ColouredBox** είναι αντικείμενα άλλων κλάσεων. 
  
-Αντίστοιχα η κλάση ColouredBoxWithRibbon (χρωματιστό κουτί με κορδέλα), περιέχει τα πεδία cbox (αντικείμενο της κλάσης ColouredBox) και ribbon αντικείμενο της κλάσης Ribbon. Η κλάση Ribbon με τη σειρά της περιέχει τα πεδία colour (τύπου Colour) και το πεδίο length (τύπου int).+Αντίστοιχαη κλάση **ColouredBoxWithRibbon** (χρωματιστό κουτί με κορδέλα), περιέχει τα πεδία **cbox** (αντικείμενο της κλάσης **ColouredBox**) και **ribbon** αντικείμενο της κλάσης **Ribbon**. Η κλάση **Ribbon** με τη σειρά της περιέχει τα πεδία **colour** (τύπου **Colour** - για το χρώμα της κορδέλας) και το πεδίο length (τύπου int) για το μήκος της κορδέλας.
  
 <WRAP tip 80% center round> <WRAP tip 80% center round>
 Δεν υπάρχει κανένας περιορισμός για το "βάθος" στο οποίο μπορεί να φτάσει η σχέση μεταξύ αντικειμένων διαφορετικών κλάσεων. Επίσης, δεν υπάρχει περιορισμός στον αριθμό των πεδίων που μπορεί να έχει μία κλάση. Δεν υπάρχει κανένας περιορισμός για το "βάθος" στο οποίο μπορεί να φτάσει η σχέση μεταξύ αντικειμένων διαφορετικών κλάσεων. Επίσης, δεν υπάρχει περιορισμός στον αριθμό των πεδίων που μπορεί να έχει μία κλάση.
 </WRAP> </WRAP>
- +
 === Διάκριση στην προσβασιμότητα των πεδίων και των μεθόδων από άλλες κλάσεις === === Διάκριση στην προσβασιμότητα των πεδίων και των μεθόδων από άλλες κλάσεις ===
  
Line 129: Line 141:
     - είναι ευκολότερο να αποσφαλματωθεί. Η αποσφαλμάτωση του μπορεί να χωρισθεί σε σαφή και διακριτά μεταξύ τους τμήματα.     - είναι ευκολότερο να αποσφαλματωθεί. Η αποσφαλμάτωση του μπορεί να χωρισθεί σε σαφή και διακριτά μεταξύ τους τμήματα.
 </WRAP> </WRAP>
 +*/
 ==== Κληρονομικότητα ==== ==== Κληρονομικότητα ====
  
Line 138: Line 150:
 Με βάση την παραπάνω παρατήρηση, μπορούμε να ορίσουμε κλάσεις που περιγράφουν γενικές έννοιες και στη συνέχεια να τις εξειδικεύσουμε δημιουργώντας νέες κλάσεις που περιγράφουν πιο ειδικές έννοιες. Ο λόγος που θα θέλαμε να κάνουμε κάτι τέτοιο είναι ότι κατά την εξέλιξη του λογισμικού θέλουμε κατά το δυνατόν να επαναχρησιμοποιούμε κώδικα που ήδη έχουμε, δημιουργώντας πιο σύνθετα και εξελιγμένα μοντέλα του υφιστάμενου λογισμικού.  Με βάση την παραπάνω παρατήρηση, μπορούμε να ορίσουμε κλάσεις που περιγράφουν γενικές έννοιες και στη συνέχεια να τις εξειδικεύσουμε δημιουργώντας νέες κλάσεις που περιγράφουν πιο ειδικές έννοιες. Ο λόγος που θα θέλαμε να κάνουμε κάτι τέτοιο είναι ότι κατά την εξέλιξη του λογισμικού θέλουμε κατά το δυνατόν να επαναχρησιμοποιούμε κώδικα που ήδη έχουμε, δημιουργώντας πιο σύνθετα και εξελιγμένα μοντέλα του υφιστάμενου λογισμικού. 
  
-=== Ένα σύντομο παράδειγμα ===+=== Ένα σύντομο παράδειγμα κληρονομικότητας ===
  
-Όταν εφευρέθηκε το ποδήλατο με ταχύτητες, ο εφευρέτης χρησιμοποίησε το υφιστάμενο βασικό σχέδιο του ποδηλάτου για να προσθέσει τον μηχανισμό των ταχυτήτων και να δημιουργήσει τον νέο τύπο ποδηλάτου, το ποδήλατο με ταχύτητες. Σε αναλογία όταν δημιουργήθηκε το πρώτο αυτοκίνητο για κίνηση εκτός δρόμου (τύπου 4x4) αυτό προήλθε ως εξέλιξη του βασικού σχεδίου του αυτοκινήτου διαφοροποιώντας κάποια χαρακτηριστικά στο αρχικό σχέδιο (αμορτισέρ, κιβώτιο ταχυτήτων, λάστιχα, κίνηση και στους 4 τροχούς κλπ). Το βασικό σχέδιο του αυτοκινήτου δεν μπορεί να καλύψει τις ανάγκες κίνησης εκτός δρόμου, αποτελεί όμως τη βάση για την δημιουργία ενός νέου τύπου αυτοκινήτου που επιτρέπει την κίνηση και εκτός δρόμου. +Όταν εφευρέθηκε το ποδήλατο με ταχύτητες, ο εφευρέτης χρησιμοποίησε το υφιστάμενο βασικό σχέδιο του ποδηλάτου για να προσθέσει τον μηχανισμό των ταχυτήτων και να δημιουργήσει τον νέο τύπο ποδηλάτου, το ποδήλατο με ταχύτητες. Με αυτό τον τρόπο το βασικό σχέδιο του ποδηλάτου επεκτάθηκε δημιουργώντας ένα νέο τύπο που περιέχει όλα τα χαρακτηριστικά του προηγούμενου και κάτι επιπλέον.
- +
-Δείτε τα παρακάτω σχηματικά παραδείγματα: ** αυτοκίνητο --> αυτοκίνητο για κίνηση εκτός δρόμου, ποδήλατο --> ποδήλατο με ταχύτητες**+
  
 Στον αντικειμενοστραφή προγραμματισμό η ιδιότητα της κληρονομικότητας μας επιτρέπει να δημιουργήσουμε νέες κλάσεις με αφετηρία υφιστάμενες κλάσεις. Η ιδιότητα της κληρονομικότητας δηλώνει ότι δεν θα χρειαστεί να ξαναγράψουμε το σύνολο της νέας κλάσης από την αρχή. Αντίθετα,  Στον αντικειμενοστραφή προγραμματισμό η ιδιότητα της κληρονομικότητας μας επιτρέπει να δημιουργήσουμε νέες κλάσεις με αφετηρία υφιστάμενες κλάσεις. Η ιδιότητα της κληρονομικότητας δηλώνει ότι δεν θα χρειαστεί να ξαναγράψουμε το σύνολο της νέας κλάσης από την αρχή. Αντίθετα, 
Line 148: Line 158:
   * ο προγραμματιστής αρκεί να προσθέσει ότι επιπλέον χρειάζεται προκειμένου να δημιουργηθεί η νέα κλάση. Η νέα κλάση αποτελεί επέκταση της αρχικής καθώς ενσωματώνει όλα τα χαρακτηριστικά της, αλλά παράγει αντικείμενα του νέου τύπου.   * ο προγραμματιστής αρκεί να προσθέσει ότι επιπλέον χρειάζεται προκειμένου να δημιουργηθεί η νέα κλάση. Η νέα κλάση αποτελεί επέκταση της αρχικής καθώς ενσωματώνει όλα τα χαρακτηριστικά της, αλλά παράγει αντικείμενα του νέου τύπου.
  
-Επεκτείνοντας την παραπάνω συλλογιστική μπορούμε να έχουμε πολλαπλές ιεραρχίες κλάσεων. Για παράδειγμα, από το ποδήλατο με ταχύτητες μπορεί να οριστεί το ποδήλατο για δύο επιβάτες με ταχύτητες ή το ποδήλατο για δύο επιβάτες με ταχύτητες και αμορτισέρ.  +Επεκτείνοντας την παραπάνω λογική μπορούμε να έχουμε πολλαπλές ιεραρχίες κλάσεων. Για παράδειγμα, από το ποδήλατο με ταχύτητες μπορεί να οριστεί το ποδήλατο για δύο επιβάτες με ταχύτητες ή το ποδήλατο για δύο επιβάτες με ταχύτητες και αμορτισέρ.  
  
 //**ποδήλατο** --> **ποδήλατο με ταχύτητες** --> **ποδήλατο με ταχύτητες για δύο επιβάτες** -> **ποδήλατο με ταχύτητες και αμορτισέρ για δύο επιβάτες**//. //**ποδήλατο** --> **ποδήλατο με ταχύτητες** --> **ποδήλατο με ταχύτητες για δύο επιβάτες** -> **ποδήλατο με ταχύτητες και αμορτισέρ για δύο επιβάτες**//.
  
-Για το **ποδήλατο με ταχύτητες** η κλάση **ποδήλατο** αποτελεί την γονική κλάση (__Super Class__). Αντίστοιχα για το **ποδήλατο**, το **ποδήλατο με ταχύτητες** αποτελεί υποκλάση (__Sub Class__) αυτού.+**Συμβάσεις:** Για το **ποδήλατο με ταχύτητες** η κλάση **ποδήλατο** αποτελεί την γονική κλάση (__Super Class__). Αντίστοιχα για το **ποδήλατο**, το **ποδήλατο με ταχύτητες** αποτελεί υποκλάση (__Sub Class__) αυτού. 
 + 
  
 <WRAP tip 80% center round> <WRAP tip 80% center round>
-Μέσω της κληρονομικότητας υλοποιείται μία από τις βασικές αρχές του αντικειμενοστραφή προγραμματισμού που είναι η αρχή της επαναχρησιμοποίησης κώδικα. +Μέσω της κληρονομικότητας υλοποιείται μία από τις βασικές αρχές του αντικειμενοστραφή προγραμματισμού που είναι η αρχή της επαναχρησιμοποίησης του κώδικα. 
  
 Επίσης, καθώς κάθε υποκλάση ενσωματώνει τα χαρακτηριστικά της βασικής της κλάσης οφείλουμε να πούμε τα τα αντικείμενα της υποκλάσης είναι αντικείμενα και της γονικής κλάσης. Για παράδειγμα, ένα αντικείμενο του τύπου "ποδήλατο με ταχύτητες" που προκύπτει από την γονική κλάση "ποδήλατο", είναι και του τύπου "ποδήλατο". Ο παραπάνω συλλογισμός φαίνεται προφανής στον πραγματικό κόσμο και διατηρείται και στο αντικειμενοστραφή προγραμματισμό.  Επίσης, καθώς κάθε υποκλάση ενσωματώνει τα χαρακτηριστικά της βασικής της κλάσης οφείλουμε να πούμε τα τα αντικείμενα της υποκλάσης είναι αντικείμενα και της γονικής κλάσης. Για παράδειγμα, ένα αντικείμενο του τύπου "ποδήλατο με ταχύτητες" που προκύπτει από την γονική κλάση "ποδήλατο", είναι και του τύπου "ποδήλατο". Ο παραπάνω συλλογισμός φαίνεται προφανής στον πραγματικό κόσμο και διατηρείται και στο αντικειμενοστραφή προγραμματισμό. 
 </WRAP> </WRAP>
  
-Στο διπλανή εικόνα παρουσιάζεται εποπτικά ένα παράδειγμα κληρονομικότητας της κλάσης του ποδηλάτου. Από την γενική κλάση του ποδηλάτου προκύπτουν δύο επιμέρους κλάσεις **α)** το ποδήλατο για δύο επιβάτες (χωρίς ταχύτητες) **β)** το ποδήλατο με ταχύτητες. <WRAP todo round>Μπορείτε να προτείνετε κάποια άλλη ιεραρχία κλάσεων για κάποια άλλη οντότητα (π.χ. το αυτοκίνητο) σε αναλογία με αυτή που περιγράψαμε για το ποδήλατο;</WRAP>| {{:oop:bicycle-hierarchy.png?300 |}} |+Στην παρακάτω εικόνα παρουσιάζεται εποπτικά ένα παράδειγμα κληρονομικότητας της κλάσης του ποδηλάτου. Από την γενική κλάση του ποδηλάτου προκύπτουν δύο επιμέρους κλάσεις **α)** το ποδήλατο για δύο επιβάτες (χωρίς ταχύτητες) **β)** το ποδήλατο με ταχύτητες.  
 + 
 +{{  :oop:bicycle-hierarchy.png?400  }} 
 + 
 +<WRAP todo 80% center round>Μπορείτε να προτείνετε κάποια άλλη ιεραρχία κλάσεων για κάποια άλλη οντότητα (π.χ. το αυτοκίνητο) σε αναλογία με αυτή που περιγράψαμε για το ποδήλατο;</WRAP> 
  
  
Line 171: Line 188:
 Ανάλογη είναι η λειτουργία της **διεπαφής** (interface) για τον αντικειμενοστραφή προγραμματισμό. Ορίζουμε μία **διεπαφή**, ως ένα σύνολο από μεθόδους δίνοντας μόνο τους ορισμούς των μεθόδων, χωρίς την υλοποίηση τους. Οι μέθοδοι αυτές περιγράφουν τους τρόπους αλληλεπίδρασης των υπόλοιπων κλάσεων με τις κλάσεις που υλοποιούν τις συγκεκριμένες διεπαφές.  Ανάλογη είναι η λειτουργία της **διεπαφής** (interface) για τον αντικειμενοστραφή προγραμματισμό. Ορίζουμε μία **διεπαφή**, ως ένα σύνολο από μεθόδους δίνοντας μόνο τους ορισμούς των μεθόδων, χωρίς την υλοποίηση τους. Οι μέθοδοι αυτές περιγράφουν τους τρόπους αλληλεπίδρασης των υπόλοιπων κλάσεων με τις κλάσεις που υλοποιούν τις συγκεκριμένες διεπαφές. 
  
-Σε αναλογία με τον πραγματικό κόσμο, σκεφτείτε ότι θέλετε να προτυποποιήσετε την διεπαφή της τηλεόρασης. Οποιαδήποτε τηλεόραση θα πρέπει να έχει __τουλάχιστον__ τα εξής: είσοδο για καλώδιο τροφοδοσίας ρεύματος, power button, κουμπί channel up/down, κουμπί volume up/down και μενού για τη διαχείριση των καναλιών και οθόνη. Οποιαδήποτε τηλεόραση μπορεί να έχει περισσότερα από τα παραπάνω, αλλά δεν μπορεί να έχει λιγότερα. Η διεπαφή επομένως ορίζει τα ελάχιστα ή απαραίτητα που πρέπει να υλοποιεί μία κλάση προκειμένου να είναι συγκεκριμένου τόπου. Για παράδειγμα, μία τηλεόραση χωρίς κουμπί για να αλλάζουν τα κανάλια ή χωρίς οθόνη μάλλον δεν συγκεντρώνει όλα τα χαρακτηριστικά της τηλεόρασης.+Σε αναλογία με τον πραγματικό κόσμο, σκεφτείτε ότι θέλετε να προτυποποιήσετε την διεπαφή της τηλεόρασης. Οποιαδήποτε τηλεόραση θα πρέπει να έχει __τουλάχιστον__ τα εξής: είσοδο για καλώδιο τροφοδοσίας ρεύματος, power button, κουμπί channel up/down, κουμπί volume up/down και μενού για τη διαχείριση των καναλιών και οθόνη. Οποιαδήποτε τηλεόραση μπορεί να έχει περισσότερα από τα παραπάνω, αλλά δεν μπορεί να έχει λιγότερα. Η διεπαφή επομένως ορίζει τα ελάχιστα ή απαραίτητα που πρέπει να υλοποιεί μία κλάση προκειμένου να είναι συγκεκριμένου τύπου. Για παράδειγμα, μία τηλεόραση χωρίς κουμπί για να αλλάζουν τα κανάλια ή χωρίς οθόνη μάλλον δεν συγκεντρώνει όλα τα χαρακτηριστικά της τηλεόρασης.
  
 <WRAP tip 80% center round> <WRAP tip 80% center round>
-Παρατηρήστε ότι η διεπαφή όπως την ορίσαμε παραπάνω δεν σας λέει τίποτα για το πως είναι φτιαγμένη εσωτερικά η τηλεόραση ή ποιες τεχνολογίες χρησιμοποιεί. Το μόνο που μπορεί να σας εξασφαλίσει το interface που θα προτιποιήσετε είναι να διαπιστώσετε εάν μία συσκευή που βρίσκεται μπροστά σας είναι τηλεόραση ή όχι.+Παρατηρήστε ότι η διεπαφή όπως την ορίσαμε παραπάνω δεν σας λέει τίποτα για το πως είναι φτιαγμένη εσωτερικά η τηλεόραση ή ποιες τεχνολογίες χρησιμοποιεί. Το μόνο που μπορεί να σας εξασφαλίσει το interface που θα ορίσετε είναι να διαπιστώσετε εάν μία συσκευή που βρίσκεται μπροστά σας είναι τηλεόραση ή όχι.
 </WRAP> </WRAP>
  
Line 186: Line 203:
   * top: επιστροφη της τιμής του κορυφαίου στοιχείου της στοίβας (χωρίς να αφαιρεθεί).   * top: επιστροφη της τιμής του κορυφαίου στοιχείου της στοίβας (χωρίς να αφαιρεθεί).
  
-Αν οποιαδήποτε κλάση υλοποιεί τις παραπάνω μεθόδους τότε μπορούμε να πούμε ότι υλοποιεί την διεπαφή της στοίβας (interface Stack).+Αν οποιαδήποτε κλάση υλοποιεί τις παραπάνω μεθόδους τότε μπορούμε να πούμε ότι υλοποιεί την διεπαφή της στοίβας.
  
-Στον αντικειμενοστραφή προγραμματισμό, όσες κλάσεις υλοποιούν **ΟΛΕΣ** τις μεθόδους μία διεπαφής, υλοποιούν συνολικά τη διεπαφή. Εάν έστω και μία μέθοδος δεν υλοποιείται, δεν υλοποιείται και η διεπαφή.+Στον αντικειμενοστραφή προγραμματισμό, όσες κλάσεις υλοποιούν **ΟΛΕΣ** τις μεθόδους μίας διεπαφής, υλοποιούν συνολικά τη διεπαφή. Εάν έστω και μία μέθοδος δεν υλοποιείται, δεν υλοποιείται και η διεπαφή.
  
  
Line 201: Line 218:
  
 | Προηγούμενο: [[java:break_loop_statements|Εντολές τερματισμού και ελέγχου της ανακύκλωσης]] [[:toc | Περιεχόμενα ]]|| Επόμενο: [[:java:class | Η κλάση ]]| | Προηγούμενο: [[java:break_loop_statements|Εντολές τερματισμού και ελέγχου της ανακύκλωσης]] [[:toc | Περιεχόμενα ]]|| Επόμενο: [[:java:class | Η κλάση ]]|
- 
- 
- 
- 
- 
- 
  
oop/introduction.1517674059.txt.gz · Last modified: 2018/02/03 16:07 (external edit)