Τεχνολογία Λογισμικού — Ιούνιος 2025, δεύτερη παραλλαγή¶
Μεταγραφή από τη φωτογραφία 3c1cd365d58de701.jpg (Θέμα Γ, δεύτερη παραλλαγή της εξέτασης της 23/06/2025).
3c1cd365d58de701.jpg¶
Πολυτεχνική Σχολή
Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών & Πληροφορικής
[Λείπει από τη φωτογραφία: το αρχικό γράμμα του τίτλου «Θ» (στην αρχή της γραμμής «ΘΕΜΑ Γ»)]
ΘΕΜΑ Γ (Μονάδες 3,5)
[Λείπει από τη φωτογραφία: η αρχή της εκφώνησης (κείμενο κομμένο από το αριστερό άκρο· ορατό μόνο το τέλος των λέξεων «…νεται το παρακάτω διάγραμμα κλάσεων (class diagram) και ζητείται να παράξετε τον … κώδικα σε κάποια αντικειμενοστρεφή γλώσσα όπως, π.χ. Java, κ.τ.λ., με βάση όσα έχουμε καλύψει στο μάθημα.»)]
Προσοχή στις σχέσεις μεταξύ των κλάσεων, ίσως χρειάζεται να προσθέσετε ιδιότητες ή μεθόδους για να τις υλοποιήσετε.
Δεν χρειάζεται να προσθέσετε κώδικα στα σώματα των μεθόδων, γι' αυτό και κάτι τέτοιο δεν θα βαθμολογηθεί!
[Σχήμα: Διάγραμμα κλάσεων UML:
<
> PaymentProcessor - Μέθοδοι:+ processPayment (amount: double): booleanCreditCardProcessor (υλοποιεί τη διεπαφή
PaymentProcessorμε διακεκομμένο βέλος υλοποίησης/realization): - Ιδιότητες:-cardNumber: String+MAX_TRANSACTION_AMOUNT: double {readOnly}(υπογραμμισμένο στο πρωτότυπο) - Μέθοδοι:+processPayment (amount: double): boolean+chargeCard (amount: double) : booleanShoppingCart (εξαρτάται από το
CreditCardProcessorμε οριζόντιο διακεκομμένο βέλος εξάρτησης/dependency): - Ιδιότητες:-totalAmount: double- Μέθοδοι:+removeItem (itemId:String)+calculateTotal(): doubleTransaction (συσχέτιση από
CreditCardProcessorμε πολλαπλότητα 1 προςTransactionμε πολλαπλότητα 0...* μέσω συμπαγούς γραμμής με βέλος): - Ιδιότητες:-transactionId: String-status: String- Μέθοδοι:+getTransactionDetails(): String][Λείπει από τη φωτογραφία: το δεξί άκρο του διαγράμματος (η κλάση CreditCardProcessor και η κλάση PaymentProcessor είναι κομμένες δεξιά· η πολλαπλότητα και τυχόν άλλα στοιχεία πέρα από το άκρο δεν φαίνονται)]
Απάντηση Θέματος Γ
Λύσεις (⚪ AI, μη επαληθευμένο)
Κατάσταση: ⚪ AI, μη επαληθευμένο Πηγή: λύσεις AI (gemini-3.7-flash, sonnet), ανεξάρτητη επανάληψη και αντιπαραβολή· καμία δεν έχει ελεγχθεί από άνθρωπο
Προσοχή
Λύση από AI — ελέγξτε την· δεν έχει επαληθευτεί από άνθρωπο. Η ένδειξη «δύο λύσεις συμφωνούν» δεν σημαίνει ότι η απάντηση είναι σωστή.
AI λύσεις — 2025-06-b¶
Οι λύσεις γράφτηκαν από μοντέλα AI και δεν έχουν ελεγχθεί από άνθρωπο. Η αρίθμηση ακολουθεί το αρχείο θεμάτων.
Θέμα Γ¶
Αξιοπιστία: δύο ανεξάρτητες λύσεις συμφωνούν · εμπιστοσύνη λύτη: χαμηλή
Προσοχή: η φωτογραφία είναι κομμένη (λείπει η εκφώνηση και το δεξί άκρο του διαγράμματος), άρα η λύση βασίζεται μόνο στα ορατά στοιχεία και σε υποθέσεις που σημειώνονται.
Αντιστοίχιση σχέσεων:
- Realization CreditCardProcessor → PaymentProcessor: implements.
- Dependency ShoppingCart → CreditCardProcessor: χρήση ως παράμετρος μεθόδου, όχι πεδίο (υπόθεση: μέθοδος checkout).
- Association CreditCardProcessor (1) → Transaction (0..*): πεδίο λίστας στον CreditCardProcessor.
- Υπογραμμισμένο MAX_TRANSACTION_AMOUNT {readOnly}: public static final. Η τιμή δεν φαίνεται· η 10000.0 είναι αυθαίρετη.
import java.util.ArrayList;
import java.util.List;
public interface PaymentProcessor {
boolean processPayment(double amount);
}
public class CreditCardProcessor implements PaymentProcessor {
private String cardNumber;
public static final double MAX_TRANSACTION_AMOUNT = 10000.0; // τιμή υποθετική
private List<Transaction> transactions = new ArrayList<>(); // 1 -> 0..*
@Override
public boolean processPayment(double amount) { return false; }
public boolean chargeCard(double amount) { return false; }
}
public class ShoppingCart {
private double totalAmount;
public void removeItem(String itemId) { }
public double calculateTotal() { return 0; }
// εξάρτηση: το CreditCardProcessor εμφανίζεται μόνο ως παράμετρος
public boolean checkout(CreditCardProcessor processor) { return false; }
}
public class Transaction {
private String transactionId;
private String status;
public String getTransactionDetails() { return null; }
}