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

Σχετικά έγγραφα
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

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

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

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

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

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

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

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

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

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

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

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

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

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

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

Γενικά (για τις γραπτές εξετάσεις)

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

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

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

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

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

Προγράμματα με δομή Κληρονομικότητας

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

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

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

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

8. Μέθοδοι (Methods)

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 26/2/2008

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

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

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

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

Προγραμματισμός Διαδικτύου

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

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

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

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

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

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

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

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

Week. 6: Java Collections

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

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

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. Συλλογές και Επαναλήπτες. Συλλογές - Collections

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

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

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

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

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

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

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

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

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

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

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

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

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

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής - Εβδομάδα 1

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

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

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

ΕΠΛ233 Βασικά στοιχεία προγραµµατισµού στη JAVA

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

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

Εισαγωγή στην γλώσσα προγραμματισμού C

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

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

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

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

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

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

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

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

Προγράμματα με δομή Κληρονομικότητας

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

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

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

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

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

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

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

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. Generics και η κλάση ArrayList. Εισαγωγή στα Generics

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

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

ΕΠΛ233 ΠΛΗΡΟΦΟΡΙΑ ΤΥΠΟΥ. Type Information. Μ. Δικαιάκος

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

API: Applications Programming Interface

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 8/4/2008. Πίνακες (Arrays)

Πακέτα (Packages) Φωλιασμένες ή Εσωτερικές Κλάσεις (Inner Classes) Παναγιώτης Σφέτσος, PhD

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

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

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

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

Transcript:

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

Generic Types Τα Generics έχουν προστεθεί στη JAVA από το 2004 ως μέρος του J2SE 5.0 Με τη χρήση των generics μπορούμε να δημιουργήσουμε κλάσεις και μεθόδους που να διαχειρίζονται διαφόρων ειδών αντικείμενα (π.χ., Στοίβα με ακέραιους, Στοίβα με συμβολοσειρές) με την ίδια υλοποίηση. Ο προγραμματισμός με generics μπορεί να γίνει αρκετά περίπλοκος Εμείς, θα επικεντρωθούμε στα ιδιώματα και την σύνταξη που παρουσιάζονται στο βιβλίο. Δεν θα μπούμε σε βάθος που να καλύπτει όλο το εύρος της χρήσης τους ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 2

Μία γενική κλάση MemoryCell (πριν την JAVA 5.0) // MemoryCell class // Object read( ) > Returns the stored value // void write( Object x ) > x is stored public class MemoryCell { // Private internal data representation private Object storedvalue; // Public methods public Object read() { return storedvalue; public void write(object x) { storedvalue = x; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 3

Μία γενική κλάση MemoryCell (με Generics) // MemoryCell class // AnyType read( ) > Returns the stored value // void write( AnyType x ) > x is stored public class MemoryCell<AnyType> { // Private internal data representation private AnyType storedvalue; // Public methods public AnyType read() { return storedvalue; public void write(anytype x) { storedvalue = x; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4

Γιατί να χρησιμοποιηθούν τα generics; Ο κώδικας που χρησιμοποιεί generics έχει πολλά πλεονεκτήματα: Καλύτερος έλεγχος σε επίπεδο μεταγλώττισης Ο μεταγλωττιστής της JAVA εφαρμόζει ισχυρό έλεγχο για τύπους. Έτσι τα λάθη διορθώνονται σε επίπεδο μεταγλώττισης και είναι πιο δύσκολο να δημιουργηθούν runtime exceptions Απάλειψη των μετατροπών τύπων (casting) Παράδειγμα χωρίς generics: List list = new ArrayList(); list.add("hello"); String s = (String) list.get(0); Παράδειγμα με generics: List<String> list = new ArrayList<String>(); list.add("hello"); String s = list.get(0); // no cast Επιτρέπει την δημιουργία γενικών αλγορίθμων Οι προγραμματιστές μπορούν να δημιουργούν γενικούς αλγόριθμους που δουλεύουν σε συλλογές διαφορετικών τύπων που είναι ασφαλής όσο αφορά τους τύπους (type safe) και είναι πιο κατανοητές ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5

Κοινοί τύπου Generics E Element (used extensively by the Java Collections Framework) K Key N Number T Type V Value S,U,V etc. 2nd, 3rd, 4th types Αυτοί οι τύποι χρησιμοποιούνται σε διάφορες βιβλιοθήκες του Java API ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 6

Δημιουργία και Αρχικοποίηση ενός τύπου Generic Για δημιουργία και αναφορά ενός τύπου Generic στον κώδικα, θα πρέπει να αντικαταστήσετε τον τύπο Generic (π.χ., E, T) με ένα γνωστό/κανονικό τύπο (π.χ., Integer). Παράδειγμα: MemoryCell<Integer> intmemorycell; Προσοχή: μπορούν αν χρησιμοποιηθούν μόνο αναφορές σε αντικείμενα (δηλ., Integer και όχι ο αρχέγονος τύπος int) Παρόμοια με άλλες δηλώσεις μεταβλητών, ο πιο πάνω κώδικας έχει δημιουργήσει μία αναφορά σε ένα αντικείμενο τύπου MemoryCell object. Για να αρχικοποιηθεί το αντικείμενο θα πρέπει να χρησιμοποιηθεί το keyword new, αλλά επίσης να δηλωθεί ο τύπος που θα χρησιμοποιηθεί (δηλ., Integer) πριν τις παρενθέσεις (): MemoryCell<Integer> intmemorycell = new MemoryCell<Integer>(); ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 7

Δημιουργία και Αρχικοποίηση ενός τύπου Generic Από την Java SE 7, κατά τη διαδικασία αρχικοποίησης, μπορούν να αντικατασταθούν οι παράμετροι τύπου με το άδειο σύνολο (<>) δεδομένου ότι ο μεταγλωττιστής μπορεί να ερμηνεύσει τον τύπο από την δήλωση Παράδειγμα: MemoryCell<Integer> intmemorycell = new MemoryCell<>(); Οι παρενθέσεις <>, ονομάζονται και the diamond. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 8

Generic Interfaces Η διαπροσωπεία Comparable, Java v.x<5 package java.lang; public interface Comparable { public int compareto( Object o ); Η διαπροσωπεία Comparable, Java v.x>=5 package java.lang; public interface Comparable<T> { public int compareto( T o ); ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 9

Τύποι Μπαλαντέρ (Wildcards <?>) Υποθέστε μία κλάση Shape και μία μέθοδο double area() Υποθέστε επίσης ότι υπάρχει μία στατική μέθοδος totalarea() που δέχεται μία συλλογή (Collection) από Shapes (δηλ., Collection<Shape>) και βρίσκει το συνολικό εμβαδό όλων των σχημάτων της συλλογής public static double totalarea (Collection<Shape> arr) { double total = 0.0; for ( Shape s : arr ) if ( s!= null ) total += s.area(); return total; Τώρα, υποθέστε δύο κλάσεις Circle και Square που κληρονομούν την κλάση Shape. Ερώτηση: Τι θα συμβεί αν περάσουμε σαν παράμετρο μία συλλογή τύπου Collection<Square>; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 10

Χρήση Wildcards <?> Απάντηση: Λάθος μεταγλώττισης. Οι Generic συλλογές δεν είναι γενικού τύπου (covariant). Συνεπώς, δεν μπορούμε να περάσουμε σαν παράμετρο αναφορά σε αντικείμενο τύπου Collection<Square> στη μέθοδο totalarea() Τα Wildcards <?> χρησιμοποιούνται για να αναφερθούμε σε υποκλάσεις (ή υπερκλάσεις) στις παραμέτρους. Παράδειγμα μετασχηματισμού της μεθόδου totalarea public static double totalarea (Collection<? extends Shape> arr) { double total = 0.0; for ( Shape s : arr ) if ( s!= null ) total += s.area(); return total; Χωρίς τη χρήση WildCard: Collection< T extends Shape> arr> ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 11

Έλεγχος Ορίων Τύπων (Type Bounds) Υποθέστε την πιο κάτω μέθοδο public static <AnyType> AnyType findmax( AnyType [ ] arr ) { int maxindex = 0; for( int i = 1; i < arr.length; i++ ) if( arr[ i ].compareto( arr[ maxindex ] ) > 0 ) maxindex = I; return arr[ maxindex ]; Η πιο κάτω γραμμή arr[ i ].compareto( arr[ maxindex ] ) > 0 προϋποθέτει την υλοποίηση της διαπροσωπείας Comparable Ερώτηση: Έχουμε ορίσει ότι ο τύπος AnyType υλοποιεί την διαπροσωπεία Comparable; ΌΧΙ (σφάλμα μεταγλώττισης) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 12

Χρήση Type Bounds Πρέπει με κάποιο τρόπο να αποδεχόμαστε μόνο αντικείμενα που υποστηρίζουν την μέθοδο compareto (δηλ., να υλοποιούν την διαπροσωπεία Comparable) Υποθέστε την πιο κάτω εναλλακτική υλοποίηση: public static <AnyType extends Comparable<AnyType>> AnyType findmax( AnyType[] arr ) { int maxindex = 0; for( int i = 1; i < arr.length; i++ ) if( arr[i].compareto( arr[ maxindex ] ) > 0 ) maxindex = i; return arr[ maxindex ]; Ο πιο πάνω κώδικας μεταγλωττίζεται Η γραμμή κώδικα <AnyType extends Comparable<AnyType>> είναι ένα type bound ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 13

Χρήση Type Bounds (συν.) συνέχεια από την προηγούμενη διαφάνεια Υποθέστε ότι η κλάση Shape υλοποιεί την διαπροσωπεία Comparable<Shape> Υποθέστε επίσης ότι η κλάση Circle κληρονομεί από την Shape Συμπέρασμα: Η κλάση Square ΕΙΝΑΙ ένα Comparable<Shape> Η κλάση Square ΔΕΝ ΕΙΝΑΙ ένα Comparable<Square> Συνεπώς πρέπει με κάποιο τρόπο να πούμε ότι AnyType ΕΊΝΑΙ ένα Comparable<Τ> όπου Τα είναι μία υπερκλάση του AnyType Για να το καταφέρουμε, μπορούμε να χρησιμοποιήσουμε ένα wildcard ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 14

public static <AnyType extends Comparable<? super AnyType>> AnyType findmax( AnyType [ ] arr ) { int maxindex = 0; for( int i = 1; i < arr.length; i++ ) if( arr[ i ].compareto( arr[ maxindex ] ) > 0 ) maxindex = i; return arr[ maxindex ]; Ο μεταγλωττιστής θα δέχεται πίνακες από αντικείμενα τύπου AnyType, έτσι ώστε το T υλοποιεί την διαπροσωπεία Comparable<S>, όπου το T ΕΙΝΑΙ S. Ευτυχώς, στο μάθημα δεν θα δούμε τίποτα πιο περίπλοκο από το πιο πάνω! ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 15

References Java Generic types http://docs.oracle.com/javase/tutorial/java/generics/index.html Mark A. Weiss Data Structures and Algorithm Analysis in Java (3rd Edition) Publication Date: November 28, 2011 ISBN 10: 0132576279 ISBN 13: 978 0132576277 http://en.wikipedia.org/wiki/generics_in_java http://docs.oracle ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 16

Άσκηση 1 Υλοποιήστε μία κλάση GenericMemoryCell ως εξής: Να έχει μία private μεταβλητή storedvalue τυχαίου τύπου Ένα άδειο κατασκευαστή Ένα κατασκευαστή που να δέχεται ένα αντικείμενο τυχαίου τύπου Μία μέθοδο read() που επιστρέφει την μεταβλητή storedvalue Μία μέθοδο write() που να ενημερώνει την μεταβλητή storedvalue Δημιουργείστε ένα πρόγραμμα που να ελέγχει την πιο πάνω κλάση ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 17

Άσκηση 2 Μελετήστε, Μεταγλωττίστε και Τρέξετε την κλάση TypeB.java ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 18