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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα

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

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

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

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

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

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

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

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

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

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

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

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ

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

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

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

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

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

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

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

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

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

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

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

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

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

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

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

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

Στοιχεία εξεταζόµενου Αριθµός Απάντησης Βαθµολογία. Σύνολο (Θέµα 4 ο )

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

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

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

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

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

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

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

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

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

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

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

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

Ανάλυση άσκησης. Employee. SalariedEmployee CommissionEmployee HourlyEmployee. BasePlusCommissionEmployee

Μέθοδοι. Μέθοδοι ηµιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων

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

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΕΞΑΙΡΕΣΕΙΣ ΚΑΙ Ο ΧΕΙΡΙΣΜΟΣ ΤΟΥΣ

Εξαιρέσεις Εισαγωγή. Εξαιρέσεις. ηµήτρης Λεβεντέας

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

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

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

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

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

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

Κλάσεις. Τροποποιητές, ιασυνδέσεις, Πακέτα. Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων

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

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

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

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

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

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

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

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

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

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

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

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

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

Εργασία Μαθήματος Αξία: 40% του τελικού σας βαθμού Ανάθεση: Παράδοση:

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός

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

Ειδικά Θέματα Προγραμματισμού

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

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

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

Transcript:

Πανεπιστήµιο Κρήτης Τµήµα Επιστήµης Υπολογιστών ΗΥ-252 Οντοκεντρικός Προγραµµατισµός Βασίλης Χριστοφίδης Ονοµατεπώνυµο: Αριθµός Μητρώου: Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 12 Σεπτεµβρίου 2002 Άσκηση 1 (10 µονάδες) 1.1 Τι συµβαίνει κατά την µετάφραση του παρακάτω προγράµµατος Java: final class A {... class B extends A {... Compile error: We can t extend final classes 1.2 Shape είναι µια αφηρηµένη (abstract) κλάση που ορίζεται ως ακολούθως: abstract class Shape { abstract void draw(); abstract void move(int x, int y); abstract void scale(double factor); int x,y; int width, height; Τι συµβαίνει κατά την µετάφραση της παρακάτω κλάσης Square που εξειδικεύει την Shape? class Square extends Shape { void move(int x, int y) {this.x = x; this.y = y;; Compile error: Concrete classes extending an abstract class should implement all its abstract methods 1.3 Switch είναι µια διεπαφή (interface) που ορίζεται ως ακολούθως: interface Switch { public void turnon(); public void turnoff(); Τι συµβαίνει κατά την µετάφραση του παρακάτω ορισµού της κλάσης CamelSwitch που υλοποιεί την Switch?

class CamelSwitch implements Switch { public void turnon(){on = true; private boolean on = false; Compile error: Concrete classes implementing an interface should implement all its abstract methods 1.4 Ποιο είναι το λάθος στον παρακάτω ορισµό της κλάσης Test? class Test { int x = 0; public static void main(string[] args){ System.out.println(x); Compile error: Static methods can t access instance variables 1.5 Θα µεταφραστεί χωρίς λάθη το παρακάτω πρόγραµµα Java? Αν όχι προτείνετε µια σωστή διόρθωσή του. class A { protected int x; class B extends A { private int y; class C extends B { int z; public C(){ z = super.y; Compile error: Instance variable in class B should be protected Άσκηση 2 (16 µονάδες) Ποια είναι η έξοδος του παρακάτω προγράµµατος Java? ώστε την απάντηση σας στις κενές γραµµές που προβλέπονται στην εκφώνηση της άσκησης. class A { public void f() {System.out.println(" A-f"); public void h(a o) {System.out.print("A-h"); o.f(); public void m(a o) {System.out.print("A-m"); o.f(); class B extends A { public void f() {System.out.println(" "); public void h(a o) {System.out.print("B-h"); o.f(); public void m(b o) {System.out.print("B-m"); o.f();

public class Test { public static void main(string[] args) { B b1 = new B(); B b2 = new B(); A a1 = new A(); A a2 = b2; b1.h(a1); B-h A-f b1.m(a1); A-m A-f b1.h(a2); B-h b1.m(a2); A-m a1.h(a2); A-h a1.m(a2); A-m a2.h(a2); B-h a2.m(a2); A-m Άσκηση 3 (14 µονάδες) Σας δίνεται ο ορισµός σε Java της παρακάτω κλάσης Employee: class Employee { private String name; private String ssn;

private int salary; public Employee(String name, String ssn, int salary){ this.name=name; this.ssn=ssn; this.salary=salary; public int earnings() { return salary; public String tostring() { return("name:"+ name +"\n"+"ssn:"+ ssn +"\n"+ "Εarnings:"+ earnings() +"\n"); 3.1 (6 µονάδες) Υλοποιείστε µια καινούργια κλάση Executive η οποία εξειδικεύει την Employee έχοντας µια επιπλέον µεταβλητή στιγµιοτύπων bonus καθώς και µεθόδους στιγµιοτύπων συµπεριλαµβανοµένου και ενός καινούργιου κατασκευαστή αντικειµένων. Στην Executive, πρέπει να (επανα-)ορίσετε τις παρακάτω µεθόδους της Employee έτσι ώστε: Ο κατασκευαστής αντικειµένων της Executive πρέπει να αρχικοποιεί τρεις µεταβλητές στιγµιοτύπων (name, ssn, salary και bonus) χρησιµοποιώντας 2 συµβολοσειρές και 2 ακεραίους που δίνονται σαν παράµετροι της µεθόδου. Η µέθοδος earnings πρέπει να επιστρέφει τις αποδοχές ενός διευθυντικού στελέχους σαν το άθροισµα του salary και του bonus. class Executive extends Employee { private int bonus; // constructor public Executive(String name, String ssn, int salary, int bonus) { super(name,ssn,salary); this.bonus=bonus; // earnings method public int earnings() { return(super.earnings()+bonus); 3.2 (8 µονάδες) Υλοποιείστε τώρα µια κλάση SME για την αναπαράσταση µιας Μικρής-και-Μεσαίας Εταιρείας (ΜΜΕ) που µπορεί να έχει το πολύ 100 υπαλλήλους. Η κλάση SME πρέπει να περιλαµβάνει τις παρακάτω µεταβλητές και µεθόδους στιγµιοτύπων: Την µεταβλητή employees τύπου πίνακα η οποία θα περιέχει τους υπαλλήλους της εταιρείας (Θυµηθείτε την χρήση αναφορών σε αντικείµενα Java). Τον κατασκευαστή αντικειµένων της SME χωρίς παραµέτρους που δηµιουργεί τον πίνακα µε τους υπαλλήλους της εταιρείας χωρίς να προσθέτει αρχικά κανέναν υπάλληλο. Εξηγείστε γιατί ο εξ ορισµού (default) κατασκευαστής αντικειµένων της SME δεν προσφέρει αυτήν την λειτουργικότητα.

Την µέθοδο addemployee η οποία προσθέτει ένα αντικείµενο Employee στον πίνακα employees. Την µέθοδο payday η οποία εκτυπώνει το name, ssn και earnings όλων των υπαλλήλων της εταιρείας. class SME { private Employee[] employees; private int empnum; // Constructor public SME() { employees = new Employee[100]; empnum = 0; // addemployee method public void addemployee(employee e) { employees[empnum++] = e; // payday method public void payday() { for (int i=0; i< empnum ; i++) System.out.println(employees[i].toString()); Άσκηση 4 (20 µονάδες) Υλοποιείστε µια µέθοδο insert η οποία εισάγει ακεραίους σε ταξινοµηµένες λίστες List χρησιµοποιώντας διαδοχικές κλήσεις µεθόδων όπως στο παρακάτω παράδειγµα: (new Cons(1, new Cons(4, new Empty()))).insert(2) ==> new Cons(1, new Cons(2, new Cons(4, new Empty()))) (new Cons(1, new Cons(4, new Empty()))).insert(0) ==> new Cons(0, new Cons(1, new Cons(4, new Empty()))) (new Empty()).insert(4) ==> new Cons(4, new Empty()) 4.1 (10 µονάδες) Για την υλοποίηση της µεθόδου insert χρησιµοποιείστε τους παρακάτω ηµιτελείς ορισµούς των κλάσεων Empty και Constructed (για συντοµογραφία Cons): abstract class List { abstract public List insert(int x); class Empty extends List { public List insert(int x) { return new Cons(x, this);

class Cons extends List { public int first; public List rest; public Cons(int firstelement, List restelements) { rest = restelements; first = firstelement; public List insert(int x) { if (x < this.first) return new Cons(x, this); else return new Cons(this.first, this.rest.insert(x)); 4.2 (10 µονάδες) Υλοποιείστε τώρα µια µέθοδο sort σε ταξινοµηµένες λίστες ακεραίων χρησιµοποιώντας την µέθοδο insert του προηγούµενου ερωτήµατος. Η βασική ιδέα του αλγορίθµου ταξινόµησης είναι η ακόλουθη: για να ταξινοµήσουµε µια µη κενή λίστα πρώτα ταξινοµούµε το υπόλοιπο µέρος της λίστας rest και µετά εισάγουµε το πρώτο στοιχείο της λίστας first στην ταξινοµηµένη λίστα που µόλις δηµιουργήσαµε. Για την υλοποίηση της sort χρησιµοποιείστε τους παρακάτω ηµιτελείς ορισµούς των κλάσεων Empty και Cons: abstract class List { abstract public List insert(int x); abstract public List sort(); class Empty extends List { public List sort() { return this; class Cons extends List { public int first; public List rest; public List sort() { return (this.rest.sort()).insert(this.first);

Άσκηση 5 (20 µονάδες) Θέλουµε να υλοποιήσουµε ένα πρόγραµµα Java για τον χειρισµό ηλεκτρονικών διευθύνσεων (e-mail). Οι ηλεκτρονικές διευθύνσεις αποθηκεύονται σ ένα απλό αρχείο κειµένου όπως δίνεται ακολούθως: Dimitris Plexousakis dp@csd.uch.gr Vassilis Christophides christop@csd.uch.gr Apostolos Traganitis tragani@ics.forth.gr Ανεξάρτητα από τον τρόπο δηµιουργίας του παραπάνω αρχείου ηλεκτρονικών διευθύνσεων (π.χ. χρησιµοποιώντας κάποιον text editor) θέλουµε να έχουµε την δυνατότητα ταξινόµησης (sort) ως προς τα ονόµατα. Για παράδειγµα το αποτέλεσµα της ταξινόµησης του παραπάνω αρχείου δίνεται ακολούθως: Vassilis Christophides christop@csd.uch.gr Dimitris Plexousakis dp@csd.uch.gr Apostolos Traganitis tragani@ics.forth.gr Επιπλέον θέλουµε να έχουµε την δυνατότητα ενοποίησης (merge) δύο αρχείων ηλεκτρονικών διευθύνσεων. Το αποτέλεσµα πρέπει να είναι ένα ταξινοµηµένο αρχείο ηλεκτρονικών διευθύνσεων ανεξάρτητα από το αν τα αρχικά αρχεία ήταν ταξινοµηµένα ή όχι. Γράψτε µια δηµόσια (public) κλάση Sorter και τις µεθόδους insertfromreader και puttowriter οι οποίες διαβάζουν ένα αρχείο ηλεκτρονικών διευθύνσεων και γράφουν σ ένα ταξινοµηµένο αρχείο ηλεκτρονικών διευθύνσεων. Γράψτε µια δηµόσια (public) κλάση MergeAndSort και την κύρια (main) µέθοδο η οποία δέχεται τρία ονόµατα αρχείων σαν είσοδο. Τα πρώτα δύο ορίσµατα δίνουν τα ονόµατα των αρχείων ηλεκτρονικών διευθύνσεων που θέλουµε να ενοποιήσουµε και το τρίτο το ενοποιηµένο και ταξινοµηµένο αρχείο ηλεκτρονικών διευθύνσεων. Σηµείωση: Για την άσκηση θεωρείστε ότι οποιοδήποτε όνοµα αρχείου δίνεται στην είσοδο είναι ένα αρχείο ηλεκτρονικών διευθύνσεων που ακολουθεί την µορφή που σας δόθηκε στην εκφώνηση: η πρώτη γραµµή περιέχει το όνοµα και η δεύτερη την ηλεκτρονική διεύθυνση, και ο συνολικός αριθµός γραµµών στο αρχείο είναι άρτιος (Ακόµη και αν θεωρήσετε καλά-ορισµένα αρχεία διευθύνσεων ο µεταφραστής Java απαιτεί χειρισµό εξαιρέσεων!). Το πρόγραµµά σας πρέπει να χρησιµοποιήσει την κλάση TreeMap που υλοποιεί την διεπαφή SortedMap. Για να προσθέσετε ένα ζεύγος όνοµαδιεύθυνση πρέπει να χρησιµοποιείτε την µέθοδο put(name, mail):.έτσι το όνοµα (name) χρησιµοποιείται σαν κλειδί και η διεύθυνση (mail) σαν τιµή. Η ταξινόµηση γίνεται αυτόµατα από την µέθοδο put χρησιµοποιώντας την στάνταρτ (αλφαβητική) διάταξη σε συµβολοσειρές (δηλ. δεν χρειάζεται να υλοποιήσετε δικές σας µεθόδους διάταξης). Το αποτέλεσµα της ταξινόµησης γίνεται εµφανές µε την χρήση της µεθόδου επανάληψης (iterator) iterator η οποία σέβεται την διάταξη των κλειδιών ενός SortedMap όπως επιστρέφονται από την µέθοδο entryset.

import java.io.*; import java.util.*; public class Sorter { private SortedMap smap = new TreeMap() public void insertfromreader(bufferedreader r) throws IOException{ String name = r.readline(); String mail = r.readline(); While (name!= null && mail!= null){ Smap.put(name, mail); name = r.readline(); mail = r.readline(); public void puttowriter(bufferedwriter w) throws IOException{ Iterator it = smap.entryset().iterator(); Map.Entry entry; While(it.hasnext()) { entry = (Map.Entry) it.next(); w.write(entry.getkey() + \n ); w.write(entry.getvalue() + \n ); public class MergeAndSort { public static void main(string[] args){ BufferedReader in1, in2; BufferedWriter out; Sorter sorter = new Sorter(); try { if(args.length ==3) { in1 = new BufferedReader(new FileReader(args[0])); sorter.insertfromreader(in1); in1.close(); in2 = new BufferedReader(new FileReader(args[1])); sorter.insertfromreader(in2); in2.close(); out = new BufferedWriter(new FileWriter(args[2])); sorter.puttowriter(out); out.close(); else throw new IllegalArgumentException( The number of Input/Output Files is wrong ); catch (FileNotFoundEception e) { throw new RunTimeException( File not found: + args[0] + or args[1]); catch (IOException e) { throw new RunTimeException( Error in writing file: + args[2] + or reading files + args[0] + args[1]));

Άσκηση 6 (20 µονάδες) 6.1 (4 µονάδες) Αναφέρετε τις δύο τεχνικές µε τις οποίες µπορούµε να διατηρήσουµε (persistence) αντικείµενα στο δίσκο µετά την λήξη ενός προγράµµατος Java. Ποιες είναι οι βασικές διαφορές τους? Serialization: the serializing process is automatically handled by Java but the default behavior can be overridden. There are no methods the developer MUST implement Externalization: the developer must manual handle the serializing process and must implement the methods readexternal and writeexternal 6.2 (4 µονάδες) Αναφέρετε τις δύο στρατηγικές µε τις οποίες µπορούµε να χειριστούµε εξαιρέσεις (exceptions) κατά την εκτέλεση ενός προγράµµατος Java. Ποιες είναι οι βασικές διαφορές τους? handle now or use a try-catch-block structure: handle later or use a throws clause in the method declaration: 6.3 (4 µονάδες) Αναφέρετε τους δύο µηχανισµούς µε τους οποίους µπορούµε να ορίσουµε µεθόδους µε το ίδιο όνοµα σε µια κλάση ή ιεραρχία κλάσεων Java. Ποιες είναι οι βασικές διαφορές τους? Overload: several methods are defined with the same name but different signatures (parameter/argument lists). Overloading lets you define a similar operation in different ways for similar object types Override: a subclass defines a method with the same name and signature of a method in the superclass. Overriding lets you define a similar operation in different ways for different but compatible object types 6.4 (4 µονάδες) Αναφέρετε τις δύο διεπαφές µε τις οποίες µπορούµε να συγκρίνουµε (compare) αντικείµενα σ ένα πρόγραµµα Java. Ποιες είναι οι βασικές διαφορές τους? Comparator interface: One is to encapsulate the knowledge about which objects are comparable and how to compare them in an object! Such an object implements compare() method and it used for designing a design custom ordering scheme Comparable interface: The other is to make the objects we compare implement themselves a comparison operation via the compareto() method and it used for designing a design natural ordering schema

6.5 (4 µονάδες) Αναφέρετε τους δύο τρόπους µε τους οποίους µπορούµε να δηµιουργούµε κλώνους (clone) αντικειµένων σε ένα πρόγραµµα Java. Ποιες είναι οι βασικές διαφορές τους? In many classes, the default implementation of (protected) clone() will be wrong because it duplicates a reference to an object that shouldn t be shared A shallow copy, by default: A deep copy is often preferable: