Δευτέρα 13 Φεβρουαρίου 2012

Common Classes


Πριν ξεκινήσουμε την περιγραφή των διαφόρων συστατικών της αρχιτεκτονικής του συστήματος θα αναφερθούμε σε κλάσεις οι οποίες είναι κοινές στον clientserver και συμβάλουν στην μεταξύ τους επικοινωνία.

·         Η κλάση PointΤ περιγράφει ένα σημείο στο παγκόσμοιο σύστημα συντεταγμένων. Αποτελείται από δύο μεταβλητές τύπου double  οι οποίες απεικονίζουν το γεωγραφικό μήκος και πλάτος του αντικειμένου (latitude και longitude). Επίσης περιέχει μεθόδους για τον υπολογισμό της απόστασης μεταξύ του ιδίου του αντικειμένου και ενός άλλου σημείου (getDistance(PointT p), όπως και τον έλεγχο για την ομοιότητα δύο σημείων (isSamePoint(PointT p).

·         Η κλάση Token αντιπροσωπεύει ένα μέρος της διαδρομής απεικονιζόμενο με δύο σημεία του παγκόσμιου συστήματος συντεταγμένων, δηλαδή δύο αντικείμενα PointΤ. Επίσης περιέχει δεδομένα: για την χρονική στιγμή την οποία κάποιος χρήστης βρέθηκε στο αρχικό σημείο του Token (startingTime), την χρονική διάρκεια σε millisecond που χρειάστηκε ο χρήστης για να διανύσει το Token (duration) καθώς και την απόσταση του Token εκφρασμένη σε μέτρα (distance). Η κλάση αυτή περιέχει τρεις διαφορετικούς constructors που εφαρμόζονται ανάλογα με την πολιτική που ακολουθείται (αν το αντικείμενο δημιουργείται την χρονική στιγμή που βρίσκεται στην αρχή του Token ο χρήστης ή την χρονική στιγμή που βρίσκεται στο τέλος του Token,  ή αν δημιουργηθεί ένα Token με ελειπής πληροφορίες). Τέλος περιέχει πλήθος μεθόδων για τον υπολογισμό γεωμετρικών και μή στοιχείων. Αναλυτικότερα, Η μέθοδος isSameToken(Token t) ελέγχει αν τα σημεία αρχής και τέλους του Token συμπίπτουν με τα σημεία αρχής και τέλους ενός διαφορετικού δεδομένου Token. Η μέθοδος isSameToken(Token t, int meters) έχει την ίδια λειτουργία με την παραπάνω μέθοδο, με την μόνη διαφορά ότι για τον έλεγχο των δύο Tokens μπορεί να υπάρξει μια απόκλιση εκφρασμένη σε μέτρα μεταξύ των δύο Tokens. Η μέθοδος isOnTheLine(PointT p, double div) επιστρέφει true αν το δεδομένο σημείο PointT βρίσκεται στην νοητή γραμμή του Token που εκφράζει το συγκεκριμένο αντικείμενο (δίνεται ως όρισμα επίσης παράγοντας απόκλισης του σημείο από την γραμμή). Η μέθοδος isPartOfLine(PointT p, double div) επιστρέφει true αν το δεδομένο σημείο PointT ανήκει στο ευθύγραμμο τμήμα του Token που εκφράζει το συγκεκριμένο αντικείμενο (και εδώ δίνεται παράγοντας απόκλισης). Η μέθοδος estimateTime(Token tok) υπολογίζει προσσεγγιστικά τον χρόνο που χρειάζεται για να διανιστεί το Token δεδομένου ενός άλλου Token χρησιμοποιώντας την απλή μέθοδο των τριών.

·         Η κλάση TokenList περιγράφει μια διαδρομή. Η διαδρομή αυτή αποτελείται από μικρότερα τμήματα διαδρομών οι οποίες αποτελούνται από Tokens. Επίσης η κλάση αυτή υλοποιεί λειτουργίες αποθήκευσης και ανάκτησης του αντικειμένου σε αρχείο και λειτουργία συντήρησης της λίστας. Συγκεκριμένα η κλάση TokenList περιλαμβάνει: μια λίστα από Tokens (ArrayList<Token> list), καθώς και μεταβλητές για την αποθήκευση υπολογισμένου χρόνου διαδρομής από το σύστημα  (estimatedTime) και υπολογισμένου χρόνου διαδρομής από το Google Maps (approximateTime), μεταβλητή για την αποθήκευση του μήκους της διαδρομής σε μέτρα (distance),  μεταβλητή για το όνομα του αρχείου αποθήκευσης της λίστας (storeList), χρόνο ζωής των Tokens στην λίστα (ttl) , λίστα για τις οδηγίες της διαδρομής που επιστρέφονται από το Google Maps (instructions) και οι παρακάτω σταθερές που δηλώνουν τον τύπο της διαδρομής
o   OTHERTLIST: Λίστα άγνωστου τύπου
o   CLIENTLIST:   Λίστα με πληροφορίες και Tokens που σύλλεξε ένας χρήστης για αποστολή στον server
o   GOOGLELIST: Λίστα η οποία περιέχει Tokens που επέστρεψε το Google Maps για μια συγκεκριμένη διαδρομή
o   SERVERLIST: Λίστα που παράγει ο server για την απάντηση σε ερωτήματα της βέλτιστης διαδρομής από τους clients.

Η κλάση TokenList περιλαμβάνει μεθόδους για την εκκαθάριση παλιών εγγραφών – Tokens από την λίστα, όπου ένα διαφορετικό thread από το κύριο thread της εφαρμογής αναστέλλεται και σε σταθερή χρονική περίοδο αφυπνίζεται και καλεί την μέθοδο cleanList() η οποία διαγράφει παλιές εγγραφές από την λίστα. Επίσης, η κλάση TokenList περιλαμβάνει μεθόδους για την αποθήκευση των Tokens της λίστας σε αρχείο saveList(String file), μεθόδους για την ανάκτηση μια λίστας από αρχείο loadList(String file). Για την αποθήκευση των Tokens σε αρχείο χρησιμοποιείται η κλάση Reader η οποία θεωρείται βοηθητική κλάση και δεν θα περιγραφεί.

Ορισμένες από τις παραπάνω λειτουργίες των κλάσεων δεν χρησιμοποιούνται στην τελική παραδοτέα έκδοση του συστήματος. Οι λειτουργίες αυτές υλοποιήθηκαν για την βοήθεια στην ανάπτυξη του συστήματος, για λόγους debugging, ή επειδή η υλοποίησή τους κατά τα αρχικά στάδια ανάπτυξης του συστήματος είχε κριθεί αναγκαία.

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου