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

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

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

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

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

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

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

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

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

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

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

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

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

(C) 2010 Pearson Education, Inc. All rights reserved.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Week. 6: Java Collections

public class ArrayStack implements Stack {

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

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

Βασικά Στοιχεία της Java

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

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

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

Διασυνδέσεις / Διεπαφές. Παναγιώτης Σφέτσος, PhD

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

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

ΕΞΑΙΡΕΣΕΙΣ. Εξαιρέσεις προκαλούνται. από το σύστηµα. από το πρόγραµµα

public class ArrayQueue implements Queue {

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

Section 8.3 Trigonometric Equations

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

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

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

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

Μέθοδοι. Υποσυστήµατα και πακέτα. Μοντέλα αντικειµενοστραφούς σχεδίασης. Αντικειµενοστραφής Σχεδίαση. Στα πρώτα στάδια της ανάλυσης

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

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

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Σι θα δούμε σε αυτό το μάθημα;

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

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

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

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

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

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

Instruction Execution Times

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

Week 7: Java Collection Classes

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

The Simply Typed Lambda Calculus

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

2 ΓΡΑΜΜΙΚΕΣ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

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

Generics και ArrayLists

Ευφυείς Τεχνολογίες ----Πράκτορες

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

Προγραμματισμός Ι. Πίνακες, Δείκτες, Αναφορές και Δυναμική Μνήμη. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

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

Βασικά Στοιχεία της Java

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

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

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

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

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

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video

Προαπαιτούμενες Ασκήσεις 5 ου Εργαστηρίου. Dose stoixeio (integer) : 25 Found stoixeio in position 7 Dose stoixeio (integer) :94 Value not found

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

Υπερφόρτωση (Overloading) Υπέρβαση (Overriding) - Upcasting Downcasting Final classes, methods

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

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

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

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

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

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

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

Τµήµα Πληροφορικής. Δοµές Δεδοµένων - Εργασία 1. Φθινοπωρινό Εξάµηνο Διδάσκων: E. Μαρκάκης. Στοίβες και Ουρές. Οικονοµικό Πανεπιστήµιο Αθηνών

Wrapper Classes, Abstract Classes and Interfaces

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

Transcript:

Πανεπιστήμιο Κρήτης Τμήμα Επιστήμης Υπολογιστών ΗΥ-252 Αντικειμενοστρεφής Προγραμματισμός Βασίλης Χριστοφίδης Ονοματεπώνυμο: Αριθμός Μητρώου: Τελική Εξέταση (3 ώρες) Ημερομηνία: 18 Ιανουαρίου 2006 Άσκηση 1 (11 μονάδες) Σας δίνεται το παρακάτω πρόγραμμα Java το οποίο δοκιμάζει την δυναμική διανομή των μεθόδων (dynamic method dispatch) στην περίπτωση που εξειδικεύονται επίσης τα ορίσματα των υποσκελισμένων μεθόδων (covariant method specialization). class A{ public void test(x x){ System.out.println("A.X run"); //test public void test2(x a, X b){ System.out.println(""); //test2 //A class B extends A{ public void test(y x){ System.out.println("B.Y run"); //test public void test2(x a, Y b){ System.out.println("B.XY run"); //test2 public void test2(y a, X b){ System.out.println("B.YX run"); //test2 public void test2(y a, Y b){ System.out.println("B.YY run"); //test2 //B class X{ //X class Y extends X{ //Y public class TestCovariant { public static void main(string args[]) { //FIRST WE SET UP ALL THE OBJECTS, TICE THE LAST IS SPECIAL A tempa=new A(); B tempb=new B(); X tempx=new X(); Y tempy=new Y(); X tempz=new Y(); //Dynamic dispatch test variable System.out.println("Test dispatch on B with one variable.");

System.out.println("Last two should be the same if dynamic dispatch works."); tempb.test(tempx); tempb.test(tempy); tempb.test(tempz); System.out.println("Test dispatch on B with two variables."); System.out.println("The second should be identical to the first if dynamic dispatch works."); tempb.test2(tempx, tempx); {Αυτό το test δεν έχει νόημα tempb.test2(tempx, tempx); System.out.println("---"); tempb.test2(tempx, tempy); tempb.test2(tempx, tempz); System.out.println("---"); tempb.test2(tempy, tempx); tempb.test2(tempz, tempx); System.out.println("---"); tempb.test2(tempy, tempy); tempb.test2(tempz, tempz); //main //CovariantTest Τι θα τυπωθεί στην στάνταρ έξοδο κατά την εκτέλεση της μεθόδου main() της κλάσης TestCovariant; Σημείωση: Παρατηρείστε ότι η μεταβλητή tempz έχει στατικό τύπο X αλλά ο δυναμικός της τύπος είναι Y. Test dispatch on B with one variable. Last two should be the same if dynamic dispatch works. A.X run B.Y run A.X run Test dispatch on B with two variables. The second should be identical to the first if dynamic dispatch works. --- B.XY run --- B.YX run --- B.YY run Άσκηση 2 (11 μονάδες) Σας δίνεται το παρακάτω πρόγραμμα Java το οποίο κατά την εκτέλεσή του μπορεί να εγείρει εξαιρέσεις πολλαπλών τύπων. Τι θα τυπωθεί στην στάνταρ έξοδο κατά την εκτέλεση της μεθόδου main() της κλάσης Excepts;

Σημείωση: Παρατηρείστε τις σχέσεις κληρονομικότητας μεταξύ των κλάσεων εξαιρέσεων. import java.io.*; public class Excepts { private static String mystery(int count) throws Exception { if (count == 1) throw new FileNotFoundException(); else if (count == 2) throw new IOException(); else if (count == 3) throw new NumberFormatException(); else if (count == 4) return "ABC"; else throw new RuntimeException(); // end mystery public static void main(string args[]) { for (int i = 1; i <= 5; i++) { try { System.out.println(mystery(i)); System.out.println("YES"); catch (FileNotFoundException e) { System.out.println("FNF"); catch (IOException e) { System.out.println("IO"); catch (RuntimeException e) { System.out.println("RT"); catch (Exception e) { System.out.println("EX"); System.out.println(""); // end for // end main // end class Excepts FNF IO RT ABC YES RT In general, the output for each i in the for loop was worth 2 points. If you messed up a lot of YES/s, you lost up to 4 points total.

Άσκηση 3 (28 μονάδες) Το τυποποιημένο πλαίσιο συλλογών της Java (JCF) περιλαμβάνει διάφορες αφηρημένες κλάσεις συλλογών (abstract collection classes), οι οποίες συγκεντρώνουν τον κοινό κώδικα για διάφορες συγκεκριμένες κλάσεις συλλογών (concrete collection classes), και παρέχουν μια βάση για νέες υλοποιήσεις αυτών των συλλογών. Για παράδειγμα το πλαίσιο περιλαμβάνει μια αφηρημένη κλάση AbstractCollection που υλοποιεί (μερικώς) τη διεπαφή Collection. Ακολουθώντας αυτή την προσέγγιση, σας δίνεται παρακάτω η διεπαφή MyCollection, η οποία υποστηρίζει λιγότερες μεθόδους από ότι η τυποποιημένη διεπαφή Collection διατηρώντας ωστόσο το αρχικό συμβόλαιό τους (δηλ. υπογραφές, προ, μετά και αμετάβλητες συνθήκες). import java.util.* ; public interface MyCollection { boolean add(object o); void clear(); boolean contains(object o); boolean isempty(); Iterator iterator(); boolean remove(object o); int size(); Γράψτε μια αφαιρετική κλάση AbstractMyCollection η οποία υλοποιεί την διεπαφή MyCollection, και η οποία περιλαμβάνει μόνο τις ακόλουθες τρεις αφαιρετικές (abstract) μεθόδους: add(), iterator(), and size(). Όλες οι υπόλοιπες μέθοδοι πρέπει να είναι συγκεκριμένες (concrete) δηλ. θα πρέπει να έχουν υλοποιηθεί. Η κλάση AbstractMyCollection δεν θα πρέπει να έχει γνωρίσματα/πεδία δηλ. μεταβλητές στιγμιοτύπων (instance variables). Θυμηθείτε ότι οι συλλογές αντικειμένων μπορούν να περιέχουν και αναφορές null, και κατά συνέπεια τα ορίσματα στις μεθόδους add(), contains(), and remove() μπορούν επίσης να είναι null. Η υλοποίησή σας θα γίνει σταδιακά στα παρακάτω 2 υπο-ερωτήματα. (α) (16 μονάδες) Στην πρώτη έκδοση της κλάσης AbstractMyCollection, που θα πρέπει να υλοποιήσετε, μπορείτε να υποθέσετε ότι οι μέθοδοι contains() και remove() δεν καλούνται ποτέ με όρισμα null. Μπορείτε δηλαδή να παραλείψετε τον έλεγχο για τις περιπτώσεις όπου το όρισμά τους είναι null (Παρατηρείστε ότι η μέθοδος clear() δεν επιστρέφει κάποια τιμή). import java.util.*; public abstract class AbstractMyCollection implements MyCollection { protected AbstractMyCollection () { public abstract boolean add(object o); public void clear() { while (it.hasnext()) { it.next(); it.remove(); // 3 points

public boolean contains(object o) { while (it.hasnext()) if (o.equals (it.next())) return false; // 3 points public boolean isempty() { return (size()==0); // 3 points public abstract Iterator iterator(); public boolean remove (Object o) { while (it.hasnext()) if (o.equals(it.next())) { it.remove(); return false; // 3 points public abstract int size(); (β) (12 μονάδες) Στην τελική έκδοση της κλάσης AbstractMyCollection, θα πρέπει να υλοποιήσετε εκ νέου τις μεθόδους contains() και remove(), έτσι ώστε να συμπεριφέρονται σωστά στις περιπτώσεις όπου το όρισμά τους είναι null. public boolean contains (Object o) { if (o == null) while (it.hasnext()) { if (it.next() == null ) else while (it.hasnext()) if (o.equals(it.next())) return false; // 6 points public boolean remove(object o) { if (o == null) while (it.hasnext()) { if (it.next() == null) { it.remove(); return true ; else while (it.hasnext()) if (o.equals(it.next())) { it.remove(); return false; // 6 points

Άσκηση 4 (15 μονάδες) Όπως έχουμε παρουσιάσει στο μάθημα, η Java προσφέρει πολλές υλοποιήσεις Αφαιρετικών Τύπων Δεδομένων (ΑΤΔ) για τον χειρισμό συλλογών αντικειμένων οι οποίες επιδεικνύουν διαφορετικές επιδόσεις εκτέλεσης στις λειτουργίες που υποστηρίζουν, όπως: Λίστες υλοποιημένες με Πίνακες (ArrayList) Διπλά Συνδεδεμένες Λίστες (LinkedList) Σύνολα και Απεικονίσεις υλοποιημένες με Δυαδικά Δέντρα Αναζήτησης (TreeSet, TreeMap) Σύνολα και Απεικονίσεις υλοποιημένες με Πίνακες Κατακερματισμού (HashSet, HashMap) Για κάθε μία από τις παρακάτω εφαρμογές, περιγράψτε ποιος πιστεύετε ότι είναι ο καταλληλότερος ΑΤΔ για να σχεδιάσετε (ως προς την λειτουργικότητα της διεπαφής που προσφέρει) και να υλοποιήσετε (ως προς τις επιδόσεις της συγκεκριμένης δομής δεδομένων που χρησιμοποιεί) τις λειτουργίες που σας ζητούνται στην εκφώνηση. Δικαιολογήστε σύντομα την απάντησή σας. (α) (5 μονάδες) Κατάλογος ενός ηλεκτρονικού καταστήματος παιχνιδιών. Σε αυτή την εφαρμογή, η πιο συχνή λειτουργία είναι η αναζήτηση (lookup) της περιγραφής ενός παιχνιδιού δεδομένου του μοναδικού κωδικού του. Επίσης προβλέπουμε συχνές ενημερώσεις των πληροφοριών που αφορούν ένα παιχνίδι (πχ. το απόθεμα) κάθε φορά που γίνεται μια σχετική παραγγελία. Τέλος, προσθήκες και διαγραφές παιχνιδιών από τον κατάλογο του καταστήματος δεν εμφανίζονται αρκετά συχνά. Lookups for a toy number should be efficient as possible. A HashMap is best for this since lookups require constant time. (β) (5 μονάδες) Έλεγχος συναλλαγών μιας εταιρίας πιστωτικών καρτών. Η εφαρμογή αυτή καταγράφει κάθε συναλλαγή (δαπάνη, πληρωμή) που η εταιρία πραγματοποιεί εξυπηρετώντας εκατοντάδες συναλλαγές ανά δευτερόλεπτο των πελατών της. Οι καταγραμμένες συναλλαγές διαβάζονται σειριακά έτσι ώστε να ελεγχθούν για την ακρίβειά τους τα στοιχεία κάθε συναλλαγής με αυτά του λογαριασμού του πελάτη που διαθέτει η εταιρία. A LinkedList is best for this application since the operations that need to be efficient are appending a new item at the end and (less important) accessing the items in the list sequentially. (γ) (5 μονάδες) Λίστα παιχτών με την υψηλότερη βαθμολογία για ένα ηλεκτρονικό παιχνίδι. Όποτε το παιχνίδι τελειώνει, η βαθμολογία ενός παίκτη καταγράφεται. Οι δέκα υψηλότερες βαθμολογίες εμφανίζονται σε φθίνουσα αρίθμηση κάθε φορά που ένα καινούργιο παιχνίδι αρχίζει. A sorted ArrayList is fine. There are only a small number of items in the list and inserting a new value is done very infrequently (whenever a game is over), so we don t need a fancy data structure to maintain a large sorted collection efficiently.

Άσκηση 5 (10 μονάδες) Ποια είναι η πολυπλοκότητα (complexity) του χρόνου εκτέλεσης (στην χειρότερη περίπτωση) των παρακάτω μεθόδων που χειρίζονται πίνακες (array); Υποθέστε ότι ο πίνακας έχει μήκος (length) N και ότι η μέθοδος compareto() εκτελείται σε σταθερό χρόνο. (α) (2 μονάδες) boolean inorder(comparable[] a, int i) { if (i >= a.length-1) else return a[i].compareto(a[i+1]) < 0; In general the method performs one comparison of objects. Given that compareto() executes in constant time this method also executes in constant time. (β) (2 μονάδες) int countx(comparable[] a, Comparable x) { int count = 0; for (int j=0; j<a.length; j++) { if (x.compareto(a[j])=0) count++; return count; The loop body executes N times. Each time involves one comparison of objects, and may involve an integer addition. Overall complexity is O(N). (γ) (3 μονάδες) int mostrepeats(comparable[] a) { int most=1; for (int j=0; j<a.length; j++) { int count = countx(a,a[j]); if (count>most) most=count; return most-1; The loop executes N times. Each time involves a call of countx(), whose complexity is O(N). Overall the complexity is O(N 2 ). (δ) (3 μονάδες) boolean issorted(comparable[] a) { for (j=0; j<a.length; j++) if (!inorder(a,j)) return false; At worst the loop executes N times, each time calling an O(1) method: in this case complexity is O(N). At best the loop executes once only: in this case complexity is O(1). If the array, a, is Filled randomly then we would expect to exit after one pass through the loop with a probability of 0.5, after two passes with probability 0.25, after three passes with probability 0.125, etc. On average the number of times through the loop will be slightly less than 2. On average, then, this method is constant time.

Άσκηση 6 (20 μονάδες) Το συμβόλαιο της μεθόδου Arrays.sort(Object[] a) που δίνεται στο πακέτο java.util απαιτεί «όλα τα στοιχεία του πίνακα που ταξινομούνται να υλοποιούν την διεπαφή Comparable. Επιπλέον, όλα τα στοιχεία του πίνακα θα πρέπει να συγκρίνονται ανά δύο (δηλ. η κλήση της μεθόδου e1.compareto(e2) δεν θα πρέπει να εγείρει την εξαίρεση ClassCastException για οποιαδήποτε στοιχεία e1 και e2 του πίνακα)». Σας δίνεται ακολούθως η διεπαφή Comparable: package java.lang; public interface Comparable { //Returns a negative number if the current object less than obj, //a positive number if the current object is greater than obj, //or zero if they are equal. public int compareto(object o); Θέλουμε να ταξινομήσουμε έναν πίνακα αντικειμένων της κλάσης Point χρησιμοποιώντας την μέθοδο Arrays.sort(). Υλοποιήστε τις μεθόδους equals() και compareto() της κλάσης Point που σας δίνεται παρακάτω: public class Point implements Comparable { // Cartesian coordinates of a point on a plane private double x, y; public Point (double Value, double Value ) { x = Value; y = Value ; public double getx() { return x; public double gety() { return y; public boolean equals(object o) { if (o instanceof Point) { Point p = (Point)o; if ((Math.abs(p.getX() - x) < 1e-6) && (Math.abs(p.getY() - y) < 1e-6)) else return false; return false; // end equals public int compareto(object o) { if (o instanceof Point) { Point p = (Point)o; double r = Math.sqrt(x * x + y * y); double ro = Math.sqrt(Math.pow(p.getX(),2)+ Math.pow(p.getY(), 2)); if (r < ro) return -1; if (Math.abs(r - ro) < 1e-6) return 0; else return 1; return -999; // end compareto // end Point

Σημείωση: Για την υλοποίηση των δύο μεθόδων θα πρέπει να λάβετε υπόψη ότι: Η ισότητα δύο αντικειμένων Point ορίζεται βάση των τιμών των μεταβλητών στιγμιοτύπων x και y, οι οποίες θα πρέπει να είναι ίσες με ακρίβεια 1x10-6 (χρησιμοποιήστε στις συγκρίσεις την μέθοδο Math.abs()). Η διάταξη δύο αντικειμένων Point ορίζεται βάση της απόστασής τους από την αρχή του επιπέδου η οποία ορίζεται από την συνάρτηση 2 x + y 2 (χρησιμοποιήστε στις συγκρίσεις τις μεθόδους Math.abs(), Math.sqrt() και Math.pow()). Επίσης, η μέθοδος compareto() θα πρέπει να επιστρέφει 1 εάν το τρέχον σημείο είναι κοντύτερα στην αρχή του επιπέδου από το σημείο που δίνεται σαν όρισμα στη μέθοδο. Με αυτόν τον τρόπο, ένα αντικείμενο Point που βρίσκεται κοντύτερα στην αρχή του επιπέδου θα προηγείται των αντικειμένων που βρίσκονται μακρύτερα όταν ο πίνακας ταξινομείται. Εάν το αντικείμενο (Object) που δίνεται σαν όρισμα στη μέθοδο equals() δεν είναι στιγμιότυπο της κλάσης Point, τότε η μέθοδος επιστρέφει false. Εάν το αντικείμενο (Object) που δίνεται σαν όρισμα στη μέθοδο compareto() δεν είναι στιγμιότυπο της κλάσης Point, τότε η μέθοδος επιστρέφει 999. Άσκηση 7 (15 μονάδες) (α) Ποια είναι η κυριότερη διαφορά μεταξύ μιας αφαιρετικής κλάσης Java και ενός αφαιρετικού τύπου δεδομένων; Abstract data type: declares value set and operations independent of representation, does not prescribe implementation. Abstract class: can define state (value representation) and implement methods (operations). Note that an abstract class may contain instance variables while an interface (e.g., ADT) cannot. (β) Ποια είναι η βασική ευκολία που προσφέρει η Java με τον χειρισμό των πινάκων σαν αντικείμενα; Αvoids element copy: objects are passed by reference to methods. (γ) Ποιους περιορισμούς συνέπειας θα πρέπει να λαμβάνουμε υπόψη στην υλοποίηση των μεθόδων equals(), hashcode(), και compareto(); if equals() is true, hashcode() cannot differ. equals() is true exactly when compareto() is zero. (δ) Δώστε δύο εναλλακτικούς τρόπους για να δηλώνετε ότι μία κλάση δεν μπορεί να έχει και αντικείμενα υποκλάσεών της. final class A {... // no subclass allowed class B { private B () {... // subclass cannot chain to constructor (στ) Τι είναι ένα πακέτο (package) κώδικα στη Java? Set of related classes with package access rights to each other; sources and class files kept together in directory named after package name.