ΗΥ252 - Οντοκεντρικός Προγραμματισμός Project Εαρινού εξαμήνου 2002 Περιγραφή Παραδοταίων Περιγραφή --------- To Graphic Editor είναι ένα πρόγραμμα ζωγραφικής με πολλά κοινά στοιχεία με το πρόγραμμα xfig στο Unix. Επιτρέπει σχεδίαση και χειρισμό απλών σχημάτων όπως ευθείες, κύκλους, τετράγωνα κλπ. Λειτουργικότητα Με το Graphic Editor ο χρήστης μπορεί να σχεδιάσει απλά γεωμετρικά σχήματα, να τα μετακινήσει, να τα αντιγράψει ή να τα σβήσει. Ακόμα, πολλά σχήματα θα μπορούν να ομαδοποιηθούν σε ένα. Η εφαρμογή θα δίνει τη δυνατότητα undelete, δηλαδή αναίρεσης της διαγραφής κάποιου σχήματος. Ακόμα, ο χρήστης θα μπορεί να αποθηκεύσει το σχέδιο του σε τέτοια μορφή τέτοια ώστε να μπορεί να επαναφέρει την κατάσταση του σχεδίου στο μέλλον. Περιγραφή Η εφαρμογή αποτελείται από μια μπάρα εργαλείων (toolbar) και μια σχεδιαστική περιοχή (canvas). Στην μπάρα εργαλείων ο χρήστης μπορεί να επιλέξει τη λειτουργία που θέλει να επιτελέσει (σχεδίαση, σβήσιμο, κλπ) καθώς επίσης το σχήμα που θέλει να ζωγραφίσει. Μετά, με κατάλληλη διαδικασία για κάθε λειτουργία και σχήμα εκτελεί τη λειτουργία αυτή. Ο τρόπος που θα γίνεται η επιλογή λειτουργίας και η διαδικασία σχεδίασης επαφίεται στις ομάδες να καθοριστεί, αλλά θα πρέπει να τεκμηριωθεί στην αναφορά. Για παράδειγμα, για να ζωγραφίσει μια ευθεία γραμμή θα μπορούσε ο χρήστης να επιλέγει την λειτουργία "δημιουργία ευθείας" από την μπάρα εργαλείων και κατόπιν με δυο κλικ από το ποντίκι πάνω στη σχεδιαστική περιοχή να καθορίζει τα άκρα της ευθείας. Αναλυτική περιγραφή Οι λειτουργίες που θα υποστηρίζει η εφαρμογή θα είναι : - δημιουργία νέου σχήματος Τα σχήματα που θα υποστηρίζονται θα είναι : ευθεία, κύκλος, ορθογώνιο, τετράγωνο, αστεράκι (πεντάλφα χωρίς τις εσωτερικές γραμμές). Η σχεδίασή σας 8α πρέπει να είναι τέτοια ώστε να επιτρέπει εύκολη προσθήκη και άλλων σχημάτων, απλών ή και πιο σύνθετων. - αντιγραφή Ο χρήστης θα μπορεί να επιλέξει κάποιο σχήμα -απλό ή σύνθετο- και να δημιουργήσει ένα καινούριο, όμοιο με αυτό. - μετακίνηση Ο χρήστης μπορεί να επιλέξει κάποιο σχήμα και να το μετακινήσει σε κάποιο άλλο σημείο του σχεδιαστικού canva. - σβήσιμο/επαναφορά Ο χρήστης μπορεί να επιλέξει κάποιο σχήμα και να το σβήσει(delete). Τα σχήματα που θα σβήνονται θα πρέπει η εφαρμογή να τα κρατάει σε κατάλληλες δομές έτσι ώστε να μπορούν να ανακληθούν (undelete). - ομαδοποίηση Ο χρήστης θα μπορεί να επιλέξει πολλά σχήματα και να τα ομαδοποιήσει σε ένα σύνθετο σχήμα, το οποίο πλέον θα μπορεί να διαχειρίζεται σαν ΕΝΑ σχήμα για τις πράξεις {αντιγραφή, μετακίνηση, σβήσιμο, ομαδοποίηση}. - αναίρεση ομαδοποίησης Ο χρήστης θα μπορεί να επιλέξει ένα σύνθετο σχήμα και να το διασπάσει στα σχήματα τα οποία το συνέθεταν. - αποθήκευση Ο χρήστης θα μπορεί να αποθηκεύσει τα σχήματα που έχει ζωγραφίσει σε ένα αρχείο, έτσι ώστε να μπορεί να τα επανακτήσει. το format του αρχείου θα το καθορίσει κάθε ομάδα μόνη της και θα πρέπει να τεκμηριωθεί στην αναφορά. (περιορισμός: ΔΕΝ επιτρέπεται να χρησιμοποιηθεί ο μηχανισμός serialization της Java και το αρχείο πρέπει να είναι plain ASCII text και όχι binary). (ΠΡΟΑΙΡΕΤΙΚΑ 1: θα μπορεί να αποθηκεύσει και σε μορφή .jpg ή .gif) (ΠΡΟΑΙΡΕΤΙΚΑ 2: θα μπορεί να αποθηκεύσει και τα σβησμένα σχήματα) - άνοιγμα αρχείου Ο χρήστης θα μπορεί να επιλέξει κάποιο αρχείο το οποίο έχει δημιουργηθεί μέσω της εφαρμογής και να "φορτώσει" σχήματα στην εφαρμογή. Για όλες τις λειτουργίες που υποστηρίζει η εφαρμογή, θα πρέπει να καταγράψετε λεπτομερώς στην αναφορά σας τα βήματα που θα πρέπει να ακολουθεί ο χρήστης για να πραγματοποιήσει τη λειτουργία αυτή (users manual). Γενικές παρατηρήσεις Για την υλοποίηση θα χρησιμοποιηθεί η γλώσσα Java. Για την υλοποίηση δεν χρειάζονται άλλες βιβλιοθήκες (packages) εκτός από αυτές που παρέχει η Java και ως εκ τούτου δεν επιτρέπεται χρήση άλλων βιβλιοθηκών εκτός από τα standard packages της Java. Παρόλο που η ανάπτυξη της εφαρμογής μπορεί να γίνει σε οποιαδήποτε πλατφόρμα ανάπτυξης, η δοκιμή και παρουσίαση θα γίνει στα εργαστήρια του τμήματος οπότε οι ομάδες είναι υπεύθυνες να εξασφαλίσουν ότι η εφαρμογή τους θα μπορεί να εκτελεστεί σε αυτά. Το project χωρίζεται σε 2 φάσεις: Φάση 1η - Σχεδιασμός (παράδοση 19/4/2002) ------------------------------------------ Σε αυτή τη φάση πρέπει να γίνει ο σχεδιασμός της εφαρμογής βάσει των ιδεών και των αρχών που έχετε διδαχθεί. Αποτέλεσμα του σχεδιασμού θα είναι να καθοριστούν οι οντότητες, τα χαρακτηριστικά τους και η συμπεριφορά τους, οι οποίες θα αποτελέσουν δομικά στοιχεία για την υλοποίηση της ζητούμενης εφαρμογής. Παραδοταία σε αυτή τη φάση είναι : - μια αναφορά η οποία θα περιγράφει τα παραπάνω στοιχεία και θα παρουσιάζει το σχέδιο υλοποίησης του project έτσι ώστε να είναι έτοιμο το πέρασμα στην επόμενη φάση. - σε μορφή πηγαίου κώδικα τα Java interfaces και classes συνοδευόμενα με τα απαραίτητα javadoc σχόλια, τα οποία θα χρησιμοποιηθούν ως βάση για την υλοποίηση (φάση 2) Το αποτέλεσμα αυτής της φάσης θα είναι να καθοριστεί επ'ακριβώς τί θα γίνει και να σκιαγραφηθεί σε επίπεδο classes και interfaces το πώς θα γίνει. Επιγραμματικά, οι σημαντικότερες εργασίες που πρέπει να γίνουν σε αυτή τη φάση είναι: - Αναγνώριση των κλάσεων. Ποιά είναι τα χαρακτηριστικά του συστήματος και πώς μοντελοποιούνται. - Αναγνώριση του interface κάθε κλάσης. - Εύρεση των χαρακτηριστικών και των ιδιοτήτων κάθε κλάσης. - Τί δεδομένα πρέπει να κρατάει κάθε κλάση. - Μεθόδους που υποστηρίζει κάθε αντικείμενο. - Εύρεση των σχέσεων των αντικειμένων. Πώς επικοινωνούν (εάν επικοινωνούν) μεταξύ τους. - Συμπεριφορά (behavior) των αντικειμένων. - Αναγνώριση των ευθυνών κάθε κλάσης. Τι ενέργειες πρέπει να κάνει κάθε αντικείμενο. - Τι ελέγχους πρέπει να κάνουν στα δεδομένα (pre/post conditions) τα αντικείμενα, μέσω των μεθόδων τους. - interface των κλάσεων. υπογραφές (signatures) των μεθόδων που υποστηρίζει. συναρτήσεις εγκατάστασης (constructors), συναρτήσεις επόπτες (observers), συναρτήσεις μετατροπής (modifiers). Παρατήρηση: Για να μπορέσετε σε αυτή τη φάση να καθορίσετε όσο το δυνατό πληρέστερα τα παραπάνω και να καταλήξετε σε μια ικανοποιητική σχεδίαση, θα σας βοηθούσε αρκετά (αλλά δεν απαιτείται) να υλοποιήσετε ένα πρωτότυπο (prototype) της εφαρμογής, πάνω στο οποίο θα μπορούσατε μετέπειτα να βασιστείτε για την τελική υλοποίηση. Φάση 2η - Υλοποίηση (παράδοση 17/5/2002) ----------------------------------------- Σε αυτή τη φάση πρέπει να γίνει η υλοποίηση της εφαρμογής, βάσει της σχεδίασης που έχει προηγηθεί (φάση 1). Μολονότι δεν επιβάλλεται να χρησιμοποιηθεί αυτούσια η σχεδίαση της 1ης φάσης, καθότι κάποιες σχεδιαστικές επιλογές αποδεικνύονται στην πορεία άκυρες και χρειάζονται αναθεώρηση, εντούτοις η τελική βαθμολογία θα εξαρτηθεί και από το πόσο απείχε η τελική υλοποίηση από την αρχική σχεδίαση. Σε αυτή τη φάση, παραδοταία είναι : - ο πηγαίος κώδικας που υλοποιεί την ζητούμενη εφαρμογή, - αναλυτικές οδηγίες πώς μεταγλωτίζεται και πώς τρέχει το πρόγραμμα (README, Makefile) - αναφορά, στην οποία θα αναλύεται : * η -τελική- σχεδίαση της εφαρμογής, * ποιές αλλαγές έγιναν σε σχέση με τη σχεδίαση της 1ης φάσης (και γιατί), * οι αλγόριθμοι που χρησιμοποιήθηκαν, * τα προβλήματα που αντιμετωπίστηκαν, * οι σχεδιαστικές ή προγραμματιστικές αποφάσεις που λήφθηκαν και πώς αυτό αντανακλά στον τελικό χρήστη (πχ ευκολία/δυσκολία χειρισμού), * πιθανές επεκτάσεις (πχ καινούριες λειτουργίες) και πώς θα μπορούσαν να γίνουν με την παρούσα σχεδίαση, * ποιες αλλαγές θα έπρεπε να γίνουν στην υλοποίηση ή/και την σχεδίαση για να υποστηρίζονται επιπλέον λειτουργίες ή σχήματα. * ... γενικά ό,τι άλλο κρίνετε απαραίτητο να αναφέρετε. Βαθμολογία εργασίας ------------------- Για την βαθμολογία της εργασίας θα συνεκτιμηθούν - εάν (και πόσο) η σχεδίαση της 1ης φάσης απείχε από την τελική υλοποίηση - εάν (και πόσο) η σχεδίαση της εφαρμογής εφαρμόζει τις έννοιες και τεχνικές που διδάχθηκαν στο μάθημα - εάν (και πόσο) υλοποιήθηκαν οι ζητούμενες λειτουργίες της εφαρμογής - η τελική αναφορά, η οποία θα καταγράφει και θα τεκμηριώνει την σχεδίαση και υλοποίηση της εφαρμογής Για διευκρινήσεις σχετικά με την παραπάνω εργασία, μπορείτε να στέλνετε ηλεκτρονικά μηνύματα με απορίες στη λίστα του μαθήματος .