Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Εβδομάδα 2: Υπο-τύποι και πολυμορφισμός [sub-typing and polymorphism]

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Κληρονομικότητα. Εισαγωγή  Κληρονομικότητα (Inheritance) καλείται ο μηχανισμός με τον οποίο μία νέα κλάση που ονομάζεται παράγωγη (derived class) δημιουργείται.
Advertisements

Τύποι δεδομένων και τελεστές,
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές)
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα.
ΘΕΩΡΙΑ ΔΙΑΛΕΞΗ 4 Αριθμητικές εκφράσεις και πράξεις Εντολές ανάθεσης
Κεφάλαιο 6 Threads. 2 Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά.
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 9: Διανύσματα και λίστες.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 3: Υλοποίηση μεθόδων.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα.
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος γ
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Week 11: Intro to Applets Εβδομάδα 11: Εισαγωγή στα Applets.
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Week 6: Java Collections Εβδομάδα 6: Συλλογές δεδομένων στην Java.
Αντικειμενοστρεφής Προγραμματισμός, Αντώνιος Συμβώνης, Πανεπιστήμιο Ιωαννίνων, Slide 1 Week 13: Review Εβδομάδα 13: Ανασκόπηση.
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Week 4: Exceptions Εβδομάδα 4: Εξαιρέσεις [Exceptions]
© GfK 2012 | Title of presentation | DD. Month
Εισαγωγή στον Προγραμματισμό (στη γλώσσα Java)
Αντικείμενα, Κλάσεις και Μέθοδοι
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 7: Συμβολοσειρές.
Επανάληψη βασικών αρχών του αντικειμενοστρεφούς προγραμματισμού
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου.
Κεφάλαιο 2ο Πεπερασμένα αυτόματα.
Java A Crash Course in (Προσέγγιση μέσω UML)
Σύγκριση Java και C++ Μεταπτυχιακό Εφαρμοσμένης Πληροφορικής - Αλέξανδρος Χατζηγεωργίου, Νοέμβριος 2004.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κληρονομικότητα Πολυμορφισμός – Late Binding.
Προγραμματισμός ΙΙ Διάλεξη #6: Απλές Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
Τεχνολογία ΛογισμικούSlide 1 Αλγεβρική Εξειδίκευση u Καθορισμός τύπων αφαίρεσης σε όρους σχέσεων μεταξύ τύπων λειτουργιών.
Μοντέλα Συστημάτων Παρουσιάσεις των συστημάτων των οποίων οι απαιτήσεις αναλύονται.
Προγραμματισμός ΙΙ Διάλεξη #5: Εντολές Ανάθεσης Εντολές Συνθήκης Δρ. Νικ. Λιόλιος.
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 11: Εκτέλεση Java χωρίς το BlueJ.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Κληρονομικότητα.
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής (Αντικειμενοστρεφής Προγραμματισμός)
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό Κλάσεις και αντικείμενα Κλάσεις και αντικείμενα Κατασκευαστές κλάσεων (constructors) Κατασκευαστές κλάσεων.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές.
Ποιότητα Λογισμικού Ενότητα 3: Σουίτες Ελέγχων. Διδάσκων: Γεώργιος Κακαρόντζας, Καθηγητής Εφαρμογών. Τμήμα Μηχανικών Πληροφορικής, Τεχνολογικής Εκπαίδευσης.
1 Εισαγωγή στη Java Χρήσιμες Διευθύνσεις Χαρακτηριστικά της Java Εργαλεία της Java Εργαλεία της Java Μεταγλώττιση στοιχειωδών εφαρμογών.
Βάσεις Δεδομένων Εργαστήριο ΙΙ Τμήμα Πληροφορικής ΑΠΘ
Περίπτωση χρήσης: Process sale Από την ΠΧ στον κώδικα.
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Copy Constructor Deep and Shallow Copies.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές)
ΟΣΣ Δεκεμβρίου 2004 Σχεδιασμός Λογισμικού Γλώσσες Προγραμματισμού ΙΙ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ.
Έλεγχος Ονομάτων (Name Control) Για ένα πρόγραμμα που αποτελείται από πολλά τμήματα κάποια από τα οποία έχουν πιθανώς γραφτεί από άλλους προγραμματιστές.
Τμήμα Πληροφορικής και Τηλεπικοινωνιών
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές.
Threads Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά η μία μετά.
1 Κεφάλαιο 2 Εισαγωγή στον αντικειμενοστραφή προγραμματισμό.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 9: Κληρονομικότητα. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής. Τμήμα.
Αντικειμενοστραφής Προγραμματισμός Ι
Αντικειμενοστραφής Προγραμματισμός ΙΙ
Οντοκεντρικός Προγραμματισμός
Εργαστηριακό σεμινάριο Χειμερινό εξάμηνο
Βασικές έννοιες Αντικειμενοστραφούς Προγραμματισμού ΙΙ
Κληρονομικότητα [inheritance]
Κλάσεις και αντικείμενα
Βασικές έννοιες Αντικειμενοστραφούς Προγραμματισμού ΙΙ
Wrapper Classes, Abstract Classes and Interfaces
Κελυφοποιημένα δεδομένα [encapsulated data]
Εισαγωγή στον Προγ/μό Υπολογιστών
Εισαγωγή στον Προγραμματισμό (στη γλώσσα Java)
Υπο-τύποι και πολυμορφισμός
Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό (στη γλώσσα Java)
Κληρονομικότητα [inheritance]
Μεταγράφημα παρουσίασης:

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Εβδομάδα 2: Υπο-τύποι και πολυμορφισμός [sub-typing and polymorphism]

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 2 Διάγραμμα κλάσεων [Class diagram] Item Database MusicCD Video

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 3 Διάγραμμα αντικειμένων [Object diagram] Database Item [ ] CD Video

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 4 Πηγαίος κώδικας void list() { for (int i = 0; i < myItems.length; i++) { myItems[i].print(); }

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 5 Σύνοψη: μέθοδος print Item MusicCD Video print()

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 6 Υπενθύμιση: αντικείμενα και κλάσεις “triple j” “sampler” 33 “great!” CD CD() getTitle()... object class

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 7 Κλήση μεθόδου “triple j” “sampler” 33 “great!” CD CD() getTitle()... getTitle()

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 8 Αντιστοίχιση μεθόδου με κληρονομικότητα “triple j” “sampler” 33 “great!” CD getArtist() print() getTitle() Item print() getTitle()...

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 9 “super” Μία μέθοδος της υπερκλάσης μπορεί να κληθεί από μια μέθοδο της κλάσης μέσω της ειδικής μεταβλητής super. public void print() { super.print(); System.out.println(...); }

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 10 Χρήση της “super” σε κατασκευαστές Οι κατασκευαστές των υποκλάσεων πρέπει να έχουν μία κλήση προς τον “super” (τον κατασκευαστή της υπερκλάσης) στην πρώτη γραμμή του κώδικά τους. Εάν η κλήση έχει παραληφθεί, η εντολή super(); εισάγεται αυτόματα από τον μεταφραστή. Προσοχή: Ο κατασκευαστής που δεν έχει παραμέτρους είναι αυτός που επιλέγεται να εισαχθεί αυτόματα! Σύσταση: Πάντα να εισάγετε μία κλήση προς τον κατασκευαστή super – μην εξαρτάστε από την αυτόματη εισαγωγή του

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 11 Παραδείγματα κατασκευαστών Άμεση κλήση στον super χωρίς παραμέτρους Έμμεση κλήση στον super χωρίς παραμέτρους (δουλεύει μόνο όταν υπάρχει στην υπερκλάση κατασκευαστής χωρίς παραμέτρους) Άμεση κλήση στον super με παραμέτρους MusicCD (String title) { super();... } MusicCD (String title) {... } MusicCD (String title) { super(title);... } MusicCD (String title) { super();... } MusicCD (String title) {... } MusicCD (String title) { super(title);... }

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 12 Κληρονομικότητα και υπο-τύποι Η κληρονομικότητα δημιουργεί μία σχέση υπο-τύπων [subtypes] μεταξύ κλάσεων Υπενθύμιση: Η Java είναι μία γλώσσα με στατικό σύστημα τύπων δεδομένων [typed language]. Μόνο τιμές με συμβατούς τύπους δεδομένων (που είναι γνωστοί κατά την μετάφραση) μπορεί να καταχωρηθούν σε μεταβλητές και παραμέτρους

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 13 Χρήση υπο-τύπων Person aPerson; Student aStudent; Staff aStaffMember; aPerson = aStaffMember; aPerson = aStudent; aPerson.changeAddress (...); aStudent = aPerson; aPerson.graduate(); aStudent = new Student (...); aStaffMember = new Staff (...); Σωστή χρήση Λάθος χρήση

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 14 Υπο-τύποι και συμφωνία τύπων [conformance] Αντικείμενα υπο-τύπων μπορεί να υποκαθιστούν αντικείμενα των υπερ-τύπων τους (μπορεί να χρησιμοποιηθούν σε περιπτώσεις όπου αναμένονταν ένα αντικείμενο του υπερ-τύπου). «Ένα αντικείμενο υπο-τύπου είναι-ένα [ is-a] αντικείμενο υπερ-τύπου» Ένας υπο-τύπος συμφωνεί [conforms to] με τον υπερ- τύπο.

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 15 Στατικοί – δυναμικοί τύποι δεδομένων Student Person aPerson; Οι μεταβλητές μπορεί να αναφέρονται σε αντικείμενα του συγκεκριμένου τύπου δήλωσης τους ή σε αντικείμενα που ανήκουν σε οποιονδήποτε υπο-τύπο του.

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 16 Στατικοί – δυναμικοί τύποι δεδομένων Ο στατικός τύπος [static type] είναι ο τύπος δήλωσης μίας μεταβλητής ή παραμέτρου όπως αυτός εμφανίζεται στον πηγαίο κώδικα. Ο δυναμικός τύπος [dynamic type] είναι ο τύπος του αντικειμένου (κατά το χρόνο εκτέλεσης).

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 17 Υπο-τύποι / πολυμορφισμός Οι υπο-τύποι παρέχουν τις ίδιες μεθόδους αλλά οι υλοποιήσεις [ implementations] των μεθόδων μπορεί να διαφέρουν!

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 18 Δυναμικός καθορισμός τύπου [Dynamic dispatch] anItem = aCD;... anItem.print(); anItem = aCD;... anItem.print(); anItem = aVideo;... anItem.print(); anItem = aVideo;... anItem.print(); Κώδικας:Αποτέλεσμα: CD: Triple J Hottest 100 (79 min) artist: sampler, 33 tracks double CD - great! Video: The South Park Movie (102 min) director: Fred Smith (not seen yet) Ίδιος κώδικας, Διαφορετικό αποτέλεσμα!

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 19 Προσδιορισμός μεθόδου [method lookup, binding] Video anItem.print(); anItem Video getDirector() print() Video getDirector() print() Item getTitle() setComment() print() Item getTitle() setComment() print() "instance of" Σημείωση: Ο δυναμικός τύπος των δεδομένων προσδιορίζει το σημείο εκκίνησης της διαδικασίας προσδιορισμού της κατάλληλης μεθόδου!

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 20 Επεκτασιμότητα [Extendability] Ο δυναμικός προσδιορισμός του τύπου δεδομένων υποστηρίζει την επεκτασιμότητα – νέες υποκλάσεις μπορεί να προστεθούν αργότερα χωρίς να είναι απαραίτητη η τροποποίηση του κώδικα που χρησιμοποιεί τις κλάσεις βάσης.

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 21 Η κλάση “ Object ” (Σχεδόν) κάθε κλάση έχει μία υπερ-κλάση. Εάν η υπερ-κλάση δεν έχει άμεσα δηλωθεί, τότε ως υπερκλάση θεωρείται η κλάση Object Οι μέθοδοι της κλάσης Object είναι διαθέσιμες σε κάθε κλάση Person Staff Student Object Game

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 22 “ toString ” Η κλάση Object παρέχει τη μέθοδο toString, η οποία μετατρέπει ένα αντικείμενο σε ένα String. Παράδειγμα: String s = person.toString(); Η μέθοδος toString καλείται έμμεσα κατά την εκτέλεση της συνένωσης συμβολοσειρών (+) Παράδειγμα: System.out.println(“Details: “ + person); Συνέπεια: όλα τα αντικείμενα μπορεί να λάβουν μέρος σε συνένωση συμβολοσειρών – κατάλληλη λειτουργία για παρουσίαση αποτελεσμάτων!

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 23 Μετατροπείς πρόσβασης [Access Modifiers] Οι μετατροπείς πρόσβασης καθορίζουν την ορατότητα [visibility] ενός πεδίου ή μεθόδου. Παραδείγματα: private int number; protected String name; public void changeAddress(Address newAddress) {... } private int calculateResult(int parameter) {... } Μετατροπείς πρόσβασης: private, protected, public. νέο!

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 24 “private” Ορατά/προσπελάσιμα μόνο από το εσωτερικό της κλάσης a class client 1 subclass 1 subclass 2 client 2 Περιοχή ορατότητας Ένα “private” πεδίο

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 25 “public” Ορατά/προσπελάσιμα από το εσωτερικό της κλάσης και από κάθε άλλη κλάση a class client 1 subclass 1 subclass 2 client 2 Περιοχή ορατότητας Ένα “public” πεδίο

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 26 “protected” Ορατά/προσπελάσιμα από το εσωτερικό της κλάσης και από κάθε υποκλάση της a class client 1 subclass 1 subclass 2 client 2 Περιοχή ορατότητας Ένα “protected” πεδίο

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 27 Οδηγίες χρήσης μετατροπέων πρόσβασης Χρησιμοποιείτε πάντοτε ένα μετατροπέα πρόσβασης. Περιορίστε την πρόσβαση όσο το δυνατό περισσότερο. Μη χρησιμοποιείτε public πεδία. Χρησιμοποιείτε πάντοτε ένα μετατροπέα πρόσβασης. Περιορίστε την πρόσβαση όσο το δυνατό περισσότερο. Μη χρησιμοποιείτε public πεδία.

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 28 Η δεσμευμένη λέξη “ final ” Δηλώστε μία μέθοδο ως final για να αποτρέψετε τον εκ’ νέου ορισμό της [prevent redefinition, overriding] Δηλώστε μία κλάση ως final για να είναι όλες οι μέθοδοί της “ final ”. Παραδείγματα: final public String getPassword() {... } final class SecurityManager {... }

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 29 Το πρόβλημα του «αντίστροφου πολυμορφισμού» class A {... } // variables A a; B b;... b = new B(); a = b; a.doSomething(42); b = a; b.doSomething(42); class B extends A {... void doSomething(int n) {... } } Πως εκτελούμε μία Β-μέθοδο μετά από καταχώρηση στο αντικείμενο a (τύπου Α); «λανθασμένα» στις περισσότερες γλώσσες

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 30 Ανομοιογενείς συλλογές αντικειμένων Μία ανομοιογενής συλλογή [heterogenous collection] είναι μία συλλογή από αντικείμενα διαφορετικών τύπων (πολυμορφική συλλογή [polymorphic collection] ) Ανομοιογενής συλλογές δημιουργούνται δηλώνοντας τα στοιχεία τους ως μέλη μιας υπερ-κλάσης τους. Η γενικότερη περίπτωση: Τα στοιχεία είναι τύπου “ Object ” – η συλλογή μπορεί να περιέχει οποιοδήποτε αντικείμενο (πχ. ListArray)

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 31 Απώλεια τύπου [type loss] Το πρόβλημα: η απώλεια τύπου String note = “consider this!”; ArrayList notes = new ArrayList(); notes.addElement(note);... String note; note = notes.elementAt(1); Σωστό -- η παράμετρος είναι τύπου Object Λάθος -- Καταχώρηση Object σε String !

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 32 Μετατροπή τύπου [casting] Η λύση: μετατροπή τύπου [casting] String note = “consider this!”; ArrayList notes = new ArrayList(); notes.addElement(note);... String note; note = (String)notes.elementAt(1); Μετατροπή σε String ! Μία μετατροπή τύπου μετατρέπει τον στατικό τύπο ενός αντικειμένου σε έναν άλλο τύπο (συνήθως υπο-τύπο). Είναι σωστή μόνο εάν ο δυναμικός τύπος του αντικειμένου είναι σύμφωνος (conforms) με τον τύπο της μεταβλητής στην οποία καταχωρείται.

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 33 Επίδειξη Πολυμορφική συλλογή (πχ. ArrayList) Εισαγωγή στοιχείων Καταχώρηση με μετατροπή τύπου println χωρίς μετατροπή τύπου Συζήτηση: γιατί λειτουργεί σωστά;

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 34 Τμήμα κώδικα String note = “consider this!”; ArrayList notes = new ArrayList(); notes.addElement(note);... System.out.println(notes.elementAt(1)); Δουλεύει; γιατί; / γιατί όχι;