Πανεπιστήμιο Κρήτης Τμήμα Επιστήμης Υπολογιστών. ΗΥ-252 Αντικειμενοστρεφής Προγραμματισμός Βασίλης Χριστοφίδης

Σχετικά έγγραφα
Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 21 Σεπτεµβρίου 2012

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Αντικειμενοστρεφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Βασικές Έννοιες Δοµών Δεδοµένων

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

4 Συλλογές Αντικειμένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

H κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

ΗΥ-252 Αντικειμενοστρεφής Προγραμματισμός Βασίλης Χριστοφίδης

Δομές Δεδομένων - Εργαστήριο 2. Λίστες

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning

Διδάσκων: Παναγιώτης Ανδρέου

Από τη UML στον Κώδικα. Μέρος Α

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

Αντικειμενοστρεφής Προγραμματισμός

Αντικειµενοστρεφής Προγραµµατισµός

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εξαιρέσεις

ΗΥ-252 Οντοκεντρικός Προγραµµατισµός Βασίλης Χριστοφίδης. Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 12 Σεπτεµβρίου 2002

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα μέσα σε αντικείμενα Αντικείμενα ως επιστρεφόμενες τιμές Αντικείμενα με πίνακες

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #12

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

Oι βασικές πράξεις (λειτουργίες) που ορίζονται για τον τύπο στοίβα αναφέρονται παρακάτω:

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ ΕΡΓΑΣΤΗΡΙΟ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες Μέθοδοι tostring και equals Αντικείμενα μέσα σε αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 133: ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΕΡΓΑΣΤΗΡΙΟ 3 Javadoc Tutorial

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning

HY-252 Αντικειμενοστραφής Προγραμματισμός. Χειμερινό Εξάμηνο 2012 Διδάσκων: Χριστοφίδης Βασίλης. Ημερομηνία Παράδοσης: 16/11/2012

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

EPL 603 TOPICS IN SOFTWARE ENGINEERING. Lab 5: Component Adaptation Environment (COPE)

Δομές Δεδομένων & Αλγόριθμοι

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Έλεγχος ισότητας String Interning Αποαναφοροποίηση - dereferencing

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

Αντικειμενοστρεφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

Δομές Δεδομένων - Εργαστήριο 5. Ουρές Προτεραιότητας

(Διαφάνειες Νίκου Βιδάκη)

Week 7: Java Collection Classes

Διάλεξη Εισαγωγή στη Java, Μέρος B

Η λέξη κλειδί this. Γαβαλάς Δαμιανός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΑΦΗΡΗΜΕΝΕΣ ΚΛΑΣΕΙΣ

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

API: Applications Programming Interface

public class ArrayStack implements Stack {

Αντικειμενοστρεφής Προγραμματισμός

Βασικά της γλώσσας JAVA

ΑΝΑΚΕΦΑΛΑΙΩΣΗ. Τα βασικά για την γλώσσα Java

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

Διάγραμμα Κλάσεων. Class Diagram

ΗΥ-252 Αντικειμενοστρεφής Προγραμματισμός Βασίλης Χριστοφίδης

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

Οντοκεντρικός Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

Εισαγωγή στον Προγ/μό Η/Υ

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΕΙΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Ιανουάριος 2007 Οι απαντήσεις να είναι καθαρογραμμένες με ευδιάκριτους όλους του χαρακτήρες.

6. Εξαιρέσεις στη γλώσσα Java

ΗΥ252 Πρόοδος 3 εκεµβρίου 2011 Σελίδα 1 από 8. Βασίλης Χριστοφίδης

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Αντικειµενοστραφής Προγραµµατισµός

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Ανάλυση Πληροφοριακών Συστημάτων. Εαρινό Εξάμηνο Lec08 09/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

ΗΥ-252 Οντοκεντρικός Προγραµµατισµός Βασίλης Χριστοφίδης. Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 9 Σεπτεµβρίου 2004

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

Example Sheet 3 Solutions

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Transcript:

ΗΥ252 Τελικό Διαγώνισμα 9 Φεβρουαρίου 2012 Σελίδα 1 από 9 Πανεπιστήμιο Κρήτης Τμήμα Επιστήμης Υπολογιστών ΗΥ-252 Αντικειμενοστρεφής Προγραμματισμός Βασίλης Χριστοφίδης Τελική Εξέταση (3 ώρες) Ημερομηνία: 25 Ιανουαρίου 2013 Άσκηση Άσκηση Άσκηση Άσκηση Άσκηση Άσκηση Άσκηση Άσκηση Σύνολο 1 2 3 4 5 6 7 8 /15 /10 /18 /10 /10 /16 /22 /09 /110 Ονοματεπώνυμο: Αριθμός Μητρώου: Άσκηση 1 (18 μονάδες) Στατικοί Γενικοί Τύποι α) (5 μονάδες) Σας δίνεται ο ακόλουθος κώδικας Java. Ποιές τις παρακάτω αναθέσεις (assignments) είναι έγκυρες (δηλ. χωρίς προβλήματα κατά τον έλεγχο των τύπων); class Box<T>{ class SuperBox<T> extends Box<T>{ I. Box<Object> b = new Box<String>(); II. Box<String> b = new SuperBox<String>(); III Box<Object> b = new SuperBox<String>(); I, II, III μόνο η II μόνο η I και III μόνο η I II only β) (5 μονάδες) Ποιές τις παρακάτω αναθέσεις είναι έγκυρες (δηλ. χωρίς προβλήματα κατά τον έλεγχο των τύπων); i) Set<String> s = new Set<String>(); ii) Set<String> s = new HashSet<String>(); iii) HashSet<String> s = new Set<String>(); iv) HashSet<String> s = new TreeSet<String>(); ii) Set<String> s = new HashSet<String>(); γ) (5 μονάδες) Συμφωνείται με την εκτίμηση ότι οι γενικοί τύποι στην Java καθιστούν έγκαιρη την αναγνώριση λαθών χρήσης τύπων από τον χρόνο εκτέλεσης στον χρόνο μετάφρασης των προγραμμάτων; Δικαιολογήστε σύντομα την απάντησή σας δίνοντας ένα παράδειγμα. Without using generics, any instance of Object can be placed in a Collection. When the client accesses one of those instances, it can (try to) apply operations that may not apply to it. Generics eliminate this problem from run-time by adding type-checking to the client to make sure that the operations can be applied to instances of the subtype of Objects declared in the generic.

ΗΥ252 Τελικό Διαγώνισμα 9 Φεβρουαρίου 2012 Σελίδα 2 από 9 Άσκηση 2 (10 μονάδες) Χειρισμός Εξαιρέσεων Γράψτε την έξοδο της εκτέλεσης του παρακάτω προγράμματος. Σημείωση: IllegalArgumentException και NullPointerException είναι υποκλάσεις της RuntimeException. public class TryCatchMystery { public static void main (String[] args) { try { method1(); method2(); catch (IllegalArgumentException e) { System.out.println("main IllegalArgumentException"); catch (RuntimeException e) { System.out.println("main RuntimeException"); public static void method1() { System.out.println("entered method1"); try { method2(); catch (IllegalArgumentException e) { System.out.println("method1 IllegalArgumentException"); throw new NullPointerException(); catch (NullPointerException e) { System.out.println("method1 NullPointerException"); throw new NullPointerException(); System.out.println("exited method1"); public static void method2() { System.out.println("entered method2"); throw new IllegalArgumentException(); entered method1 entered method2 method1 IllegalArgumentException main RuntimeException Άσκηση 3 (18 μονάδες) Βασική Λειτουργικότητα Αντικειμένων Σας δίνεται οι ακόλουθες κλάσεις Java. public class OneDPoint { double x; public boolean equals(object o) { if (o instanceof OneDPoint) { OneDPoint other = (OneDPoint) o; return x == other.x; else { return false; public class TwoDPoint extends OneDPoint { double y; public boolean equals(object o) { if (o instanceof TwoDPoint) { TwoDPoint other = (TwoDPoint) o; return x == other.x && y == other.y; else { return false;

ΗΥ252 Τελικό Διαγώνισμα 9 Φεβρουαρίου 2012 Σελίδα 3 από 9 α) (6 μονάδες) Ισχύει η συμμετρική ιδιότητα για την σχέση δύο οποιαδήποτε στιγμιότυπων της κλάσης OneDPoint που ορίζει η παραπάνω μέθοδος equals();καλείστε να αποδείξετε ότι εάν η λογική έκφραση p1.equals(p2) είναι αληθής τότε και η p2.equals(p1) είναι αληθής για οποιαδήποτε δύο αντικείμενα p1 και p2 τύπου OneDPoint. Για την απόδειξη της αντίθετης περίπτωσης αρκεί να βρείτε ένα κατάλληλο αντιπαράδειγμα. No Counterexample OneDPoint p1 = new OneDPoint(); p1.x = 5; TwoDPoint p2 = new TwoDPoint(); p2.x = 5; p2.y = 10; p1.equals(p2) true p2.equals(p1) false β) (6 μονάδες) Σας δίνεται η παρακάτω τροποποιημένη υλοποίηση της μεθόδου equals() στην κλάση TwoDPoint. public class TwoDPoint extends OneDPoint { protected double y; public boolean equals(object o) { if (o instanceof OneDPoint) { return o.equals(this); else if (o instanceof TwoDPoint) { TwoDPoint other = (TwoDPoint) o; return x == other.x && y == other.y; else { return false; Ισχύει η ανακλαστική ιδιότητα για την σχέση με τον εαυτό του ενός οποιοδήποτε στιγμιότυπου της κλάσης OneDPoint που ορίζει η παραπάνω μέθοδο equals(); Καλείστε να αποδείξετε ότι η λογική έκφραση p.equals(p) είναι αληθής για οποιοδήποτε αντικείμενο p τύπου OneDPoint. Για την απόδειξη της αντίθετης περίπτωσης αρκεί να βρείτε ένα κατάλληλο αντιπαράδειγμα. Νο Counterexample: For any OneDPoint p, execution of p.equals(p) suffers an infinite loop and stack overflow. γ) (6 μονάδες) Σας δίνεται η ακόλουθη τροποποιημένη υλοποίηση της μεθόδου equals() στην κλάση TwoDPoint. public class TwoDPoint extends OneDPoint { protected double y; public boolean equals(object o) { if (o instanceof TwoDPoint) { TwoDPoint other = (TwoDPoint) o; return x == other.x && y == other.y; else if (o instanceof OneDPoint) { return o.equals(this); else { return false;

ΗΥ252 Τελικό Διαγώνισμα 9 Φεβρουαρίου 2012 Σελίδα 4 από 9 Ισχύει η μεταβατική ιδιότητα μεταξύ δύο οποιαδήποτε στιγμιοτύπων της κλάσης OneDPoint που ορίζει η παραπάνω μέθοδο equals(); Καλείστε να αποδείξετε ότι εάν η λογική έκφραση p1.equals(p2) και p2.equals(p3) είναι αληθής τότε και η p1.equals(p3) είναι αληθής για οποιαδήποτε τρία αντικείμενα p1, p2 και p3 τύπου OneDPoint. Για την απόδειξη της αντίθετης περίπτωσης αρκεί να βρείτε ένα κατάλληλο αντιπαράδειγμα. Νο Counterexample: TwoDPoint a = new TwoDPoint(); a.x = 5; a.y = 10; OneDPoint b = new OneDPoint(); b.x = 5; TwoDPoint c = new TwoDPoint(); c.x = 5; c.y = 20; p1.equals(p2) true p2.equals(p3) true p1.equals(p3) false Άσκηση 4 (10 μονάδες) Βασική Λειτουργικότητα Αντικειμένων Η κλάση Toy αναπαριστά διαφορετικά παιχνίδια που πωλεί ένα κατάστημα. public class Toy { private String name; // Όνομα παιχνιδιού, πχ "Furby" private String description; // περιγραφή, πχ "annoying" private int price; // τιμή σε euros private int sku; // απόθεμα (αποθήκη) Θα πρέπει να παρέχουμε τις μεθόδους equals() και hashcode() για την κλάση και θεωρούμε τις ακόλουθες δυνατές υλοποιήσεις. public boolean equals(object other) { // equals version 1 if (!(other instanceof Toy)) return false; Toy t = (Toy) other; return this.sku == t.sku; public boolean equals(object other) { // equals version 2 if (!(other instanceof Toy)) return false; Toy t = (Toy) other; return this.name.equals(t.name) && this.sku == t.sku; public boolean equals(object other) { // equals version 3 if (!(other instanceof Toy)) return false; Toy t = (Toy) other; return this.name.equals(t.name) && this.description.equals(t.description); public int hashcode() { // hashcode version 1 return sku; public int hashcode() { // hashcode version 2 return name.hashcode()+sku; public int hashcode() { // hashcode version 3 return name.hashcode(); Συμπληρώστε τον ακόλουθο πίνακα τοποθετώντας ένα Χ σε κάθε κενό όπου οι αντίστοιχες μέθοδοι hashcode() και equals() που δίνονται προηγουμένως έχουν συμβατές υλοποιήσεις δηλαδή όποτε ισχύει ότι a.equals(b), τότε η a.hashcode() =b.hashcode().

ΗΥ252 Τελικό Διαγώνισμα 9 Φεβρουαρίου 2012 Σελίδα 5 από 9 hashcode version 1 hashcode version 2 hashcode version 3 equals version 1 equals version 2 equals version 3 equals version 1 equals version 2 equals version 3 hashcode version 1 X X hashcode version 2 X hashcode version 3 X X Άσκηση 5 (10 μονάδες) Προγραμματισμός Βασισμένος σε Συμβόλαια Θυμηθείτε την διαφορά μεταξύ του καθορισμού (Specification) και της υλοποίησης (Implementation) ενός Αφαιρετικού Τύπου Δεδομένων (ΑΔΤ): ο καθορισμός ενός ΑΔΤ αποτελεί τον λογικό ορισμό της συμπεριφοράς των αφαιρετικών τιμών του ενώ η υλοποίησή του βασίζεται σε συγκεκριμένες δομές δεδομένων και αλγορίθμους που επιτρέπουν έναν προγραμματιστικό χειρισμό του που ικανοποιεί (satisfies) τον καθορισμό. Είναι δυνατόν να ικανοποιούνται όλες οι παρακάτω συνθήκες συγχρόνως;. S1 is satisfied by I1 and S2 is satisfied by I1 and S1 is satisfied by I2 and S2 is satisfied by I2 and S1!= S2 Δικαιολογήστε σύντομα την απάντησή σας. This is basically setting up the following situation: It is possible: the simplest abstraction description is that this holds whenever S1 is stronger than S2 or vice versa. There are a number of concrete examples. One given a couple of times was (roughly) I1 and I2 as LinkedList and ArrayList, respectively, and S1 and S2 being List and Collection, respectively. Common Errors: Some students gave answers of the form: Because of x, y or z, nothing stops this situation from arising. This is different from justifying why it can happen. Άσκηση 6 (16 μονάδες) Επαναλήπτες Συλλογών Αντικειμένων Συμπληρώστε την υλοποίηση της κλάσης Μισθοδοσία (Payroll) έτσι ώστε ένας κώδικας πελάτης της μεθόδου getluckyiterator() να παίρνει έναν σαρωτή (Iterator) που διασχίζει την συλλογή υπαλλήλων (Employee) που περιέχει η μισθοδοσία και να επιστρέφει υπαλλήλους με μισθό μεγαλύτερο ή ίσο των 50000. Θυμηθείτε ότι η διεπαφή Iterator έχει τρείς μεθόδους από τις οποίες μόνο οι ακόλουθες δύο μας ενδιαφέρουν στην άσκηση: 1. public boolean hasnext() 2. public Object next() Στην συνέχεια σας δίνεται ένα παράδειγμα κώδικα πελάτη (PayrollTester) που χρησιμοποιεί την λειτουργικότητα του σαρωτή που πρέπει να υλοποιηθεί στην κλάση

ΗΥ252 Τελικό Διαγώνισμα 9 Φεβρουαρίου 2012 Σελίδα 6 από 9 Payroll. Η έξοδος που τυπώνεται από την εκτέλεση της μεθόδου main() της PayrollTester είναι: Dimitris, 50000 Kostas, 80000 public class PayrollTester { public static void main(string[] args) { Payroll payroll = new Payroll(); payroll.employees.add(new Employee("Dimitris", 50000,0)); payroll.employees.add(new Employee("Vassilis", 49000,0)); payroll.employees.add(new Employee("Kostas", 80000,0)); payroll.employees.add(new Employee("Giorgos", 40000,0)); Iterator it = payroll.getluckyiterator(); while (it.hasnext()) System.out.println(it.next()); public class Employee { public String name; public double salary; public Employee(String initname, double initsalary) { name = initname; salary = initsalary; public String tostring() { return name + ", $" + salary; public class Payroll { public Vector<Employee> employees = new Vector<Employee>(); public Payroll() { public Iterator getluckyiterator() { return new LuckyIterator(); \\1point class LuckyIterator implements Iterator { int index; // 1point public LuckyIterator() { index = -1; findnext(); //2points private void findnext() { index++; while ((index < employees.size()) && (employees.get(index).getsalary() < 50000)) { index++; //4 points if (index == employees.size()) index = -1; //2 points public boolean hasnext() { return index!= -1; //2 points public Object next() { Object data = employees.get(index); findnext(); return data; //4points public void remove(){

ΗΥ252 Τελικό Διαγώνισμα 9 Φεβρουαρίου 2012 Σελίδα 7 από 9 Άσκηση 7 (22 μονάδες) Χειρισμός Πλαισίου Συλλογών Αντικειμένων Μας ενδιαφέρει η ολοκλήρωση μιας πρώτης υλοποίησης (Implementation A) της κλάσης IntStringMap η οποία αναπαριστά έναν πίνακα αντιστοίχισης (Map) με κλειδί (key) ένα ακέραιο (int) και τιμή (value) μια συμβολοσειρά (String). Σε αυτή την υλοποίηση χρησιμοποιούμε έναν πίνακα συμβολοσειρών με όνομα myvalues όπου το περιεχόμενο ενός κελιού είναι η τιμή ενώ η θέση (index) της είναι το κλειδί κάθε ζεύγους του πίνακα αντιστοίχισης. Για παράδειγμα το ζεύγος (4, Hello ) θα αποθηκευτεί σαν myvalues[4] = Hello ; Εάν κάποιο κλειδί δεν περιέχεται στον πίνακα αντιστοίχισης (Map), ο πίνακας στην αντίστοιχη θέση θα περιέχει την κενή συμβολοσειρά. Μπορείτε να ελέγξετε εάν κάποια συμβολοσειρά mystring ισούται με την κενή συμβολοσειρά χρησιμοποιώντας την κλήση mystring.equals( ); Για λόγους απλότητας υποθέστε ότι ανά πάσα στιγμή ένα κλειδί που πρέπει να χειριστείτε στον πίνακα αντιστοίχισης είναι ένας θετικός ακέραιος η τιμή του οποίου είναι μικρότερη από την χωρητικότητα (capacity) του πίνακα. Υποθέστε ακόμα ότι η αρχική χωρητικότητα ενός πίνακα είναι μεγαλύτερη του μηδενός. α) (10 μονάδες) Συμπληρώστε την υλοποίηση της κλάσης IntStringMap. Μην ξεχάσετε να ενημερώνετε το λογικό μέγεθος του πίνακα (size) όποτε αυτό είναι απαραίτητο. public class IntStringMap { private int capacity; private int size; private String[] myvalues; // Creates a Map that can hold up to capacity number of pairs public IntStringMap(int capacity) { myvalues = new String[capacity]; this.capacity = capacity; for (int i = 0; i < capacity; i++) { myvalues[i] = ""; // initialize to "" size = 0; // empty to begin with //Returns true if this map contains a mapping for the specified key public boolean containskey(int key) { return!myvalues[key].equals(""); \\2points //Returns true if at least one key-value pair has the value val public boolean containsvalue(string val) { for (int i = 0; i < capacity; i++) { if (myvalues[i].equals(val)) return true; return false; \\5points // Returns the value associated with this key, otherwise public String get(int key) { return myvalues[key]; // Puts this key-value pair in the Map public void put(int key, String value) {...

ΗΥ252 Τελικό Διαγώνισμα 9 Φεβρουαρίου 2012 Σελίδα 8 από 9 // Removes the mapping for this key from this map void remove(int key) { if (containskey(key)) { myvalues[key] = ""; size--; \\3points β) (12 μονάδες) Θεωρήστε μια εναλλακτική υλοποίηση (Implementation B) της κλάσης IntStringMap η οποία επιτρέπει τα κλειδιά να είναι οποιοσδήποτε ακέραιος (δηλ ενδεχομένως αρνητικός, μεγαλύτερος της χωρητικότητας του πίνακα, κλπ). Σε αυτή την περίπτωση αντί για έναν πίνακα συμβολοσειρών χρησιμοποιούμε ένα πίνακα με αντικείμενα IntStringMapItems που περιγράφονται στην συνέχεια: class IntStringMapItem { public int key; public String value; IntStringMapItem (int k, String v) { key = k; value = v; Η κλάση IntStringMap θα μπορούσε να υλοποιηθεί ως εξής: public class IntStringMap { private int capacity; private int size; private IntStringMapItem[] mypairs; // Creates a Map that can hold up to capacity number of pairs public IntStringMap(int capacity) { mypairs = new IntStringMapItem[capacity]; this.capacity = capacity; for (int i = 0; i < capacity; i++) { mypairs [i] = null; // initialize to null size = 0; Οι υπόλοιπες μέθοδοι μπορούν να υλοποιηθούν παρόμοια ενώ η συμπεριφορά τους θα είναι η αναμενόμενη. Για κάθε μία από τις παρακάτω μεθόδους γράψτε εάν ο χρόνος εκτέλεσής τους αναμένεται να είναι: (i) Σταθερός (constant) (ii) Γραμμικός (linear) ως προς το λογικό μέγεθος του Map (δηλ του πλήθους των ζευγών που περιέχει) (iii) Γραμμικός (linear) ως προς την χωρητικότητα του Map (δηλ του μέγιστου πλήθους ζευγών που μπορεί να περιέχει) (iv) Λογαριθμικός (logarithmic) ως προς το λογικό μέγεθος του Map containskey containsvalue remove Implementation A Implementation B

ΗΥ252 Τελικό Διαγώνισμα 9 Φεβρουαρίου 2012 Σελίδα 9 από 9 Part of earning the extra credit for this assignment is understanding approximately how you would implement the rest of this class without actually doing so. Implementation A Implementation B containskey i ii containsvalue iii ii remove i ii Άσκηση 8 (9 μονάδες) Θεωρία Αντικειμενοστρεφούς Προγραμματισμού ά) (3 μονάδες) Ποια είναι η πιο σημαντική ομοιότητα μεταξύ μιας διεπαφής (interface) και μιας αφαιρετικής κλάσης (abstract class); Neither one can be instantiated. β) (3 μονάδες) Δώστε ένα παράδειγμα στο οποίο προτιμάτε να χρησιμοποιήσετε μια διεπαφή από μια αφαιρετική κλάση. When specifying one of multiple supertype behaviors, since a class can implement many interfaces. γ) (3 μονάδες) Δώστε ένα παράδειγμα στο οποίο προτιμάτε να χρησιμοποιήσετε μια αφαιρετική κλάση από μια διεπαφή. When giving default behavior for a set of related data abstractions, since an interface cannot provide a method implementation.