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

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

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

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

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

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Διαγράμματα Κλάσεων στη Σχεδίαση

Σύνθεση και Κληρονομικότητα

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

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

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

Σύνθεση και Κληρονομικότητα

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιεπαφές και Εσωτερικές κλάσεις Interfaces and Inner Classes. ιεπαφές - Interfaces

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

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

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

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

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

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

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

Διάλεξθ 02: Αντικειμενοςτρεφισ Προγραμματιςμόσ με τθν JAVA

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

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

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

ΕΠΛ233 ΔΙΑΠΡΟΣΩΠΕΙΕΣ

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Περισσότερα για τις Κλάσεις, τα Αντικείμενα και τις Μεθόδους

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

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

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

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

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

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

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

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

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

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

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

11β Δομικά πρότυπα σχεδίασης

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Wrapper Classes Τοποθέτηση Δεδομένων Κλήση Μεθόδων. Παναγιώτης Σφέτσος, PhD

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

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

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

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

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

Κληρονομικότητα. Κληρονομικότητα (inheritance) είναι ο τρόπος µε τον οποίο μία τάξη μπορεί να κληρονομήσει ιδιότητες και συμπεριφορά από άλλες τάξεις.

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

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

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

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

Διαγράμματα UML στην Ανάλυση. Μέρος Β Διαγράμματα Κλάσεων Διαγράμματα Αντικειμένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

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

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

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

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

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

Transcript:

Διάλεξη 15: Αφαιρετικές Κλάσεις (Abstract Classes)& Διαπροσωπείες (Interfaces) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Αφαιρετικές Κλάσεις, Αφαιρετικές Μεθόδοι - Διαπροσωπείες: Ορισμός, Δημιουργία, Υλοποίηση - Χρήσιμες Διαπροσωπείες - Σύγκριση Αφαιρετικών Κλάσεων με Διαπροσωπείες Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 1

Αφαιρετικές Κλάσεις και Μέθοδοι Abstract Class Οι abstract µεθόδοι είναι µε italics Οι abstract µεθόδοι getarea και getperimeterγίνονται ovverrideστις κλάσεις Circle και Rectangle ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 2

Ο τροποποιητής abstract Μία αφαιρετική κλάση - abstract class Δεν μπορεί να αρχικοποιηθεί αντικείμενο της κλάσης Πρέπει να επεκταθεί(κληρονομικότητα) και να υλοποιηθεί από τις υποκλάσεις Μία αφαιρετική μέθοδος - abstract method Η υπογραφή μίας μεθόδου χωρίς υλοποίηση ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 3

Αφαιρετικές Μεθόδοι H Javaμας επιτρέπει να δηλώνουμε ρητά(explicit) ορισμένες μεθόδους μιας κλάσης σαν αφαιρετικές ώστε: Να έχουμε τη δυνατότητα να προσδιορίζουμε την διεπαφή της κλάσης που τις περιέχει. Να αποτρέπεται η εκ παραδρομής κλήση τους από άλλες μεθόδους. Ο προσδιορισμός μιας μεθόδου ως αφαιρετικής γίνεται ως εξής: abstract void X(); Τα abstract methods μπορούν να υπάρχουν μόνο σε abstract classes ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 4

Αφαιρετικές κλάσεις Μια κλάση η οποία περιλαμβάνει έστω και μια «αφαιρετική» μέθοδο, καθίσταται επίσης αφαιρετική και πρέπει να δηλωθεί ως αφαιρετική. Όταν μία κλάση κληρονομεί από μια αφαιρετική κλάση θα πρέπει να υλοποιήσουμε όλες τις αφαιρετικές μεθόδους της υπερκλάσης. Διαφορετικά ο μεταφραστής επιβάλλει να προσδιορίσουμε την κλάση μας σαν αφαιρετική. Μπορούμε τέλος να δηλώσουμε μια κλάση σαν αφαιρετική, χωρίς ωστόσο η κλάση αυτή να περικλείει αφαιρετικές μεθόδους. Γιατί να θέλουμε κάτι τέτοιο; Για να αποκλείσουμε τη δημιουργία αντικειμένων αυτής της κλάσης. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 5

Παρατηρήσεις Μία κλάση μπορεί να είναι αφαιρετική χωρίς να περιλαμβάνει αφαιρετικές μεθόδους Μία κλάση που κληρονομεί από μία αφαιρετική κλάση πρέπει να υλοποιήσει όλες τις αφαιρετικές μεθόδους της υπερκλάσης ανεξάρτητα αν θα τις χρησιμοποιήσει ή όχι Σε μία αφαιρετική κλάση δηλώνουμε κατασκευαστές αλλά δεν μπορούμε να δημιουργήσουμε αντικείμενο ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 6

Παρατηρήσεις(συν.) Μία κλάση μπορεί να είναι abstract έστω και αν κληρονομεί από μία συμπαγή κλάση Μία αφαιρετική κλάση μπορεί να υπερκαλύψει μία μέθοδο μίας συμπαγής υπερκλάσης και να τη δηλώσει σαν abstract Μία αφαιρετική κλάση μπορεί να χρησιμοποιηθεί σαν τύπος, π.χ., GeometricObjectarray = new GeometricObject[10];(μέσω από πολυμορφισμό) ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 7

Παράδειγμα: Αφαιρετική Κλάση και Μέθοδος Η αφαιρετική κλάση java.util.calendarχρησιμοποιείτε για να επιστρέφει χρήσιμες πληροφορίες για από αντικείμενα τύπου date. Οι υποκλάσεις τις Calendar μπορούν να υλοποιήσουν συγκεκριμένα ημερολόγια (π.χ., GregorianCalendar) ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 8

Διαπροσωπείες (Interfaces) Μία διαπροσωπεία (interface)είναι μία δομή (παρόμοια με την κλάση) ή οποία περιέχει: Δηλώσεις μεθόδων και όχι καθορισμό τους (εμμέσως είναι abstract) Σταθερές (constant) μεταβλητές Καθορίζει την μορφή που πρέπει να υπάρχει σε μία κλάση, ένα συμβόλαιο το οποίο δηλώνει πως δουλεύει μία κλάση Δηλώνεται με την λέξη interface Οι Διαπροσωπείες είναι παρόμοιες με τις Αφαιρετικές κλάσεις, αλλά όχι οι ίδιες ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 9

Δήλωση Διαπροσωπείας (Interface Declaration) Σύνταξη δήλωσης διαπροσωπείας: public interface InterfaceName { //constant declarations //method signatures } Παράδειγμα public interface Edible{ // Describe how to eat public String howtoeat(); } ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 10

Σταθερές Μεταβλητές (Constant Variables) Παράδειγμα δήλωσης Σταθερών Μεταβλητών public interface InterfaceName { //constant declarations int x=1; double PI=3.1415; } Το πιο πάνω είναι ισοδύναμο με το πιο κάτω public interface InterfaceName { //constant declarations public static final int x=1; public static final double PI=3.1415; } Πρόσβαση με <διαπροσωπεία>.<μεταβλητή> π.χ., InterfaceName.x ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 11

Παράδειγμα Διαπροσωπείας 1 <<interface>> Animals Attributes Operations public String walk() Mammals Attributes Operations public String walk() { } Birds Attributes Operations public String walk() { } Fish Attributes Operations public String walk() { } ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 12

Παράδειγμα Διαπροσωπείας 2 ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 13

Παράδειγμα Διαπροσωπείαςκαι Κληρονομικότητας <<interface>> IAnimals Attributes Operations public String eat() Mammals Attributes Operations public String eat() { } Birds Attributes Operations public String eat() { } Fish Attributes Operations public String eat() { } Lion Attributes Operations public String eat() { } Eagle Attributes Operations public String eat() { } Shark Attributes Operations public String eat() { } ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 14

Παράδειγμα Διαπροσωπείας και Κληρονομικότητας public interface IAnimals { abstract void eat(); String getname(); } class Lion extends Mammals { public void eat() { } public String getname() {} } class Mammals implements IAnimals { public void eat() { } public String getname() {} } class Birds implements IAnimals { public void eat() { } public String getname() {} } class Eagle extends Birds { public void eat() { } public String getname() {} } class Shark extends Fish { public void eat() { } public String getname() {} } class Fish implements IAnimals { public void eat() { } public String getname() {} } ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 15

Πολλαπλή Κληρονομικότητα με Διαπροσωπείες Στην JAVA κάθε κλάση κληρονομεί από ακριβώς μία κλάση Μια Διαπροσωπεία(interface), δεν έχει καθόλου υλοποίηση και δεν δεσμεύει μνήμη. Μία κλάση μπορεί να υλοποιήσει πολλές διαπροσωπείες Σύνταξη: class ClassA implements interface1, interface2, Είναι μία μορφή πολλαπλής κληρονομικότητας(multiple inheritance). Μία διαπροσωπεία μπορεί να επεκταθεί με την χρήση κληρονομικότητας ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 16

Παράδειγμα ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 17

Αρχικοποίηση Διαπροσωπειών;;; Δείκτες σε αντικείμενα μπορούν να έχουν τύπο διαπροσωπείας(μέσω από πολυμορφισμό) Για παράδειγμα: ΙΑnimals a = new Lion(); To Animals είναι διαπροσωπεία To Lionείναι κλάση. Τι έχουμε πετύχει με την πιο πάνω δήλωση; Μόνο μεθόδοι που ανήκουν στην διαπροσωπεία Animals μπορούν να κληθούν! ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 18

Σημαντικές διαπροσωπείες: Comparable Η διαπροσωπεία Comparable: χρησιμοποιείται για καθορισμό του πως γίνεται σύγκριση αντικειμένων (π.χ., String, Date) java.lang Interface Comparable int compareto(t o) Καθορίζει μία φυσική σειρά για τα αντικείμενα όπως ισχύει για αριθμητικά δεδομένα, π.χ., 1<2, ab < ac Περιλαμβάνει την μέθοδο compareto: Συγκρίνει το αντικείμενο this με το αντικείμενο που δίνεται σαν παράμετρος Ακολούθως συγκρίνουμε αντικείμενα σαν να είναι αριθμοί, π.χ., ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 19

Παράδειγμα Χρήσης Comparable class ComparableCircle extends Circle implements Comparable { public ComparableCircle(double radius) { super(radius); } } /** Implement the compareto method defined in Comparable */ public int compareto(object o) { if (getradius() > ((ComparableCircle) o).getradius()) return 1; else if (getradius() < ((ComparableCircle) o).getradius()) return -1; else return 0; } ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 20

Comparable και Wrapper Classes Όλες οι wrapper classes υλοποιούν την διαπροσωπεία comparable Οι wrapper classes δεν έχουν no-argconstructors Είναι immutable δεν αλλάζουν τιμές μετά την αρχικοποίηση Υπερκαλύπτουν (override) τις μεθόδους tostring(), equals Υλοποιούν την compareto της διαπροσωπείας Comparable ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 21

Η abstract class Number public abstract class Number Κάθε numeric wrapper class κληρονομεί από την abtrsact class Number H Number περιέχει μεθόδους για doublevalue, floatvalue, intvalue, longvalue, shortvalue, και bytevalue. Αυτές οι μεθόδοι μετατρέπουν τα αντικείμενα στους αρχέγονους τους τύπους, δηλ. τιμές Οι μεθόδοι bytevalueκαι shortvalueδεν είναι abtractκαι επιστρέφουν (byte)intvalue() και (short)intvalue() ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 22

Σημαντικές διαπροσωπείες: List Η διαπροσωπεία List<E>: αντιπροσωπεύει τον ΑΤΔ Λίστα συνοδευόμενο από τις βασικές του πράξεις java.util Interface List<E> Κλάσεις που υλοποιούν την διαπροσωπεία List: AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector Κάποιες μεθόδοι της διαπροσωπείας: add, remove, get, set, size, ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 23

Σημαντικές διαπροσωπείες: Cloneable java.util Interface Clonable <άδεια διαπροσωπεία> Μία κλάση που υλοποιηείτη διαπροσωπεία Cloneableδείχνει στην μέθοδο Object.clone()ότι είναι επιτρεπτό να προχωρήσει με αντιγραφή field-for-field για τα στιγμιότυπα της κλάσης. Οι κλάσεις που υλοποιούν την διαπροσωπεία αυτή θα πρέπει να υπερκαλύψουν (override) την protected Object.clone()με public τροποποιητή Όταν καλεστεί η Object.clone() χωρίς να είναι υλοποιημένη η διαπροσωπεία Cloneableθα γίνει throw CloneNotSupportedException ΠΡΟΣΟΧΗ: η διαπροσωπεία δεν περιέχει την clone(). Ακόμα κι αν την καλέσουμε δεν υπάρχει καμία εξασφάλιση ότι θα πετύχει. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 24

Σημαντικές διαπροσωπείες: Runnable java.lang. Interface Runnable H διαπροσωπεία Runnable πρέπει να υλοποιείται από κάθε κλάση που προορίζεται να εκτελεστεί σαν ένα νήμα (thread) Η κλάση θα πρέπει να ορίσει μία μέθοδο public void run() ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 25

Αρχικοποιήσεις Μελών Διαπροσωπείας Μπορούμε να αρχικοποιήσουμε τα μέλη μίας διαπροσωπείας κατά τη διάρκεια φόρτωσης της διαπροσωπείας στη μνήμη Παράδειγμα: interface itest{ Random rand = new Random(); int randomint = rand.nextint(10); long randomlong = rand.nextlong(); } double randomdouble = rand.nextdouble(); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 26

Παρατηρήσεις Μία κλάση πρέπει να υλοποιεί όλες τις μεθόδους μίας διαπροσωπείας εκτός και αν είναι δηλωμένη σαν abstract Μία διαπροσωπεία μπορεί να χρησιμοποιηθεί σαν τύπος που μπορεί να είναι δείκτης σε οποιαδήποτε κλάση υλοποιεί την διαπροσωπεία Υπάρχουν κενές διαπροσωπείες Μπορούν να υπάρχουν συγκρούσεις ονομάτων μεταξύ διαφορετικών διαπροσωπειών, π.χ., δύο μεταβλητές με το ίδιο όνομα ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 27

Σύγκριση Abstract Classes με Interfaces Χαρακτηριστικά interface abstract class πολλαπλή κληρονομικότητα Υλοποίηση πολλαπλών διεπαφών από μία κλάση Κληρονόμος μόνο μίας κλάσης υλοποίηση Καμία Κανένας περιορισμός καταστάσεις third party convenience Static final σταθερές μόνο. Δε μπορεί να ορίσει καταστάσεις Η υλοποίηση της διεπαφής μπορεί να προστεθεί σε οποιανδήποτε βιβλιοθήκη εξωτερικής προέλευσης Κανένας περιορισμός Μία κλάσηεξωτερικής προέλευσης πρέπει να οριστεί από την αρχή έτσι ώστε να κληρονομεί μόνο από την αφαιρετική κλάση «είναι» vs «συμπεριφέρεται ως» Η κλάση συμπεριφέρεταισαν την διεπαφή της οποίας υλοποιεί τις δηλώσεις της Οι πελάτες των αφαιρετικώνκλάσεων «είναι» τύπου κληροδότη ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 28

Σύγκριση Abstract Classes με Interfaces Χαρακτηριστικά Interface abstract class ομοιογένεια Αν οι κλάσεις πελάτες είναι ετερογενείς τότε η χρήση του interface είναι η βέλτιστη. Αν οι κλάσεις πελάτες είναι οµοιογενείς τότε η χρήση του abstract είναι η βέλτιστη. Οµοιογενείςφυσικά ως προς τις καταστάσεις και συµπεριφορές. διαχείριση Εύκολη αλλαγή της υλοποίησης χωρίςμεταβολή της διεπαφής. Ο πελάτης (λογισμικό ή χρήστης) δε γνωρίζει την αλλαγή. Εύκολη αλλαγή της υλοποίησης χωρίςµεταβολή της διεπαφής. Ο πελάτης (λογισµικό ή χρήστης) δε γνωρίζει την αλλαγή. ταχύτητα εκτέλεσης Αργή,χρειάζεται επιπλέον ανακατεύθυνση για την ανίχνευση της μεθόδου της κλάσης. Οισύγχρονες JVMπροσπαθούν να μειώσουν τον χρόνο ανίχνευσης. Υψηλή ταχύτητα ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 29

Σύγκριση Abstract Classes με Interfaces Χαρακτηριστικά Interface abstract class σαφήνια πρόσθεση λειτουργικότητας ενσωμάτωση Οιδιεπαφέςδε διαθέτουν καταστάσεις. Όλες οι μεταβλητές θεωρούνται static finalδηλαδή σταθερές. Κάθε πρόσθεσημεθόδου σε μία διεπαφή έχει σημαντικό αντίκτυπο καθώς πρέπει να δοθεί σε όλες τις υλοποιήσεις της διεπαφής κατάλληλη υλοποίηση της καινούριας μεθόδου. Εύκολοστην ενσωμάτωση και αλλαγή καθώς δεν περιέχει κώδικα ή μεταβλητές πέραν κάποιων σταθερών. Μοιράζονται «κοινό» κώδικα ο οποίος μπορείνα χρησιμοποιηθεί στην αρχικοποίηση κοινών καταστάσεων. Αν προστεθείνέα μέθοδο τότε υπάρχει η επιλογή να δοθεί και μία τυπική υλοποίηση της έτσι ώστε να όλοι οι κληρονόμοι να συνεχίσουν να λειτουργούν χωρίς καμιά αλλαγή. Πρέπεινα διατηρηθεί η αφαιρετική κλάση ως έχει. Η κλάση και τα περιεχόμενα της είναι επιβεβλημένα στον κληρονόμο. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 30