Plh24 Exams2 Ενδεικτικεσ Απαντησεισ v1.0

You might also like

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

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

ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022


Β’ ΕΞΕΤΑΣΤΙΚΗ

ΑΚΑΔΗΜΑΙΚΟ – ΕΤΟΣ 2021-2022


2η ΕΞΕΤΑΣΤΙΚΗ
ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ

Περιεχόμενα
1. ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑΤΩΝ ΜΕΤΑΓΛΩΤΤΙΣΤΩΝ ........................................................... 3
1.1 1η Άσκηση μεταγλωττιστές ................................................................................................... 3
1.2 2η Άσκηση μεταγλωττιστές ................................................................................................... 4
1.3 3η Άσκηση μεταγλωττιστές ................................................................................................... 6
2. ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑΤΩΝ UML ................................................................................. 8
2.1 1η Άσκηση UML ..................................................................................................................... 8
2.2 2η Άσκηση UML ..................................................................................................................... 9
2.3 3η Άσκηση UML ................................................................................................................... 10
3. ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ JAVA ................................................................................................. 12
3.1 1η Άσκηση Java .................................................................................................................... 12
3.2 2η Άσκηση Java .................................................................................................................... 15
3.3 3η Άσκηση Java .................................................................................................................... 16
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ

1. ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑΤΩΝ ΜΕΤΑΓΛΩΤΤΙΣΤΩΝ


1.1 1η Άσκηση μεταγλωττιστές
Δίνεται η παρακάτω γραμματική. Μετασχηματίστε τη γραμματική ώστε να είναι κατάλληλη για
LL(1) ανίχνευση. Στη συνέχεια δώστε τον κώδικα Java που αντιστοιχεί στη μέθοδο που υλοποιεί τον
κάθε κανόνα σε έναν συντακτικό αναλυτή αναδρομικής κατάβασης.

Για την κλήση του λεκτικού αναλυτή να θεωρήσετε δεδομένη τη μέθοδο private String lex() η οποία
κάθε φορά που καλείται επιστρέφει το επόμενο τερματικό σύμβολο της προς αναγνώρισης
συμβολοσειράς. Θεωρήστε ότι η πρώτη κλήση της μεθόδου έχει πραγματοποιηθεί και η
επιστρεφόμενη τιμή είναι αποθηκευμένη στην μεταβλητή token.
Θεωρήστε επίσης δεδομένη την private void error() για τη διαχείριση των σφαλμάτων.

Απάντηση

Με απαλοιφή αριστερής διαδρομής έχουμε:


A --> a A a X | b A X | a b A X
X --> b X | ε
Με παραγοντοποίηση:
Α --> a Y | b A X
Y --> A a X | b A X
X --> b X | ε

Κώδικας Java
private void Α(){
if ("a".equals(token)){
token = lex();
Y();
}
else if ("b".equals(token)){
token = lex();
A();
X();
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ

}
else error(...);
}

private void Y(){


if ("b".equals(token)){
token = lex();
A();
X();
}
else {
A();
if ("a".equals(token)){
token = lex();
X();
}
else error(...);
}

private void Y(){


if ("b".equals(token)){
token = lex();
X();
}

1.2 2η Άσκηση μεταγλωττιστές


Δίνεται η παρακάτω γραμματική. Μετασχηματίστε τη γραμματική ώστε να είναι κατάλληλη για
LL(1) ανίχνευση. Στη συνέχεια δώστε τον κώδικα Java που αντιστοιχεί στη μέθοδο που υλοποιεί τον
κάθε κανόνα σε έναν συντακτικό αναλυτή αναδρομικής κατάβασης.

Για την κλήση του λεκτικού αναλυτή να θεωρήσετε δεδομένη τη μέθοδο private String lex() η οποία
κάθε φορά που καλείται επιστρέφει το επόμενο τερματικό σύμβολο της προς αναγνώρισης
συμβολοσειράς. Θεωρήστε ότι η πρώτη κλήση της μεθόδου έχει πραγματοποιηθεί και η
επιστρεφόμενη τιμή είναι αποθηκευμένη στην μεταβλητή token.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ

Θεωρήστε επίσης δεδομένη την private void error() για τη διαχείριση των σφαλμάτων.

Απάντηση
Με απαλοιφή αριστερής διαδρομής έχουμε:
S --> c S A
A --> b A | b c A | ε
Με παραγοντοποίηση:
S --> c S A
A --> b Β | ε
Β --> A | c A
Ο κώδικας Java:

private void S(){


if ("c".equals(token)){
token = lex();
S();
A();
}
else error(...);
}

private void A(){


if ("b".equals(token)){
token = lex();
A();
}
}

private void B(){


if ("c".equals(token)){
token = lex();
A();
}
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ

else A();
}

1.3 3η Άσκηση μεταγλωττιστές


Δίνεται η παρακάτω γραμματική. Μετασχηματίστε τη γραμματική ώστε να είναι κατάλληλη για
LL(1) ανίχνευση. Στη συνέχεια δώστε τον κώδικα Java που αντιστοιχεί στη μέθοδο που υλοποιεί τον
κάθε κανόνα σε έναν συντακτικό αναλυτή αναδρομικής κατάβασης.

Για την κλήση του λεκτικού αναλυτή να θεωρήσετε δεδομένη τη μέθοδο private String lex() η οποία
κάθε φορά που καλείται επιστρέφει το επόμενο τερματικό σύμβολο της προς αναγνώρισης
συμβολοσειράς. Θεωρήστε ότι η πρώτη κλήση της μεθόδου έχει πραγματοποιηθεί και η
επιστρεφόμενη τιμή είναι αποθηκευμένη στην μεταβλητή token.
Θεωρήστε επίσης δεδομένη την private void error() για τη διαχείριση των σφαλμάτων.

Απάντηση
Με απαλοιφή αριστερής διαδρομής έχουμε:
S --> c b S A | c A
A --> a A | c A | ε
Με παραγοντοποίηση:
S --> c B
B --> b S A | A
A --> a A | c A | ε

Ο κώδικας Java:

private void S(){


if ("c".equals(token)){
token = lex();
B();
}
else error(...);
}

private void B(){


ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ

if ("b".equals(token)){
token = lex();
S();
A();
}
else A();
}

private void A(){


if ("a".equals(token)){
token = lex();
A();
}
else if ("c".equals(token)){
token = lex();
A();
}
}
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ

2. ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑΤΩΝ UML

2.1 1η Άσκηση UML


Σας δίνονται οι παρακάτω λειτουργικές προδιαγραφές ενός διαδικτυακού συστήματος παρακολούθησης
εκπόνησης διπλωματικών εργασιών:
• Στο σύστημα θα συνδέονται φοιτητές και καθηγητές (επιβλέποντες των εργασιών), ενώ θα υπάρχει και
διαχειριστής που θα μπορεί να εκτελεί όλες τις λειτουργίες των καθηγητών και κάποιες επιπλέον.
• Οι καθηγητές θα μπορούν να αναρτούν θέματα εργασιών, να αναθέτουν μια εργασία σε έναν από τους
φοιτητές που εκδήλωσαν ενδιαφέρον για αυτή, και να αξιολογούν τις αναφορές προόδου των φοιτη-
τών.
• Σε περίπτωση που ο καθηγητής αξιολογεί την τελική αναφορά μιας εργασίας η βαθμολογία που υπο-
βάλει στο σύστημα θα πρέπει να αποστέλλεται και στο Πληροφοριακό Σύστημα (ΠΣ) της Γραμματείας,
καθώς θα είναι ο τελικός βαθμός της εργασίας.
• Αν σε κάποια ενδιάμεση αναφορά προόδου ή και στην τελική αναφορά ο καθηγητής απορρίψει την
εργασία, τότε η εργασία διακόπτεται. Σε αυτή την περίπτωση θα ενημερώνεται και το ΠΣ της Γραμμα-
τείας.
• Οι φοιτητές θα μπορούν να εκδηλώνουν ενδιαφέρον ώστε να αναλάβουν μια συγκεκριμένη εργασία,
να υποβάλουν αναφορές προόδου και να υποβάλουν μαζί με την αναφορά και το συνοδευτικό κείμενο
της εργασίας στη μορφή που αυτή βρίσκεται, καθώς και να βλέπουν τις αξιολογήσεις των καθηγητών.
• Τόσο οι καθηγητές, όσο και οι φοιτητές θα συνδέονται στο σύστημα μέσω του ΠΣ του Πανεπιστημίου
(δηλαδή χρησιμοποιώντας τους ιδρυματικούς τους λογαριασμούς).
• Ο διαχειριστής θα μπορεί να εξάγει αναφορές και στατιστικά χρήσης τους συστήματος και να διαχειρί-
ζεται τους λογαριασμούς των υπόλοιπων χρηστών.
Να κατασκευαστεί το διάγραμμα Περιπτώσεων Χρήσης.
Απάντηση
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ

2.2 2η Άσκηση UML


Σχεδιάστε ένα διάγραμμα κλάσεων που να απεικονίζει τις πληροφορίες που δίνονται στη συνέχεια
αναφορικά με ένα πληροφοριακό σύστημα που υποστηρίζει τη λειτουργία μιας ειδησεογραφικής
πύλης. Στις κλάσεις, που θα προσδιορίσετε, να προσθέσετε (όπου είναι δυνατό) τα κατάλληλα
πεδία (με τον τύπο που εξυπηρετεί καλύτερα το ρόλο τους) και μεθόδους (παραλείποντας τις
παραμέτρους και τον τύπο επιστροφής που αυτές μπορεί να έχουν).
«Οι χρήστες του συστήματος διαχωρίζονται σε διαχειριστές, συνδρομητές, συντάκτες και φωτο-
γράφους. Όλοι οι χρήστες έχουν κοινά χαρακτηριστικά που περιλαμβάνουν το username, το pass-
word, το όνομα και το επίθετο. Για κάθε κατηγορία χρήστη το σύστημα διαμορφώνει κατάλληλη
έκδοση του GUI. Για τους συνδρομητές διατηρεί επιπλέον την ημερομηνία εγγραφής, για τους συ-
ντάκτες τον ΑΦΜ και τον ΑΔΤ, ενώ για τους φωτογράφους τον αριθμό επαγγελματικής κάρτας
και τον κωδικό διαπίστευσης.
Ένα άρθρο θα πρέπει να ανήκει σε μια από τις υποκατηγορίες: Επικαιρότητας, Τεχνικό ή Αφιέ-
ρωμα. Όλα τα άρθρα έχουν κοινά χαρακτηριστικά που περιλαμβάνουν τον τίτλο, το κείμενο και
την ημερομηνία ανάρτησης. Δεν υπάρχουν άρθρα που δεν ανήκουν σε κάποια υποκατηγορία.
Ένα άρθρο μπορεί να περιλαμβάνει πολλές φωτογραφίες που μπορεί να είναι είτε αγορασμένες,
είτε να έχουν τραβηχτεί από κάποιον από τους φωτογράφους της επιχείρησης. Μια φωτογραφία
μπορεί να τοποθετείται σε πολλά άρθρα.
Ο συντάκτης ενός άρθρου μπορεί να είναι μόνιμος ή εξωτερικός συνεργάτης και στην περίπτωση
εξωτερικού στο σύστημα διατηρούμε και την αμοιβή του. Οι εξωτερικοί συντάκτες γράφουν απο-
κλειστικά και μόνο τεχνικά άρθρα. Κάθε άρθρο έχει έναν αρχισυντάκτη ο οποίος αναλαμβάνει
πολλά άρθρα και είναι υποχρεωτικά μόνιμος εργαζόμενος της επιχείρησης.»
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ

Απάντηση

2.3 3η Άσκηση UML

Σχεδιάστε ένα διάγραμμα κλάσεων που να απεικονίζει τις πληροφορίες που δίνονται στη συνέχεια
αναφορικά με ένα πληροφοριακό σύστημα που υποστηρίζει τη λειτουργία ενός ιδιωτικού σχο-
λείου. Στις κλάσεις που θα προσδιορίσετε να προσθέσετε (όπου είναι δυνατό) τα κατάλληλα πεδία
(με τον τύπο που εξυπηρετεί καλύτερα το ρόλο τους) και μεθόδους (παραλείποντας τις παραμέ-
τρους και τον τύπο επιστροφής που αυτές μπορεί να έχουν).
«Οι εργαζόμενοι του σχολείου διακρίνονται σε διδάσκοντες (με υποκατηγορίες τους δάσκαλους,
τους γυμναστές και τους καθηγητές ξένης γλώσσας) και σε οδηγούς λεωφορείου. Επιπλέον υπάρ-
χει και ένας Διευθυντής. Τα κοινά στοιχεία που κρατάει το σύστημα για όλους τους εργαζόμενους
περιλαμβάνουν το ονοματεπώνυμο, τον ΑΜΚΑ και την ημερομηνία πρόσληψης. Για τους οδηγούς
διατηρεί επιπρόσθετα τον αριθμό διπλώματος οδήγησης, ενώ για τους διδάσκοντες ένα σύντομο
βιογραφικό σημείωμα. Σε κάθε δάσκαλο ανατίθεται ένα τμήμα. Εκτός από το δάσκαλο κάθε τμήμα
έχει ένα γυμναστή και δύο καθηγητές ξένης γλώσσας (γυμναστές και καθηγητές ξένων γλωσσών
διδάσκουν σε πολλά τμήματα). Δεν μπορούμε να έχουμε στο σύστημα εργαζόμενο που δεν ανήκει
σε κάποια από τις κατηγορίες που προαναφέρθηκαν, ούτε διδάσκοντα που δεν ανήκει σε συγκε-
κριμένη υποκατηγορία.
Κάθε τμήμα απαρτίζεται από έως και 16 μαθητές για τους οποίους το σύστημα αποθηκεύει ονο-
ματεπώνυμο και ΑΚΜΑ καθώς και το αν υπάρχουν αδέλφια του που φοιτούν στο σχολείο. Κάθε
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ

μαθητής εγγράφεται σε ένα τμήμα και επίσης έχει έναν κηδεμόνα. Για τον κηδεμόνα το σύστημα
διατηρεί το ονοματεπώνυμο του, το ΑΦΜ και πληροφορίες για τα δίδακτρα που καλύπτει (το
ποσό των διδάκτρων ανά μαθητή του οποίου καλύπτει τα έξοδα, την ημερομηνία πληρωμής και
το χρονικό διάστημα).
Κάθε μαθητής χρησιμοποιεί ένα λεωφορείο για την μετακίνησή του προς και από το σχολείο. Για
το λεωφορείο το σύστημα κρατάει τον αριθμό κυκλοφορίας, την ημερομηνία του τελευταίου ser-
vice και τα km που έχει διανύσει από το τελευταίο service (κάθε φορά που ολοκληρώνεται ένα
δρομολόγιο ενημερώνεται κατάλληλα η τιμή). Κάθε λεωφορείο χρησιμοποιείται από πολλούς ο-
δηγούς που εκτελούν συγκεκριμένα δρομολόγια με αυτό. Κάθε δρομολόγιο χαρακτηρίζεται από
την αφετηρία, τον προορισμό του, την ημερομηνία και την ώρα αναχώρησης. Τέλος, σε κάθε λε-
ωφορείο μπορούν να επιβαίνουν έως 24 μαθητές.»

Απάντηση
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ

3. ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ JAVA

3.1 1η Άσκηση Java

Γράψτε τον κώδικα μιας εφαρμογής JAVA, η οποία θα ικανοποιεί τις παρακάτω απαιτήσεις:
Η κλάση Director (σκηνοθέτης) περιλαμβάνει το όνομα και το επώνυμο του σκηνοθέτη. Είναι
ημιτελής και πρέπει να τη συμπληρώσετε, χωρίς να μεταβάλλετε τα υπάρχοντα πεδία, ώστε να μην
έχει λάθη μεταγλώττισης, να δημιουργεί σκηνοθέτες με ονοματεπώνυμο και η κλήση της μεθόδου
“toString()” της κλάσης να εκτυπώνει:
π.χ. Director: Firstname=Steven, Lastname=Spielberg
Το όνομα και το επώνυμο του κάθε σκηνοθέτη να είναι read-only.

Η κλάση Movie (ταινία) περιλαμβάνει το όνομα του σκηνοθέτη της ταινίας, τον τίτλο της ταινίας και
το έτος παραγωγής της ταινίας. Το πεδία της κάθε ταινίας είναι read-only (μόνο για ανάγνωση, δεν
τροποποιούνται μετά την αρχικοποίησή τους). Επίσης, οι ταινίες μπορεί να είναι είτε Action, είτε
Comedy και θα πρέπει να υλοποιηθούν αντίστοιχα ως υποκλάσεις. Οι υποκλάσεις θα πρέπει να
διαθέτουν μέθοδο “toString()” που να εκτυπώνει:
π.χ. Movie: Director= Steven Spielberg, Title=Hook, Year=1991, Category= Αction
Τέλος θα υλοποιήσετε την κλάση VideoStore, η οποία θα είναι υπεύθυνη για τη διατήρηση μιας
λίστας ταινιών. Η εν λόγω λίστα ταινιών, θα αρχικοποιείται στον κατασκευαστή (Constructor) της
κλάσης, με μερικές ταινίες της επιλογής σας (3 ταινίες).
Η κλάση VideoStore θα διαθέτει μέθοδο main (για την εκτέλεση του προγράμματος), με τις εξής
επιλογές για τον χρήστη (υποθέτουμε ότι θα δώσει σωστές επιλογές):
1. Αναζήτηση ταινίας ανά τίτλο (πλήρης ταύτιση τίτλου) και εκτύπωση στοιχείων ταινίας
(υποθέτουμε ότι οι τίτλοι είναι μοναδικοί). Αν δεν υπάρχει βγαίνει το σχετικό μήνυμα.
2. Έξοδος από το πρόγραμμα.

Απάντηση

public class Director {


private final String firstName;
private final String lastName;
public Director(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
@Override
public String toString() {
return "Director{" +
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ

"Firstname='" + firstName + '\'' +


", Lastname='" + lastName + '\'' +
'}';
}
}

public class Movie {


private final Director director;
private final String title;
private final Integer year;
private final MovieCategory category;

public Movie(Director director, String title, int year, MovieCategory cat) {


this.director = director;
this.title = title;
this.year = year;
category =cat;
}
public Director getDirector() {
return director;
}
public String getTitle() {
return title;
}
public Integer getYear() {
return year;
}
public String getCategory() {
return category.getType();
}
public String toString() {
return "Movie{" +
"director=" + director +
", title='" + title + '\'' +
", year=" + year +
", category='" + getCategory() + '\'' +
'}';
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ

}
}

public class VideoStore {


private List<Movie> movieList;
public VideoStore() {
Director spielberg = new Director("Steven","Spielberg");
Movie jurassic = new Movie(spielberg,"Jurassic Park",1993, new
Action());
Movie hook = new Movie(spielberg,"Hook",1991,new Action());
Director scorsese = new Director("Martin","Scorsese");
Movie irishman = new Movie(scorsese,"The Irishman",2019,new Drama());
movieList = new ArrayList<>();
movieList.add(jurassic);
movieList.add(hook);
movieList.add(irishman);
}
private void findAndPrintMovieByTitle(){
System.out.println("Give movie title:");
Scanner scanner = new Scanner(System.in);
String title = scanner.nextLine();
for (Movie movie : movieList){
if (movie.getTitle().equalsIgnoreCase(title)){
System.out.println(movie);
return;
}
}
System.out.println("No movie found...");
}
public static void main(String[] args) {
VideoStore eapVideoStore = new VideoStore();
Scanner scanner = new Scanner(System.in);
while (true){
System.out.println("Give an option:");
System.out.println("1. Search by Title\n" +
"2. Exit");
int choice = scanner.nextInt();
switch (choice){
case 1:eapVideoStore.findAndPrintMovieByTitle();break;
case 2:return;
}
}
}
}

public abstract class MovieCategory {


public abstract String getType();
}

public class Action extends MovieCategory {


public String getType() {
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ

return "Action";
}
}

public class Drama extends MovieCategory {


public String getType() {
return "Drama";
}
}

3.2 2η Άσκηση Java

Γράψτε τον κώδικα μιας εφαρμογής JAVA, η οποία θα ικανοποιεί τις παρακάτω απαιτήσεις:
Η κλάση Author (συγγραφέας) περιλαμβάνει το όνομα και το επώνυμο του συγγραφέα. Είναι
ημιτελής και πρέπει να τη συμπληρώσετε, χωρίς να μεταβάλλετε τα υπάρχοντα πεδία, ώστε να μην
έχει λάθη μεταγλώττισης, να δημιουργεί συγγραφείς με ονοματεπώνυμο και η κλήση της μεθόδου
“toString()” της κλάσης να εκτυπώνει:
π.χ. Author: Firstname=Stephen, Lastname=King
Το όνομα και το επώνυμο του κάθε συγγραφέα να είναι read-only.

Η κλάση Book (βιβλίο) περιλαμβάνει το όνομα του συγγραφέα του βιβλίου, τον τίτλο του βιβλίου
και το έτος έκδοσης του βιβλίου. Το πεδία του κάθε βιβλίου είναι επίσης read-only (μόνο για
ανάγνωση, δεν τροποποιούνται μετά την αρχικοποίησή τους). Επίσης ένα βιβλίο μπορεί να είναι
είτε Novel είτε Mystery και θα πρέπει να υλοποιηθούν αντίστοιχα οι υποκλάσεις. Οι υποκλάσεις θα
πρέπει να διαθέτουν μέθοδο “toString()” που να εκτυπώνει:
π.χ.Book: Author= Stephen King, Title=It, Year=1986, Category= Mystery
Τέλος θα υλοποιήσετε την κλάση BookStore, η οποία θα είναι υπεύθυνη για τη διατήρηση μιας
λίστας βιβλίων. Η εν λόγω λίστα βιβλίων, θα αρχικοποιείται στον κατασκευαστή (Constructor) της
κλάσης, με μερικά βιβλία της επιλογής σας (3 βιβλία).
Η κλάση BookStore θα διαθέτει μέθοδο main (για την εκτέλεση του προγράμματος), με τις εξής
επιλογές για τον χρήστη (υποθέτουμε ότι θα δώσει σωστές επιλογές):
1. Αναζήτηση βιβλίου ανά τίτλο (πλήρης ταύτιση τίτλου) και εκτύπωση στοιχείων βιβλίου
(υποθέτουμε ότι οι τίτλοι είναι μοναδικοί). Αν δεν υπάρχει βγαίνει το σχετικό μήνυμα.
2. Έξοδος από το πρόγραμμα
Απάντηση

Η απάντηση είναι ίδια με αυτή της άσκησης 1 με απλή αλλαγή των ονομάτων των κλάσεων.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ

3.3 3η Άσκηση Java

Γράψτε τον κώδικα μιας εφαρμογής JAVA, η οποία θα ικανοποιεί τις παρακάτω απαιτήσεις:
Η κλάση Singer (τραγουδιστής) περιλαμβάνει το όνομα και το επώνυμο του τραγουδιστή. Είναι
ημιτελής και πρέπει να τη συμπληρώσετε, χωρίς να μεταβάλλετε τα υπάρχοντα πεδία, ώστε να μην
έχει λάθη μεταγλώττισης, να δημιουργεί τραγουδιστές με ονοματεπώνυμο και η κλήση της
μεθόδου “toString()” της κλάσης να εκτυπώνει:
π.χ. Signer: Firstname=Michael, Lastname=Jackson
Το όνομα και το επώνυμο του κάθε τραγουδιστή να είναι read-only.

Η κλάση Song (τραγούδι) περιλαμβάνει το όνομα του τραγουδιστή, τον τίτλο του τραγουδιού και
το έτος κυκλοφορίας του τραγουδιού. Τα πεδία του κάθε τραγουδιού είναι read-only (μόνο για
ανάγνωση και δεν τροποποιούνται μετά την αρχικοποίησή τους). Επίσης, τα τραγούδια μπορεί να
είναι είτε Pop, είτε Rock και θα πρέπει να υλοποιηθούν αντίστοιχα ως υποκλάσεις. Οι υποκλάσεις
θα πρέπει να διαθέτουν μέθοδο “toString()” που να εκτυπώνει:
π.χ. Song: Singer= Michael Jackson, Title=Billie Jean, Year=1982, Category=Pop
Τέλος θα υλοποιήσετε την κλάση SongStore, η οποία θα είναι υπεύθυνη για τη διατήρηση μιας
λίστας τραγουδιών. Η εν λόγω λίστα τραγουδιών, θα αρχικοποιείται στον κατασκευαστή
(Constructor) της κλάσης, με μερικά τραγούδια της επιλογής σας (3 τραγούδια).
Η κλάση SongStore θα διαθέτει μέθοδο main (για την εκτέλεση του προγράμματος), με τις εξής
επιλογές για τον χρήστη (υποθέτουμε ότι θα δώσει σωστές επιλογές):
1. Αναζήτηση τραγουδιού ανά τίτλο (πλήρης ταύτιση τίτλου) και εκτύπωση στοιχείων τρα-
γουδιού (υποθέτουμε ότι οι τίτλοι είναι μοναδικοί). Αν δεν υπάρχει βγαίνει το σχετικό
μήνυμα.
Έξοδος από το πρόγραμμα

Απάντηση

Η απάντηση είναι ίδια με αυτή της άσκησης 1 με απλή αλλαγή των ονομάτων των κλάσεων

You might also like