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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

public class ArrayStack implements Stack {

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

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

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

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

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

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

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

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

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

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

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

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

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

API: Applications Programming Interface

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

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

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

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

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

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

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

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

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

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

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

Μονοδιάστατοι πίνακες Πολυδιάστατοι πίνακες Μέθοδοι Μέθοδοι Recursive Overloading

Week. 6: Java Collections

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

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

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

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

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

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

public class ArrayQueue implements Queue {

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

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

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

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

Γενικοί Τύποι. 13 Ιανουαρίου 2011 Αντικειμενοστρεφής Προγραμματισμός στη Java 32

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

9:00-10:00 π.μ. (60 λεπτά) Παρασκευή, 14 Οκτωβρίου, 2016

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

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

SOAP API. Table of Contents

ΗΥ252 Πρόοδος 24 Νοεμβρίου 2012 Σελίδα 2 από 8

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

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

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

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

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

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

Transcript:

Πανεπιστήµιο Κρήτης Τµήµα Επιστήµης Υπολογιστών ΗΥ-252 Οντοκεντρικός Προγραµµατισµός Βασίλης Χριστοφίδης Ονοµατεπώνυµο: Αριθµός Μητρώου: Άσκηση 1 (5 µονάδες) Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 30 Αυγούστου 2003 Θεωρήστε τους παρακάτω ατελείς ορισµούς κλάσεων Java: class Student {... class Undergraduate extends Student {... class Graduate extends Student {... Τι συµβαίνει κατά την µετάφραση κάθε γραµµής του παρακάτω προγράµµατος Java? Σε περίπτωση προβλήµατος εξηγήστε την αιτία που το προκάλεσε. 1*Student student1, student2; 2*Graduate student3; 3*student1 = new Undergraduate(); 4*student2 = new Graduate(); 5*student3 = student2; 6*student3 = (Graduate) student2; 7*student3 = (Graduate) student1; 1 ΟΚ 2 ΟΚ 3 ΟΚ 4 ΟΚ 5 compilation error 6 explicit cast, ok 7 compilation ok run-time exception Άσκηση 2 (21 µονάδες) Η ακόλουθη διεπαφή Java ορίζει το συµβόλαιο ενός ΑΤ για την αποθήκευση και ανάκτηση αντικειµένων (Objects) όπως µια δέσµη (deck) από τραπουλόχαρτα:

Interface describing the operations for a deck. public interface Deck { * Adds the given element to the bottom of this deck. * @param element object to be added public void add(object element); * Inserts the given element at a random position * in this deck. * @param element object to be inserted public void insert(object element); * Removes the object on the top of this deck, * and returns that object. public Object removetop() throws RuntimeException; Returns the number of objects in this deck. public int size(); Returns whether or not this deck is empty. public boolean isempty(); Γράψτε µια κλάση Java µε όνοµα VectorDeck η οποία υλοποιεί τον ΑΤ Deck. Για την υλοποίηση των µεθόδων της διεπαφής χρησιµοποιείστε ένα αντικείµενο τύπου Vector. Τεκµηριώστε τον κώδικά σας χρησιµοποιώντας κατάλληλα σχόλια Javadoc για όλες τις µεταβλητές και µεθόδους στιγµιότύπων που χρησιµοποιείτε. Σηµείωση: Για την υλοποίηση της µεθόδου add() θα χρειαστείτε τον παρακάτω κώδικα ο οποίος παράγει έναν τυχαίο ακέραιο αριθµό από το διάστηµα [0, n): (int)(math.random() * n); import java.util.*; * Implementation of the Deck interface using a Vector. * @author Vassilis Christophides public class VectorDeck implements Deck { Vector used to store elements. protected Vector elements = new Vector(); Constructs a new VectorDeck. public VectorDeck() { * Adds the given element to the bottom of this deck. * @param element object to be added

public void add(object element) { elements.add(element); * Inserts the given element at a random position * in this deck. * @param element object to be inserted public void insert(object element) { elements.add((int)(math.random() * size(), element)); * Removes the object on the top of this deck, * and returns that object. public Object removetop() throws RuntimeException { return elements.remove(0); Returns the number of objects in this deck. public int size() { return elements.size(); Returns whether or not this deck is empty. public boolean isempty() { return elements.isempty(); There is no need to grow and shrink the Vector, as that is what the class does for you automatically during add and remove operations. It is inappropriate to extend the Vector class because that exposes methods that could be used to circumvent the idea of the Deck as described in the interface. (For example, it allows removal of elements other than from the top of the deck.) Note that the remove method used in removetop will throw a runtime exception if the deck is empty. If you explicitly threw an exception in the proper case, that s fine too. Άσκηση 3 (20 µονάδες) Θεωρήστε τον παρακάτω ατελή ορισµό της κλάσης Java µε όνοµα Student, τον οποίον πρέπει να συµπληρώσετε : // Student.java: student grade record public class Student implements Comparable{ private String name; //In the form "LastName, FirstName" private int totalhours;//total number of hours completed private int totalgradepoints; // GPA = totalgradepoints / totalhours private double GPA; // grade point average // uses name, total hours taken, and total gradepoints // as parameters public Student(String n, int inithours, int initgradepoints) {

// Fill in for Question 1. // same as above, but replaces total gradepoints by // grade point average public Student(String n, int inithours, double initgpa){ // Fill in for Question 2. // return the GPA public double getgpa() { return GPA; // assume the students takes a single course and gets a //grade public void updaterecord(int hours, int grade) { totalhours += hours; totalgradepoints += hours * grade; GPA = (double)totalgradepoints / totalhours; public String tostring() { return "Name: " + name + ", GPA: " + GPA + ", Total Hours: " + totalhours; // compare names in alphabetic order. public int compareto(object t) { // Fill in for Question 4. 1. (3 µονάδες) Συµπληρώσετε τον κώδικα για τον πρώτο κατασκευαστή αντικειµένων (constructor). Υπολογίστε τον µέσο όρο του βαθµού: GPA = totalgradepoints / totalhours. name = n; totalgradepoints = initgradepoints; totalhours = inithours; GPA = (double)totalgradepoints / totalhours; 2. (3 µονάδες) Συµπληρώσετε τον κώδικα για τον δεύτερο κατασκευαστή αντικειµένων (constructor). Υπολογίστε τον συνολικό βαθµό: totalgradepoints = number of hours * GPA. name = n; totalhours = inithours; totalgradepoints = (int)(initgpa * totalhours); GPA = initgpa; 3. (1 µονάδα) Στο παραπάνω πρόγραµµα σας δίνονται δύο κατασκευαστές αντικειµένων. Πως η εικονική µηχανή (VM) της Java καταλαβαίνει ποιον από τους δύο κατασκευαστές πρέπει να χρησιµοποιήσει? By the constructor s arguments.

4. (2 µονάδες) Συµπληρώσετε τον κώδικα της µεθόδου compareto() η οποία υλοποιεί την στάνταρ διεπαφή Comparable. Η µέθοδος συγκρίνει τα ονόµατα των φοιτητών σε αλφαβητική σειρά. return name.compareto(((student)t).name); 5. (5 µονάδες) Γράψτε έναν κώδικα σε µια ξεχωριστή κλάση ή µια µέθοδο main() ο οποίος δηµιουργεί 4 αντικείµενα της κλάσης Student µε τα παρακάτω δεδοµένα : a. "Φοιτητής, Πρωτοετής", 20, 3.4 b. "Προχωρηµένος, Java", 35, 92 c. "Πρωτάρης, Java", 25, 3.2 d. "Φοιτητής, Τελειόφοιτος", 40, 145 Εκτυπώστε στο τέλος τα δεδοµένα των αντικειµένων που δηµιουργήσατε. // Students.java: test the Student class public class Students { public static void main (String[] args) { Student s1 = new Student("Φοιτητής,Πρωτοετής", 20,3.4); Student s2 = new Student("Προχωρηµένος,Java", 35,92); Student s3 = new Student("Πρωτάρης,Java",25,3.2); Student s4 = new Student("Φοιτητής,Τελειόφοιτος", 40,145); System.out.println(s1 + "\n" + s2 + "\n" + s3 + "\n" + s4); 6. (3 µονάδες) είξτε πώς µπορείτε να καλέσετε την µέθοδο getgpa() για τον φοιτητή Java Πρωτάρης. Τι θα τυπωθεί στην έξοδο του προγράµµατος µετά από την εκτέλεση αυτής της εντολής? System.out.println("GPA Java Πρωτάρης: " + s3.getgpa()); GPA Java Πρωτάρης: 2.6285714285714286 7. (3 µονάδες) είξτε πώς µπορείτε να συγκρίνετε τον τελευταίο µε τους δύο πρώτους φοιτητές από την παραπάνω λίστα χρησιµοποιώντας την µέθοδο compareto(). Τι θα τυπωθεί στην έξοδο του προγράµµατος µετά από την εκτέλεση αυτών των εντολών? System.out.println(s4.compareTo(s1)); System.out.println(s4.compareTo(s2)); 1 1

Άσκηση 4 (22 µονάδες) Θεωρήστε το παρακάτω πρόγραµµα Java: 1 interface Inter { 2 int number(); 3 4 abstract class Abs { 5 static int foo = 12; 6 int number() { return 5; 7 abstract int ace(); 8 9 final class Sub extends Super { 10 Sub(int bar) { foo = bar; 11 public int number() { return 10; 12 int ace() { return 13; 13 int dubble(int i) { return 2 * i; 14 15 public class Super extends Abs implements Inter { 16 public int number() { return 11; 17 public static void main(string args[]) { 18 Super s1 = new Super(); 19 Super s2 = new Sub(16); 20 System.out.println( ); 21 22 int twice(int x) { return 2 * x; 23 public int thrice(int x) { return 3 * x; 24 int ace() { return 1; 25 String dubble(string s) { return s + s; 26 1. (2 µονάδες) Η κλάση Super προσφέρει µια σωστή υλοποίηση της διεπαφής Inter? ώστε µια σύντοµη εξήγηση. Yes, because it defines number() 2. (2 µονάδες) Η παράληψη της δήλωσης της µεθόδου number() στην γραµµή 11 δηµιουργεί ένα λάθος µετάφρασης. Γιατί? Because number() in Sub overrides number() in Super(), and you cannot make an overridden function less public. 3. (1 µονάδα) Η µέθοδος στην γραµµή υποσκελίζει (overrides) την µέθοδο που ορίζεται στην γραµµή. Συµπληρώστε τα κενά. 24 and 12, or 11 and 16, or 16 and 6 (any one pair)

4. (1 µονάδα) Η µέθοδος στην γραµµή υπερφορτώνει (overloads) την µέθοδο που ορίζεται στην γραµµή. Συµπληρώστε τα κενά. 13 and 25 (or 25 and 13) 5. (1 µονάδα) Για να εκτυπώσετε την µεταβλητή foo µε την αρχική της τιµή 12 χρειαζόµαστε µια εντολή εκτύπωσης µεταξύ των γραµµών και. ώστε µια σύντοµη εξήγηση. 17 and 19 must be in a method, and must be done before an instance of Sub is created in line 19 6. (2 µονάδες) Ποια από τις παραπάνω αφηρηµένες ή συγκεκριµένες κλάσεις έχουν µόνο τους αρχικούς κατασκευαστές αντικειµένων? Super (only) 7. (1 µονάδα) Ποιο είναι το αποτέλεσµα της δήλωσης της κλάσης Sub σαν final στην γραµµή 9? Prevents any other class from extending this one 8. (12 µονάδες) Τι θα τυπωθεί στην γραµµή 20 για τις ακόλουθες παραµέτρους της println()? a. s1.ace() b. s2.ace() c. s1.foo d. s2.foo e. s1.twice(3) f. s2.twice(3) g. s1.dubble(6) h. s2.dubble(7) i. s1.number() j. s2.number() k. s1.dubble("8") l. s2.dubble("9")

s1.ace() 1 s2.ace() 13 s1.foo 16 s2.foo 16 s1.twice(3) 6 s2.twice(3) 6 s1.dubble(6) error s2.dubble(7) error s1.number() 11 s2.number() 10 s1.dubble("8") 88 s2.dubble("9") 99 Άσκηση 5 (22 µονάδες) Γράψτε µια κλάση Java µε όνοµα WordJumble (ανακατωµένες λέξεις) η οποία υλοποιεί την διεπαφή που σας δίνεται γραφικά στην άσκηση σε συµβολισµό UML. Τα σύµβολα πριν από τις WordJumble # char[] letters + WordJumble(String s) + char getletter(int i) + void jumble() void swap(int i,int j) + String tostring() µεταβλητές στιγµιότύπων και τις µεθόδους της κάθε κλάσης υποδεικνύουν τα αντίστοιχα δικαιώµατα εξουσιοδοτηµένης πρόσβασης: συν (+) για public, πλην (-) για private και δίεση (#) για protected. Ο κατασκευαστής αντικειµένων (constructor) της κλάσης παίρνει σαν είσοδο µια συµβολοσειρά (String) και αποθηκεύει µε την σειρά τους χαρακτήρες του σε ένα καινούργιο πίνακα (array) από χαρακτήρες (char) που αναφέρεται απο την µεταβλητή στιγµιότύπων letters. Η εκ των προτέρων συνθήκη (precondition) για τον κατασκευαστή αντικειµένων της WordJumble είναι ότι η συµβολοσειρά εισόδου δεν πρέπει να είναι κενή (null), και αν αυτή η συνθήκη παραβιάζεται πρέπει να δηµιουργείται µια RuntimeException µε κατάλληλο µήνυµα λάθους. Η µέθοδος getletter(i) πρέπει να επιστρέφει τον χαρακτήρα που βρίσκεται στην θέση i. Η εκ των προτέρων συνθήκη (precondition) για την µέθοδο είναι ότι ο δείκτης εισόδου πρέπει να είναι έγκυρος σε σχέση µε τα περιεχόµενα του πίνακα χαρακτήρων, και αν αυτή η συνθήκη παραβιάζεται πρέπει να δηµιουργείται µια RuntimeException µε κατάλληλο µήνυµα λάθους. Η µέθοδος jumble() πρέπει να υλοποιεί τον παρακάτω αλγόριθµο: for each index i in the array named letters: choose an index j in the range [0, letters.length) swap the values in letters at indices i and j εν χρειάζεται να εξασφαλίσετε ότι οι δείκτες i και j είναι διαφορετικοί. Η µέθοδος swap(i,j) πρέπει να αντιµεταθέτει τους χαρακτήρες της µεταβλητής letters που βρίσκονται στις θέσεις i και j. εν υπάρχουν εκ των προτέρων συνθήκες για την µέθοδο swap. Η µέθοδος tostring() πρέπει να επιστρέφει µια συµβολοσειρά (String) η οποία περιέχει όλους τούς χαρακτήρες του πίνακα letters και µε την ίδια σειρά.

Σηµείωση: Ο βασικός τύπος char αναπαριστά έναν χαρακτήρα: letter, number, punctuation mark, &c. Χειριστείτε τους χαρακτήρες σαν ακεραίους (int). Για την υλοποίηση της άσκησης θα χρειαστείτε τις µεθόδους της κλάσης String tochararray() και length(). Για την υλοποίηση της µεθόδου jumble() θα χρειαστείτε τον παρακάτω κώδικα ο οποίος παράγει έναν τυχαίο ακέραιο αριθµό από το διάστηµα [0, n): (int)(math.random() * n); Τέλος µην παραλείψετε να τεκµηριώσετε τον κώδικά σας χρησιµοποιώντας κατάλληλα σχόλια Javadoc για όλες τις µεταβλητές και µεθόδους στιγµιότύπων που χρησιµοποιείτε. * Represents text that can be jumbled. * @author Vassilis Christophides public class WordJumble { Letters in this. protected char[] letters; * Constructs a new word jumble. * @param s String containing the text for the word * jumble public WordJumble(String s) { if (s == null) { throw new RuntimeException( String is null ); letters = s.tochararray(); * Returns the letter in this at the given index. * @param i index of letter * @example (new WordJumble( Fox )).getletter(-1) * is an error * @example (new WordJumble( Fox )).getletter(1) * returns o * @example (new WordJumble( Fox )).getletter(3) is * an error public char getletter(int i) { if ((i < 0) (i >= letters.length)) { throw new RuntimeException( Index out of bounds ); return letters[i]; * Jumbles the letters in this. * @example (new WordJumble( Grape )).jumble() * might result in letters in the order aegpr public void jumble() {

for (int i = 0; i < letters.length; i++) { swap(i, (int)(math.random()*letters.length)); * Swaps the letters in this at the given indices. * @param i first index of letters to swap * @param j other index of letters to swap * @example (new WordJumble( Box )).swap(0, 2) * results in letters in the order xob * @example (new WordJumble( Box )).swap(1, 1) * results in letters in the order Box private void swap(int i, int j) { char temp = letters[i]; letters[i] = letters[j]; letters[j] = temp; Returns a String version of this. public String tostring() { return new String(letters); Άσκηση 6 (10 µονάδες) Συµπληρώστε µε σύντοµες απαντήσεις τα κενά στις παρακάτω προτάσεις: 1. Ένα αντικείµενο Java µπορεί να είναι στιγµιότυπο µόνο µιας κλάσης αλλά µπορούµε να το χειριστούµε σαν τιµή ενός ή περισσοτέρων τύπων. 2. Οι τρεις βασικές αφαιρέσεις (abstractions) δεδοµένων µε τις οποίες µπορούµε να ορίζουµε νέους τύπους αντικειµένων Java είναι: class, interface, και abstract class. 3. Ο βασικός τύπος byte στην Java αναπαριστά έναν ακέραιο στο διάστηµα [-128, 128). Η κλάση Java µε το όνοµα Byte ορίζεται µε µια µεταβλητή στιγµιότύπων τύπου byte. Ο αριθµός των αντικειµένων Byte που µπορούµε να δηµιουργήσουµε σε ένα πρόγραµµα Java καθορίζεται µόνο οπό την µνήµη της µηχανής που τρέχει το πρόγραµµα. 4. Μια κλάση Java µπορεί να οριστεί ότι implement µία ή περισσότερες διεπαφές, αλλά µια κλάση µπορεί να extend µόνο µια άλλη κλάση. 5. Υποσηµειώστε ποια από τα ακόλουθα µέρη του ορισµού µιας κλάσης συνεισφέρουν στην δήλωση της δηµόσιας διεπαφής της κλάσης: a. public data members b. protected data members c. public constructors d. private methods