java:interface

This is an old revision of the document!


A PCRE internal error occured. This might be caused by a faulty plugin

===== Εισαγωγικά ===== Κατά την ανάπτυξη προγραμμάτων είναι σημαντικό να είναι τυποποιημένος ο τρόπος αλληλεπίδρασης ανάμεσα σε διαφορετικά συστήματα. Η ύπαρξη ενός "συμβολαίου" το οποίο καθορίζει ακριβώς το πώς μπορεί μία κλάση να αλληλεπιδράσει με μια άλλη διευκολύνει την ανεξάρτητη ανάπτυξη κώδικα από διαφορετικούς προγραμματιστές. Υπακούοντας στην παραπάνω αρχή, η Java εισάγει την έννοια της διεπαφής (**interface**). Τα //interfaces// στη Java λειτουργούν ως προ-συμφωνημένες διεπαφές μεταξύ προγραμματιστών. Κάθε interface τυπικά σχετίζεται με: - **τους προγραμματιστές που το χρησιμοποιούν:** οι προγραμματιστές γράφουν την εφαρμογή τους ώστε να χρησιμοποιεί τις μεθόδους του //interface//, οι οποίες παρέχουν τη λειτουργικότητα που υποδεικνύει το //interface// αυτό. - **τους προγραμματιστές που το υλοποιούν:** εφόσον θέλουν να ενσωματώσουν τη λειτουργικότητα που υποδεικνύει το //interface// σε συγκεκριμένες κλάσεις θα πρέπει να υλοποιήσουν τις μεθόδους του στις κλάσεις αυτές. Από τα παραπάνω εξάγεται ότι το //interface// είναι μία προσυμφωνημένη διεπαφή η οποία δεσμεύει και τις δύο πλευρές, τόσο τους προγραμματιστές που το υλοποιούν, όσο και εκείνους που το χρησιμοποιούν. Παρακάτω θα δούμε την υποστήριξη των interfaces από τον compiler της Java και τους κανόνες που τα διέπουν. Ως παράδειγμα, θεωρήστε ένα //interface// το οποίο ορίζει τη χρήση ενός χρονόμετρου (//Timer//). Όσοι επιθυμούν να υλοποιήσουν το χρονόμετρο θα πρέπει κατ' ελάχιστο να υλοποιήσουν τις παρακάτω μεθόδους: * **setTimer:** αρχικοποίηση του timer * **startTimer:** έναρξη του timer και * **endTimer:** τερματισμός του timer Ας υποθέσουμε τώρα ότι ένας κατασκευαστής ηλεκτρικών συσκευών (κλιμαστιστικά, ψυγεία κ.α.) χρησιμοποιεί Java για τον αυτοματισμό τους και θέλει να χρησιμοποιεί μία κλάση τύπου //Timer// για τις συσκευές που κατασκευάζει προκειμένου να ενσωματώσει τη λειτουργία του χρονόμετρου. Για να το κάνει αυτό, μπορεί να χρησιμοποιήσει __οποιαδήποτε κλάση είναι σύμφωνη με τον παραπάνω //interface//__. Ας υποθέσουμε επίσης ότι υπάρχουν τουλάχιστον δύο διαφορετικές κλάσεις που υλοποιούν το συγκεκριμένο interface //Timer//. Γνωρίζοντας ότι όλες οι εναλλακτικές κλάσεις που θα χρησιμοποιήσει θα υλοποιούν υποχρεωτικά το συγκεκριμένο //interface//, αρκεί να σχεδιάσει και να υλοποιήσει το λογισμικό του του ώστε να χρησιμοποιεί το //interface// αυτό. Σε αυτή την περίπτωση, σχεδιάζει και γράφει το λογισμικό με γνώμονα τον interface και όχι τη συγκεκριμένη κλάση που θα επιλέξει να χρησιμοποιήσει τελικά. Υιοθετώντας την έννοια του //interface// και γράφοντας κώδικα που χρησιμοποιεί //interfaces//, γράφουμε κώδικα που είναι ανεξάρτητος από την οποιαδήποτε υλοποίηση των //interfaces// που χρησιμοποιεί. Γενικότερα, ισχύει η αρχή ότι οι υλοποιήσεις ενός interface μπορεί να αλλάξουν, τα interfaces όμως συνιστάται να παραμένουν σταθερά. Οποιοσδήποτε προγραμματιστής χρησιμοποιεί το παραπάνω //interface// δεν χρειάζεται να γνωρίζει το παραμικρό για την εσωτερική υλοποίηση των κλάσεων που το υλοποιούν. Η επιλογή της κλάσης που το υλοποιεί μπορεί να μεταβάλλεται χωρίς να επηρεάζεται ο κώδικας που το χρησιμοποιεί. Αντιπαραθέστε τώρα την εναλλακτική μη ύπαρξης προσυμφωνημένων διεπαφών. Σε αυτή την περίπτωση κάθε πρόγραμμα ή ο κάθε κατασκευαστής θα έπρεπε να υλοποιεί την δική του κλάση για το χρονόμετρο, χωρίς να υπάρχει η δυνατότητα εύκολης χρήσης λογισμικού που προέρχεται από τρίτους. Η προτυποποίηση που παρέχει ο μηχανισμός του //interface// είναι αυτή που επιτρέπει: - την εύκολη και χωρίς σφάλματα επαναχρησιμοποίηση κώδικα σε διαφορετικά προγράμματα και - την αλλαγή της υφιστάμενης υλοποίησης μιας κλάσης που υλοποιεί ένα //interface//, δίχως οι χρήστες του //interface// να έχουν γνώση για τις αλλαγές αυτές. | Προηγούμενο : [[ :java:abstract_classes | Abstract Κλάσεις ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ :java:interface_definition | Δήλωση του interface ]] |

java/interface.1487255199.txt.gz · Last modified: 2017/02/16 14:26 by gthanos