Πλη24 2022-2023 Δευτερη Εξεταση - Απαντησεισ_v1.10

You might also like

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

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

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

ΤΕΛΙΚΗ ΕΞΕΤΑΣΗ (2η ΕΞΕΤΑΣΤΙΚΗ) –


ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑΤΩΝ
Τετάρτη 12 Ιουλίου 2023

Οδηγίες: Η διάρκεια της εξέτασης είναι τρεις ώρες και τριάντα λεπτά (3:30) ώρες αυστηρά. Ισχύουν όσα αναφέρονται
στους Κανονισμούς Εξετάσεων του ΕΑΠ γενικότερα και της ΘΕ ειδικότερα. Τα κριτήρια αξιολόγησης και το βάρος κάθε
κριτηρίου αναγράφονται στο τέλος του κειμένου των θεμάτων. Το σύνολο των μορίων που αντιστοιχεί στο άριστα (10)
είναι 100. Επιτυχόντες θεωρούνται όσοι/ες φοιτητές/τριες συγκεντρώσουν τουλάχιστον 50 μόρια, τα οποία αντιστοιχούν
στον ελάχιστο προβιβάσιμο βαθμό (5).

ΟΜΑΔΑ ΑΣΚΗΣΕΩΝ 1: Αντικειμενοστρεφής Ανάλυση και Σχεδιασμός (30 μονάδες)


Θέμα Α – Σχεδιασμός διαγράμματος ακολουθίας – ηλεκτρονικό κατάστημα [15 μονάδες]
Έστω το ακόλουθο σενάριο αναφορικά με την πώληση ενός προϊόντος στο πλαίσιο λειτουργίας ενός
ηλεκτρονικού καταστήματος.

Ο πελάτης εισάγει στην οθόνη αγοράς προϊόντος τον κωδικό του προϊόντος που επιθυμεί να αγοράσει. Το
σύστημα αναζητά το επιθυμητό προϊόν (χρησιμοποιώντας τον κωδικό αριθμό του) στον Κατάλογο Προϊόντων
και εμφανίζει τον αριθμό των διαθέσιμων τεμαχίων (το απόθεμα του προϊόντος) στην οθόνη αγοράς
προϊόντος.
Αν ο αριθμός αυτός είναι μεγαλύτερος του μηδενός (δηλαδή υπάρχουν διαθέσιμα τεμάχια από το επιθυμητό
προϊόν), τότε καλείται η Π.Χ. «Ολοκλήρωση Αγοράς».
Αν όμως ο αριθμός αυτός είναι μηδέν (δηλαδή δεν υπάρχουν διαθέσιμα τεμάχια από το επιθυμητό προϊόν),
τότε εμφανίζεται σε ξεχωριστό παράθυρο κατάλληλο ενημερωτικό μήνυμα.
Ερώτημα
Σχεδιάστε το διάγραμμα ακολουθίας που απεικονίζει το παραπάνω σενάριο. Όπου θεωρείτε ότι απαιτείται,
να κάνετε τις αναγκαίες παραδοχές ώστε το διάγραμμα να είναι όσο το δυνατόν πλήρες.

Απάντηση

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

Θέμα Β – Σχεδιασμός διαγράμματος κλάσεων – Συνεργείο Αυτοκινήτων [15 μονάδες]


Οι πληροφορίες που δίνονται στη συνέχεια αφορούν το πληροφοριακό σύστημα που χρησιμοποιείται από
ένα συνεργείο αυτοκινήτων.

Τα προς επισκευή οχήματα διαθέτουν έναν ιδιοκτήτη (στον οποίο είναι δυνατό να ανήκουν πολλά προς
επισκευή οχήματα), διακρίνονται σε επιβατικά και σε φορτηγά και χαρακτηρίζονται από τον αριθμό
κυκλοφορίας και τον κατασκευαστή. Τα χαρακτηριστικά αυτά είναι άμεσα διαθέσιμα σε όλες τις κατηγορίες
οχημάτων (και μόνο σε αυτές).
Τα επιβατικά οχήματα μπορεί να είναι είτε συμβατικού κινητήρα, είτε ηλεκτρικά. Τα επιβατικά οχήματα
συμβατικού κινητήρα χαρακτηρίζονται από τον τύπο καυσίμου που χρησιμοποιούν (αμόλυβδη, πετρέλαιο,
υγραέριο), ενώ τα ηλεκτρικά επιβατικά οχήματα χαρακτηρίζονται από την αυτονομία τους, η οποία
εκφράζεται σε ώρες συνεχούς λειτουργίας. Κάθε ηλεκτρικό επιβατικό όχημα διαθέτει ενσωματωμένη μια (μη
αποσπώμενη) κύρια μπαταρία και μία (αποσπώμενη) εφεδρική μπαταρία.
Επισημαίνεται ότι:
• Κάθε όχημα ανήκει υποχρεωτικά σε μία από τις υπάρχουσες υποκατηγορίες.
• Όλα τα οχήματα διαθέτουν μία μέθοδο για την εμφάνιση των χαρακτηριστικών τους, τη
μέθοδο toString().
• Τα επιβατικά οχήματα υλοποιούν τη διεπαφή / διασύνδεση ΙCalculateOperatingCost για τον
υπολογισμό του κόστους λειτουργίας τους, η οποία διαθέτει τη μέθοδο calcDailyCost(), για
τον προσδιορισμό του καθημερινού κόστους λειτουργίας.

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

Ερώτημα
Να σχεδιαστεί το διάγραμμα κλάσεων που απεικονίζει τις πληροφορίες που δίνονται παραπάνω. Στις κλάσεις
που θα χρησιμοποιήσετε να προσθέσετε (όπου είναι δυνατό) τα κατάλληλα πεδία (με τον τύπο που
εξυπηρετεί καλύτερα το ρόλο τους) και μεθόδους (παραλείποντας τις παραμέτρους και τον τύπο επιστροφής
που αυτές μπορεί να έχουν). Επίσης, θα πρέπει να προσδιορίσετε σχέσεις με άλλες κλάσεις και
πολλαπλότητες.

Απάντηση

ΟΜΑΔΑ ΑΣΚΗΣΕΩΝ 2: Αντικειμενοστρεφής Προγραμματισμός με Java (40 μονάδες)

Δίνονται οι παρακάτω απαιτήσεις σε μορφή κειμένου.

Ένα αυτοκίνητο (Car) χαρακτηρίζεται από τα ακόλουθα πεδία:


• το όνομα του κατασκευαστή (manufacturer)—π.χ. FIAT,
• το όνομα του μοντέλου (model)—π.χ. PUNTO,
• έναν πίνακα με τους κινητήρες που διαθέτει (motorList), καθώς και
• μια ενδεικτική, μέση τιμή κατανάλωσης (consumption) σε μορφή δεκαδικού αριθμού.

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

Η κλάση Car διαθέτει τη δική της υλοποίηση για τη μέθοδο toString(), η οποία επιστρέφει ένα μήνυμα της
μορφής «Το FIAT PUNTO διαθέτει κινητήρα εσωτερικής καύσης, και η μέση κατανάλωση του είναι 8 lt./
100χλμ.» Ένα αυτοκίνητο μπορεί να έχει είτε έναν κινητήρα εσωτερικής καύσης, είτε έναν ηλεκτροκινητήρα,
είτε και τους δύο μαζί (τα λεγόμενα υβριδικά).

Οι κινητήρες (Motor) μπορούν να είναι δυο τύπων: Εσωτερικής Καύσης (Fuel) ή Ηλεκτροκινητήρες (Electric).
Οι κινητήρες εσωτερικής καύσης χαρακτηρίζονται από το πλήθος των πιστονιών (pistons), ενώ οι
ηλεκτροκινητήρες από την ισχύ τους (power).

Και οι δυο τύποι κινητήρα υλοποιούν τη διεπαφή Malfunction, η οποία διαθέτει τη μοναδική αφηρημένη
μέθοδο: double returnDamage(). Για τον κινητήρα Εσωτερικής Καύσης η υλοποίηση της μεθόδου εκτυπώνει
στην οθόνη το πλήθος των πιστονιών που έχουν χαλάσει (τυχαία από 1 έως το μέγιστο αριθμό πιστονιών),
ενώ για τους Ηλεκτροκινητήρες η εν λόγω μέθοδος εκτυπώνει την τρέχουσα ισχύ κατόπιν της εκδήλωσης του
προβλήματος (τυχαία από το 20% έως το 80% της μέγιστης ισχύος - power).

Το σύστημα περιέχει επίσης την κλάση Demo ή οποία:

• περιέχει τη μέθοδο main. Στη μέθοδο main δημιουργήστε 4 αυτοκίνητα, διαφορετικών τύπων, με
χαρακτηριστικά της δικής σας επιλογής, τα οποία θα τοποθετήσετε σε μια λίστα carList. Στη συνέχεια,
θα διατρέξετε τη λίστα και θα εκτυπώσετε όλα τα βασικά χαρακτηριστικά του κάθε αυτοκινήτου
συμπεριλαμβανομένων και των υβριδικών, χρησιμοποιώντας τη μέθοδο toString().
• περιέχει τη μέθοδο findMaxPowerLoss() και τη μέθοδο findMostDamagedPistons(), οι οποίες
προσδιορίζουν τα αυτοκίνητα με τις μεγαλύτερες ζημιές. Για τα αυτοκίνητά αυτά να εκτυπώσετε
μήνυμα της μορφής «Το αυτοκίνητο FIAT PUNTO έχει 5 χαλασμένα πιστόνια» ή «Το αυτοκίνητο FIAT
PANTA έχει χάσει το 157 Watt από την αρχική του ισχύ». Για τα υβριδικά αυτοκίνητα κάνουμε τον
έλεγχο θεωρώντας ότι είναι και εσωτερικής καύσης, αλλά και ηλεκτρικά. Κάντε τον αντίστοιχο έλεγχο
για τα 4 αυτοκίνητα που έχετε δημιουργήσει.

Θέμα Α - Υλοποίηση κλάσεων και διεπαφής [20 μονάδες]


Να υλοποιήσετε τον κώδικα Java (κλάσεις, διεπαφή) που αντιστοιχεί στην παραπάνω περιγραφή.

Β’ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ 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;

public Car(String ma, String mo, double c) {


manufucturer = ma;
model = mo;
motorList = new ArrayList<Motor>();
consumption = c;
}

public void addMotor(Motor m) {


motorList.add(m);
}

public String toString() {


if (motorList.size()==0) {
return "Το αυτοκίνητο δεν έχει οριστεί σωστά!";
} else if (motorList.size()==1) {
return "Το " + getName() + " διαθέτει " + motorList.get(0).getType() + ",
και η μέση κατανάλωση του είναι: " + consumption + "lt./ 100χλμ.";
} else {
return "Το " + getName() + " είναι υβριδικό, και η μέση κατανάλωση του
είναι: " + consumption + "lt./ 100χλμ.";
}
}

public String getName() {


return manufucturer + " " + model;
}

public Fuel getFuelMotor() {


Fuel temp = null;
for (int i=0;i<motorList.size();i++) {
if (motorList.get(i).getType().equals("κινητήρα εσωτερικής καυσης")) {
temp = (Fuel) motorList.get(i);
break;
}
}
return temp;
}

public Electric getElectricMotor() {


Electric temp = null;
for (int i=0;i<motorList.size();i++) {
if (motorList.get(i).getType().equals("ηλεκτροκινητήρα")) {
temp = (Electric) motorList.get(i);
break;
}
}
return temp;
}

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

public abstract class Motor {


public abstract String getType();
}

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

Θέμα Β – Υλοποίηση κλάσεως Demo [20 μονάδες]


Να υλοποιήσετε την κλάση Demo που αντιστοιχεί στην παραπάνω περιγραφή.

Απάντηση

import java.util.ArrayList;
public class Demo {

public static void main(String[] args) {

Car c1 = new Car("Fiat", "Punto", 8.8);


c1.addMotor(new Fuel(6));
Car c2 = new Car("Fiat", "Panta", 6.8);
c2.addMotor(new Fuel(4));
Car c3 = new Car("Fiat", "Tipo", 5.8);
c3.addMotor(new Electric(1500));
c3.addMotor(new Fuel(8));
Car c4 = new Car("Fiat", "Brava", 3.8);
c4.addMotor(new Electric(1800));

ArrayList<Car> cList = new ArrayList<Car>();


cList.add(c1);
cList.add(c2);
cList.add(c3);
cList.add(c4);

for (int i=0; i<cList.size();i++) {


System.out.println(cList.get(i).toString());
}

System.out.println("\n");

findMaxPowerLoss(cList);
findMostDamagedPistons(cList);
}

private static void findMostDamagedPistons(ArrayList<Car> cList) {


Car maxC = cList.get(0);
int maxP = 0;

for (int i=1;i<cList.size();i++) {


Fuel f = cList.get(i).getFuelMotor();
if (f!=null) {
int damagedPistons = f.returnDamage();
if (maxP < damagedPistons) {
maxP = damagedPistons;
maxC = cList.get(i);
}
}
}

System.out.println("Το αυτοκίνητο " + maxC.getName() + " έχει " + maxP + "


χαλασμένα πιστόνια");

private static void findMaxPowerLoss(ArrayList<Car> cList) {


Car maxC = cList.get(0);
int maxP = 0;

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

for (int i=1;i<cList.size();i++) {


Electric e = cList.get(i).getElectricMotor();
if (e!=null) {
int reducedPower = e.returnDamage();
if (maxP < reducedPower) {
maxP = reducedPower;
maxC = cList.get(i);
}
}
}

System.out.println("Το αυτοκίνητο " + maxC.getName() + " έχει χάσει " + maxP + "
Watt από την αρχική του ισχύ");
}
}

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

Ομάδα ασκήσεων 3: Μεταγλωττιστές (20 μονάδες)

Δίνεται η παρακάτω γραμματική:

Αρχικό σύμβολο της γραμματικής είναι το σύμβολο S. Τα τερματικά σύμβολα της γραμματικής είναι τα %, #,
x, y και w.

Θέμα Α - Μετασχηματισμός γραμματικής (10 μονάδες)


Μετασχηματίστε τη γραμματική ώστε να είναι κατάλληλη για ανίχνευση με ρουτίνες αναδρομικής
κατάβασης. Εισάγετε βήμα - βήμα τους αναγκαίους μετασχηματισμούς τεκμηριώνοντας κάθε φορά την
αναγκαιότητα του μετασχηματισμού.

Απάντηση

Η γραμματική παρουσιάζει άμεση αριστερή αναδρομή στους κανόνες A και C.


Αίρουμε την άμεση αναδρομή εισάγοντας τους κανόνες Κ και L και η γραμματική γίνεται:

Στον κανόνα K και L έχουμε παραπάνω από μία δεξιές παραγωγές που ξεκινούν με μη τερματικό
σύμβολο ή ε. Κάνουμε αντικατάσταση του D στον L και του B στον K και η γραμματική γίνεται:

Απλοποιούμε τη γραμματική αντικαθιστώντας τα C και A με τις παραγωγές τους και απαλείφουμε τις
παραγωγές. Η γραμματική γίνεται:

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

Στον κανόνα K έχουμε παραπάνω από μία δεξιές παραγωγές που ξεκινούν με μη τερματικό σύμβολο ή ε.
Κάνουμε αντικατάσταση του L στον K και η γραμματική γίνεται:

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

Θέμα Β – Υλοποίηση κανόνων (10 μονάδες)


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

Στους κανόνες της τελικής γραμματικής αντιστοιχούν οι παρακάτω μέθοδοι:


// S → K w B
private void S() {
Κ();
if (token == 'w') {
token = lex.nextToken();
B();
} else error("Syntax error");
}

// 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");
}

Ομάδα θεμάτων 4: Διαχείριση Έργων (10 μονάδες)

Έστω ένα ηλεκτρονικό κατάστημα πωλήσεων με τυποποιημένη λειτουργία. Ενδεικτικά αναφέρονται οι


παρακάτω λειτουργίες:

1. Εγγραφή χρήστη και έλεγχος ταυτότητας:


a. Οι χρήστες θα πρέπει να μπορούν να δημιουργούν λογαριασμούς και να συνδέονται με
ασφάλεια.
b. Ο έλεγχος ταυτότητας χρήστη θα πρέπει να εφαρμόζεται για τη διασφάλιση της ασφάλειας
των προσωπικών πληροφοριών.
c. Το σύστημα θα πρέπει να επιτρέπει την υπενθύμιση του password
d. Το σύστημα μπορεί να υποστηρίζει προαιρετικά ταυτοποίηση δύο βημάτων (αποστολή sms
στο χρήστη)

2. Κατάλογος προϊόντων:
a. Η πλατφόρμα θα πρέπει να παρέχει έναν κατάλογο διαθέσιμων προϊόντων.
b. Τα προϊόντα πρέπει να κατηγοριοποιούνται και να μπορούν να αναζητηθούν.
c. Κάθε προϊόν πρέπει να έχει λεπτομερή περιγραφή, τιμή και διαθέσιμο απόθεμα.

3. Καλάθι αγορών:
a. Οι χρήστες θα πρέπει να μπορούν να προσθέτουν προϊόντα σε ένα καλάθι αγορών.
b. Το καλάθι αγορών θα πρέπει να επιτρέπει στους χρήστες να τροποποιούν ποσότητες, να
αφαιρούν προϊόντα και να υπολογίζουν το συνολικό κόστος.

Το σύστημα υποστηρίζει τους ρόλους «Διαχειριστής», «Υπάλληλος», «Πελάτης» και «Μη καταχωρημένος
πελάτης» .

Θέμα Α - Συγγραφή ιστοριών χρηστών (10 μονάδες)

Γράψτε 5 ιστορίες χρηστών από την παραπάνω λίστα απαιτήσεων σε τυποποιημένη μορφή. Η
τυποποιημένη μορφή είναι:

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

Ως ένας <τύπος χρήστη>, θέλω να < πραγματοποιήσω κάποιους στόχους>

έτσι ώστε <να επιτύχω κάποιο σκοπό>

Απάντηση

1.Εγγραφή χρήστη και έλεγχος ταυτότητας:

Ως «μη καταχωρημένος χρήστης»,

θέλω να δημιουργήσω έναν λογαριασμό με τη διεύθυνση ηλεκτρονικού ταχυδρομείου και τον κωδικό
πρόσβασής μου,

έτσι ώστε να μπορώ να συνδεθώ με ασφάλεια στην πλατφόρμα ηλεκτρονικής πώλησης.

Ως «πελάτης»,

θέλω να μπορώ να επαναφέρω τον κωδικό πρόσβασής μου εάν τον ξεχάσω,

έτσι ώστε να μπορέσω να αποκτήσω ξανά πρόσβαση στον λογαριασμό μου.

Ως πελάτης,

θέλω να μπορώ να ενημερώνω τα προσωπικά μου στοιχεία (π.χ. όνομα, διεύθυνση) στις ρυθμίσεις του
λογαριασμού μου,

έτσι ώστε τα στοιχεία μου να είναι πάντα ενημερωμένα.

2. Κατάλογος προϊόντων:

Ως «πελάτης»,

θέλω να μπορώ να περιηγούμαι σε κατηγορίες προϊόντων και προϊόντα,

έτσι ώστε να μπορώ εύκολα να βρω τα προϊόντα που με ενδιαφέρουν.

Ως «πελάτης»,

θέλω να βλέπω λεπτομερείς πληροφορίες προϊόντων, συμπεριλαμβανομένων περιγραφών, τιμών και


διαθέσιμου αποθέματος,

έτσι ώστε να μπορώ να λαμβάνω τεκμηριωμένες αποφάσεις αγοράς.

Ως «πελάτης»,

θέλω να μπορώ να αναζητώ προϊόντα με λέξεις-κλειδιά,

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

έτσι ώστε να μπορώ να βρίσκω γρήγορα συγκεκριμένα προϊόντα.

3.Καλάθι αγορών:

Ως «πελάτης»,

θέλω να μπορώ να προσθέσω προϊόντα στο καλάθι αγορών μου,

έτσι ώστε να μπορώ να παρακολουθώ τα προϊόντα που σκοπεύω να αγοράσω.

Ως «πελάτης»,

θέλω να μπορώ να προσαρμόζω την ποσότητα των προϊόντων στο καλάθι αγορών μου,

έτσι ώστε να μπορώ να αγοράζω διαφορετικές ποσότητες προϊόντων.

Ως «πελάτης»,

θέλω να μπορώ να αφαιρέσω προϊόντα από το καλάθι αγορών μου,

έτσι ώστε να μπορώ να αφαιρέσω ανεπιθύμητα προϊόντα πριν από το check out.

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

Κριτήρια αξιολόγησης

ΟΜΑΔΑ ΘΕΜΑΤΩΝ 1 (ΣΥΝΟΛΟ 30 ) ΜΟΝΑΔΕΣ ΒΑΘΜΟΣ

Θέμα Α – Διάγραμμα Ακολουθίας 15

Θέμα Β – Διάγραμμα Κλάσεων 15

ΟΜΑΔΑ ΘΕΜΑΤΩΝ 2 (ΣΥΝΟΛΟ 40)

Θέμα Α – Κατασκευή κλάσεων και διεπαφής 20

Θέμα Β – Κατασκευή κλάσης Demo 20

ΟΜΑΔΑ ΘΕΜΑΤΩΝ 3 (ΣΥΝΟΛΟ 20 )

Θέμα A – Μετασχηματισμός γραμματικής 10

Θέμα Β – Υλοποίηση κανόνων γραμματικής σε java 10

ΟΜΑΔΑ ΘΕΜΑΤΩΝ 4 (ΣΥΝΟΛΟ 10)

Θέμα A – Συγγραφή Ιστοριών Χρηστών 10

ΣΥΝΟΛΟ 100

Β’ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ 15

You might also like