Download as pdf or txt
Download as pdf or txt
You are on page 1of 21

ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»

ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

ΔΕΥΤΕΡΗ ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ


- ΕΝΔΕΙΚΤΙΚΗ ΑΠΑΝΤΗΣΗ -

ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2023-2024

Αναλυτική Αξιολόγηση:
Άσκηση Περιγραφή Ποσοστό % Βαθμός

1.Α Σύστημα 2Δ παρακολούθησης αγώνων ποδοσφαίρου. Δημιουργία 15


Διαγράμματος Ακολουθίας

1.Β. Σύστημα 2Δ παρακολούθησης αγώνων ποδοσφαίρου. Δημιουργία 10


Διαγράμματος Κλάσεων

2.A Σύστημα UniLibrary: Κληρονομικότητα Κλάσεων, Υποσκέλιση (override)


30
Μεθόδων και Υλοποίηση Διεπαφών

2.B Σύστημα UniLibrary: Υλοποίηση Διαδικασιών 10

2.Γ Σύστημα UniLibrary: Υλοποίηση Μεθόδου Αποθήκευσης σε Αρχείο 10

2.Δ Σύστημα UniLibrary: Υλοποίηση Προσομοίωσης 15

3. Συμμόρφωση με τους Κανόνες Συγγραφής 10

Σύνολο: 100

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 1


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

Εκφώνηση 1ης Άσκησης


Σύστημα 2Δ παρακολούθησης αγώνων ποδοσφαίρου
Έστω ένα σύστημα καταγραφής στατιστικών και δισδιάστατη παρακολούθησης αγώνων ποδοσφαίρου. Το
σύστημα παρέχει πρόσβαση σε δυο ήδη χρηστών: (Α) τον φίλαθλο και (Β) τον διαχειριστή. Ο φίλαθλος έχει τη
δυνατότητα live παρακολούθησης αγώνων ποδοσφαίρου σε μια 2Δ αναπαράσταση ενός αγώνα ποδοσφαίρου και
ταυτόχρονα να παρακολουθεί τα στατιστικά των παιχτών και των ομάδων. Για να καταστεί αυτό εφικτό, υπάλληλοι
της εταιρίας που παρέχει την υπηρεσία, με τον ρόλο του διαχειριστή οφείλουν να βρίσκονται στα γήπεδα που
διενεργούνται οι αγώνες και να καταγράφουν όλες τις ενέργειες των αθλητών σε πραγματικό χρόνο, μέσω της ΠΧ
«Καταγραφή Ενεργειών Αθλητών σε Πραγματικό Χρόνο».

Λεκτική Περιγραφή Περίπτωσης Χρήσης «Καταγραφή Ενεργειών Αθλητών σε Πραγματικό Χρόνο»


Όνομα Π.Χ.: Καταγραφή Ενεργειών Αθλητών σε Πραγματικό Χρόνο
Χειριστής: Διαχειριστής
Σύντομη Περιγραφή:
Η Π.Χ. εκκινεί με την έναρξη ενός αγώνα ποδοσφαίρου. Αρχικά, παρουσιάζεται στον χρήστη μια οπτική 2Δ
αναπαράσταση ενός γηπέδου ποδοσφαίρου, χωρισμένη σε 32 τμήματα. Η ΠΧ «τρέχει» συνεχώς, για όλη τη
διάρκεια του αγώνα. Σε κάθε ενέργεια κάποιου ποδοσφαιριστή, ο χρήστης επιλέγει το σημείο του γηπέδου
στο οποίο βρίσκεται η μπάλα, και στη συνέχεια επιλέγει αρχικά την ομάδα που έχει τη κατοχή, και τον παίχτη
που έχει την κατοχή (το σύστημα εμφανίζει ως default επιλογή την ομάδα και τον παίχτη με την προηγούμενη
κατοχή). Όταν κάποιος παίχτης κάνει κάποια ειδική ενέργεια (πλην της μετακίνησης με την μπάλα)—π.χ.
πάσα, σουτ, κλέψιμο, ασίστ, γκολ, απόκρουση, ο διαχειριστής επιλέγει αρχικά την ενέργεια και στη συνέχεια
τον παίχτη που την έκανε. Όταν πρόκειται για επιθετική ενέργεια—πάσα, σουτ, ασίστ, γκολ—το σύστημα
εμφανίζει σαν default επιλογή τον παίχτη που είχε τη μπάλα στη προηγούμενη ενέργεια. Όταν πρόκειται για
αμυντική ενέργεια (κλέψιμο και απόκρουση) το σύστημα εμφανίζει μόνο τους παίχτες της αντίπαλης (από
αυτή με την κατοχή μπάλας) ομάδα. Κατόπιν της εισόδου μιας ειδικής ενέργειας ή ενέργειας μετακίνησης,
το σύστημα αποθηκεύει την ενέργεια στον buffer από ενέργειες που θα αναπαρασταθούν στο GUI (ΠΧ
«Ανασχεδίαση 2Δ γηπέδου») και αποθηκεύει τα στατιστικά στη βάση δεδομένων ΠΧ «Αποθήκευση
Στατιστικών».
Ροή Γεγονότων
Βασική Ροή:
1 Ο χρήστης επιλέγει στην Αρχική Οθόνη τη «Εκκίνηση Καταγραφής Αγώνα».
2 Το σύστημα δείχνει την κεντρική οθόνη καταγραφής γεγονότων
3 Ο χρήστης επιλέγει ένα σημείο στον αγωνιστικό χώρο. [Ενναλακτική Ροή Α]
4 Το σύστημα αποθηκεύει τη θέση της μπάλας στον αγωνιστικό χώρο ως θέση τρέχουσας ενέργειας.
[Εναλλακτική Ροή Β]
5 Ο χρήστης επιλέγει την ομάδα με την κατοχή και το όνομα του παίχτη
6 Το σύστημα αποθηκεύει τον κάτοχο της μπάλας στη τρέχουσα ενέργεια. Το σύστημα ελέγχει την
επιλεγμένη θέση.
7 Η θέση είναι πίσω από το κέντρο. Το σύστημα καλεί την ΠΧ «Ανασχεδίαση 2Δ γηπέδου» με παράμετρο
«Κατοχή από [ΟΝΟΜΑ ΠΑΙΧΤΗ]» [Εναλλακτική Ροή Γ] [Εναλλακτική Ροή Δ]
8 Το σύστημα καλεί την ΠΧ «Αποθήκευση Στατιστικών» με παράμετρο «Κατοχή από [ΟΜΑΔΑ]»
9 Η ΠΧ επιστρέφει στο βήμα 2 της Βασικής Ροής

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 2


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

Εναλλακτικές Ροές
Εναλλακτική Ροή Α:
3α1 Ο χρήστης επιλέγει μια ειδική ενέργεια (πάσα, σουτ, κλέψιμο, ασίστ, γκολ, απόκρουση).
3α2 Το σύστημα αποθηκεύει τη θέση της ειδικής ενέργειας ως θέση τρέχουσας ενέργειας. [Εναλλακτική
Ροή Β]
3α3 Ο χρήστης επιλέγει την ομάδα με την κατοχή και το όνομα του παίχτη
3α4 Το σύστημα αποθηκεύει τον κάτοχο της μπάλας στη τρέχουσα ενέργεια.
3α5 Το σύστημα καλεί την ΠΧ «Ανασχεδίαση 2Δ γηπέδου» με παράμετρο «[ΕΝΕΡΓΕΙΑ] από [ΟΝΟΜΑ
ΠΑΙΧΤΗ]»
3α6 Το σύστημα καλεί την ΠΧ «Αποθήκευση Στατιστικών» με παράμετρο «[ΕΝΕΡΓΕΙΑ]από [ΟΜΑΔΑ]»
Εναλλακτική Ροή Β:
4α1 Η επιλεγμένη θέση βρίσκεται εκτός του 2Δ γηπέδου.
4α2 Το σύστημα δείχνει μήνυμα λάθους και επιστρέφει στο βήμα 2 της βασικής ροής.
Εναλλακτική Ροή Γ:
7α1 Η θέση είναι πίσω από τελευταίο 3ο του γηπέδου. Το σύστημα καλεί την ΠΧ «Ανασχεδίαση 2Δ
γηπέδου» με παράμετρο «Επίθεση από [ΟΝΟΜΑ ΠΑΙΧΤΗ]»
7α2 Το σύστημα καλεί την ΠΧ «Αποθήκευση Στατιστικών» με παράμετρο «Επίθεση από [ΟΜΑΔΑ]»
7α3 Η ΠΧ επιστρέφει στο βήμα 2 της Βασικής Ροής
Εναλλακτική Ροή Δ:
7β1 Η θέση είναι στο τελευταίο 3ο του γηπέδου. Το σύστημα καλεί την ΠΧ «Ανασχεδίαση 2Δ γηπέδου»
με παράμετρο «Επικίνδυνη Επίθεση από [ΟΝΟΜΑ ΠΑΙΧΤΗ]»
7β2 Το σύστημα καλεί την ΠΧ «Αποθήκευση Στατιστικών» με παράμετρο «Επικίνδυνη Επίθεση από
[ΟΜΑΔΑ]»
7β3 Η ΠΧ επιστρέφει στο βήμα 2 της Βασικής Ροής

Ερώτημα 1.Α – Δημιουργία Διαγράμματος Ακολουθίας


Καλείστε να δημιουργήσετε το διάγραμμα ακολουθίας για την Π.Χ. «Καταγραφή Ενεργειών Αθλητών σε
Πραγματικό Χρόνο», απεικονίζοντας τη βασική ροή και τις 4 εναλλακτικές ροές που διαθέτει.
Τεκμηριώστε σύντομα τις επιλογές σας με μορφή πίνακα, επεξηγώντας σε κάθε γραμμή του πίνακα τον τρόπο που
απεικονίσατε στο διάγραμμα ακολουθίας κάθε ένα από τα βήματα της υπό εξέταση περίπτωσης χρήσης.
Σημειώσεις:
1. Για απλότητα στο διάγραμμα μην αναπαραστήσετε τα βήματα «Η ΠΧ επιστρέφει στο βήμα ΧΧ της Βασικής
Ροής», για την αποφυγή της χρήσης πολλαπλών loop fragments, που θα δυσκολέψουν την αναγνωσιμότητα του
διαγράμματος.
2. Για την αναπαράσταση της χρήσης δυναμικού πολυμορφισμού, δηλαδή για την απεικόνιση της κλήσης σε
αφηρημένη (abstract) μέθοδο μιας υπερκλάσης, η οποία κατά το χρόνο εκτέλεσης (run-time) θα οδηγήσει στην
εκτέλεση της αντίστοιχης μη αφηρημένης (concrete) υλοποίησης της μεθόδου σε κάποια από τις υποκλάσεις,
εμφανίστε μόνο την κλήση στην υπερκλάση (όπως θα γινόταν και στον κώδικα). Η εύρεση της υπεύθυνης
υποκλάσης για την εκτέλεση της λειτουργίας γίνεται αυτόματα από το JRE και συνεπώς δεν είναι μέρος του
διαγράμματος ακολουθίας.
(Σύνολο: 15 μονάδες)

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 3


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

Μαθησιακά Αποτελέσματα
Στην Άσκηση 1.A. θα σας δοθεί η δυνατότητα να κατανοήσετε την κατασκευή του «Διαγράμματος Ακολουθίας».
Πιο συγκεκριμένα θα μπορέσετε:
• να περιγράψετε το Διάγραμμα Ακολουθίας,
• να περιγράψετε τα στοιχεία που αυτό περιλαμβάνει,
• να σχεδιάσετε τα σύμβολα που αυτό περιλαμβάνει,
• να αντιστοιχίσετε τα στοιχεία με τα σύμβολα που αυτό περιλαμβάνει,
• να συνδέσετε τη λειτουργικότητα του κάθε συμβάντος με την έννοια της ιχνηλασιμότητας.

Απάντηση 1ης Άσκησης / Ερώτημα Α

Διάγραμμα Ακολουθίας:

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 4


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

Τεκμηρίωση Επιλογών:

Βήμα Π.Χ. Απεικόνιση στο Διάγραμμα Ακολουθίας


Βασική Ροή

1 Ο χρήστης επιλέγει στην Αρχική Οθόνη τη Μήνυμα για την έναρξη της καταγραφής του
«Εκκίνηση Καταγραφής Αγώνα». αγώνα

2 Το σύστημα δείχνει την κεντρική οθόνη Μήνυμα 1.1 στο διάγραμμα ακολουθίας
καταγραφής γεγονότων

3 Ο χρήστης επιλέγει ένα σημείο στον αγωνιστικό Μήνυμα 2 στο διάγραμμα ακολουθίας
χώρο. [Ενναλακτική Ροή Α]

4 Το σύστημα αποθηκεύει τη θέση της μπάλας στον Μήνυμα 2.1 στο διάγραμμα ακολουθίας. Στο
αγωνιστικό χώρο ως θέση τρέχουσας ενέργειας. σημείο αυτό δημιουργείται ένα αντικείμενο
[Εναλλακτική Ροή Β] curPosition. Για τον λόγο αυτό, επειδή το μήνυμα
είναι τύπου create, η ακμή είναι με διακεκομμένη
γραμμή.

5 Ο χρήστης επιλέγει την ομάδα με την κατοχή και Μήνυμα 3 στο διάγραμμα ακολουθίας
το όνομα του παίχτη

6 Το σύστημα αποθηκεύει τον κάτοχο της μπάλας Το σύστημα βρίσκει τον παίχτη της ομάδας
στη τρέχουσα ενέργεια. Το σύστημα ελέγχει την (findPayer) που είναι κάτοχος της μπάλας
επιλεγμένη θέση. (μήνυμα 3.1) και επιστρέφει τα στοιχεία του
παίκτη (μήνυμα 3.2).
Στη συνέχεια το σύστημα αξιολογεί το σημείο
που βρίσκεται ο παίκτης ώστε να βρεθεί η θέση
στο γήπεδο (defensive, midfield, offensive)
(μήνυμα 3.3).

7 Η θέση είναι πίσω από το κέντρο. Το σύστημα Μηνύματα 3.4 και 4.4 - 4.4.1 στο διάγραμμα
καλεί την ΠΧ «Ανασχεδίαση 2Δ γηπέδου» με ακολουθίας. Η κλήση της μεθόδου redraw
παράμετρο «Κατοχή από [ΟΝΟΜΑ ΠΑΙΧΤΗ]» θεωρείτε ως το σημείο εκκίνησης της ΠΧ.
[Εναλλακτική Ροή Γ] [Εναλλακτική Ροή Δ] Στο διάγραμμα εναλλακτικά θα μπορούσε να
απεικονιστεί και ως κλήση σε ΠΧ αντί για μέθοδο.

8 Το σύστημα καλεί την ΠΧ «Αποθήκευση Μήνυμα 4.4.2 στο διάγραμμα ακολουθίας.


Στατιστικών» με παράμετρο «Κατοχή από Ομοίως, η κλήση της μεθόδου updateStats
[ΟΜΑΔΑ]» θεωρείτε ως το σημείο εκκίνησης της ΠΧ.
Στο διάγραμμα εναλλακτικά θα μπορούσε να
απεικονιστεί και ως κλήση σε ΠΧ αντί για μέθοδο.

9 Η ΠΧ επιστρέφει στο βήμα 2 της Βασικής Ροής Με βάση την εκφώνηση δεν το αναπαριστούμε

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 5


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

Εναλλακτικές Ροές
Εναλλακτική Ροή Α:
3α1 Ο χρήστης επιλέγει μια ειδική ενέργεια (πάσα, Μήνυμα 4 στο διάγραμμα ακολουθίας
σουτ, κλέψιμο, ασίστ, γκολ, απόκρουση).
3α2 Το σύστημα αποθηκεύει τη θέση της ειδικής Μήνυμα 4.3 στο διάγραμμα ακολουθίας.
ενέργειας ως θέση τρέχουσας ενέργειας. Παρατηρούμε μια μικρή διαφορά στη σειρά των
[Εναλλακτική Ροή Β] μηνυμάτων σε σχέση με την ΠΧ. Αυτό συμβαίνει
συχνά διότι οι ΠΧ αναφέρονται σε απαιτήσεις,
ενώ το διάγραμμα ακολουθίας στο σχεδιασμό
του συστήματος.
3α3 Ο χρήστης επιλέγει την ομάδα με την κατοχή και Μηνύματα 4.1 και 4.2 στο διάγραμμα
το όνομα του παίχτη ακολουθίας
3α4 Το σύστημα αποθηκεύει τον κάτοχο της μπάλας Μήνυμα 4.4 στο διάγραμμα ακολουθίας
στη τρέχουσα ενέργεια.
3α5 Το σύστημα καλεί την ΠΧ «Ανασχεδίαση 2Δ Μήνυμα 4.4.1 στο διάγραμμα ακολουθίας
γηπέδου» με παράμετρο «[ΕΝΕΡΓΕΙΑ] από
[ΟΝΟΜΑ ΠΑΙΧΤΗ]»
3α6 Το σύστημα καλεί την ΠΧ «Αποθήκευση Μήνυμα 4.4.2 στο διάγραμμα ακολουθίας
Στατιστικών» με παράμετρο «[ΕΝΕΡΓΕΙΑ] από
[ΟΜΑΔΑ]»
Εναλλακτική Ροή Β:
4α1 Η θέση βρίσκεται εκτός του 2Δ γηπέδου. Μήνυμα 3.7 στο διάγραμμα ακολουθίας
4α2 Το σύστημα δείχνει μήνυμα λάθους και Με βάση την εκφώνηση δεν το αναπαριστούμε
επιστρέφει στο βήμα 2 της βασικής ροής.
Εναλλακτική Ροή Γ:
7α1 Η θέση είναι πίσω από τελευταίο 3ο του γηπέδου. Μηνύματα 3.6 και 4.4 - 4.4.1 στο διάγραμμα
Το σύστημα καλεί την ΠΧ «Ανασχεδίαση 2Δ ακολουθίας
γηπέδου» με παράμετρο «Επίθεση από [ΟΝΟΜΑ
ΠΑΙΧΤΗ]»
7α2 Το σύστημα καλεί την ΠΧ «Αποθήκευση Μήνυμα 4.4.2 στο διάγραμμα ακολουθίας
Στατιστικών» με παράμετρο «Επίθεση από
[ΟΜΑΔΑ]»
7α3 Η ΠΧ επιστρέφει στο βήμα 2 της Βασικής Ροής Με βάση την εκφώνηση δεν το αναπαριστούμε
Εναλλακτική Ροή Δ:
7β1 Η θέση είναι στο τελευταίο 3ο του γηπέδου. Το Μηνύματα 3.5 και 4.4 - 4.4.1 στο διάγραμμα
σύστημα καλεί την ΠΧ «Ανασχεδίαση 2Δ ακολουθίας
γηπέδου» με παράμετρο «Επικίνδυνη Επίθεση
από [ΟΝΟΜΑ ΠΑΙΧΤΗ]»
7β2 Το σύστημα καλεί την ΠΧ «Αποθήκευση Μήνυμα 4.4.2 στο διάγραμμα ακολουθίας
Στατιστικών» με παράμετρο «Επικίνδυνη
Επίθεση από [ΟΜΑΔΑ]»
7β3 Η ΠΧ επιστρέφει στο βήμα 2 της Βασικής Ροής Με βάση την εκφώνηση δεν το αναπαριστούμε

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 6


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

Ερώτημα 1.Β – Δημιουργία Διαγράμματος Κλάσεων


Με βάση το διάγραμμα ακολουθίας και την προδιαγραφή της Π.Χ. της Άσκησης 1, να σχεδιάσετε το λεπτομερές
Διάγραμμα Κλάσεων. Επισημαίνεται ότι το παραχθέν διάγραμμα κλάσεων θα πρέπει να είναι σε πλήρη συμφωνία
με το διάγραμμα ακολουθίας που σχεδιάσατε στο Ερώτημα 1.Α. Περιγράψτε τις κλάσεις του συστήματος, τις
αρμοδιότητές τους (μέθοδοι και ιδιότητες/πεδία), τις σχέσεις τους με άλλες κλάσεις και επεξηγήστε γιατί
επιλέξατε κάποια συγκεκριμένη σχέση. Όπου θεωρείτε ότι απαιτείται, να κάνετε τις αναγκαίες παραδοχές ώστε
το διάγραμμα να είναι όσο το δυνατόν πλήρες.

Σημείωση:
Στο διάγραμμα κλάσεων που θα σχεδιάσετε να τοποθετήσετε και κλάσεις που δεν υπάρχουν στο διάγραμμα
ακολουθίας του Ερωτήματος 1.Α, αλλά προκύπτουν από τη λεκτική περιγραφή της υπό εξέταση Π.Χ., όπως για
παράδειγμα από τις ΠΧ «Ανασχεδίαση 2Δ γηπέδου» και «Αποθήκευση Στατιστικών».
(Σύνολο: 10 μονάδες)

Μαθησιακά Αποτελέσματα
Στην Άσκηση 1.B θα σας δοθεί η δυνατότητα να κατανοήσετε την κατασκευή του «Διαγράμματος Κλάσεων».
Πιο συγκεκριμένα θα μπορέσετε:
• να παραθέσετε τα κύρια μέλη που αυτό περιλαμβάνει,
• να παραθέσετε τα είδη των σχέσεων μεταξύ των κλάσεων,
• να αντιστοιχίσετε το κάθε είδος σχέσης με το σύμβολο που την απεικονίζει,
• να περιγράψετε τον τρόπο σύνταξης των ονομάτων των κλάσεων,
• να περιγράψετε τον τρόπο σύνταξης των ιδιοτήτων των κλάσεων,
• να περιγράψετε τον τρόπο σύνταξης των μεθόδων των κλάσεων και
• να περιγράψετε με παράδειγμα το κάθε είδος σχέσης μεταξύ των κλάσεων.

Απάντηση 1ης Άσκησης / Ερώτημα Β

Διάγραμμα Κλάσεων:

Για την ευκολότερη αναγνωσιμότητα του διαγράμματος δεν έχουν αναπαρασταθεί σε αυτό οι συνοριακές κλάσεις:
MainScreen και Recording Screen

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 7


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

Αιτιολόγηση Σχέσεων (με δείκτες στη Λεκτική Περιγραφή ή σε Βήματα της ΠΧ):

Η κλάση Game αποτελεί την κεντρική κλάση της εφαρμογής. Η κλάση περιέχει αντικείμενα δυο ομάδων (Team)
οι οποίες αγωνίζονται στον τρέχοντα αγώνα, διατηρεί μια λίστα από Action για την αποθήκευση των συμβάντων,
και ένα αντικείμενο Stadium2D για τη γραφική αναπαράσταση. Από το διάγραμμα ακολουθίας, η κλάση Game
είναι υπεύθυνη για να προσθέτει νέα actions όταν αυτά συμβούν στο πραγματικό παιχνίδι (addAction).
Η κλάση Stadium2D αποτελείται από αντικείμενα Position (η σχέση είναι ισχυρή καθώς τα τμήματα του γηπέδου
δεν έχουν λειτουργικότητα εκτός του γηπέδου). Η κλάση είναι υπεύθυνη να ανασχεδιάζει την οπτικοποίησή της,
κάθε φορά που συμβαίνει ένα νέο γεγονός.
Η κλάση Position χαρακτηρίζει κάθε ένα από τα 32 τμήματα του γηπέδου μέσω x και y συντεταγμένων. Όταν
λαμβάνει από την οπτική διεπαφή ένα σημείο στο γήπεδο, ελέγχει μέσω της evalPosition τη θέση του σημείου στο
γήπεδο και επιστρέφει το αντίστοιχο αλφαριθμητικό.
Η κλάση Team διατηρεί το όνομα μίας ομάδας, και περιέχει μια λίστα προς τους παίχτες (Player) και ένα
αντικείμενο για τα ομαδικά στατιστικά (Statistics). Οι αρμοδιότητες της κλάσης είναι: (α) να αναζητά παίχτες με
βάση το όνομα τους (findPlayer); και (β) να ανανεώνει τα ομαδικά στατιστικά (updateStats) όταν συμβαίνει κάποιο
ειδικό γεγονός.
H κλάση Statistics είναι μια κλάση δεδομένων η οποία διατηρεί τα βασικά ομαδικά στατιστικά ως primitive
μεταβλητές (γκολ, ασίστ, πάσες, κτλ.)
Η κλάση Player αναπαριστά τους παίχτες που αγωνίζονται στον επιλεγμένο αγώνα. Περιγράφονται από το όνομα
τους.
Η κλάση Actions είναι μια αφηρημένη κλάση η οποία είναι κάποιου τύπου (όπως προκύπτει από τις υποκλάσεις
της) και περιλαμβάνει πληροφορίες για τον παίχτη που έχει εκτελέσει την ενέργεια, καθώς και τη θέση της. Το
αντικείμενο της Actions (κάποιου τύπου) είναι αυτό το οποίο χρησιμοποιείται για την επανασχεδίαση του
γηπέδου και την ανανέωση των στατιστικών. Αυτό γίνεται μέσω της επιστροφής των δυο μεθόδων της: οι μέθοδοι
αυτές είναι αφηρημένες στην υπερκλάση και υλοποιούνται όπως αναφέρει η προδιαγραφή της ΠΧ στην κάθε
υποκλάση.

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 8


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

Εκφώνηση 2ης Άσκησης


Σύστημα UniLibrary
H εφαρμογή UniLibrary, την οποία θα βρείτε στην ενδεικτική λύση της 1ης γραπτής εργασία θα είναι το σημείο
εκκίνησης για την φετινή άσκηση. Παρακάτω δίνεται μια σειρά από αλλαγές, οι οποίες θα οδηγήσουν στην
παρακάτω αναμενόμενη έξοδο:

Απλή Εφαρμογή Πανεπιστημιακής Βιβλιοθήκης


=========================================

Αχιλλέας Καμέας έχει δανειστεί το βιβλίο με ISBN 86!!


Το βιβλίο με ISBN 100 δεν υπάρχει
Γιάννης Σταμέλος έχει δανειστεί το βιβλίο με ISBN 51!!
Το βιβλίο με ISBN 86 έχει επιστραφεί!

Η Πανεπιστημιακή Βιβλιοθήκη περιέχει τα ακόλουθα βιβλία:


ISBN: 86, Τίτλος: Ambient Intelligence, Διαθέσιμο για δανεισμό: Όχι! Αναμενόμενη επιστροφή σε 10 μέρες
ISBN: 18, Τίτλος: Software Engineering, Διαθέσιμο για δανεισμό: Ναι!
ISBN: 51, Τίτλος: Αλγόριθμοι Μηχανικής Μάθησης, Διαθέσιμο για δανεισμό: Όχι! Αναμενόμενη επιστροφή σε 7 μέρες

Ερώτημα 2.Α – Κληρονομικότητα Κλάσεων, Υποσκέλιση (override) Μεθόδων και


Υλοποίηση Διεπαφών
Στην αρχική έκδοση της άσκησης προσθέστε υποκλάσεις: BScBook η οποία αναφέρεται σε βιβλία τα οποία
διδάσκονται στο προπτυχιακό του πανεπιστημίου, και GeneralBook, η οποία αναφέρεται σε όλα τα υπόλοιπα
βιβλία. Τα βιβλία αυτά έχουν διαφορετική διάρκεια δανεισμού (5 ημέρες για τα βιβλία που διδάσκονται στο
προπτυχιακό πρόγραμμα σπουδών, και 10 ημέρες για τα βιβλία γενικού ενδιαφέροντος). Η συγκεκριμένη
πληροφορία ΔΕΝ θα αποθηκεύεται σε κάποιο πεδίο της κλάσης, αλλά θα επιστρέφεται on-demand από μια
μέθοδο που θα δημιουργήσετε (getLoanDuration).
Επιπλέον δημιουργήσετε υποκλάσεις BScStudent και MScStudent, για τους προπτυχιακούς και μεταπτυχιακούς
φοιτητές αντίστοιχα. Από τις δυο κατηγορίες οι μεταπτυχιακοί φοιτητές έχουν προσαυξημένη διάρκεια δανεισμού
κατά 2 ημέρες, ανεξαρτήτως του τύπου του βιβλίου.
Για την υλοποίηση του συστήματος χρησιμοποιείστε το πρότυπο σχεδίασης «Γέφυρα» (Bridge)
https://refactoring.guru/design-patterns/bridge
Σημείωση: Θα πρέπει να αφαιρέσετε την δήλωση του πίνακα των βιβλίων στον φοιτητή, και να προσθέσετε μια
δήλωση φοιτητή στο βιβλίο. Η αλλαγή αυτή θα επιφέρει αρκετές αλλαγές στον κώδικα. Οι αλλαγές στις άλλες
κλάσεις θα αναφερθούν / βαθμολογηθούν σε επόμενο ερώτημα. Το σύστημα δεν θα παρακολουθεί πόσα βιβλία
έχει δανειστεί ο κάθε φοιτητής.
Η ιδιότητα borrowed παρότι πλεονασματική μπορεί να διατηρηθεί για ελαχιστοποίηση των αλλαγών. Χρειάζεται
αλλαγή στη setBorrowed ώστε να καταγράφεται ποιος έχει δανειστεί το βιβλίο.
Φροντίστε ο κώδικας να είναι μορφοποιημένος κατάλληλα και να είναι ευανάγνωστος. Θα πρέπει να υπάρχει
τεκμηρίωση σε μορφή σχολίων.
(Σύνολο: 30 μονάδες)

Μαθησιακά Αποτελέσματα
Στην Άσκηση 2.Α. θα μπορέσετε:
● να ορίσετε με ακρίβεια την έννοια της κλάσης,
● να κατανοήσετε τα βασικά δομικά στοιχεία μιας κλάσης,
● να κατανοήσετε τους κατασκευαστές των κλάσεων,
● να υποσκελίσετε μεθόδους
● να χρησιμοποιήσετε το πρότυπο Bridge, και
● να υλοποιήσετε κληρονομικότητα κλάσεων και υλοποίηση διεπαφών.

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 9


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

Απάντηση 2ης Άσκησης / Ερώτημα 2.Α


Ο παρακάτω κώδικας υλοποιεί το πρότυπο σχεδιασμού γέφυρας (bridge), το οποίο είναι ένα πρότυπο δομικού
σχεδιασμού που χρησιμοποιείται για να διαχωρίσει ένα αντικείμενο από την υλοποίησή του. Αυτό το πρότυπο
σάς επιτρέπει να αλλάξουμε τόσο την αφαίρεση όσο και την υλοποίηση ανεξάρτητα, χωρίς να επηρεάζεται το ένα
από το άλλο. Στον παρακάτω κώδικά υπάρχει μια ιεραρχία κλάσεων βιβλίων και μια ιεραρχία κλάσεων φοιτητών
και σκοπός του πρότυπου Bridge είναι η γεφύρωση αυτών των δύο ιεραρχιών. Ας αναλύσουμε τον κώδικα και ας
εξηγήσουμε τη χρήση του:
Κλάση Book:
Είναι μια αφηρημένη τάξη που αντιπροσωπεύει ένα βιβλίο με κοινά χαρακτηριστικά όπως ISBN, τίτλος, κατάσταση
δανεισμού και δανειστής (φοιτητής που δανείστηκε το βιβλίο).
Ορίζει βασικές μεθόδους πρόσβασης και τροποποίησης αυτών των πεδίων.
Το getLoanDuration() είναι μια αφηρημένη μέθοδος που πρέπει να υλοποιηθεί από τις υποκλάσεις της κλάσης
Book, ώστε να οριστεί διαφορετική διάρκεια δανεισμού για διαφορετικούς τύπους βιβλίων.
Κλάσεις BScBook Class και GeneralBook:
Αυτές οι κλάσεις είναι οι συγκεκριμένες υποκατηγορίες της κλάσης Book.
Παρέχουν συγκεκριμένες υλοποιήσεις για τη μέθοδο getLoanDuration() με βάση το αν το βιβλίο είναι προπτυχιακό
βιβλίο ή γενικό βιβλίο.
Κλάση Student:
Είναι μια αφηρημένη τάξη που αντιπροσωπεύει έναν μαθητή.
Ορίζει αφηρημένες μεθόδους getBScBookDuration(), getGeneralBookDuration() και getType(), οι οποίες
προορίζονται να υλοποιηθούν από υποκλάσεις. Αυτές οι μέθοδοι παρέχουν πληροφορίες σχετικά με τον τύπο του
φοιτητή (BSc ή MSc) και τη διάρκεια δανεισμού για διαφορετικούς τύπους βιβλίων.
Κλάσεις BScStudent Class και MScStudent:
Οι παραπάνω κλάσεις είναι συγκεκριμένες υποκατηγορίες της κλάσης Student.
Παρέχουν συγκεκριμένες υλοποιήσεις για τις αφηρημένες μεθόδους της κλάσης Student.
Σε αυτό το σχεδιασμό, μπορούμε να δημιουργήσουμε αντικείμενα BScBook και GeneralBook για να έχουμε
διαφορετικούς τύπους βιβλίων, καθώς και αντικείμενα BScStudent και MScStudent για να έχουμε διαφορετικούς
τύπους φοιτητών. Το πρότυπο bridge μας επιτρέπει να συσχετίσουμε οποιονδήποτε τύπο βιβλίου με
οποιονδήποτε τύπο φοιτητή χωρίς να υπάρχει στενή σύζευξη (strong coupling) μεταξύ των δύο αυτών ιεραρχιών.
Για παράδειγμα, εάν θέλουμε να συσχετίσουμε ένα βιβλίο BSc με έναν φοιτητή MSc, μπορούμε να το κάνουμε
χωρίς να τροποποιήσουμε το βιβλίο ή τις κλάσεις των φοιτητών. Απλά πρέπει να δημιουργήσουμε αντικείμενα
BScBook και MScStudent και να τα ορίσουμε ανάλογα.
Αυτό το πρότυπο σχεδιασμού προωθεί την ευελιξία και τη συντηρησιμότητα του κώδικα, επιτρέποντάς την εύκολη
επέκταση της εφαρμογής με νέους τύπους βιβλίων ή τύπους φοιτητών.
Επίσης, μια αποδεκτή και απόλυτα σωστή λύση είναι η υλοποίηση του παρακάτω κώδικα με διεπαφές
(interfaces), Έτσι, αντί να χρησιμοποιήσουμε αφηρημένες (abstract) κλάσεις, θα δημιουργούσαμε διεπαφές. Στην
περίπτωση αυτή η κλάση Book θα ήταν διεπαφή και οι κλάσεις BScBook και GeneralBook θα υλοποιούσαν αυτή
την διεπαφή.

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 10


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

Κώδικας Κλάσης Book

public abstract class Book {


// The book's ISBN number.
private int isbn;

// The book's title.


protected String title;

// Whether the book is currently borrowed.


private boolean borrowed;

// The student that has borrowed the book.


protected Student loaner;

/**
* Creates a new book with default values for ISBN and title.
*/
public Book() {
this.isbn = 0;
this.title = "";
this.borrowed = false;
this.loaner = null;
}

/**
* Creates a new book with the specified ISBN and title.
*
* @param isbn The book's ISBN number.
* @param title The book's title.
*/
public Book(int isbn, String title) {
this.isbn = isbn;
this.title = title;
}

/**
* Gets the book's ISBN number.
*
* @return The book's ISBN number.
*/
public int getIsbn() {
return isbn;
}

/**
* Sets the book's ISBN number.
*
* @param isbn The new ISBN number for the book.
*/
public void setIsbn(int isbn) {
this.isbn = isbn;
}

/**
* Checks whether the book is currently borrowed.
* @return True if the book is borrowed, false otherwise.
*/
public boolean isBorrowed() {
return borrowed;
}

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 11


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

/**
* Sets the book's borrow status.
*
* @param true True to mark the book as borrowed, false to mark it as available.
*/
public void setBorrowed(Student std) {
this.borrowed = true;
this.loaner = std;
}

/**
* Generates a string representation of the book.
*
* @return A string representation of the book, including its ISBN number and
title.
*/
@Override
public String toString() {
return "ISBN: " + isbn + ", Τίτλος: " + title;
}

/**
* Generates a string representation the message to be printed.
*
* @return A string representation of the book, the loaner, his/her type and the
loan duration.
*/
public String getMessageForPrint() {
if (isBorrowed()) {
return title + ", " + loaner.getName() + ", " + loaner.getType() + ", on
loan (duration:" + getLoanDuration()+ " days)";
} else {
if (loaner == null) {
return title + ", δεν έχει δανιστεί ποτέ!";
} else {
return title + ", " + loaner.getName() + ", " + loaner.getType() + ",
returned";
}
}
}

/**
* Sets the status as returned.
*
*/
public void returnBook() {
this.borrowed = false;
}

/**
* API for getting loan duration / To be implemented in the subclasses.
*/
public abstract int getLoanDuration();
}

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 12


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

Κώδικας Κλάσης BScBook

public class BScBook extends Book {


/**
* Creates a new BSc book using the constructor of the superclass.
*/
public BScBook(int isbn, String title) {
super(isbn, title);
}

/**
* Specific implementation of returning the loan duration.
* Implementation of the bridging of the two hierarchies of the Bridge design
* pattern.
*/
@Override
public int getLoanDuration() {
return loaner.getBScBookDuration();
}
}

Κώδικας Κλάσης GeneralBook

public class GeneralBook extends Book {


/**
* Creates a new General book utilizing the constructor of the superclass.
*/
public GeneralBook(int isbn, String title) {
super(isbn, title);
}

/**
* Specific implementation of returning the loan duration.
* Implementation of the bridging of the two hierarchies of the Bridge design
* pattern.
*/
@Override
public int getLoanDuration() {
return loaner.getGeneralBookDuration();
}
}

Κώδικας Κλάσης Student

public abstract class Student {


// The student's name.
private String name;

/**
* Creates a new student with the specified name.
* @param name The student's name.
*/
public Student(String name){
this.name = name;
}

public String getName() {


return name;
}

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 13


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

/**
* API for getting loan duration / To be implemented in the subclasses.
* Implementation of the bridging of the two hierarchies of the Bridge design
* pattern.
*/
protected abstract int getBScBookDuration();

/**
* API for getting loan duration / To be implemented in the subclasses.
* Implementation of the bridging of the two hierarchies of the Bridge design
* pattern.
*/
protected abstract int getGeneralBookDuration();

/**
* API for getting student type / To be implemented in the subclasses.
*/
protected abstract String getType();
}

Κώδικας Κλάσης BScStudent

public class BScStudent extends Student {


/**
* Creates a new BSc student utilizing the constructor of the superclass.
*/
public BScStudent(String name) {
super(name);
}

/**
* Specific implementation of returning the loan duration.
* Implementation of the bridging of the two hierarchies of the Bridge design
* pattern.
*/
@Override
public int getBScBookDuration() {
return 5;
}

/**
* Specific implementation of returning the loan duration.
* Implementation of the bridging of the two hierarchies of the Bridge design
* pattern.
*/
@Override
public int getGeneralBookDuration() {
return 10;
}

/**
* Specific implementation of returning the student type.
*/
@Override
public String getType() {
return "BSc";
}
}

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 14


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

Κώδικας Κλάσης MScStudent

public class MScStudent extends Student {


/**
* Creates a new MSc student utilizing the constructor of the superclass.
*/
public MScStudent(String name) {
super(name);
}

/**
* Specific implementation of returning the loan duration.
* Implementation of the bridging of the two hierarchies of the Bridge design
* pattern.
*/
@Override
public int getBScBookDuration() {
return 7;
}

/**
* Specific implementation of returning the loan duration.
* Implementation of the bridging of the two hierarchies of the Bridge design
* pattern.
*/
@Override
public int getGeneralBookDuration() {
return 12;
}

/**
* Specific implementation of returning the student type.
*/
@Override
public String getType() {
return "MSc";
}
}

Ερώτημα 2.Β – Υλοποίηση Διαδικασιών


Με βάση τις δοθείσες απαιτήσεις / προδιαγραφές τροποποιείστε τον κώδικα της showLibraryBooks (της κλάσης
Library), ώστε για τα δανεισμένα βιβλία να εκτυπώνει και την αναμενόμενη ημερομηνία επιστροφής τους. Για
παράδειγμα:
Όχι! Αναμενόμενη επιστροφή σε 7 μέρες
Επιπλέον, τροποποιήστε την υλοποίηση, ώστε να αλλάξει η δομή αποθήκευσης των διαθέσιμων βιβλίων στη
βιβλιοθήκη, ώστε να μην υπάρχει προκαθορισμένος αριθμός ως προς το πλήθος των βιβλίων που μπορεί να
αποθηκεύσει η βιβλιοθήκη: https://www.w3schools.com/java/java_arraylist.asp
Τέλος, υλοποιήστε μέθοδο επιστροφής βιβλίου. Δοκιμάστε την επιστροφή του “Ambient Intelligence” από τον
“Αχιλλέα Καμέα”.
(Σύνολο: 10 μονάδες)

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 15


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

Μαθησιακά Αποτελέσματα
Στην Άσκηση 2.Β. θα μπορέσετε:
● να υλοποιήσετε σύνθετες μεθόδους,
● να χειριστείτε λίστες,
● να δημιουργείτε και να χειρίζεστε τυχαίους αριθμούς και
● να υλοποιείτε απλούς αλγορίθμους.

Απάντηση 2ης Άσκησης / Ερώτημα 2.Β

Κώδικας Κλάσης Library

public class Library {


// Ιδιότητες
/**
* Το όνομα της βιβλιοθήκης.
*/
private String name;

/**
* Η λίστα των βιβλίων της βιβλιοθήκης.
*/
private ArrayList<Book> bookList = new ArrayList<Book>();
// Μέθοδος για τον καθορισμό του ονόματος της βιβλιοθήκης

/**
* Ορίζει το όνομα της βιβλιοθήκης.
*
* @param name Το νέο όνομα της βιβλιοθήκης.
*/
public void setName(String name) {
this.name = name;
}

// Μέθοδος για την προσθήκη ενός βιβλίου στη λίστα


/**
* Προσθέτει ένα βιβλίο στη λίστα.
*
* @param abook Το βιβλίο που θα προστεθεί στη λίστα.
*/
public void addBook(Book abook) {
bookList.add(abook);
}

// Μέθοδος για τον έλεγχο ύπαρξης ενός βιβλίου στη λίστα


/**
* Ελέγχει εάν υπάρχει ένα βιβλίο στη λίστα με συγκεκριμένο αριθμό ISBN.
*
* @param isbn Ο αριθμός ISBN του βιβλίου που θα ελεγχθεί.
* @return Το βιβλίο εάν υπάρχει, διαφορετικά `null`.
*/
public Book checkIfBookExists(int isbn) {
for (int i = 0; i < bookList.size(); i++) {
if (bookList.get(i).getIsbn() == isbn) {
return bookList.get(i);
}

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 16


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

}
return null;
}

// Μέθοδος για το δανεισμό ενός βιβλίου από τη λίστα


/**
* Δανείζει ένα βιβλίο από τη λίστα.
*
* @param isbn Ο αριθμός ISBN του βιβλίου που θα δανειστεί.
* @param std1
*/
public void borrowBook(int isbn, Student std1) {
Book book = checkIfBookExists(isbn);
if (book == null) {
System.out.println("Το βιβλίο με ISBN " + isbn + " δεν υπάρχει");
return;
}
if (book.isBorrowed()) {
System.out.println("Το βιβλίο με ISBN " + isbn + " δεν είναι
διαθέσιμο");
return;
}
book.setBorrowed(std1);
System.out.println(std1.getName() + " έχει δανειστεί το βιβλίο με ISBN " +
isbn + "!!");
}

// Μέθοδος για την εμφάνιση των βιβλίων της βιβλιοθήκης


/**
* Εμφανίζει τα βιβλία της βιβλιοθήκης.
*/
public void showLibraryBooks() {
System.out.println();
System.out.println("Η Πανεπιστημιακή Βιβλιοθήκη περιέχει τα ακόλουθα
βιβλία:");
for (int i = 0; i < bookList.size(); i++) {
System.out.print(bookList.get(i));
System.out.print(", Διαθέσιμο για δανεισμό: ");
if (bookList.get(i).isBorrowed()) {
System.out.println("Όχι! Αναμενόμενη επιστροφή σε " +
bookList.get(i).getLoanDuration() + " μέρες");
} else {
System.out.println("Ναι!");
}
}
}

// Μέθοδος για την εκτύπωση των βιβλίων της βιβλιοθήκης


/**
* Εκτυπώνει τα βιβλία της βιβλιοθήκης.
*/
public void printLoans() {
try {
FileWriter writer = new FileWriter("results.txt");
for (int i=0; i<bookList.size(); i++){
String message = bookList.get(i).getMessageForPrint();
writer.write(message + "\n");
}
writer.close();
} catch (IOException e) {
e.printStackTrace();

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 17


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

}
}

// Μέθοδος για την επιστροφή ενός βιβλίου


/**
* Επιστρέφει ένα βιβλίο.
*
* @param isbn Ο αριθμός ISBN του βιβλίου που θα δανειστεί.
*/
public void returnBook(int isbn) {
Book book = checkIfBookExists(isbn);
if (book == null) {
System.out.println("Το βιβλίο με ISBN " + isbn + " δεν υπάρχει");
return;
}
book.returnBook();
System.out.println("Έχει επιστραφεί το βιβλίο με ISBN " + isbn + "!!");
}
}

Ερώτημα 2.Γ – Υλοποίηση Μεθόδου Αποθήκευσης σε Αρχείο


Στην κλάση Library υλοποιήστε τη μέθοδο printLoans, η οποία θα αποθηκεύει σε αρχείο κειμένου “results.txt”
τους δανεισμούς βιβλίων με τη μορφή:
Ambient Intelligence, Αχιλλέας Καμέας, BSc, retuned
Software Engineering, δεν έχει δανειστεί ποτέ!
Αλγόριθμοι Μηχανικής Μάθησης, Γιάννης Σταμέλος, MSc, on loan (duration:7 days)

Φροντίστε ο κώδικας να είναι μορφοποιημένος κατάλληλα και να είναι ευανάγνωστος. Θα πρέπει να υπάρχει
τεκμηρίωση σε μορφή σχολίων.
(Σύνολο: 10 μονάδες)
Μαθησιακά Αποτελέσματα
Στην Άσκηση 2.Γ. θα μάθετε:
● να γράφετε δεδομένα σε αρχεία,
● να υλοποιείτε χειρισμό εξαιρέσεων και
● αλλαγές σε υπάρχοντα κώδικα (εφόσον απαιτείται)

Απάντηση 2ης Άσκησης / Ερώτημα 2.Γ


Κώδικας printLoans
// Μέθοδος για την εκτύπωση των βιβλίων της βιβλιοθήκης
/**
* Εκτυπώνει τα βιβλία της βιβλιοθήκης.
*/
public void printLoans() {
try {
FileWriter writer = new FileWriter("results.txt");
for (int i=0; i<bookList.size(); i++){
String message = bookList.get(i).getMessageForPrint();
Writer.write(message + "\n");
}
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 18


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

Κώδικας getMessageForPrint (στην Book)


/**
* Generates a string representation of the message to be printed.
*
* @return A string representation of the book, the loaner, his/her type and the
loan duration.
*/
public String getMessageForPrint() {
if (isBorrowed()) {
return title + ", " + loaner.getName() + ", " + loaner.getType() + ", on
loan (duration:" + getLoanDuration()+ " days)";
} else {
if (loaner == null) {
return title + ", δεν έχει δανειστεί ποτε!";
} else {
return title + ", " + loaner.getName() + ", " + loaner.getType() + ",
returned";
}
}
}

Τελική Μορφή Αρχείου:

Ερώτημα 2.Δ – Υλοποίηση Προσομοίωσης


Τροποποιήστε τον κώδικα της κλάσης UniLibraryMain, σύμφωνα με τις δοθείσες απαιτήσεις. Δημιουργήστε 2-3
αντικείμενα για κάθε πιθανό συνδυασμό περιπτώσεων (τύπος βιβλίων Χ τύπος φοιτητών Χ κατάσταση
δανεισμού).
Καλέστε μεθόδους ώστε να προκύπτει η ορθή υλοποίηση όλων των παραπάνω ερωτημάτων.
Φροντίστε ο κώδικας να είναι μορφοποιημένος κατάλληλα και να είναι ευανάγνωστος. Θα πρέπει να υπάρχει
τεκμηρίωση σε μορφή σχολίων.
(Σύνολο: 15 μονάδες)

Μαθησιακά Αποτελέσματα
Στην Άσκηση 2.Δ. θα μάθετε:
● να δημιουργείτε σύνθετα αντικείμενα,
● να προσθέτετε σύνθετες παραμέτρους σε αντικείμενα,
● να προσθέτετε αντικείμενα σε λίστες,
● να εκτελείτε μεθόδους αντικειμένων και
● να καλείτε/χρησιμοποιείτε αντικείμενα δημιουργημένα με το πρότυπο Bridge.

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 19


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

Απάντηση 2ης Άσκησης / Ερώτημα 2.Δ

Κώδικας Κλάσης UniLibraryMain

public static void main(String[] args) {

System.out.println("Απλή Εφαρμογή Πανεπιστημιακής Βιβλιοθήκης");


System.out.println("=========================================");

// Δημιουργήστε μια βιβλιοθήκη με όνομα «Πανεπιστημιακή Βιβλιοθήκη»

Library unilib = new Library();


unilib.setName("Πανεπιστημιακή Βιβλιοθήκη");

// Δημιουργήστε τρία (3) βιβλία με τα εξής στοιχεία:


// 1 βιβλίο με ISBN 86 και τίτλο «Ambient Intelligence»
// 1 βιβλίο με ISBN 18 και τίτλο «Software Engineering»
// 1 βιβλίο με ISBN 51 και τίτλο «Αλγόριθμοι Μηχανικής Μάθησης»
// και προσθέστε τα στη βιβλιοθήκη

unilib.addBook(new GeneralBook(86, "Ambient Intelligence"));


unilib.addBook(new BScBook(18, "Software Engineering"));
unilib.addBook(new BScBook(51, "Αλγόριθμοι Μηχανικής Μάθησης"));

// Δημιουργήστε δύο (2) φοιτητές με τα εξής στοιχεία:


// 1 φοιτητής με όνομα «Αχιλλέας Καμέας»
// 1 φοιτητής με όνομα «Γιάννης Σταμέλος»

Student std1 = new BScStudent("Αχιλλέας Καμέας");


Student std2 = new MScStudent("Γιάννης Σταμέλος");

// Ο φοιτητής με όνομα «Αχιλλέας Καμέας» προσπαθεί να δανειστεί


// το βιβλίο με ISBN 86

unilib.borrowBook(86, std1);

// Ο φοιτητής με όνομα «Αχιλλέας Καμέας» προσπαθεί να δανειστεί


// το βιβλίο με ISBN 100

unilib.borrowBook(100, std1);

// Ο φοιτητής με όνομα «Γιάννης Σταμέλος» προσπαθεί να δανειστεί


// το βιβλίο με ISBN 51

unilib.borrowBook(51, std2);

// Εμφανίστε όλα τα διαθέσιμα στοιχεία για τα βιβλία που


// διαθέτει η βιβλιοθήκη

unilib.showLibraryBooks();
unilib.returnBook(86);

// Εκτύπωση σε αρχείο

unilib.printLoans();
}

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 20


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2023-2024

Αποτέλεσμα Εκτέλεσης

Υποδείξεις για τη συγγραφή της εργασίας


1) Για την απάντηση της εργασίας θα πρέπει να χρησιμοποιηθεί το κείμενο της εκφώνησης της
εργασίας. Στο κείμενο αυτό:
- Συμπληρώστε, στο χώρο των απαντήσεων, όλα τα στοιχεία με κίτρινο χρώμα.
- Μην ξεχάσετε να δηλώσετε εάν η εργασία αποτελεί προϊόν αποκλειστικά δικής σας
εργασίας.
- Ενσωματώστε τις απαντήσεις (διαγράμματα ή/και κώδικα) στην κατάλληλη θέση. Δεν θα
πρέπει να κάνετε παραπομπές της μορφής «βλέπε αρχείο…».
- Αν δεν έχετε απαντήσει σε ένα ερώτημα γράψτε «ΔΕΝ ΑΠΑΝΤΗΘΗΚΕ».
- Αν απαντήσατε με ελλείψεις σε ένα ερώτημα γράψτε «ΕΛΛΙΠΗΣ ΑΠΑΝΤΗΣΗ».
2) Η συνεργασία στην ανάλυση της εργασίας επιτρέπεται, αλλά καλό είναι να αναφερθεί στον ειδικό
χώρο στην πρώτη σελίδα της εργασίας. Η συνεργασία δεν πρέπει να οδηγεί σε από κοινού επίλυση
και συγγραφή της εργασίας. Η υποβολή κοινών απαντήσεων από διαφορετικούς φοιτητές που
συνεργάστηκαν δεν επιτρέπεται και θεωρείται ως ΑΝΤΙΓΡΑΦΗ. Οι απαντήσεις ελέγχονται, τόσο
μεταξύ των φοιτητών του ιδίου τμήματος, όσο και μεταξύ φοιτητών διαφορετικών τμημάτων. Η
αντιγραφή έχει ως αποτέλεσμα το ΜΗΔΕΝΙΣΜΟ ΤΗΣ ΕΡΓΑΣΙΑΣ ΣΥΝΟΛΙΚΑ και την παραπομπή των
παραβατών στην Κοσμητεία της Σχολής Θετικών Επιστημών & Τεχνολογίας, σύμφωνα με τον
εσωτερικό κανονισμό του ΕΑΠ.
3) Η εκπόνηση της εργασίας θα πρέπει να γίνει αποκλειστικά και υποχρεωτικά με το εργαλείο Visual
Paradigm για τη UML και NetΒeans για τη Java.
4) Η εργασία θα υποβληθεί στο σύστημα υποβολή εργασιών του study.eap.gr.
5) Ο φοιτητής θα πρέπει να υποβάλει την εργασία του σε δύο αρχεία:
- Το 1ο αρχείο θα έχει όνομα PLH24_2ERG_EPITHETO_ONOMA.doc και είναι το κείμενο
της εκφώνησης της εργασίας με συμπληρωμένες τις απαντήσεις.
- Το 2ο αρχείο είναι ένα συμπιεσμένο αρχείου zip ή rar με όνομα
PLH24_2ERG_EPITHETO_ONOMA.<rar|zip>. Το συμπιεσμένο αρχείο θα πρέπει να
αποτελείται από:
- i. Το αρχείο Visual Paradigm με το project που θα περιέχει τα διαγράμματα των
ασκήσεων.
- Ii. Τον κατάλογο με τον κώδικα Java που θα πρέπει να περιλαμβάνει το project
όπως αυτό δημιουργείται από το εργαλείο NetΒeans και το οποίο θα πρέπει να
μπορεί να εκτελείται χωρίς αλλαγές/επέμβαση από τον καθηγητή.
- iii. Να γίνει χρήση λατινικών χαρακτήρων ΑΠΟΚΛΕΙΣΤΙΚΑ για την αποφυγή
προβλημάτων με το moodle.
H εφαρμογή των παραπάνω κανόνων είναι ΥΠΟΧΡΕΩΤΙΚΗ και βαθμολογείται σύμφωνα με το αντίστοιχο
κριτήριο αξιολόγησης. Η μη εφαρμογή του πρώτου κανόνα μπορεί να οδηγήσει σε συνολική απόρριψη της
εργασίας.
ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

ΠΛΗ24 - ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Νο 2 21

You might also like