Άσκηση 4.1
Υλοποίηση
ενός
προσαρμοστικού
πρωτοκόλλου
με χρήση
σειροποιήσιμου
αντικειμένου
Θέση αρχείων = /ExerciseCode/C4/FourOne/
Σε αυτή
την άσκηση θέλω
να γράψετε ένα
μικρό τμήμα
κώδικα για ένα
πελάτη ο
οποίος
χρησιμοποιεί
ένα
σειροποιήσιμο
αντικείμενο
για να
υλοποιήσει
ένα
προσαρμοστικό
πρωτόκολλο.
Το πρώτο μέρος
αυτής της
άσκησης
περιέχει
κώδικα ο
οποίος
προσδιορίζει
ένα
σειροποιήσιμο
αντικείμενο.
Ένα
σειροποιήσιμο
αντικείμενο
μπορεί να
σταλεί μέσω
του δικτύου.
Αυτό
που
στέλνεται
δεν είναι μόνο
η κατάσταση
του
αντικειμένου
αλλά και ο
κώδικας για
τις
μεθόδους
του
αντικειμένου.
Για να
μπορέσει ένα
αντικείμενο
να σταλεί μέσω
του δικτύου,
η κλάση του
θα πρέπει να
υλοποιεί την
διεπαφή Serializable.
Αυτή η διεπαφή
δεν περιέχει
ορισμούς
μεθόδων, παρά
μόνο
ενεργεί ως
ένδειξη στο
σύστημα
εκτέλεσης
της Java ότι αυτό
το
αντικείμενο
μπορεί να
μεταφερθεί
μέσω του
δικτύου. Ας
δούμε όμως
κάποιες
βασικές
κλάσεις που
αφορούν την
άσκηση:
- Η αφηρημένη
κλάση ProtocolObject
ορίζει τα
αντικείμενα
που
πρόκειται να
σταλούν.
Περιέχει τον
ορισμό μιας
μόνο μεθόδου
που
λέγεται execute.
Αυτή
παίρνει ως
παράμετρο ένα
αντικείμενο
Hashtable.
- Η κλάση NumberReturner
είναι μια
υποκλάση της
ProtocolObject και
υλοποιεί την
μέθοδο execute.
Παρέχει την
λειτουργία
του να
επιστρέφει
τον αριθμό
των στοιχείων
που
βρίσκονται
στο
αντικείμενο
Hashtable που είναι η
παράμετρος
της execute.
- Η κλάση KeyReturner
είναι
επίσης μια
υποκλάση της
ProtocolObject και πάλι
υλοποιεί την
μέθοδο
execute. Παρέχει
την
λειτουργία
του να
επιστρέφει τα
κλειδιά του
αντικειμένου
Hashtableχωρισμένα
με αστεράκια.
Το δεύτερο
μέρος της
άσκησης
αποτελείται
από ένα
απλό
αντικείμενο
για τον
διακομιστή.
Υλοποιείται
από την κλάση Server
στην οποία
υπάρχει
κώδικας ο
οποίος
διαβάζει ένα
αντικείμενο
που
στέλνεται από
το δίκτυο
και έπειτα
εκτελεί τη
μέθοδο
execute του
αντικειμένου.
Το
τελευταίο
μέρος της
άσκησης είναι
η υλοποίηση
ενός πελάτη ο
οποίος θα
επικοινωνεί
με το
διακομιστή.
Εδώ έχουμε
τρεις
κλάσεις::
- Μια κλάση ClientSolution
η οποία
περιέχει τη
λύση της
άσκησης..
- Μια κλάση Client η
οποία είναι η
κλάση στην
οποία θέλω να
προσθέσετε
κώδικα..
- Μια κλάση ProtocolHolder
η οποία
περιλαμβάνει
μια μοναδική
μεταβλητή η
οποία είναι
ένα
αντικείμενο
τύπου ProtocolObject. Αυτή
η κλάση μπορεί
να
δημιουργήσει
αντικείμενα
τα
οποία έχουν
μια μεταβλητή
η οποία
αναπαριστά
αντικείμενο
που ανήκει
σε
υποκλάση της
ProtocolObject.
Λειτουργεί
δηλαδή ως
φορέας
αντικειμένων
κλάσης ProtocolObject.
Τα βήματα τα
οποία πρέπει
να
ακολουθήσετε
είναι τα
εξής:
- Εκτελέστε
τον
διακομιστή.
Θα
δείτε να
εμφανίζονται
κάποια
μηνύματα τα
οποία θα
δείχνουν τη
σωστή
λειτουργία
του
διακομιστή.
Κάντε το σε ένα
παράθυρο MSDOS.
- Εκτελέστε
τον πελάτη
χρησιμοποιώντας
την κλάση ClientSolution.
Κάντε το σε ένα
άλλο
παράθυρο MSDOS. Θα
πρέπει να
δείτε μερικά
μηνύματα
ακολουθούμενα
από τρια
κλειδιά του
hashtable που
βρίσκεται
στον κώδικα
του
διακομιστή,
με κάθε
κλειδί να
χωρίζεται από
τα άλλα με έναν
αστερίσκο.
Ο
διακομιστής
θα
τερματίσει
μετά την
επικοινωνία
με τον πελάτη.
Ο πελάτης
θα
τερματίσει
επίσης.
- Διαβάστε
τον κώδικα
για τις
κλάσεις ProtocolObject,
NumberReturner
και KeyReturner.
Καταλάβετε
πως
λειτουργούν.
- Διαβάστε
τον κώδικα
για την κλάση Server
και
πάλι δείτε πως
λειτουργεί.
Συγκεκριμένα
δείτε
με ποιο τρόπο
διαβάζεται
και
εκτελείται
ένα
αντικείμενο.
- Διαβάστε
τον κώδικα
της κλάσης Client
και
τον κώδικα
της κλάσης ProtocolHolder.
Συγκεκριμένα
καταλάβετε
με ποιο
τρόπο η ProtocolHolder
χρησιμοποιείται
για να κρατά ένα
αντικείμενο
ProtocolObject του
οποίου η
μέθοδος execute method
μπορεί να
εκτελεστεί
όταν φτάσει τον
διακομιστή.
- Προσθέστε
νέο κώδικα
στην κλάση Client ο
οποίος
δημιουργεί
ένα
αντικείμενο
KeyReturner και
έπειτα το
στέλνει στον
διακομιστή.
Επίσης
προσθέστε
κώδικα ο
οποίος
εμφανίζει τη
συμβολοσειρά
η οποία
στέλνεται
από τον
διακομιστή.
- Εκτελέστε
τον
διακομιστή
σε ένα
παράθυρο του
MSDOS.
- Εκτελέστε
τον πελάτη σε
ένα άλλο
παράθυρο του
MSDOS.
- Δείτε την
έξοδο του
πελάτη. Πρέπει
να δείτε τα
ίδια με όταν
εκτελέσατε
την λύση της
άσκησης.
- Κάτι άλλο το
οποίο
μπορείτε να
δοκιμάσετε
είναι
να
αντικαταστήσετε
το
αντικείμενο
KeyReturner στον
κώδικα του
πελάτη με ένα
αντικείμενο
NumberReturner και να
δείτε αν
πράγματι
επιστρέφεται
ο αριθμός των
εισόδων
του
αντικειμένου
hashtable που
υπάρχει στον
διακομιστή.
Ο πελάτης
και ο
διακομιστής
επικοινωνούν
χρησιμοποιώντας
ένα
προσαρμοστικό
πρωτόκολλο.
Το
πρωτόκολλο
περιλαμβάνεται
στις
κλάσεις KeyReturner
και
NumberReturner. αν θέλετε
να αλλάξετε
το
πρωτόκολλο,
ας πούμε
προσθέτοντας
περισσότερες
λειτουργίες,
το μόνο που θα
έπρεπε να
κάνετε θα ήταν
να
προσθέσετε
νέες
υποκλάσεις
της ProtocolObject. Δεν
υπάρχει
λόγος να
αλλάξετε τον
διακομιστή
όμως.
Το
προσαρμοστικό
πρωτόκολλο
βασίζεται
στο γεγονός
ότι η Java μπορεί
να στείλει
αντικείμενα
τα
οποία
περιέχουν
κώδικα και
έχουν
συγκεκριμένες
τιμές
μεταβλητών /
κατάσταση μέσω
του δικτύου,
καθώς και ότι
ο κώδικας
μπορεί να
εκτελεστεί
σε
απομακρυσμένο
υπολογιστή.