Κληρονοµικότητα. Συλλογή από CD και Βίντεο. ιάγραµµα Αντικειµένων. ιάγραµµα Κλάσεων. ΗΠρώτηΑπόπειρα: οπυρήνας

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

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

H κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος

Προσομοίωση παρακολούθησης πληθυσμών αλεπούδων και κουνελιών

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Week. 6: Java Collections

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

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

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

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

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

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

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

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

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

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

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

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

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

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

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

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

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

Αντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1)

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

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

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

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

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

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

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

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

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

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

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

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

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

ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ. Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών

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

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

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

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

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

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

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

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

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

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

ΚΑΛΟΥΠΩΜΑΤΑ & ΜΕΤΑΤΡΟΠΕΣ

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

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

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 11: Vectors (διανύσματα)

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

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

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

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

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

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

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

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

Transcript:

Συλλογή από CD και Βίντεο 8 Κληρονοµικότητα Πώς δηµιουργούµε ιεραρχίες κλάσεων που µοιράζονται κοινή συµπεριφορά Λειτουργικότητα: Να εισάγουµεπληροφορίες για CD και βίντεο Να αποθηκεύει τις πληροφορίες για να µη χάνονται µετοντερµατισµό του προγράµµατος Να υποστηρίζει αναζήτηση µε διάφορα κριτήρια Να εκτυπώνουµε καταστάσεις µετιςσυλλογές Να διαγράφουµε πληροφορίες Ιδιότητες (πεδία) για CD τίτλος, καλλιτέχνης, πλήθος τραγουδιών, διάρκεια, το έχω αγοράσει;, σχόλιο Ιδιότητες (πεδία) για βίντεο τίτλος, καλλιτέχνης, διάρκεια, το έχω αγοράσει;, σχόλιο Μέθοδοι για ιδιότητες που µπορεί να αλλάξουν µε το χρόνο το έχω αγοράσει;, σχόλιο 194 ιάγραµµα Κλάσεων ιάγραµµα Αντικειµένων 195 196 ΗΠρώτηΑπόπειρα: οπυρήνας Κληρονοµικότητα Ο κώδικας των κλάσεων CD και Video είναι απλός: ορίζει ιδιωτικές µεταβλητές στιγµιότυπου για τα πεδία, έναν κατασκευαστή και τις βασικές µεθόδους. Όχι πλήρης: δεν αποθηκεύει δεν αναζητά δεν έχει διεπαφή χρήστη. Video.java CD.java Database.java Παρατηρήστε ότι τµήµα του κώδικα επαναλαµβάνεται ΚΑΚΟ! Ίδια πεδία στις κλάσεις Video & CD Παρόµοιος κώδικας στη Database Αν χρειαστεί να προσθέσουµε κι άλλο, εκτός από βίντεο & CD; Project: dome-v1: επισκόπηση κώδικα, απαριθµητής σε for (Database.java) 197 Βέλη µεκλειστό τρίγωνο στο κεφάλι υποδηλώνουν ιεραρχία. Κοινά πεδία & µέθοδοι στην γονική κλάση 198 http://www.syros.aegean.gr/users/gaviotis/tmp2 1

Ορολογία Κληρονοµικότητας Ηκλάση Ζώο ονοµάζεται γονική κλάση. Ηκλάση Σκύλος κληρονοµεί από την Ζώο Ζώο (υποκλάση). Στο διάγραµµα κλάσεωνσυµβολίζεται µε έναβέλοςµε κλειστήαιχµή. Σκύλος Ηκληρονοµικότητα ονοµάζεται και σχέση είναι-ένα (is-a). Οσκύλοςείναι-ένα ζώο. Ηκληρονοµικότητα είναι µια Τεριέ Κανίς µέθοδος αφαίρεσης που µας επιτρέπει να κατηγοριοποιήσουµε τααντικείµενα. 199 Κληρονοµικότητα στη Java Γονική κλάση Τα κοινά πεδία στη γονική κλάση καιοιυποκλάσειςπροσθέτουν ό,τι ιδιαίτερο χρειάζονται. public class Item private String title; private int playingtime; private boolean gotit; private String comment; public class CD extends Item private String artist; private int numberoftracks; public class Video extends Item private String director; Υποκλάσεις Project: dome-v2: επισκόπηση κώδικα, extends, super κατασκευαστής 200 Αναφορά στην Γονική Κλάση public class CD extends Item private String artist; private int numberoftracks; /** * Κατασκευαστής αντικειµένων της κλάσης CD */ public CD (String thetitle, String theartist, int tracks, int time) super(thetitle, time); artist = theartist; numberoftracks = tracks; Κλήση του κατασκευαστή της γονικής κλάσης (πρέπει να είναι η πρώτη εντολή) 201 Συµβατότητα Υποκλάσεων public void additem( Item theitem ) items.add(theitem); /** * Τυπώνει λίστα µε όλα τα στοιχεία της συλλογής. */ public void list() for (Iterator iter = items.iterator(); iter.hasnext(); ) Item item = (Item) iter.next(); item.print(); System.out.println(); // κενή γραµµή ανάµεσα σε item Μπορεί να είναι αντικείµενο CD ή Video Καλείται µε αντικείµενα CD ή Video επειδή είναι-ένα Item 202 Επαναχρησιµοποίηση Πλεονεκτήµατα Κληρονοµικότητας Αποφύγαµε την επανάληψη κώδικα στις κλάσεις CD και Video. Προσθέστε κλάσεις για επιτραπέζιο παιχνίδι και ηλεκτρονικό παιχνίδι. Αφηρηµένη (abstract) κλάση: δεν επιτρέπεται η κατασκευή στιγµιοτύπων της Μειώνει την επανάληψη κώδικα. Ευνοεί την επαναχρησιµοποίηση κώδικα. Ευκολότερη συντήρηση Αλλαγές στην γονική κλάση αυτόµατα ανακλώνται στις υποκλάσεις της. Επεκτασιµότητα Προσθέτοντας νέες κλάσεις στην ιεραρχία. 203 204 http://www.syros.aegean.gr/users/gaviotis/tmp2 2

Ασκήσεις Κληρονοµικότητας ΗΚλάσηObject Τοποθετήστε τα παρακάτω σε µια σχέση είναι-ένα: µήλο, παγωτό, ψωµί, φαγώσιµο, δηµητριακά, πορτοκάλι, επιδόρπιο, ζελέ, χωριάτικο Σε ποια ιεραρχία θα µπορούσαν να ενταχθούν ένα ποντίκι και µια πινακίδα αφής; Επεκτείνετε την ιεραρχία ώστε να περιλαµβάνει τα δοµικά στοιχεία ενός υπολογιστή (επεξεργαστής, µονάδα αποθ., ). Ποια σχέση ιεραρχίας έχει ένα Τετράγωνο µεένα Ορθογώνιο ; Εξηγήστε την πρότασή σας. Επεκτείνετε την ιεραρχία µε άλλαγεωµετρικά σχήµατα. 205 Όλες οι κλάσεις που δεν έχουν γονική κλάση, επεκτείνουν µια ειδική κλάση που ονοµάζεται Object. ΗβιβλιοθήκητηςJava παρέχει την Object για να την κληρονοµούν όλα τα αντικείµενα. Λόγοι: Η Object ορίζει κάποιες µεθόδους που τις κληρονοµούν όλα τα αντικείµενα. Μπορούµε να ορίσουµε µεταβλητές τύπου Object οι οποίες µπορούν να αποθηκεύουν αντικείµενα οποιασδήποτε κλάσης. 206 Συλλογές µε Ετερογενή Περιεχόµενα Ετερογενείς Συλλογές 207 Οι συλλογές της Java µπορούν να αποθηκεύουν αντικείµενα διαφορετικών τύπων (κλάσεων). Πχ ArrayList a = new ArrayList(); a.add(avideo); // προσθέτει ένα βίντεο a.add(acd); // προσθέτει ένα CD Ηυπογραφήτηςadd είναι: public void add (Object element) Το κακό είναι ότι όταν ανασύρουµε έναστοιχείο, πχ µε a.get(0) δεν γνωρίζουµε τονακριβήτύπο του. Ηυπογραφήτηςget είναι: public Object get (int index) 208 Κλάσεις Περιτυλίγµατος Ερώτηµα: Πώς µπορούµε ναεισάγουµεσεµια συλλογή έναν ακέραιο; Απάντηση: εν γίνεται, διότι ο ακέραιος δεν είναι αντικείµενο και άρα δεν είναι υποκλάση του Object. Λύση: Για όλους τους βασικούς τύπους πχ int, double, κλπ υπάρχουν αντίστοιχες κλάσεις περιτυλίγµατος (wrapper classes). 209 Χρήση Περιτυλιγµάτων int i = 18; Integer iwrap = new Integer(i); mycollecton.add(iwrap); Απλός τύπος Περιτύλιγµα int Integer float Float char Character «τύλιξε» την τιµή του ακέραιου πρόσθεσε στη συλλογή Integer element = (Integer) mycollection.get(0); int value = element.intvalue() «ξετύλιξέ» το ανάσυρε το αντικείµενο 210 http://www.syros.aegean.gr/users/gaviotis/tmp2 3

Πρόβληµα στηνprint print στις Υποκλάσεις Η µέθοδος print της κλάσης Item δεν µπορεί να δειταπεδίατωνυποκλάσεώντης. Ηκληρονοµικότητα δεν είναι συµµετρική σχέση. Αν τη µεταφέρουµε στιςυποκλάσεις, τότε δεν µπορεί να κληθεί ( βγάζει compile error). Ηεκτελούµενη µέθοδος καθορίζεται από τον τύπο του αντικείµενου κατά την εκτέλεση. title: Love Over Gold (52 mins) comment: έχει πολλές γρατζουνιές title: Η Φωλιά (106 mins)* comment: θρίλερ 211 212 print στις Υποκλάσεις και στο Γονέα Αναφορά σε Μέθοδο του Γονέα Αν την αφήσουµε καιστηνitem και στις CD, Video, καλείται µόνο η print της υποκλάσης. artist: Dire Straits tracks: 11 Ανάλογα µε τοντύπο του αντικειµένου θα κληθεί αρχικά η print της CD ή της Video. director: A. Payne 213 public void print() super.print(); System.out.println("artist: " + artist); System.out.println("tracks: " + numberoftracks); 214 Πολυµορφισµός Μια Ενδιάµεση Εµβέλεια Μια µεταβλητή είναι πολυµορφική όταν µπορεί να αποθηκεύει αντικείµενα διαφόρων τύπων. Κάθε µεταβλητή αντικειµένου είναι πολυµορφική. Μια κλήση µεθόδου είναι πολυµορφική όταν εκτελεί διαφορετικές µεθόδους κατά την εκτέλεση. Παράδειγµα: κλήση στην print θα εκτελεί άλλες φορές την print της CD και άλλες φορές την print της Video. Ανάλογα µε τον τύπο του αντικειµένου πάνω στο οποίο καλείται, πχ acd.print() Μέχρι τώρα έχουµεδειεµβέλεια: public : σε βλέπουν όλοι private : σε βλέπουν µόνοαπότοεσωτερικότης κλάσης σου Ηεµβέλεια protected είναι µια ενδιάµεση εµβέλεια: σηµαίνει ότι σε βλέπουν από το εσωτερικό τηςκλάσηςσουκαιαπότιςυποκλάσειςπου κληρονοµούν την κλάση σου και από πουθενά αλλού Ισχύει για ονόµατα στιγµιότυπου και µεθόδους. 215 216 http://www.syros.aegean.gr/users/gaviotis/tmp2 4

υναµικός Προσδιορισµός Τύπου ΠαράδειγµαΠροσδιορισµού Τύπου Κάθε αντικείµενο είναι στιγµιότυπο µιας κλάσης. Σε διάφορες περιστάσεις µπορεί να µην γνωρίζουµε τον τύπο ενός αντικειµένου. Πχ λόγω κληρονοµικότητας λόγω προσθήκης σε µια συλλογή Με τον τελεστή αντικείµενο instanceof Κλάση ελέγχουµε αντοαντικείµενο είναι στιγµιότυπο της κλάσης. Συνήθως ακολουθεί µετατροπή του αντικειµένου µε εκµαγείο. 217 CD acd = new CD("Styx", "Paradise"); ArrayList ar = new ArrayList(); ar.add(acd); Object x = ar.get(0); //δεν ξέρω αν είναι CD ή Video if (x instanceof CD) System.out.println("CD"); CD somecd = (CD) x; // if (x instanceof Video) System.out.println("Video"); Video somevideo = (Video) x; if (x instanceof Object) //πάντα αληθές ; if (x instanceof ArrayList) System.out.println("συλλογή"); 218 Μελέτη Περίπτωσης: Φοιτητές ιάγραµµα ΚλάσεωνγιαΦοιτητές Φοιτητής Προπτυχιακός Μεταπτυχιακός Υποψήφιος ιδάκτορας Αρχείο: Φοιτητές.zuml, generate code 219 220 Πολλαπλή Κληρονοµικότητα Ορισµός ιεπαφής (interface) Όταν µια κλάση κληρονοµεί από πολλές προγονικές κλάσεις. Ωςπλησιέστερουποκατάστατοστηνπολλαπλή κληρονοµικότητα, η Java χρησιµοποιεί τις διεπαφές (interface). Στον ορισµό µιαςδιεπαφήςπροδιαγράφεταιποιες µεθόδους πρέπει να υλοποιεί κάθε κλάση που 'υπακούει' σε αυτή τη διεπαφή. H Java δεν υποστηρίζει πολλαπλή κληρονοµικότητα Μόνον απλή κληρονοµικότητα (η κλάσηκληρονοµεί από έναν πρόγονο) 221 public interface Actor void add(object anobject); Object get(int index); εν έχουν σώµα (υλοποίηση) µόνον επικεφαλίδα. 222 http://www.syros.aegean.gr/users/gaviotis/tmp2 5

Χρήση ιεπαφής (interface) ΗΧρησιµότητα των ιεπαφών Μια κλάση υλοποιεί µια ή περισσότερες διεπαφές δηλώνοντάς το στην επικεφαλίδα της µε τη δεσµευµένη λέξη implements. Απλή κληρονοµικότητα public class Fox extends Animals implements Actor void add(object anobject) //κώδικας που υλοποιεί τη µέθοδο Object get(int index) Υλοποιεί διεπαφή 223 Παρότι δεν µπορούν να χρησιµοποιηθούν για επαναχρησιµοποίηση κοινού κώδικα, αφού περιέχουν µόνον επικεφαλίδες µεθόδων Επιτρέπουν ενιαίο χειρισµό αντικειµένων των υποκλάσεων (αποφεύγουµε instanceof) Επιτρέπουν πλήρη διαχωρισµό τουορισµού µιας κλάσης από την υλοποίησή της. Για έναν ορισµό (προδιαγραφή), µπορούµεναέχουµε πολλές υλοποιήσεις. Παράδειγµα: σηµεία στο χώρο. Υλοποίηση µε boolean πίνακα τριών διαστάσεων ή µεσυλλογήτριάδων(x,y,z). 224 Παράδειγµα ιεπαφής ΗδιεπαφήList ορίζει την προδιαγραφή που πρέπει να σέβονται όλες οι υλοποιήσεις για λίστες. Μέθοδοι add, clear, get, size, iterator, remove Οι υλοποιήσεις υλοποιούν τη διεπαφή µε διαφορετικούς τρόπους. Αρκεί να αλλάξουµετοαντικείµενο, και χρησιµοποιείται List «interface» διαφορετική υλοποίηση. implements ArrayList implements LinkedList 225 Όροι Ενότητας 8 Κληρονοµικότητα Σχέση είναι-ένα Γονική κλάση Ιεραρχία κλάσεων Επαναχρησιµοποίηση Ετερογενείς συλλογές Κλάσεις περιτυλίγµατος Πολυµορφισµός υναµικά προσδιοριζόµενος τύπος Πολλαπλή κληρονοµικότητα ιεπαφές Τεκµήρια Ενότητας extends super protected instanceof interface implements 226 http://www.syros.aegean.gr/users/gaviotis/tmp2 6