H πρώτη έκδοσης της δικής σας εφαρμογής του Sleeping Barber θα έχει ανάλογη λειτουργικότητα με την ενδεικτική υλοποίηση που σας δίνεται σε jar μορφή (αρχείο SleepingBarberAppV1) .
Action 1
Εκτελέστε την έτοιμη εφαρμογή της πρώτης έκδοσης (αρχείο SleepingBarberAppV1) η οποία σας δίνεται σε jar μορφή για να κατανοήσετε τι ακριβώς σας ζητείτε να αναπτύξετε στην φάση αυτή.
Σχήμα 1
Το σχήμα 1 εμφανίζει ένα στιγμιότυπο της γραφικής διεπαφής κατά τον χρόνο εκτέλεσης της έτοιμης εφαρμογής SleepingBarberAppV1 παρόποια της οποίας σας ζητείται να αναπτύξετε στην φάση αυτή. Μπορείτε να διακρίνετε:
a) 5 στιγμιότυπα της κλάσης Button της βασικής βιβλιοθήκης. Tο καθένα από αυτά αναπαριστά στην γραφική διεπαφή την θέση στην οποία βρίσκετε το αντίστοιχο ανθρωπάκι κατά την διάρκεια της ζωής του, και
b) έναν πράσινο κύκλο που δείχνει την θέση στην οποία βρίσκεται ο κουρέας.
Το κάθε ανθρωπάκι έχει ένα id, ένα αριθμό δηλαδή από 1 έως 5, και το δικό του χρώμα. Τα στοιχεία αυτά εμφανίζει το αντίστοιχο button.
Στο σχήμα 1 το ανθρωπάκι Νο 4 εξυπηρετείται από τον κουρέα, το Νο 2 περιμένει στην αίθουσα αναμονής, τα Νο 0 και Νο 3 ετοιμάζονται να εισέλθουν στην αίθουσα αναμονής, ενώ το Νο 1 εκτελεί τις καθημερινές του δραστηριότητες και δεν έχει εκφράσει ακόμη την επιθυμία του να επισκεφθεί τον κουρέα.
Εκτελώντας την 1η έκδοση (SleepinBarberAppV1) θα παρατηρήσατε ότι σε κάποιες χρονικές στιγμές στην θέση κουρέματος βρίσκονται ταυτόχρονα περισσότερα από 1 ανθρωπάκια. Καθώς ο κουρέας μας δεν είναι εκπαιδευμένος να κουρεύει ταυτόχρονα 2 ή και 3 άτομα. Αυτό θα πρέπει να το διορθώσουμε στην 2η έκδοση. Στην φάση αυτή, στην πρώτη δηλαδή έκδοση της εφαρμογής, δεν θα ασχοληθούμε με τον περιορισμό αυτό.
Σας δίνετε η κλάση BarberGui (γραφική διεπαφή) σε bytecodes (αρχείο BarberGuiV1.zip ή αρχείο BarberGuiV1.jar). Στην περίπτωση του .zip αποσυμπιέστε και τοποθετήστε τα περιεχόμενα του στο ευρετήριο εργασίας σας. Ενημερώστε κατάλληλα το περιβάλλον ανάπτυξης σας για να αξιοποιήσετε στην εφαρμογή σας το .jar αρχείο. Οδηγίες αξιοποίησης της BarberGui.
Εσείς βέβαια μπορείτε, αν το επιθυμείτε, να κατασκευάσετε την δική σας γραφική διεπαφή
Action 2
Αναπτύξτε την δική σας πρώτη έκδοση της SleepingBarberApp.
Στην έκδοση αυτή σας συνιστώ να αναπαραστήσετε τον κουρέα με μια κοινή (παθητική) κλάση που έχει όμως την γνώση που απαιτείται για να κουρεύει. Με βάση αυτό αν ένα ανθρωπάκι θέλει να κουρευτεί θα αποστέλλει στον κουρέα το μήνυμα cutMyHair. Ο κουρέας μας θα αφιερώνει τόσο χρόνο στο κούρεμα όσο απαιτεί το κάθε ανθρωπάκι όσο δηλαδή προσδιορίζει η κατάλληλη μεταβλητή στιγμιότυπου της αντίστοιχης κλάσης (π.χ. Person or Weakling).
Α2.1. Αναγνωρίστε τα αντικείμενα τα οποία θα συνθέτουν την εφαρμογή μας. Δώστε το UML διάγραμμα κλάσεων.
Α2.2. Εντοπίσετε ποια από τα αντικείμενα που συνθέτουν την εφαρμογή μας πρέπει να είναι ενεργά (active) αντικείμενα, να έχουν δηλαδή το δικό τους νήμα εκτέλεσης (thread of execution). Ενημερώστε κατάλληλα το διάγραμμα κλάσεων. Δείτε την δική μας πρόταση για τα ενεργά αντικείμενα.
Α.2.3. Ορίστε με λεκτική περιγραφή:
α) την συμπεριφορά της κλάσης που αναπαριστά την εφαρμογή σας, και,
β) τη δομή και συμπεριφορά της κλάσης που αντιστοιχεί στα ανθρωπάκια μας. Φροντίστε να δώσετε την μέθοδο που περιγράφει τη συμπεριφορά των στιγμιοτύπων της κλάσης χρησιμοποιώντας όρους των δραστηριοτήτων που το στιγμιότυπο εκτελεί.
Α2.4. Δώστε σε Java την κλάση SleepingBarberAppV1 και την κλάση Barber. Δώστε το UML sequence diagram που περιγράφει την συμπεριφορά του στιγμιοτύπου της κλάσης Weakling (Person). Δώστε σε Java την αντίστοιχη κλάση.
Α2.5. Ολοκληρώστε και εκτελέστε την πρώτη σας αυτή έκδοση. Παρατηρήστε πως περισσότερα από δυο ανθρωπάκια μπορεί να βρίσκονται στην θέση κουρέματος ταυτόχρονα. Στην επόμενη έκδοση (έκδοση 2) θα δώσουμε λύση στο πρόβλημα αυτό.