Professional Documents
Culture Documents
PLH24_2ERG_ΑΠΑΝΤΗΣΕΙΣ_2023-2024_V1.0
PLH24_2ERG_ΑΠΑΝΤΗΣΕΙΣ_2023-2024_V1.0
Αναλυτική Αξιολόγηση:
Άσκηση Περιγραφή Ποσοστό % Βαθμός
Σύνολο: 100
Εναλλακτικές Ροές
Εναλλακτική Ροή Α:
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.A. θα σας δοθεί η δυνατότητα να κατανοήσετε την κατασκευή του «Διαγράμματος Ακολουθίας».
Πιο συγκεκριμένα θα μπορέσετε:
• να περιγράψετε το Διάγραμμα Ακολουθίας,
• να περιγράψετε τα στοιχεία που αυτό περιλαμβάνει,
• να σχεδιάσετε τα σύμβολα που αυτό περιλαμβάνει,
• να αντιστοιχίσετε τα στοιχεία με τα σύμβολα που αυτό περιλαμβάνει,
• να συνδέσετε τη λειτουργικότητα του κάθε συμβάντος με την έννοια της ιχνηλασιμότητας.
Διάγραμμα Ακολουθίας:
Τεκμηρίωση Επιλογών:
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
παράμετρο «Κατοχή από [ΟΝΟΜΑ ΠΑΙΧΤΗ]» θεωρείτε ως το σημείο εκκίνησης της ΠΧ.
[Εναλλακτική Ροή Γ] [Εναλλακτική Ροή Δ] Στο διάγραμμα εναλλακτικά θα μπορούσε να
απεικονιστεί και ως κλήση σε ΠΧ αντί για μέθοδο.
9 Η ΠΧ επιστρέφει στο βήμα 2 της Βασικής Ροής Με βάση την εκφώνηση δεν το αναπαριστούμε
Εναλλακτικές Ροές
Εναλλακτική Ροή Α:
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 της Βασικής Ροής Με βάση την εκφώνηση δεν το αναπαριστούμε
Σημείωση:
Στο διάγραμμα κλάσεων που θα σχεδιάσετε να τοποθετήσετε και κλάσεις που δεν υπάρχουν στο διάγραμμα
ακολουθίας του Ερωτήματος 1.Α, αλλά προκύπτουν από τη λεκτική περιγραφή της υπό εξέταση Π.Χ., όπως για
παράδειγμα από τις ΠΧ «Ανασχεδίαση 2Δ γηπέδου» και «Αποθήκευση Στατιστικών».
(Σύνολο: 10 μονάδες)
Μαθησιακά Αποτελέσματα
Στην Άσκηση 1.B θα σας δοθεί η δυνατότητα να κατανοήσετε την κατασκευή του «Διαγράμματος Κλάσεων».
Πιο συγκεκριμένα θα μπορέσετε:
• να παραθέσετε τα κύρια μέλη που αυτό περιλαμβάνει,
• να παραθέσετε τα είδη των σχέσεων μεταξύ των κλάσεων,
• να αντιστοιχίσετε το κάθε είδος σχέσης με το σύμβολο που την απεικονίζει,
• να περιγράψετε τον τρόπο σύνταξης των ονομάτων των κλάσεων,
• να περιγράψετε τον τρόπο σύνταξης των ιδιοτήτων των κλάσεων,
• να περιγράψετε τον τρόπο σύνταξης των μεθόδων των κλάσεων και
• να περιγράψετε με παράδειγμα το κάθε είδος σχέσης μεταξύ των κλάσεων.
Διάγραμμα Κλάσεων:
Για την ευκολότερη αναγνωσιμότητα του διαγράμματος δεν έχουν αναπαρασταθεί σε αυτό οι συνοριακές κλάσεις:
MainScreen και Recording Screen
Αιτιολόγηση Σχέσεων (με δείκτες στη Λεκτική Περιγραφή ή σε Βήματα της ΠΧ):
Η κλάση 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 (κάποιου τύπου) είναι αυτό το οποίο χρησιμοποιείται για την επανασχεδίαση του
γηπέδου και την ανανέωση των στατιστικών. Αυτό γίνεται μέσω της επιστροφής των δυο μεθόδων της: οι μέθοδοι
αυτές είναι αφηρημένες στην υπερκλάση και υλοποιούνται όπως αναφέρει η προδιαγραφή της ΠΧ στην κάθε
υποκλάση.
Μαθησιακά Αποτελέσματα
Στην Άσκηση 2.Α. θα μπορέσετε:
● να ορίσετε με ακρίβεια την έννοια της κλάσης,
● να κατανοήσετε τα βασικά δομικά στοιχεία μιας κλάσης,
● να κατανοήσετε τους κατασκευαστές των κλάσεων,
● να υποσκελίσετε μεθόδους
● να χρησιμοποιήσετε το πρότυπο Bridge, και
● να υλοποιήσετε κληρονομικότητα κλάσεων και υλοποίηση διεπαφών.
/**
* 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;
}
/**
* 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();
}
/**
* 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();
}
}
/**
* 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();
}
}
/**
* Creates a new student with the specified name.
* @param name The student's name.
*/
public Student(String name){
this.name = name;
}
/**
* 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();
}
/**
* 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";
}
}
/**
* 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.Β. θα μπορέσετε:
● να υλοποιήσετε σύνθετες μεθόδους,
● να χειριστείτε λίστες,
● να δημιουργείτε και να χειρίζεστε τυχαίους αριθμούς και
● να υλοποιείτε απλούς αλγορίθμους.
/**
* Η λίστα των βιβλίων της βιβλιοθήκης.
*/
private ArrayList<Book> bookList = new ArrayList<Book>();
// Μέθοδος για τον καθορισμό του ονόματος της βιβλιοθήκης
/**
* Ορίζει το όνομα της βιβλιοθήκης.
*
* @param name Το νέο όνομα της βιβλιοθήκης.
*/
public void setName(String name) {
this.name = name;
}
}
return null;
}
}
}
Φροντίστε ο κώδικας να είναι μορφοποιημένος κατάλληλα και να είναι ευανάγνωστος. Θα πρέπει να υπάρχει
τεκμηρίωση σε μορφή σχολίων.
(Σύνολο: 10 μονάδες)
Μαθησιακά Αποτελέσματα
Στην Άσκηση 2.Γ. θα μάθετε:
● να γράφετε δεδομένα σε αρχεία,
● να υλοποιείτε χειρισμό εξαιρέσεων και
● αλλαγές σε υπάρχοντα κώδικα (εφόσον απαιτείται)
Μαθησιακά Αποτελέσματα
Στην Άσκηση 2.Δ. θα μάθετε:
● να δημιουργείτε σύνθετα αντικείμενα,
● να προσθέτετε σύνθετες παραμέτρους σε αντικείμενα,
● να προσθέτετε αντικείμενα σε λίστες,
● να εκτελείτε μεθόδους αντικειμένων και
● να καλείτε/χρησιμοποιείτε αντικείμενα δημιουργημένα με το πρότυπο Bridge.
unilib.borrowBook(86, std1);
unilib.borrowBook(100, std1);
unilib.borrowBook(51, std2);
unilib.showLibraryBooks();
unilib.returnBook(86);
// Εκτύπωση σε αρχείο
unilib.printLoans();
}
Αποτέλεσμα Εκτέλεσης