Θέματα εξετάσεων Τύπος: B Ονοματεπώνυμο: Α.Μ.: Σχολή: Τμήμα: Επιτηρητής: Οδηγίες: Γράψτε τα στοιχεία σας σε αυτήν τη σελίδα Στην κόλλα σας γράψτε τα στοιχεία σας και στην πρώτη γραμμή τον τύπο των θεμάτων στα οποία εξετάζεστε. Ο τύπος των θεμάτων στα οποία εξετάζεστε βρίσκετε στην κορυφή κάθε σελίδας Οι ερωτήσεις 1-8 είναι στη μορφή των πολλαπλών επιλογών. Στην κόλλα σας θα δώσετε τις απαντήσεις δίνοντας το νούμερο της ερώτησης στην οποία απαντάτε και το γράμμα που πιστεύετε ότι αντιστοιχεί στη σωστή απάντηση. Για παράδειγμα: 1 ε Η ερώτηση 9 και η ερώτηση 10 είναι στη μορφή σωστού λάθους Στην κόλλα σας θα γράψετε το νούμερο της ερώτησης και της υπο-ερώτησης και δίπλα τη λέξη ΣΩΣΤΟ ή ΛΑΘΟΣ. Για παράδειγμα 10 β ΛΑΘΟΣ Σε αυτήν την εξέταση υπάρχει αρνητική βαθμολόγηση. Ειδικότερα: o Για τις ερωτήσεις 1-8 Για κάθε λάθος απάντηση -0.15 o Για την ερώτηση 9 και την ερώτηση 10 Για κάθε λάθος απάντηση -0.05 Αυτό σημαίνει ότι αν δεν είστε σίγουροι για την απάντησή σας είναι προτιμότερο ΝΑ ΜΗΝ ΑΠΑΝΤΗΣΕΤΕ. Αν δε γνωρίζετε την απάντηση βάλτε μια ευδιάκριτη παύλα. Για παράδειγμα: 2 --- Ή 10 β --- Τα θέματα επιστρέφονται. Αν δε βρεθεί θέμα μαζί με την κόλλα σας αυτόματα μηδενίζεται το γραπτό σας. Μπορείτε να αποχωρήσετε από την εξέταση σε 30. 1
1. Δείτε το παρακάτω διάγραμμα κλάσεων: «interface» Queue +enqueue(in number : int) : void +dequeue() : int +isempty() : bool Vector AClient 1..* MyQueue +enqueue(in number : int) : void +dequeue() : int +isempty() : bool -numbers[1..*] : int +addfirst(in number : int) : void +addlast(in number : int) : void +delfirst() : int +dellast() : int +isempty() : bool Ποιος κώδικας από τους παρακάτω θα μπορούσε να αντιστοιχηθεί σε κομμάτια από το παραπάνω διάγραμμα; α.class Vector: public MyQueue { virtual void addfirst(int number); virtual void addlast(int number); virtual int delfirst(); virtual int dellast(); int numbers[n]; //N is a large constant γ.class AClient { std::vector< MyQueue > mymyqueue; class MyQueue : public Queue, public Vector { virtual void enqueue(int number); virtual int dequeue(); ε.class AClient { std::vector<string> mymyqueue; class MyQueue : public Queue, public Vector { virtual void enqueue(int number); virtual int dequeue(); β.class Vector: public MyQueue { virtual void addfirst(int number); virtual void addlast(int number); virtual int delfirst(); virtual int dellast(); std::vector<int> numbers; class AClient { std::vector< MyQueue > mymyqueue; δ.class Queue: public MyQueue { virtual void enqueue(int number) = 0; virtual int dequeue() = 0; virtual boolean isempty() = 0; class Vector: public MyQueue { virtual void addfirst(int number); virtual void addlast(int number); virtual int delfirst(); virtual int dellast(); std::vector<int> numbers; στ.class AClient { std::vector< MyQueue > mymyqueue; class MyQueue { virtual void enqueue(int number); virtual int dequeue(); 2
2.Παρακάτω βλέπετε μια προσπάθεια για τη σχεδίαση μιας κλάσης. (Φαίνονται ενδεικτικά κάποιες συναρτήσεις) class Company { void addmanager(string name, float salary, float bonus); void addemployee(string name, float salary); string getmanagername(int i); string getemployeename(int i); private: vector<string> managernames; vector<string> employeenames; vector<string> managersalaries... Ποια από τις παρακάτω απαντήσεις πιστεύετε ότι προσφέρει την καλύτερη σχεδίαση για αυτήν την κλάση; Προσοχή: η καλύτερη σχεδίαση μπορεί να ή να μην αντιστοιχεί στον κώδικα της παραπάνω κλάσης α. β. Company +addmanager(in manager : Manager) +addemployee(in employee : Employee) Manager Employee Company +addmanager(in manager : Manager) +addemployee(in employee : Employee) 1 * Manager Employee * γ. δ. Company +addmanager(in manager : Manager) +addemployee(in employee : Employee) Manager Employee Company -managernames[0..*] : string -employeenames[0..*] : string -managersalaries[0..*] : float +addmanager(in manager : Manager) +addemployee(in employee : Employee) Operations +getmanagername(in index : int) : string +getemployeename(in index : int) : string ε. Η προτεινόμενη κλάση είναι σωστή ως έχει στ. Είτε η δ είτε η γ 3
3. Σχεδιάζετε ένα σύστημα παραγγελειοληψίας από σερβιτόρους. Ο σερβιτόρος στο palmtop παίρνει την παραγγελία από τον πελάτη, και σημειώνει με τη σειρά τα ορεκτικά, το κυρίως πιάτο και το επιδόρπιο. Στο τέλος πατά αποστολή και στέλνει την παραγγελία στο σεφ. Όταν η παραγγελία είναι έτοιμη ο σεφ στέλνει ειδοποίηση στο palmtop του σερβιτόρου. Τέλος όταν ο πελάτης θέλει να πληρώσει, ο σερβιτόρος σημειώνει την πληρωμή στον palmtop και κλείνει έτσι την εξυπηρέτηση του πελάτη. Ποιο είναι το πιο κατάλληλο μοντέλο περιπτώσεων χρήσης για το σύστημα αυτό; α. β γ δ. ε. στ. Είτε όπως το α είτε όπως το β 4
4. Σας δίνεται η ακόλουθη περιγραφή μιας περίπτωσης χρήσης.(1 μονάδα) 1. Τίτλος περίπτωσης χρήσης : Αποστολή μηνύνματος CHAT από ένα Client 2. Ροή γεγονότων. 1. Ο χρήστης πληκτρολογεί το μήνυμά του στην οθόνη και πατά ένα κουμπί αποστολή 2. Το πρόγραμμα ελέγχει ότι το μήκος του μηνύματος είναι επιτρεπτό και το στέλνει μέσω του πρωτοκόλλου CHAT στο server 3. O Server επιβεβαιώνει ότι έλαβε το μήνυμα 4. Το πρόγραμμα εμφανίζει στην οθόνη λήψης μηνυμάτων το μήνυμα που μόλις απεστάλη Το διάγραμμα που ακολουθεί: α. Είναι λάθος γιατί το ChatProtocol θα έπρεπε να είναι κλάση ελέγχου β. Είναι λάθος γιατί το Message θα έπρεπε να είναι κλάση ελέγχου γ. Είναι σωστό δ. Είναι λάθος γιατί το Message θα έπρεπε να είναι κλάση οντότητας ε. Είναι λάθος γιατί το Message και το ChatProtocol θα έπρεπε να είναι κλάσεις οντότητας στ. Είναι λάθος γιατί το Chatter θα έπρεπε να είναι κλάση Οντότητας 5
5. Δείτε τα παρακάτω κομμάτια κώδικα: class A { virtual int getsomething() = 0; private: int something; class C : public A { virtual int getsomething(); class B : public A { virtual int getsomething(); private: C *myc=0; int B::getSomething() { if (0==myC) { myc = new C(); } myc->getsomething(); } Ποιά patterns πιστεύετε ότι θα μπορούσε να υλοποιεί; α. Κανένα β. To Proxy Pattern γ. To Αdapter Pattern δ. To Factory με το Singleton ε. To Factory Pattern στ. To Αdapter με το Singleton 6
6. Έχετε την παρακάτω συσχέτιση μεταξύ δύο κλάσεων: Address Person -street : string -name : string 1 * -city : string Τα στοιχεία για τα αντικείμενα αυτών των κλάσεων θα αποθηκεύονται σε μία σχεσιακή βάση δεδομένων. Αποφασίζετε να χρησιμοποιήσετε το μοτίβο DAO. Ποιά πιστεύετε ότι είναι η καλύτερη προσέγγιση αν θέλατε να διαβάσετε τα στοιχεία ενός Person ξέροντας το κλειδί του index στον πίνακα; (Από τα διαγράμματα παραλείπονται αντικείμενα/μηνύματα μη σημαντικά για την ερώτηση) SomeClass persondb person:=getperson(index) new() addressdb address:=getaddressforperson(index) α. SomeClass persondb person:=getperson(index) new() addressdb address:=getaddressforperson(index) β. γ. SomeClass addressdb address:=getaddressforperson(index) new() person:=getperson(index) persondb δ. Καμία ε. Το (α) ή το (β) στ. Το (α) ή το (γ) 7
7. Θέλετε ένα έξυπνο τρόπο για να δημιουργείτε αντικείμενα από διαφορετικές κλάσεις που έχουν το ίδιο interface αλλά διαφορετική υλοποίηση. Ποιο από τα παρακάτω μοτίβα σχεδίασης θα μπορούσατε να χρησιμοποιήσετε; α.mediator Pattern β. Proxy Pattern γ. Factory Pattern δ. Singleton Pattern ε. Adapter Pattern στ. DAO Pattern 8
8. Έχετε τον παρακάτω κώδικα C (1 μονάδα) void mystrcpy(char *src, char *dst, int dstsize) { int size; if (strlen(src)< dstsize-1) size = strlen(src); else size = dstsize-1; strncpy( dst,src, size); dst[size]='\0'; } α. Δεν έχει κανένα πρόβλημα β. Είναι άσχημα σχεδιασμένος γιατί υπάρχει μικρή συνοχή γ. Είναι άσχημα σχεδιασμένος γιατί υπάρχει σύζευξη αντιγράφου και παραβιάζει τις αρχές του αμυντικού προγραμματισμού δ. Είναι άσχημα σχεδιασμένος γιατί υπάρχει σύζευξη δεδομένων ε. Είναι άσχημα σχεδιασμένος γιατί υπάρχει σύζευξη αντιγράφου στ. Είναι άσχημα σχεδιασμένος γιατί παραβιάζει τις αρχές του αμυντικού προγραμματισμού 9
9. Απαντήστε σωστό ή λάθος στις παρακάτω ερωτήσεις (1 μονάδα) a. Οι κλάσεις ελέγχου συνήθως έχουν μόνο απλά χαρακτηριστικά, όπως μετρητές κτλ. Σωστό ή λάθος; b. Οι κλάσεις ορίου περιγράφουν το πως επιτυγχάνεται η διασύνδεση με τους χρήστες και όχι το τι επιτυγχάνεται από αυτή. Σωστό ή λάθος; c. Οι κλάσεις ορίου δεν επικοινωνούν με μηχανήματα. Σωστό ή λάθος; d. Πολλές φορές κριτήριο για την ποιότητα ενός προγράμματος είναι η ταχύτητα υλοποίησής του. Σωστό ή λάθος; e. Χαμηλή συνεκτικότητα σημαίνει υψηλή σύζευξη. Σωστό ή λάθος; f. Το Adapter Pattern θεωρείται δημιουργικό μοτίβο (creational pattern). Σωστό ή λάθος; g. Αφηρημένη είναι μια κλάση στην οποία απλά δηλώνεται το interface της (διεπαφή) χωρίς υλοποίηση. Σωστό ή λάθος; h. Μια περίπτωση χρήσης δεν περιγράφει μια ολοκληρωμένη λειτουργία ενός συστήματος. Σωστό ή λάθος i. Οι περιπτώσεις χρήσης καλό είναι να περιγράφουν και κάποιες λεπτομέρειες υλοποίησης. Σωστό ή λάθος; j. Η αντιστοίχηση κλάσεων σε σχεσιακούς πίνακες είναι πάντα 1-1. Σωστό ή λάθος; 10
10. Απαντήστε σωστό ή λάθος στις παρακάτω ερωτήσεις. (1 μονάδα) a. Μια σχέση γενίκευσης στη UML ανάμεσα σε δύο κλάσεις μπορεί να αντιστοιχηθεί με δύο σχεσιακούς πίνακες έναν για την υπερκλάση και έναν για την υποκλάση, με το δεύτερο πίνακα να περιέχει ένα ξένο κλειδί που αναφέρεται στον πρώτο. Σωστό ή λάθος; b. Ο αμυντικός προγραμματισμός ορίζει ότι ελέγχουμε πάντα αν οι τιμές που μας περνάν άλλα συστατικά είναι οι αναμενόμενες. Σωστό ή λάθος; c. Οι περιπτώσεις χρήσεις είναι μια τεχνική για την καταγραφή των απαιτήσεων του χρήστη. Σωστό ή λάθος; d. Ένα διάγραμμα ακολουθίας δίνει έμφαση στη χρονική σειρά των μηνυμάτων μεταξύ διαφορετικών αντικειμένων. Σωστό ή λάθος; e. Οι χάρτες κατάστασεις μπορούν να χρησιμοποιηθούν για την αναπαράσταση των αλληλεπιδράσεων μεταξύ αντικειμένων διαφορετικών κλάσεων. Σωστό ή λάθος; f. Οδηγίες όπως «Είναι υποχρεωτική η χρήση των '{','}' ακόμα και όταν αυτά είναι προαιρετικά» είναι συνηθισμένες στα προγραμματιστικά πρότυπα. Σωστό ή λάθος; g. Μπορεί να υπάρχουν πολλά διαφορετικά μοντέλα ανάλυσης για μια υλοποίηση. Σωστό ή λάθος; h. Οι χάρτες καταστάσεων είναι ισοδύναμοι με τα διαγράμματα συνεργασίας. Απλά αναπαριστούν την πληροφορία με διαφορετικό τρόπο. Σωστό ή λάθος; i. Στη σχεδίαση μιας κλάσης δεν είναι σημαντικό να ορίζονται οι λειτουργίες της προτού οριστεί η υλοποίησή της. Σωστό ή λάθος j. Η Τεχνολογία Λογισμικού αφορά τη σχεδίαση κυρίως τη συγγραφή λογισμικού με σχεδιαστικά μοτίβα. Σωστό ή λάθος; 11