Professional Documents
Culture Documents
Πλη24 2022-2023 Δευτερη Εξεταση - Απαντησεισ_v1.10
Πλη24 2022-2023 Δευτερη Εξεταση - Απαντησεισ_v1.10
Πλη24 2022-2023 Δευτερη Εξεταση - Απαντησεισ_v1.10
Οδηγίες: Η διάρκεια της εξέτασης είναι τρεις ώρες και τριάντα λεπτά (3:30) ώρες αυστηρά. Ισχύουν όσα αναφέρονται
στους Κανονισμούς Εξετάσεων του ΕΑΠ γενικότερα και της ΘΕ ειδικότερα. Τα κριτήρια αξιολόγησης και το βάρος κάθε
κριτηρίου αναγράφονται στο τέλος του κειμένου των θεμάτων. Το σύνολο των μορίων που αντιστοιχεί στο άριστα (10)
είναι 100. Επιτυχόντες θεωρούνται όσοι/ες φοιτητές/τριες συγκεντρώσουν τουλάχιστον 50 μόρια, τα οποία αντιστοιχούν
στον ελάχιστο προβιβάσιμο βαθμό (5).
Ο πελάτης εισάγει στην οθόνη αγοράς προϊόντος τον κωδικό του προϊόντος που επιθυμεί να αγοράσει. Το
σύστημα αναζητά το επιθυμητό προϊόν (χρησιμοποιώντας τον κωδικό αριθμό του) στον Κατάλογο Προϊόντων
και εμφανίζει τον αριθμό των διαθέσιμων τεμαχίων (το απόθεμα του προϊόντος) στην οθόνη αγοράς
προϊόντος.
Αν ο αριθμός αυτός είναι μεγαλύτερος του μηδενός (δηλαδή υπάρχουν διαθέσιμα τεμάχια από το επιθυμητό
προϊόν), τότε καλείται η Π.Χ. «Ολοκλήρωση Αγοράς».
Αν όμως ο αριθμός αυτός είναι μηδέν (δηλαδή δεν υπάρχουν διαθέσιμα τεμάχια από το επιθυμητό προϊόν),
τότε εμφανίζεται σε ξεχωριστό παράθυρο κατάλληλο ενημερωτικό μήνυμα.
Ερώτημα
Σχεδιάστε το διάγραμμα ακολουθίας που απεικονίζει το παραπάνω σενάριο. Όπου θεωρείτε ότι απαιτείται,
να κάνετε τις αναγκαίες παραδοχές ώστε το διάγραμμα να είναι όσο το δυνατόν πλήρες.
Απάντηση
Β’ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ 1
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2022-2023
Τα προς επισκευή οχήματα διαθέτουν έναν ιδιοκτήτη (στον οποίο είναι δυνατό να ανήκουν πολλά προς
επισκευή οχήματα), διακρίνονται σε επιβατικά και σε φορτηγά και χαρακτηρίζονται από τον αριθμό
κυκλοφορίας και τον κατασκευαστή. Τα χαρακτηριστικά αυτά είναι άμεσα διαθέσιμα σε όλες τις κατηγορίες
οχημάτων (και μόνο σε αυτές).
Τα επιβατικά οχήματα μπορεί να είναι είτε συμβατικού κινητήρα, είτε ηλεκτρικά. Τα επιβατικά οχήματα
συμβατικού κινητήρα χαρακτηρίζονται από τον τύπο καυσίμου που χρησιμοποιούν (αμόλυβδη, πετρέλαιο,
υγραέριο), ενώ τα ηλεκτρικά επιβατικά οχήματα χαρακτηρίζονται από την αυτονομία τους, η οποία
εκφράζεται σε ώρες συνεχούς λειτουργίας. Κάθε ηλεκτρικό επιβατικό όχημα διαθέτει ενσωματωμένη μια (μη
αποσπώμενη) κύρια μπαταρία και μία (αποσπώμενη) εφεδρική μπαταρία.
Επισημαίνεται ότι:
• Κάθε όχημα ανήκει υποχρεωτικά σε μία από τις υπάρχουσες υποκατηγορίες.
• Όλα τα οχήματα διαθέτουν μία μέθοδο για την εμφάνιση των χαρακτηριστικών τους, τη
μέθοδο toString().
• Τα επιβατικά οχήματα υλοποιούν τη διεπαφή / διασύνδεση ΙCalculateOperatingCost για τον
υπολογισμό του κόστους λειτουργίας τους, η οποία διαθέτει τη μέθοδο calcDailyCost(), για
τον προσδιορισμό του καθημερινού κόστους λειτουργίας.
Β’ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ 2
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2022-2023
Ερώτημα
Να σχεδιαστεί το διάγραμμα κλάσεων που απεικονίζει τις πληροφορίες που δίνονται παραπάνω. Στις κλάσεις
που θα χρησιμοποιήσετε να προσθέσετε (όπου είναι δυνατό) τα κατάλληλα πεδία (με τον τύπο που
εξυπηρετεί καλύτερα το ρόλο τους) και μεθόδους (παραλείποντας τις παραμέτρους και τον τύπο επιστροφής
που αυτές μπορεί να έχουν). Επίσης, θα πρέπει να προσδιορίσετε σχέσεις με άλλες κλάσεις και
πολλαπλότητες.
Απάντηση
Β’ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ 3
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2022-2023
Η κλάση Car διαθέτει τη δική της υλοποίηση για τη μέθοδο toString(), η οποία επιστρέφει ένα μήνυμα της
μορφής «Το FIAT PUNTO διαθέτει κινητήρα εσωτερικής καύσης, και η μέση κατανάλωση του είναι 8 lt./
100χλμ.» Ένα αυτοκίνητο μπορεί να έχει είτε έναν κινητήρα εσωτερικής καύσης, είτε έναν ηλεκτροκινητήρα,
είτε και τους δύο μαζί (τα λεγόμενα υβριδικά).
Οι κινητήρες (Motor) μπορούν να είναι δυο τύπων: Εσωτερικής Καύσης (Fuel) ή Ηλεκτροκινητήρες (Electric).
Οι κινητήρες εσωτερικής καύσης χαρακτηρίζονται από το πλήθος των πιστονιών (pistons), ενώ οι
ηλεκτροκινητήρες από την ισχύ τους (power).
Και οι δυο τύποι κινητήρα υλοποιούν τη διεπαφή Malfunction, η οποία διαθέτει τη μοναδική αφηρημένη
μέθοδο: double returnDamage(). Για τον κινητήρα Εσωτερικής Καύσης η υλοποίηση της μεθόδου εκτυπώνει
στην οθόνη το πλήθος των πιστονιών που έχουν χαλάσει (τυχαία από 1 έως το μέγιστο αριθμό πιστονιών),
ενώ για τους Ηλεκτροκινητήρες η εν λόγω μέθοδος εκτυπώνει την τρέχουσα ισχύ κατόπιν της εκδήλωσης του
προβλήματος (τυχαία από το 20% έως το 80% της μέγιστης ισχύος - power).
• περιέχει τη μέθοδο main. Στη μέθοδο main δημιουργήστε 4 αυτοκίνητα, διαφορετικών τύπων, με
χαρακτηριστικά της δικής σας επιλογής, τα οποία θα τοποθετήσετε σε μια λίστα carList. Στη συνέχεια,
θα διατρέξετε τη λίστα και θα εκτυπώσετε όλα τα βασικά χαρακτηριστικά του κάθε αυτοκινήτου
συμπεριλαμβανομένων και των υβριδικών, χρησιμοποιώντας τη μέθοδο toString().
• περιέχει τη μέθοδο findMaxPowerLoss() και τη μέθοδο findMostDamagedPistons(), οι οποίες
προσδιορίζουν τα αυτοκίνητα με τις μεγαλύτερες ζημιές. Για τα αυτοκίνητά αυτά να εκτυπώσετε
μήνυμα της μορφής «Το αυτοκίνητο FIAT PUNTO έχει 5 χαλασμένα πιστόνια» ή «Το αυτοκίνητο FIAT
PANTA έχει χάσει το 157 Watt από την αρχική του ισχύ». Για τα υβριδικά αυτοκίνητα κάνουμε τον
έλεγχο θεωρώντας ότι είναι και εσωτερικής καύσης, αλλά και ηλεκτρικά. Κάντε τον αντίστοιχο έλεγχο
για τα 4 αυτοκίνητα που έχετε δημιουργήσει.
Β’ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ 4
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2022-2023
Απάντηση
public interface Malfunction {
public int returnDamage();
}
import java.util.ArrayList;
public class Car {
private String manufucturer;
private String model;
private ArrayList<Motor> motorList;
private double consumption;
Β’ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ 5
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2022-2023
import java.util.Random;
public class Electric extends Motor implements Malfunction {
private int power;
public Electric(int p) {
power = p;
}
@Override
public String getType() {
return "ηλεκτροκινητήρα";
//return "electro ";
}
@Override
public int returnDamage() {
Random rand = new Random();
int pct = 20 + rand.nextInt(60);
return (power * pct) / 100;
}
}
import java.util.Random;
public class Fuel extends Motor implements Malfunction {
private int pistons;
public Fuel(int p) {
pistons = p;
}
@Override
public String getType() {
return "κινητήρα εσωτερικής καυσης";
//return "fuel ";
}
@Override
public int returnDamage() {
Random rand = new Random();
return (rand.nextInt(pistons)+1);
}
}
Β’ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ 6
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2022-2023
Απάντηση
import java.util.ArrayList;
public class Demo {
System.out.println("\n");
findMaxPowerLoss(cList);
findMostDamagedPistons(cList);
}
Β’ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ 7
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2022-2023
System.out.println("Το αυτοκίνητο " + maxC.getName() + " έχει χάσει " + maxP + "
Watt από την αρχική του ισχύ");
}
}
Β’ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ 8
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2022-2023
Αρχικό σύμβολο της γραμματικής είναι το σύμβολο S. Τα τερματικά σύμβολα της γραμματικής είναι τα %, #,
x, y και w.
Απάντηση
Στον κανόνα K και L έχουμε παραπάνω από μία δεξιές παραγωγές που ξεκινούν με μη τερματικό
σύμβολο ή ε. Κάνουμε αντικατάσταση του D στον L και του B στον K και η γραμματική γίνεται:
Απλοποιούμε τη γραμματική αντικαθιστώντας τα C και A με τις παραγωγές τους και απαλείφουμε τις
παραγωγές. Η γραμματική γίνεται:
Β’ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ 9
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2022-2023
Στον κανόνα K έχουμε παραπάνω από μία δεξιές παραγωγές που ξεκινούν με μη τερματικό σύμβολο ή ε.
Κάνουμε αντικατάσταση του L στον K και η γραμματική γίνεται:
Η παραπάνω γραμματική ικανοποιεί όλα τα κριτήρια για υλοποίηση με ρουτίνες αναδρομικής κατάβασης.
// K → x # L w D % Κ | y # L w D % Κ | w D % Κ | ε
private void Κ() {
if (token == 'x') {
K_common();
} else if (token == 'y') {
K_common();
} else if (token == 'w') {
Β’ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ 10
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2022-2023
token = lex.nextToken();
D();
if (token == '%') {
token = lex.nextToken();
K();
} else error("Syntax error");
}
}
// parses # L w D % Κ
private void K_common() {
token = lex.nextToken();
if (token == '#') {
token = lex.nextToken();
L();
if (token == 'w') {
token = lex.nextToken();
D();
if (token == '%') {
token = lex.nextToken();
K();
} else error("Syntax error");
} else error("Syntax error");
} else error("Syntax error");
}
// L → x # L | y # L | ε
private void L() {
if (token == 'x') {
token = lex.nextToken();
if (token == '#') {
token = lex.nextToken();
L();
} else error("Syntax error");
}
else if (token == 'y') {
token = lex.nextToken();
if (token == '#') {
token = lex.nextToken();
L();
} else error("Syntax error");
}
}
// B → L w D
private void B() {
L();
Β’ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ 11
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2022-2023
if (token == 'w') {
token = lex.nextToken();
D();
} else error("Syntax error");
// D → x | y
private void D() {
if (token == 'x')
token = lex.nextToken();
else if (token == 'y')
token = lex.nextToken();
else error("Syntax error");
}
2. Κατάλογος προϊόντων:
a. Η πλατφόρμα θα πρέπει να παρέχει έναν κατάλογο διαθέσιμων προϊόντων.
b. Τα προϊόντα πρέπει να κατηγοριοποιούνται και να μπορούν να αναζητηθούν.
c. Κάθε προϊόν πρέπει να έχει λεπτομερή περιγραφή, τιμή και διαθέσιμο απόθεμα.
3. Καλάθι αγορών:
a. Οι χρήστες θα πρέπει να μπορούν να προσθέτουν προϊόντα σε ένα καλάθι αγορών.
b. Το καλάθι αγορών θα πρέπει να επιτρέπει στους χρήστες να τροποποιούν ποσότητες, να
αφαιρούν προϊόντα και να υπολογίζουν το συνολικό κόστος.
Το σύστημα υποστηρίζει τους ρόλους «Διαχειριστής», «Υπάλληλος», «Πελάτης» και «Μη καταχωρημένος
πελάτης» .
Γράψτε 5 ιστορίες χρηστών από την παραπάνω λίστα απαιτήσεων σε τυποποιημένη μορφή. Η
τυποποιημένη μορφή είναι:
Β’ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ 12
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2022-2023
Απάντηση
θέλω να δημιουργήσω έναν λογαριασμό με τη διεύθυνση ηλεκτρονικού ταχυδρομείου και τον κωδικό
πρόσβασής μου,
Ως «πελάτης»,
θέλω να μπορώ να επαναφέρω τον κωδικό πρόσβασής μου εάν τον ξεχάσω,
Ως πελάτης,
θέλω να μπορώ να ενημερώνω τα προσωπικά μου στοιχεία (π.χ. όνομα, διεύθυνση) στις ρυθμίσεις του
λογαριασμού μου,
2. Κατάλογος προϊόντων:
Ως «πελάτης»,
Ως «πελάτης»,
Ως «πελάτης»,
Β’ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ 13
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2022-2023
3.Καλάθι αγορών:
Ως «πελάτης»,
Ως «πελάτης»,
θέλω να μπορώ να προσαρμόζω την ποσότητα των προϊόντων στο καλάθι αγορών μου,
Ως «πελάτης»,
έτσι ώστε να μπορώ να αφαιρέσω ανεπιθύμητα προϊόντα πριν από το check out.
Β’ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ 14
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2022-2023
Κριτήρια αξιολόγησης
ΣΥΝΟΛΟ 100
Β’ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ 15