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



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

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

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

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

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

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

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

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

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

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

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

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

Κλάσεις και Αντικείµενα

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

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

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

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

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

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

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

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

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

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

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

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

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

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

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

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

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

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

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

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

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

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

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

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

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

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

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

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

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

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

Dynamic types, Lambda calculus machines Section and Practice Problems Apr 21 22, 2016

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

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

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

Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, :00-10:00 π.μ.

API: Applications Programming Interface

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

Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1

ΕΠΛ131 Αρχές Προγραμματισμού

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

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

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

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

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

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

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

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

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

Συγκρίσιμα Αντικείμενα (comparable)

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

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

AVL-trees C++ implementation

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

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

άσκηση Hide UI Elements 7.2 Try and Catch

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

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

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

ΕΠΛ 012. JavaScripts

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

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

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

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

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

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

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

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

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

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

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

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

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

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

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

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

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

Προγραμματισμός ΙΙ (Java) 4. Διαχείριση εξαιρέσεων

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

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

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

Παύλος Εφραιµίδης. Java. Κληρονοµικότητα

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

public class ArrayStack implements Stack {

Transcript:

Πανεπιστήµιο Κρήτης Τµήµα Επιστήµης Υπολογιστών ΗΥ-252 Αντικειµενοστρεφής Προγραµµατισµός Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 21 Σεπτεµβρίου 2012 Θέμα 1 Θέμα 2 Θέμα 3 Θέμα 4 Θέμα 5 Θέμα 6 Σύνολο /25+5 /21 /11 /16 /15 /12 /100+5 Ονοµατεπώνυµο: Αριθµός Μητρώου: Άσκηση 1 (25+5 µονάδες) // Κατανόηση κώδικα Java Σας δίνετε τo ακόλουθο πρόγραµµα Java οι κλάσεις του οποίου βρίσκονται στο ίδιο πακέτο : class Test { public static void main(string[] args){ A a = new B(); a.incr(10); System.out.println(a); public class A { int i; public void incr(int d){ if (d > 0){ this.i += d; this.incr(d-1); public String tostring(){ return "A's i is: " + i; public class B extends A { int i; public void incr(int d){ if (d > 0){ this.i += d; super.incr(d/2); public String tostring(){ return super.tostring() + " B's i is: " + i; (α) (5 µονάδες) Τι θα τυπωθεί στην στάνταρ έξοδο της µεθόδου main(); When the incr() method is called from main, the method invoked is the one in B. Both classes provide an i field, which by default is 0. A trace of the method calls is the given below

B.incr(10)[A.i = 0, B.i = 0] A.incr(5)[A.i = 0, B.i = 10] B.incr(4)[A.i=5; B.i=10] A.incr(2)[A.i=5; B.i=14] B.incr(1)[A.i=7; B.i=14] A.incr(0)[A.i=7; B.i=15] Thus, the main method prints: A s i is: 7 B s i is: 15 (β) (5 µονάδες) Θεωρήστε το αντικείµενο το οποίο δηµιουργείται στην µέθοδο main(), και την κλήση της µεθόδου incr(). Η εντολή this.i += d εµφανίζεται στο σώµα της µεθόδου τόσο στην κλάση A όσο και στην κλάση B. Είναι η ίδια µεταβλητής i που τροποποιείται και στις δύο κλάσεις; Η αναφορά this αναφέρεται στο ίδιο αντικείµενο και στις δύο µεθόδους; No, there is one i from the A part of the object, and one from the B part. Yes, this refers to the same object (a B object) in both places. (γ) (15 µονάδες) Στην κλάση A η µέθοδος incr() δηλώνεται µε δηµόσια δικαιώµατα πρόσβασης (public). Θα άλλαζε η συµπεριφορά του παραπάνω προγράµµατος εάν η µέθοδος incr() δηλωνόταν σαν προστατευόµενη (protected); ώστε µια σύντοµη εξήγηση της απάντησής σας. Στην κλάση Β η µέθοδος incr() δηλώνεται µε δηµόσια δικαιώµατα πρόσβασης (public). Θα άλλαζε η συµπεριφορά του παραπάνω προγράµµατος εάν η µέθοδος incr() δηλωνόταν σαν προστατευόµενη (protected) ενώ στην κλάση A παραµένει δηµόσια (public); ώστε µια σύντοµη εξήγηση της απάντησής σας. Εάν οι κλάσεις A και B βρίσκονταν σε ένα πακέτο X και η κλάση Test σε ένα άλλο πακέτο Y, θα δίνατε διαφορετική απάντηση σε µία από τις προηγούµενες ερωτήσεις; ώστε µια σύντοµη εξήγηση της απάντησής σας. Yes, it will be OK to declare it protected, one can override a protected method to become public. It is not OK to declare B.incr() protected, as one cannot override a public method to become unpublic. In general, one can make members more visible, not less. If A and B were in a different package than Test, making A.incr() protected would hide it from Test, and the program could not compile. Making B.incr() protected would still be illegal. (δ) (5 µονάδες bonus) Είναι έγκυρο να ορίσουµε την κλάση B σαν µέλοςεσωτερική κλάση της A; ώστε µια σύντοµη εξήγηση της απάντησής σας, προσδιορίζοντας και τις αλλαγές που πρέπει να γίνουν στις κλάσεις Test, A ή B στην περίπτωση που η απάντησή σας είναι καταφατική. Yes, it is legal to have a subclass as an inner class. The only change necessary is in Test, as one will have to instantiate the B class differently. A a = new A().newB();

Άσκηση 2 (21 µονάδες) Χειρισµός εξαιρέσεων Σας δίνεται ο ακόλουθος κώδικας Java: class Front extends ArrayIndexOutOfBoundsException { public class ExceptionFunction { public static boolean change(int[] course, int index){ try { System.out.println(""); if (index < 0) { throw new Front(); course[index] = 1; catch (Front e) { course [-index] = 1; System.err.println("OutOfBounds: " + index); return false; catch (ArrayIndexOutOfBoundsException e) { course[index - 7] = 1; System.err.println("OutOfBounds: " + index); return true; finally { System.out.println(""); return false; public static void main( String args[] ) { try { int students[] = new int[5]; System.out.println(""); System.out.println(change(students, Integer.parseInt(args[0]))); System.out.println("After Change"); catch (ArrayIndexOutOfBoundsException e) { System.out.println("Over Here"); Τι θα τυπωθεί στην στάνταρ έξοδο µετά τις παρακάτω εκτελέσεις του προγράµµατος (α) (5 µονάδες) java ExceptionFunction 2 false After Change (β) (6 µονάδες) java ExceptionFunction -2 OutOfBounds: -2 //inverse occurrence of results is likely, due to different buffers of standard output

and standard error that may be flushed at different times False After Change (γ) (6 µονάδες) java ExceptionFunction 10 OutOfBounds: 10 true After Change (δ) (4 µονάδες) java ExceptionFunction -10 Over Here Άσκηση 3 (11 µονάδες) // Βασική Λειτουργικότητα Αντικειµένων Θυµηθείτε την διεπαφή Comparator της Java: public interface Comparator { public int compare (Object left, Object right); Ορίστε µια κλάση ReverseIntegerComparator που υλοποιεί την διεπαφή Comparator για την σύγκριση δύο αντικείµενων τύπου Integer. Ως συνήθως, η µέθοδος επιστρέφει -1 εάν το left είναι αριθµητικά µεγαλύτερο από το right, 0 εάν είναι αριθµητικά ίσα και 1 εάν το left είναι αριθµητικά µικρότερο από το right. public class ReverseIntegerComparator implements Comparator { public int compare(object left, Object right) { if (left instanceof Integer && right instanceof Integer) { Integer Ileft = (Integer) left; Integer Iright = (Integer) right; if (Ileft.intValue() > Iright.intValue()) return -1; else if (Ileft.intValue() < Iright.intValue()) return 1; else return 0; else throw new IllegalArgumentException();

Άσκηση 4 (16 µονάδες) Χειρισµός Πλαισίου Συλλογών Αντικειµένων εδοµένου ενός δυαδικού δένδρου αναζήτησης (binary search tree) υλοποιήστε µια µέθοδο between(...) η οποία παίρνει σαν παράµετρο ένα κατώτατο (lower) και ανώτατο (upper) άκρο και επιστρέφει σε ένα HashSet όλα τα στοιχεία του δένδρου που βρίσκονται σε αυτό το διάστηµα [lower, upper] (συµπεριλαµβανοµένων και των δυο άκρων). Βοήθεια: Για την εισαγωγή ενός στοιχείου x σε ένα HashSet h χρησιµοποιήστε την µέθοδο h.add(x). Μπορείτε επίσης να χρησιµοποιήσετε µια βοηθητική µέθοδο betweenhelper() η οποία παίρνει σαν παράµετρο ένα επιπλέον HashSet το οποίο αποθηκεύει σταδιακά τα στοιχεία του δένδρου που ικανοποιούν την συνθήκη. import java.util.hashset; class TreeNode<E extends Comparable> { E value; TreeNode<E> left; TreeNode<E> right; HashSet<E> between(comparable lower, Comparable upper){ return betweenhelper(lower,upper, new HashSet<E>()); HashSet<E> betweenhelper(comparable lower, Comparable upper,hashset<e> h) { if (value.compareto(upper) <= 0 && value.compareto(lower) >= 0) h.add(value); if (left!= null && value.compareto(lower) >= 0) h = left.betweenhelper(lower, upper, h); if (right!= null && value.compareto(upper) <= 0) h = right.betweenhelper(lower, upper, h); return h; Άσκηση 5 (15 µονάδες) // Γενικές ιαπαφές και Κλάσεις Σας δίνεται η ακόλουθη γενική κλάση DynamicArray<E> η οποία υλοποιεί την γενική διεπαφή Array<E>: public class DynamicArray<E> implements Array<E> { private E[] data; // the data part of the array private int size; // logical size of the array public DynamicArray(int initalcapacity) {... public DynamicArray() {... public DynamicArray(DynamicArray<E> b) {... // interface methods are implemented here. (α) (5 µονάδες) Υλοποιήστε την µέθοδο resize() η οποία δηµιουργεί έναν πίνακα διπλάσιου µεγέθους από αυτόν που αναφέρετε από την µεταβλητή data και αντιγράφει τα στοιχεία του στον καινούργιο πίνακα.

private void resize() { int newcapacity = 2 * data.length; E[] newdata = (E[]) new Object[newCapacity]; for (int k = 0; k < data.length; k++) { newdata[k] = data[k]; data = newdata; (β) (5 µονάδες) Υλοποιήστε την µέθοδο add() η οποία προσθέτει ένα στοιχείο (element) που δίνεται σαν παράµετρος στο τέλος του πίνακα εάν υπάρχει διαθέσιµος χώρος. ιαφορετικά επεκτείνει τον πίνακα. Η µέθοδος επιστρέφει πάντοτε αληθές. public boolean add(e element) { if (size == data.length) resize(); data[size] = element; size++; return true; γ) (5 µονάδες) Υλοποιήστε την µέθοδο add() η οποία προσθέτει ένα στοιχείο στην θέση κ που δίνεται σαν παράµετρος, µεταθέτοντας τα στοιχεία που έπονται κατά µια θέση. Σε περίπτωση που δεν υπάρχει διαθέσιµος χώρος για αυτή την εισαγωγή επιστρέφει µια εξαίρεση IndexOutOfBoundsException. public void add(int k, E element) { if (k < 0 k > data.length) throw new IndexOutOfBoundsException("add: index out of bounds"); //Shift element to make room for new one. //This works if element is added at end (k=size()) for (int j = size-1; j >= k; j--) data[j+1] = data[j]; data[k] = element; // add the element size++; Άσκηση 6 (12 µονάδες) //Προγραµµατισµός Βασισµένος σε Συµβόλαια Σας δίνονται οι ακόλουθες κλάσεις και διεπαφές: public class FooClass { public int getvalue ( ) {... public void run ( ) {... public interface Openable { public void open ( ) ;

public interface Closable { public void close ( ) ; Θέλουµε να γράψουµε µια επέκταση της κλάσης FooClass η οποία επεκτείνει και τις δύο παραπάνω διεπαφές: public class BarClass extends FooClass, implements Openable, Closable {... (α) (3 µονάδες) Ποιες µεθόδους πρέπει να υλοποιεί η κλάση BarClass έτσι ώστε να µπορεί να είναι συντακτικά σωστή; open() and close() (β) (3 µονάδες) Ποιες από τις παρακάτω εντολές είναι σωστές (υποθέτοντας ότι οι κλάσεις διαθέτουν µεθόδους κατασκευής); i. BarClass a = new FooClass ( ) ; ii. FooClass b = new BarClass ( ) ; iii. Openable c = new FooClass ( ) ; iv. FooClass d = new Closable ( ) ; i. (γ) (3 µονάδες) Ποιες από τις παρακάτω εντολές της µεθόδου funmethod() είναι σωστές; public void funmethod (BarClass a, FooClass b) { i. a.close ( ) ; ii. a.run ( ) ; iii. b.getvalue ( ) ; iv. a.open ( ) ; i.,, iii., iv. (δ) (3 µονάδες) Εξηγήστε την σχέση µεταξύ µιας κλάσης και ενός αντικειµένου. A class describes the type of a group of objects. The type is the data in an object and the operations that can be performed on it. An object is some data in memory whose type is defined by a class.