This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | Next revision Both sides next revision | ||
oop:introduction [2015/01/20 14:42] gthanos [Διεπαφές - Interfaces] |
oop:introduction [2015/01/20 14:48] gthanos [Διεπαφές - Interfaces] |
||
---|---|---|---|
Line 65: | Line 65: | ||
Ανάλογη είναι η λειτουργία της **διεπαφής** για τον αντικειμενοστραφή προγραμματισμό. Ορίζουμε μία **διεπαφή**, ως ένα σύνολο από μεθόδους, δίνοντας μόνο τους ορισμούς των μεθόδων, χωρίς την υλοποίηση τους. Εάν μία κλάση υλοποιεί ΟΛΕΣ τις μεθόδους μιας διεπαφής, τότε η κλάση είναι σύμφωνη με την συγκεκριμένη διαπεφή. Ο τρόπος που υλοποιεί κάθε κλάση τις μεθόδους της διεπαφής, είναι εσωτερικό θέμα της κλάσης και δεν ελέγχεται από την διεπαφή. Επιπλέον, μία κλάση μπορεί να υλοποιεί μία ή περισσότερες διεπαφές. | Ανάλογη είναι η λειτουργία της **διεπαφής** για τον αντικειμενοστραφή προγραμματισμό. Ορίζουμε μία **διεπαφή**, ως ένα σύνολο από μεθόδους, δίνοντας μόνο τους ορισμούς των μεθόδων, χωρίς την υλοποίηση τους. Εάν μία κλάση υλοποιεί ΟΛΕΣ τις μεθόδους μιας διεπαφής, τότε η κλάση είναι σύμφωνη με την συγκεκριμένη διαπεφή. Ο τρόπος που υλοποιεί κάθε κλάση τις μεθόδους της διεπαφής, είναι εσωτερικό θέμα της κλάσης και δεν ελέγχεται από την διεπαφή. Επιπλέον, μία κλάση μπορεί να υλοποιεί μία ή περισσότερες διεπαφές. | ||
- | <WRAP tip> Στη γλώσσα Java o μεταγλωτιστής απαιτεί τη υλοποίηση όλων των μεθόδων που ορίζει η διεπαφή από την κλάση που τη υλοποιεί. </WRAP> | + | <WRAP tip> Στη γλώσσα Java o μεταγλωτιστής απαιτεί τη υλοποίηση όλων των μεθόδων που ορίζει η διεπαφή από την κλάση που την υλοποιεί. </WRAP> |
Για παράδειγμα στη γλώσσα Java μπορεί να οριστεί η παρακάτω διεπαφή | Για παράδειγμα στη γλώσσα Java μπορεί να οριστεί η παρακάτω διεπαφή | ||
Line 103: | Line 103: | ||
} | } | ||
} | } | ||
- | |||
</code> | </code> | ||
- | + | ==== Πλεονεκτήματα του Αντικ/στραφούς Προγραμματισμού ==== | |
- | + | * **Modularity:** O κώδικας μίας κλάσης μπορεί να σχεδιαστεί και να αναπτυχθεί εντελώς ανεξάρτητα από τον κώδικα άλλης κλάσης. Η υλοποίηση μίας κλάσης μπορεί να αλλάξει ριζικά χωρίς να επηρεαστεί ο κώδικας των κλάσεων που χρησιμοποιούν τη συγκεκριμένη κλάση. | |
- | + | * **Απόκρυψη πληροφορίας:** Στον αντικειμενοστραφή προγραμματισμό δεν μας ενδιαφέρει η εσωτερική υλοποίηση κάθε κλάσης αλλά μόνο οι δημόσιες (public) μέθοδοι που υλοποιεί. | |
- | + | * **Επαναχρησιμοποίση κώδικα:** Η κλάση σχεδιάζεται έτσι ώστε να μπορεί να επαναχρησιμοποιηθεί και σε άλλα προγράμματα. | |
+ | * **Επεκτασιμότητα:** Η κλάση μπορεί να επεκταθεί μέσω της κληρονομικότητας σε πιο ειδικές κλάσεις. | ||
+ | * **Ευκολότερη αποσφαλμάτωση:** Κατά την αποσφαλμάτωση ο αρχικός έλεγχος μπορεί να γίνει σε επίπεδο κλάσης (**Unit testing**). Αλλαγές σε μία κλάση δεν συνεπάγονται αλλαγές και σε άλλα σημεία του προγράμματος που χρησιμοποιούν την κλάση αυτή. | ||