ΗΥ 252 Αντικειμενοστρεφ ής Προγραμματισμός Διδάσκων: Γιάννης Τζίτζικας

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

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

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

public class ArrayStack implements Stack {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εξαιρέσεις (στη Java)

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

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

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

Εξαιρέσεις στη Java. Περιεχόμενα. Κάποιες προκαθορισμένες ρ εξαιρέσεις. Κωστής Σαγώνας

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

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

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

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

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

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

Generics και ArrayLists

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

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής T.E.I. ΘΕΣΣΑΛΟΝΙΚΗΣ

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ. Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής

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

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

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

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

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

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

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

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

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

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

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

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

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

Εξαιρέσεις (Exceptions) Λάθη (Errors) Χειρισμός των Εξαιρέσεων (Exception Handling) Assertions

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

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

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

public class ArrayQueue implements Queue {

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

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

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

Εξαιρέσεις (στη Java)

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

Εξαιρέσεις (στη Java) Vincent van Gogh, Irises, 1889

Εξαιρέσεις (στη Java)

Εισαγωγή στη JAVA. Εισαγωγή στη Java. Η Java είναι δημιούργημα της SUN MICROSYSTEMS.

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

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

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

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

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

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

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

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

Κωστής Σαγώνας Πιάσιμο εξαιρέσεων (catching exceptions) Ρίψη εξαιρέσεων (throwing exceptions) Η πρόταση finally

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

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

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

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

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

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

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

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

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

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

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

Εξαιρέσεις (στη Java)

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

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

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

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

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

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

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

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

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

Εξαιρέσεις (στη Java)

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 12: Ροές και είσοδος/έξοδος αρχείων

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

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

3 Αλληλεπίδραση Αντικειμένων

Transcript:

Πανεπιστήμιο Κρήτης Τμήμα Επιστήμης Υπολογιστών ΗΥ 252 Αντικειμενοστρεφ ής Προγραμματισμός Διδάσκων: Γιάννης Τζίτζικας Τελική Εξέταση (3 ώρες) Ημερομηνία: 25 Ιανουαρίου 2008 ύνολο μονάδων: 120 (δηλαδή δύο μονάδες bonus) Άσκηση 1 (5 μονάδες) // κατανόηση διαχείρισης μνήμης και garbage collector Θεωρείστε ότι έχουμε ορίσει μια κλάση Person με μια κατασκευάστρια μέθοδο η οποία δέχεται ως παράμετρο μια συμβολοσειρά. O παρακάτω κώδικας θα δημιουργήσει προβλήματα μνήμης; Πιο συγκεκριμένα: πότε θα δημιουργήσει και πότε όχι; Δώστε μια σύντομη απάντηση. int i=0; while (1) { Person p = new Person( anonymous +(i++)); // hidden code ύση Αν ο κρυμμένος κώδικας κρατάει αναφορές στα αντικείμενα που δημιουργούνται τότε θα έχουμε πρόβλημα μνήμης. Αν ο κρυμμένος κώδικας δεν κρατάει αναφορές τότε δεν θα έχουμε πρόβλημα μνήμης διότι ο garbage collectοr θα αποδεσμεύει το χώρο που καταλαμβάνουν τα νέα αντικείμενα που δημιουργούνται Άσκηση 2 (5 μονάδες) // απλή διαχείριση συλλογών Είναι ο παρακάτω κώδικας λογικά σωστός; Δηλαδή θα επιτελέσει το επιδιωκόμενο έργο; Αν όχι βρείτε το λάθος/λάθη και δικαιολογείστε σύντομα. /* removes from a vector v all references pointing to an object obj */ void removeelementfromvector(vector v, Object obj) { int i=0; while (i < v.size()) { if (v.elementat(i)==obj) v.removeelementat(i); i++; ύση Ο παραπάνω κώδικας θα αποτύχει να σβήσει συνεχόμενες εμφανίσεις του obj. Θα ήταν σωστός αν υπήρχε ένα else πριν την εντολή i++ Άσκηση 3 (20 μονάδες) // εξαιρέσεις O παρακάτω κώδικα δεν μπορεί να μεταγλωττιστεί. Εξηγείστε το γιατί. Κατόπιν δώστε δύο διαφορετικούς τρόπους συμπλήρωσης του κώδικα ώστε να μπορεί να μεταγλωττιστεί. Ο ένας από αυτούς να μην απαιτεί καμία αλλαγή του κώδικα της class B. Ο δεύτερος τρόπος να έχει μια έκδοση όπου οι υπογραφές των μεθόδων της B να παραμείνουν ως έχουν και μια έκδοση όπου τα σώματα των μεθόδων της B να παραμείνουν ως έχουν (ενώ οι υπογραφές τους μπορεί να διαφέρουν). class A { public void methoda(int a){ if (a <0) throw new XException();

class B extends A { public void methoda(int a) { super.methoda(a); ύση (5 μονάδες) Δεν θα μεταγλωττιστεί διότι δεν έχει δηλωθεί η εξαίρεση XException (7 μονάδες) Τρόπος Α: Δηλώνουνε το XException ως unckecked exception. Αυτό μπορεί να γίνει με μια δήλωση της μορφής: class XException extends RuntimeException { Δεν χρειάζεται να κάνουμε καμία άλλη αλλαγή στον κώδικα. (8 μονάδες) Τρόπος Β: Δηλώνουμε το XException ως checked exception, π.χ. με μια δήλωση της μορφής: class XException extends Exception { ε αυτή την περίπτωση πρέπει να αλλάξουμε την επικεφαλίδα της methoda της class A, δηλαδή να προσθέσουμε το throws XException. Η methoda της class B μπορεί είτε να κάνει και αυτή throws (και πρέπει να ενημερώσουμε την υπογραφή της) ή στο σώμα η εντολή super.methoda(a) να είναι μέσα σε ένα try catch και η υπογραφή της να παραμείνει ως έχει. Άσκηση 4 (15 μονάδες) // reflection Γράψτε ένα μικρό πρόγραμμα το οποίο να διαβάζει μέσω του JOptionPane μια συμβολοσειρά. Κατόπιν να ελέγχει αν υπάρχει κλάση με αυτό το όνομα και αν ναι να τυπώνει όλα τα ονόματα των μεθόδων της κλάσης αυτής. Αν δεν υπάρχει κλάση με αυτό το όνομα τότε να ζητάει από το χρήστη μια άλλη συμβολοσειρά και αυτό να συνεχίζεται έως ότου ο χρήστης δώσει ένα string που αντιστοιχεί σε κλάση που υπάρχει. ημείωση: Απο την κλάση Class, αρκεί να χρησιμοποιήσετε την στατική μέθοδο forname(string) και τη μέθοδο Medhod[] getdeclaredmethods(). Μπορείτε να διαβάσετε μια συμβολοσειρά μέσω του JOptionPane ως εξής: String username = JOptionPane.showInputDialog("Give me your name"); ύση import java.lang.reflect.*; import javax.swing.joptionpane; class Utilities { static final boolean printclassinformation(string str) { try { Class c = Class.forName(str); Method[] ms = c.getdeclaredmethods(); for (int i = 0; i < ms.length; i++) System.out.println(ms[i].toString()); catch(classnotfoundexception e) { System.out.println(e); return false; return true; class testtest { public static void main(string[] arg){ boolean ok=false; do { String str = JOptionPane.showInputDialog("Give a class name"); ok = Utilities.printClassInformation(str); while (!ok) ;

ΟΔΗΓΙΕ ΔΙΟΡΘΩΗ 1/ Ορθότητα ροής ελέγχου και κώδικα (10 μονάδες) 2/ try-catch για την εξαίρεση (3 μονάδες) 3/ Δόμηση κώδικα (2 μονάδες) Άσκηση 5 (10 μονάδες) // κατανόηση κώδικα και συλλογών Ο παρακάτω κώδικας είναι γραμμένος σε ένα αρχείο με το όνομα test.java. Ποιο θα είναι το αποτέλεσμα της εκτέλεσης αυτού του προγράμματος; Περιγράψτε σύντομα (με λιγότερες από 10 γραμμές) τι κάνει αυτό το πρόγραμμα και τι θα τυπώσει στην κονσόλα. import java.io.*; import java.util.*; class Mysterious { public void dowork( String param ) { if ( param==null ) { System.exit( 1 ); StreamTokenizer in = null; try { in = new StreamTokenizer( new BufferedReader ( new FileReader ( param ) ) ); catch ( FileNotFoundException e ) { System.err.println( e.getmessage() ); System.exit(1); try { HashMap map = new HashMap(); Integer one = new Integer(1); while ( ( in.nexttoken()!= in.tt_eof ) ) { // while we haven t reached EOF if ( in.ttype == in.tt_word ) { // the current token is a word Integer freq = ( Integer ) map.get(in.sval); //in.sval is the token if ( freq == null ) freq = one; else freq = new Integer( freq.intvalue() + 1 ); map.put( in.sval, freq ); SortedSet tmp = new TreeSet(map.keySet()); String z = (String)tmp.last(); System.out.println(z + " " + map.get(z)); catch ( IOException e ) { System.err.println(e.getMessage() ); System.exit( 1 ); class mtester { public static void main( String args[] ) { Mysterious m = new Mysterious(); m.dowork("test.java"); Απάντηση. Θα τυπώσει στην κονσόλα τη γραμμή Z 3 (3 μονάδες) υγκεκριμένα το πρόγραμμα αυτό διαβάζει τον πηγαίο κώδικα του εαυτού του, βρίσκει τις διαφορετικές λέξεις που εμφανίζονται σε αυτό και πόσες φορές εμφανίζεται η κάθε μία τους. Τέλος τυπώνει την λέξη που είναι τελευταία λεξικογραφικά και το πλήθος των εμφανίσεων της. την προκειμένου (και αφού οι χαρακτήρες είναι λατινικοί) η τελευταία λέξη είναι η z η οποία εμφανίζεται 3 φορές. (7 μονάδες) Άσκηση 6 (15 μονάδες) // maps Μία συνάρτηση f : A B λέγεται ένα προς ένα (1 1) όταν αντιστοιχίζει κάθε όρισμα σε αποκλειστικά δική του τιμή, δηλαδή όταν διαφορετικά ορίσματα απεικονίζονται σε διαφορετικές τιμές. Πιο συγκεκριμένα αν a a' τότε f(a) f(a'). Μία συνάρτηση f : A B λέγεται επί, όταν δεν υπάρχει στοιχείο στο Β που να μην είναι η εικόνα κάποιου στοιχείου στο Α. Δηλαδή αν για κάθε b B υπάρχει a A τέτοιο ώστε b = f(a). Η αντίστροφη αντιστοίχιση f 1 της συνάρτησης f είναι η αντιστοίχιση από το Β στο Α, που ορίζεται ως εξής: f 1 (b) = a ανν f(a) = b. Αν μια f είναι 1 1 και επί, τότε η αντίστροφη της είναι συνάρτηση.

υμπληρώστε τα τρία κενά στον παρακάτω κώδικα ώστε η κλάση να προσφέρει την προσδοκώμενη λειτουργικότητα. final class FunctionUtilities { static boolean isenaprosena(map f){ Set s = new HashSet(f.values()); if (f.size() == s.size()) return true; else return false; static boolean isepi(map f){ //complete code static boolean isantistrepsimi(map f){ //complete code static Map reverse(map f){ //complete code ύση final class FunctionUtilities { static boolean isenaprosena(map f){ Set s = new HashSet(f.values()); if (f.size() == s.size()) return true; else return false; static boolean isepi(map f){ return true; static boolean isantistrepsimi(map f){ return (isenaprosena(f) && isepi(f)); static Map reverse(map f){ if (isantistrepsimi(f)) { Map g = new HashMap(); Set<Map.Entry> s = f.entryset(); for (Map.Entry e: s) { g.put(e.getvalue(), e.getkey()); return g; else throw new IllegalArgumentException("Not reversible"); Οδηγίες Βαθμολόγησης 5μ για την isepi 5μ για την isantistrepsimi 5μ για την reverse (αφαίρεση 2μ εάν δεν έχει γίνει ο έλεγχος isantistrepimi) Άσκηση 7 (30 μονάδες) // σωστό ή λάθος Μαρκάρετε με τις ωστές και με τις λανθασμένες. ΑΑ Πρόταση / Απάντηση 1 ε μια member inner class μπορούμε να ωστό χρησιμοποιήσουμε το this 2 Οι κατασκευάστριες γεννήτριες πρέπει να είναι πάντα άθος public 3 Αν έχουμε σε μια μέθοδο την εντολή throw new IllegalArgumentException() άθος

τότε πρέπει να έχουμε δηλώσει αυτήν την εξαίρεση στην υπογραφή της μεθόδου 4 Η δημιουργία πολλών αντικειμένων μπορεί να οδηγήσει σε StackOverflowError 5 Αν έχουμε σε μια μέθοδο την εντολή throw new Exception() τότε πρέπει να έχουμε δηλώσει αυτήν την εξαίρεση στην υπογραφή της μεθόδου 6 Αν έχουμε σε μια μέθοδο την εντολή throw new RuntimeException() τότε πρέπει να έχουμε δηλώσει αυτήν την εξαίρεση στην υπογραφή της μεθόδου 7 Η κλάση TreeMap μας επιτρέπει να παριστάνουμε γράφους 8 Η κλάση TreeSet μας επιτρέπει να παριστάνουμε δυαδικά δέντρα 9 Με το Reflection API της java μπορούμε να φορτώσουμε μια κλάση αν γνωρίζουμε το όνομα της 10 Με το Reflection API της java μπορούμε να πάρουμε πληροφορίες για τις υποκλάσεις μιας κλάσης 11 Με το Reflection API της java μπορούμε να πάρουμε πληροφορίες για τις κατασκευάστριες μεθόδους της κλάσης που δέχονται παραμέτρους 12 Η χρήση generics επιτρέπει στον compiler να εντοπίσει σφάλματα τα οποία αλλιώς θα τα αντιλαμβανόμασταν κατά τη διάρκεια της εκτέλεσης 13 Το παρακάτω πρόγραμμα θα περάσει από τον compiler; Αν όχι γιατί; import java.util.*; class Person { String name = null; public static void main(string a[]){ List<Person> personlist = new ArrayList<Person>(); List<Object> generallist = personlist; 14 Είναι ο παρακάτω κώδικας σωστός; class MyThread extends Thread { static final int NUM=1000; public void run() { for (int i=0; i<num; i++) System.out.print("bam"); άθος ωστό (εκτός αν η εν λόγω εντολή είναι σε try catch) άθος υναρτήσεις που τα κλειδιά τους είναι ταξινομημένα ύνολα. (απλά τα κρατά ταξινομημένα) Η τελευταία εκχώρηση είναι λάθος. List<Person> δεν μπορεί να μετατραπεί σε List<Object> Άσκηση 8 (10 μονάδες) // ΑΤΔ Ακολουθεί η περιγραφή των δημόσιων μεθόδων ενός συνόλου από πολύ γνωστούς ΑΤΔ (Αφαιρετικούς Τύπους Δεδομένων) σε μορφή ψευδοκώδικα. Εντοπίστε τα σχεδιαστικά προβλήματα (παράλειψη λειτουργιών, λανθασμένες ή πλεονάζουσες λειτουργίες) και σχολιάστε τα σύντομα. Απάντηση 1 (2μ) class Stack { Stack(int size) ; // constructs a stack of that size void push(object elem); // pushes elem Object pop(); // returns and removes the top element Boolean isempty(); // checks if stack is empty Απουσιάζει μια λειτουργία που να ελέγχει αν η στοίβα είναι πλήρης. Άρα θα έπρεπε να υπήρχε και μια Boolean isfull(); Εναλλακτικά, εάν η εσωτερική υλοποίηση επιτρέπει στοίβες δυναμικού μεγέθους (και για το λόγο αυτό δεν έχει δηλωθεί μια isfull()), τότε θα έπρεπε να απουσιάζει η παράμετρος size από την κατασκευάστρια μέθοδο. 2 class Stack { Απουσιάζει μια λειτουργία που να

(2μ) 3 (6μ) Stack() ; // constructs a stack void push(object elem); // pushes elem Object top(); // returns the top element Boolean isempty(); // checks if stack is empty class Set { // adds elem to set void add(object elem); // removes elem from set void del(object elem); // returns the number of occurences of elem in set int getnumofoccurences(elem) αφαιρεί στοιχεία από τη στοίβα. Θα έπρεπε να υπήρχε μια void pop(); // removes the top element (a) σε ένα σύνολο ένα στοιχείο εμφανίζεται το πολύ μια φορά. Άρα αντί της int getnumberofoccurences(elem) Θα έπρεπε να έχουμε μια Boolean exist(elem) (b) Δεν έχουμε τρόπο να πάρουμε τα στοιχεία του συνόλου. Θα έπρεπε να προσφέρεται ένας τρόπος (π.χ. να δίνει έναν iterator). Άσκηση 9 (10 μονάδες) // εξαιρέσεις Έστω ότι θέλετε να δηλώσετε μια κλάση με τον εξής τρόπο: class A { Class B = Class.forName("reflection.ClassInfo"); Αν προσπαθήσετε να μεταγλωττίσετε τον κώδικα ο μεταγλωττιστής θα σας πει ότι κώδικας σας δεν είναι έγκυρος διότι η Class.forname() εγείρει εξαιρέσεις. Τι θα μπορούσατε να κάνετε ώστε να ξεπεράσετε αυτό το πρόβλημα (χωρίς να αλλάξετε τη γραμμή που αρχικοποιεί τη μεταβλητή Β); ύση Ένας τρόπος είναι να δηλώσουμε ότι όλες οι κατασκευάστριες μέθοδοι της class A εγείρουν την εξαίρεση ClassNotFoundException. Π.χ.: class A { Class B = Class.forName("reflection.ClassInfo"); A() throws ClassNotFoundException { Καλή επιτυχία