Η άσκηση αποτελείται από μια σειρά από δραστηριότητες που έχουν στόχο την ανάπτυξη μιας εφαρμογής που θα εξομοιώνει την λειτουργία ενός Κουρείου. Το πρόβλημα, που είναι γνωστό στην βιβλιογραφία ως προβλήματος του Κοιμώμενου Κουρέα (Sleeping Barber), είναι ένα από τα πιο γνωστά προβλήματα που χρησιμοποιούνται ως μελέτη περίπτωσης στον ταυτόχρονο προγραμματισμό.
Για μια πρώτη επαφή με το πρόβλημα του Κοιμώμενου Κουρέα μπορείτε να ανατρέξετε στις ασκήσεις 10.10 και 10.11 του κεφαλαίου 10 του βιβλίου “Αντικειμενοστρεφής προγραμματισμός – Java”.
Χρόνος εκτέλεσης: Κατά την διάρκεια της μελέτης του κεφαλαίου 10 ή με την ολοκλήρωση του.
Κουρέας: Όταν τελειώσει με έναν πελάτη, τον συνοδεύει έξω και ελέγχει την αίθουσα αναμονής. Αν υπάρχει πελάτης τον συνοδεύει στην καρέκλα αλλιώς πηγαίνει να κοιμηθεί στην καρέκλα.
Πελάτης: Όταν μπαίνει στην αίθουσα αναμονής. Αν υπάρχουν άλλοι πελάτες κάθεται μαζί τους. Αν όχι ανοίγει την πόρτα να δεί αν ο κουρέας είναι απασχολημένος. Αν ...
Κουρέας: Όταν τελειώσει με έναν πελάτη, τον συνοδεύει έξω και ελέγχει την αίθουσα αναμονής. Αν υπάρχει πελάτης τον συνοδεύει στην καρέκλα αλλιώς πηγαίνει να κοιμηθεί στην αίθουσα αναμονής.
Πελάτης: Mπαίνει στην αίθουσα αναμονής. Αν υπάρχουν άλλοι πελάτες ή αν η αίθουσα είναι άδεια περιμένει τη σειρά του. Αν ο κουρέας κοιμάται στην αίθουσα αναμονής, ξύπνησε τον.
Στόχος της άσκησης είναι να αξιοποιήσετε τις κατασκευές της Java για να λύσετε ένα από τα γνωστά προβλήματα της βιβλιογραφίας στην περιοχή του ταυτόχρονου προγραμματισμού. Πιο συγκεκριμένα στόχος της άσκησης αυτής είναι να δημιουργήσουμε μαζί βήμα προς βήμα μία εφαρμογή που θα εξομοιώνει την λειτουργία ενός Κουρείου όπως αυτό περιγράφεται στο πρόβλημα του κοιμώμενου κουρέα.
Ακολουθώντας την αυξητική τεχνική ανάπτυξης (incremental development) θα αναπτύξουμε το πρόγραμμα σε διαδοχικές εκδόσεις.
Κάθε έκδοση περιλαμβάνει ένα σύνολο από δραστηριότητες που πρέπει να εκτελέσετε μόνοι σας. Βασίζεται στο αποτέλεσμα της προηγούμενης και είναι απαραίτητη για την επόμενη.
Σε κάθε δραστηριότητα σας δίνονται οδηγίες και βοήθεια ώστε να ξεπεράσετε τα δύσκολα σημεία.
Στο τέλος της άσκησης σας δίνονται ενδεικτικές απαντήσεις.
Στόχος
Ο στόχος της πρώτης αυτής φάσης της άσκησης είναι η ανάπτυξη της πρώτη έκδοσης της δικής σας εφαρμογής του Sleeping Barber που θα έχει ανάλογη λειτουργικότητα με την ενδεικτική υλοποίηση που σας δίνεται σε jar μορφή (αρχείο SleepingBarberAppV1) .
Αναλυτικές οδηγίες για την ανάπτυξη της δικής σας SleepingBarberAppV1.
Στόχος
Ο στόχος της δεύτερης αυτής φάσης της άσκησης είναι η ανάπτυξη της δεύτερης έκδοσης εφαρμογής του Sleeping Barber (SleepingBarberAppV2) η οποία θα ικανοποιεί τον περιορισμό που ορίζει πως ο κουρέας δεν μπορεί να κουρεύει ταυτόχρονα δύο ή παραπάνω πελάτες του.
Περιορισμός 2ης φάσης: ο κουρέας δεν μπορεί να κουρεύει ταυτόχρονα δύο ή παραπάνω πελάτες του.
Αναλυτικές οδηγίες για την ανάπτυξη της δικής σας SleepingBarberAppV2.
Στόχος
Ο στόχος της τρίτης αυτής φάσης της άσκησης είναι η ανάπτυξη της τρίτης έκδοσης της εφαρμογής του Sleeping Barber (SleepingBarberAppV3) η οποία θα ικανοποιεί τον περιορισμό που τίθεται από τα περιοριστικά μέτρα λόγω corona virus σύμφωνα με τον οποίο στην αίθουσα αναμονής δεν μπορεί να βρίσκονται περισσότεροι άνθρωποι από όσους αντιστοιχούν στα τετραγωνικά μέτρα του χώρου. Το κουρείο σας έχει τετραγωνικά τουλάχιστο όσα απαιτούνται για 2 άτομα.
Περιορισμός 3ης φάσης:
Στην αίθουσα αναμονής δεν μπορεί να βρίσκονται περισσότεροι άνθρωποι από όσους αντιστοιχούν στα τετραγωνικά μέτρα του χώρου
Αναλυτικές οδηγίες για την ανάπτυξη της δικής σας SleepingBarberAppV3.
Στόχος
Ο στόχος της τέταρτης αυτής φάσης της άσκησης είναι η ανάπτυξη της τέταρτης έκδοσης της εφαρμογής του Sleeping Barber (SleepingBarberAppV4) η οποία θα μοντελοποιεί τον κουρέα ως ενεργό αντικείμενο.
Αναλυτικές οδηγίες για την ανάπτυξη της δικής σας SleepingBarberAppV4.