Wrapper Classes, Abstract Classes and Interfaces

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Week. 6: Java Collections

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

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

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

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

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

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

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

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

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

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

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

Mεταβλητές (variables) και Σταθερές (constants)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Week 7: Java Collection Classes

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

Εισαγωγή στον Προγραµµατισµό - Εβδοµάδα 7

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Δοµικά Στοιχεία και Πίνακες Κεφάλαιο 3 (3.1 και 3.2) Ε. Μαρκάκης Επικ. Καθηγητής

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

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

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

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

Μέθοδοι. Υποσυστήµατα και πακέτα. Μοντέλα αντικειµενοστραφούς σχεδίασης. Αντικειµενοστραφής Σχεδίαση. Στα πρώτα στάδια της ανάλυσης

Δοµές Δεδοµένων. 3η Διάλεξη Στοιχειώδεις Δοµές Δεδοµένων: Πίνακες. Ε. Μαρκάκης

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

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

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

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

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ ΥΛΟΠΟΙΗΣΗ ΣΤΟΙΧΕΙΩΝ ΑΝΑΛΥΣΗΣ UML ΜΕ JAVA. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

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

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

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

Τύποι δεδομένων, τελεστές, μεταβλητές

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

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

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

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

ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΚΑΙ ΠΟΛΥΜΟΡΦΙΣΜΟΣ

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

Transcript:

Wrapper Classes, Abstract Classes and Interfaces Εβδοµάδα 3: Κλάσεις συσκευαστές, αφηρηµένες κλάσεις και διαπροσωπείες Αντικείµενα και µη-αντικείµενα Η Java παρέχει τύπους αντικειµένων και απλούς τύπους δεδοµένων Απλοί (βασικοί) τύποι δεδοµένων: int, short, long, float, double, boolean, char, byte Αντικείµενα: Οτιδήποτε άλλο! (συµπεριλαµβανοµένων των Strings!) Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 1 Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 2 Αντικείµενα και µη-αντικείµενα (2) Ισχύουν διαφορετικοί κανόνες για τα τους τύπους αντικείµενων και τους βασικούς τύπους Τα αντικείµενα κληρονοµούν (έστω και έµµεσα) από την κλάση Object Αυτό δεν ισχύει για τους βασικούς τύπους Ποια είναι η συνέπεια; Βασικοί τύποι και συλλογές δεδοµένων Πώς εισάγουµε έναν ακέραιο σε µια συλλογή δεδοµένων τύπου ArrayList; Τα στοιχεία της ArrayList είναι τύπου Object Ο βασικός τύπος int δεν είναι υπο-τύπος του Object Ένας int δεν µπορεί να εισαχθεί σε µία ArrayList Οι βασικοί τύποι δεν είναι υπο-τύποι της κλάσης Object! Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 3 Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 4 Η λύση: κλάσεις συσκευαστές [wrapper Classes] Κάθε βασικός τύπος έχει µία αντίστοιχη κλάση η οποία µπορεί να χρησιµοποιηθεί όταν απαιτείται ένα πραγµατικό αντικείµενο. Για παράδειγµα: Βασικός τύπος int char boolean τύπος κλάσης Integer Character Boolean Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 5 Μία λίστα από Integers ArrayList intlist = new ArrayList(); int anint = 42; intlist.add(new Integer(anInt)); Integer aninteger; aninteger = (Integer)intList.get(2); int myint = aninteger.intvalue(); Συσκευασία του int σε αντικείµενο Integer πριν την προσθήκη του στην ArrayList Μετά την εξαγωγή του Integer από την ArrayList, λαµβάνουµε τον int από τον Integer. Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 6

Μεταβλητές /πεδία κλάσης [class variables] Μεταβλητές /πεδία κλάσης (2) Τα αντικείµενα ανήκουν σε κλάσεις Michael McKinnon 3204 grey Αντικείµενο Κλάση setname() Οι κλάσεις ορίζουν µεθόδους Τα αντικείµενα έχουν µεταβλητές /πεδία Michael McKinnon 3204 grey Αντικείµενο Κλάση setname() Οι κλάσεις µπορεί επίσης να περιέχουν µεταβλητές /πεδία! Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 7 Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 8 Μεταβλητές /πεδία κλάσης (3) Τα πεδία κλάσης τα κατέχει η («αποθηκεύονται στην») κλάση Τα πεδία κλάσης είναι προσπελάσιµα από αντικείµενα Υπάρχει µόνο ένα αντίγραφο των πεδίων κλάσης στο σύστηµα (αποθηκεύονται «στην κλάση») Όλα τα αντικείµενα µοιράζονται τα πεδία Τα πεδία κλάσης µπορεί να χρησιµοποιηθούν για την ανταλλαγή πληροφοριών µεταξύ αντικειµένων (µια όχι και τόσο καλή πρακτική) Μεταβλητές /πεδία κλάσης (4) Κλάση postcodes Όλα τα αντικείµενα έχουν πρόσβαση στο πεδίο postcodes Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 9 Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 10 Μεταβλητές /πεδία κλάσης (συντακτικό) class Person private static int numberofpeople = 0; Μέθοδοι κλάσης [class methods] Οι µέθοδοι µπορεί να ανήκουν σε µία κλάση (αντί σε ένα αντικείµενο) Καλούνται µέσω της χρήσης του ονόµατος της κλάσης (και όχι του αντικειµένου) Person() numberofpeople++; Στην κλάση Integer: public static int parseint(string s) Χρήση: String input; input = // get input from user int players = Integer.parseInt(input); Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 11 Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 12

Κλάσεις αφηρηµένου τύπου [abstract classes] Μερικές φορές δεν είναι δυνατόν να υλοποιηθούν όλες οι µέθοδοι! Παράδειγµα: κλάση creature, method move Κλάσεις αφηρηµένου τύπου (2) Στις κλάσεις αφηρηµένου τύπου, δεν υλοποιούνται όλες οι µέθοδοι Μερικές µέθοδοι δηλώνονται ως «αφηρηµένες» [abstract] Εάν µία κλάση περιέχει «αφηρηµένες» µεθόδους, τότε πρέπει να δηλωθεί ως abstract εν είναι δυνατό να δηµιουργήσουµε αντικείµενα µε βάση µια κλάση αφηρηµένου τύπου Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 13 Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 14 Κλάσεις αφηρηµένου τύπου (3) «Απτές» κλάσεις [concrete classes] Παράδειγµα: abstract class private age; public int getage() return age; Μερικές µέθοδοι µπορεί να έχουν υλοποιηθεί Άλλες, όχι Concrete = απτή, χειροπιαστή Ως απτές [concrete] κλάσεις αναφέρονται όσες κλάσεις δεν είναι αφηρηµένου τύπου Αντικείµενα µπορεί να δηµιουργηθούν µόνο µε βάση τις απτές κλάσεις public abstract void move(); Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 15 Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 16 Παράδειγµα: κλάση Shapes Triangle Shape Rectangle Circle abstract class Shape public abstract void circumference(); Λόγος ύπαρξης των «αφηρηµένων» κλάσεων Εάν δεν µπορούµε να δηµιουργήσουµε αντικείµενα µε βάση τις κλάσεις αφηρηµένου τύπου, ποια η χρησιµότητα τους; Απάντηση: Πολυµορφισµός! Μία «αφηρηµένη» κλάση είναι ένας τύπος δεδοµένων Μπορούµε να δηλώσουµε µεταβλητές αυτού του τύπου Υπο-τύποι µπορεί να δηµιουργηθούν Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 17 Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 18

Προσοµοίωση διακριτών γεγονότων [Discrete Event Simulation] προσοµοίωση συστήµατος το σύστηµα αποτελείται από ένα σύνολο ενεργών στοιχείων [actors] Βασίζεται σε ένα επαναλαµβανόµενο σύνολο εντολών [main loop] το οποίο δίνει τη δυνατότητα στα ενεργά στοιχεία να δράσουν Παραδείγµατα: Προσοµοίωση περιβαντολογικών συστηµάτων, αεροδροµίων, συγκοινωνιακών συστηµάτων, πρόγνωση καιρού, πυρηνικών εκρήξεων, κλπ. Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 19 Προσοµοίωση διακριτών γεγονότων mainloop() Υλοποίηση της act «Αφηρηµένη» κλάση Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 20 Προσοµοίωση βασικός βρόγχος Πιο περίπλοκο παράδειγµα Actor Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 21 Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 22 Βασικός βρόγχος Τι άλλαξε; Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 23 Μία ακόµα προσθήκη Να προστεθεί κώδικα που εµφανίζει την προσοµοίωση στην οθόνη // draw all visible actors on screen Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 24

Ένα πιο ενδιαφέρον παράδειγµα Actor Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 25 Θα επιθυµούσαµε να for(int i=0; i < drawables.size(); i++) Drawable drawable = (Drawable)drawables.get(i); drawable.; Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 26 Μια διαφορετική ιεραρχία Drawable Non-Drawable Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 27 Το πρόβληµα Έπαψε να είναι σωστός κώδικας. for(int i=0; i < drawables.size(); i++) Drawable drawable = (Drawable)drawables.get(i); drawable.; Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 28 Πολλαπλή κληρονοµικότητα [Multiple Inheritance] Drawable Actor Το επόµενο πρόβληµα Η Java δεν επιτρέπει να να κληρονοµήσουµε από περισσότερες της µίας κλάσης! Η πολλαπλή κληρονοµικότητα είναι χρήσιµη αλλά προκαλεί προβλήµατα (κάνει πιο πολύπλοκο) στον ορισµό της γλώσσας Για το το λόγο αυτό, µερικές γλώσσες δεν επιτρέπουν την πολλαπλή κληρονοµικότητα (πχ. Java) Πως αντιµετωπίζουµε το το πρόβληµα; my = new (); actors.add(my); drawables.add(my); Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 29 Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 30

Η λύση: διαπροσωπείες [interfaces] Μια διαπροσωπεία µοιάζει µε µία πλήρως «αφηρηµένη» κλάση Οι διαπροσωπείες [interfaces]: περιέχουν µόνο δηλώσεις µεθόδων [method signatures] περιέχουν µόνο ορισµούς σταθερών [constants] δεν περιέχουν πεδία δεν περιέχουν υλοποιήσεις µεθόδων ιαπροσωπείες και κληρονοµικότητα Μία κλάση µπορεί να κληρονοµήσει µόνο από µία άλλη κλάση, αλλά µπορεί να «κληρονοµήσει» από περισσότερες από µία διαπροσωπείες! Ορολογία (για να ξεχωρίζουµε τις δυο αυτές µορφές κληρονοµικότητας): Μία κλάση επεκτείνει [extends] µια υπερ-κλάση. Μία κλάση υλοποιεί [implements] µία διαπροσωπεία. Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 31 Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 32 Παράδειγµα interface Drawable /** * Draw this entity on screen. */ void ; Η υπο-κλάση class extends implements Drawable /** * Act. Here that means fly around and search * for bird food. */ public void Οι µέθοδοι των διαπροσωπειών είναι εξ ορισµού public δεν χρειάζεται µετατροπέας πρόσβασης /** * Draw this bird on screen. */ public void Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 33 Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 34 Η λύση Πολλαπλές διαπροσωπείες Actor Drawable class extends Actor implements Drawable, Storable Το Τοπολύ µία υπερ-κλάση Απεριόριστος αριθµός διαπροσωπειών Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 35 Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 36

Πολλαπλές διαπροσωπείες (2) class implements Actor, Drawable, Storable Η κλάση Actor θα µπορούσε να ήταν µία διαπροσωπεία. Οι διαπροσωπείες ως τύποι δεδοµένων Οι διαπροσωπείες ορίζουν τύπους δεδοµένων (όπως και οι κλάσεις). Όπως ισχύει και για τις κλάσεις αφηρηµένου τύπου, δεν µπορούµε να δηµιουργήσουµε ένα στιγµιότυπο [instance] από µία διαπροσωπεία, αλλά µπορούµε να ορίζουµε µεταβλητές Στιγµιότυπα των κλάσεων που υλοποιούν τις διαπροσωπείες µπορεί να καταχωρηθούν σε µεταβλητές τύπου διαπροσωπειών Drawable nexttodraw; my = new (); nexttodraw = my; Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 37 Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 38