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

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

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

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

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

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

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

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

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

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

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

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιαχείριση Εξαιρέσεων. Εισαγωγή στη ιαχείριση Εξαιρέσεων

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Wrapper Classes, Abstract Classes and Interfaces

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

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

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

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

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

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

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

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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

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

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

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

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

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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D.

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

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

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

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

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

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

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

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

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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

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

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

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

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

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

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

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

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

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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

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

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

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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Πίνακες.

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

Τεχνολογίες Υλοποίησης Αλγορίθµων

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

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

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

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

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

Transcript:

Προγραµµατισµός ΙΙ Ηγλώσσααντικειµενοστραφούς προγραµµατισµού Java ιδάσκων ηµήτριος Κατσαρός, Ph.D. @ Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας ιάλεξη 8η: 10/05/2006 & 11/05/2006 1 ιεπαφές και Εσωτερικές κλάσεις Interfaces and Inner Classes 2 ιεπαφές - Interfaces Μια διεπαφή (interface) είναικάτιανάλογοµιας ακραίας περίπτωσης αφηρηµένης κλάσης Όµως, ένα interface δεν είναι κλάση Είναι ένας τύπος δεδοµένων που µπορεί να ικανοποιηθεί από οποιαδήποτε κλάση υλοποιεί αυτό το interface Ησύνταξηγιαναορίσουµε έναinterface είναι παρόµοια µε αυτήορισµού µιας κλάσης Εκτός από τη λέξη interface που χρησιµοποιείται αντί της λέξης class Ένα interface καθορίζει ένα σύνολο µεθόδων που κάθε κλάση, η οποία υλοποιεί το interface, πρέπει να έχει Περιέχει µόνο κεφαλίδες µεθόδων και δηλώσεις σταθερών εν έχει instance variables ούτε πλήρεις ορισµούς µεθόδων 3 1

ιεπαφές - Interfaces Ένα interface λειτουργεί παρόµοια µε µια base class, όµως δεν είναι base class Μερικές γλώσσες επιτρέπουν µια κλάση να παράγεται από περισσότερες από µια διαφορετικές base classes Αυτή η πολλαπλή κληρονοµικότητα (multiple inheritance) δεν επιτρέπεται στη Java Αντί γι αυτό, η Java προσεγγίζει την πολλαπλή κληρονοµικότητα µε ταinterfaces 4 ιεπαφές - Interfaces Ένα interface καιόλεςοικεφαλίδεςτων µεθόδων του θα πρέπει να δηλώνονται public εν µπορεί να δηλωθούν private, protected, ή µε package προσπέλαση Όταν µια κλάση υλοποιεί ένα interface, πρέπει να κάνει όλες τις µεθόδους του interface public Επειδή ένα interface είναι ένας τύπος δεδοµένων, µια µέθοδος µπορεί να δέχεται ως όρισµαέναντύποinterface Αυτήηπαράµετρος θα δέχεται ως όρισµα οποιαδήποτε κλάση υλοποιεί το interface 5 ΗδιεπαφήOrdered 6 2

ιεπαφές Για να υλοποιήσουµε έναinterface, µια κλάση πρέπει να κάνει δυο πράγµατα: 1. Να περιλάβει τη φράση implements Interface_Name Στην αρχή του ορισµού της Εάν υλοποιεί περισσότερα από ένα interface, κάθε ένα από αυτά παρατίθεται, χωρισµένα µε κόµµα 2. Η κλάση πρέπει να υλοποιήσει όλες τις κεφαλίδες µεθόδων που υπάρχουν στους ορισµούς των interface(s) Σηµειώστε τη χρήση του Object ως τύπο παραµέτρου στα επόµενα παραδείγµατα 7 Υλοποίηση µιας ιεπαφής 8 Υλοποίηση µιας ιεπαφής 9 3

Αφηρηµένες κλάσεις που υλοποιούν Interface Οι αφηρηµένες κλάσεις µπορεί να υλοποιούν ένα ή περισσότερα interfaces Κάθε κεφαλίδα µεθόδου που δίνεται σε ένα interface αλλά δεν υλοποιείται στην κλάση, σηµατοδοτεί µια αφηρηµένη µέθοδο Μια (concrete) κλάσηπρέπειναέχειορισµούς για όλες τις κεφαλίδες µεθόδων που δίνονται στην αφηρηµένη κλάση, από όπου παράγεται, και ορισµούς για όλες τις κεφαλίδες µεθόδων των interfaces που υλοποιεί 10 Αφηρηµένη κλάση που υλοποιεί Interface 11 Παραγόµενες ιεπαφές (Derived Interfaces) Όπωςκαιοικλάσεις, ένα interface µπορεί να παραχθεί από ένα base interface Αυτό αποκαλείται επέκταση (extending) του interface Το παραγόµενο interface πρέπει να περιλαµβάνει τη φράση extends BaseInterfaceName Μια (concrete) κλάση που υλοποιεί ένα παραγόµενο interface πρέπει να έχει ορισµούς για κάθε µέθοδο του παραγόµενου interface καθώς επίσης και για κάθε µέθοδο του base interface 12 4

Extending ένα Interface 13 Παγίδα: Η σηµασιολογία µιας ιεπαφής δεν επιβάλλεται Όταν µια κλάση υλοποιεί ένα interface, ο compiler και το run-time σύστηµα ελέγχουν τη σύνταξη του interface και την υλοποίησή του Όµως, δενελέγχουνεάντοσώµα τουinterface είναι συνεπές µε το προοριζόµενο νόηµα Ηαπαιτούµενη σηµασιολογία για το interface κανονικά ενσωµατώνονται στην τεκµηρίωση του interface Έτσι, γίνεται αρµοδιότητα του προγραµµατιστή που υλοποιεί το interface, να ακολουθήσει τη σηµασιολογία Εάν το σώµατηςµεθόδου δεν ικανοποιεί την προκαθορισµένη σηµασιολογία, τότε το λογισµικό που γράφεται για τις κλάσεις που υλοποιούν το interface ίσως να µην λειτουργεί κανονικά 14 Το interface Comparable Είναι εύκολο να επινοήσουµε/αναζητήσουµεέναναλγόριθµο (π.χ., Selection Sort) για να ταξινοµήσουµεένανµερικώς πλήρη πίνακα από double σε αύξουσα διάταξη Προφανώς, αυτός ο κώδικας µπορεί να µετασχηµατιστεί ώστε να ταξινοµεί σε φθίνουσα διάταξη, ήναταξινοµεί String Όλες αυτές οι µέθοδοι θα είναι ουσιαστικά παρόµοιες, αλλά κάθε απαιτούµενη µικρο-αλλαγή θα ήταν ενόχληση Οι µοναδικές διαφορές θα ήταν οι τύποι δεδοµένων και η διάταξη ταξινόµησης Χρησιµοποιώντας το interface Comparable θα µπορούσαµεναέχουµε µια µόνο µέθοδο ταξινόµησης που καλύπτει όλες τις περιπτώσεις 15 5

Το interface Comparable Το interface Comparable βρίσκεται στο package java.lang, και έτσι δεν χρειάζεται δήλωση import Έχει µόνο την ακόλουθη κεφαλίδα µεθόδου που πρέπει να υλοποιηθεί: public int compareto(object other); Είναι ευθύνη του προγραµµατιστή να ακολουθήσει τη σηµασιολογία του interface Comparable όταν το υλοποιεί 16 Ησηµασιολογία της διεπαφής Comparable Η µέθοδος compareto πρέπει να επιστρέφει Έναν αρνητικό αριθµό, εάν το καλούν αντικείµενο προηγείται" της παραµέτρου other Μηδέν, εάντοτοκαλούναντικείµενο ισούται µετην παράµετρο other Ένα θετικό αριθµό, εάντοκαλούναντικείµενο έπεται της παραµέτρου other Εάν η παράµετρος other δεν είναι ίδιου τύπου όπως η κλάση που ορίζουµε, τότε θα πεταχτεί µια εξαίρεση ClassCastException 17 Ησηµασιολογία της διεπαφής Comparable Σχεδόν οποιαδήποτε έννοια του προηγείται είναι αποδεκτή Ειδικότερα, όλες οι standard less-than σχέσεις πάνω σε αριθµούς και η λεξικογραφική διάταξη σε strings είναι κατάλληλες Ησχέση έπεται" είναι απλά το αντίστροφο της προηγείται 18 6

Ησηµασιολογία της διεπαφής Comparable Και άλλες διατάξεις µπορεί να εξεταστούν, εφόσον επιβάλλουν πλήρη διάταξη (total ordering) Μια τέτοια διάταξη πρέπει να ικανοποιεί τους ακόλουθους κανόνες: (Irreflexivity) Για κανένα αντικείµενο o, το o δεν προηγείται του o (Trichotomy) Για δυο οποιαδήποτε αντικείµενα o1 και o2, ένα και µόνο ένα από τα ακόλουθα ισχύει: το o1 προηγείται του o2, το o1 έπεται του o2, ή τοo1 ισούται µετοo2 (Transitivity) Εάν το o1 προηγείται του o2 και το o2 προηγείται του o3, τότε το o1 προηγείται του o3 Το ισούται της σηµασιολογίας της µεθόδου compareto πρέπει να συµπίπτει µετηνµέθοδο equals εάν είναι δυνατό, αλλά αυτό δεν είναι εντελώς ζητούµενο 19 Χρήση της διεπαφής Comparable Το επόµενο παράδειγµαχρησιµοποιεί τον απλό αλγόριθµο SelectionSort Ηνέαέκδοση, GeneralizedSelectionSort, περιλαµβάνει µια µέθοδο που µπορεί να ταξινοµήσει οποιοδήποτε µερικώς πλήρη πίνακα, τουοποίουο base τύπος υλοποιεί το interface Comparable Περιέχει και κατάλληλες µεθόδους indexofsmallest και interchange Σηµείωση: Οι κλάσεις Double και String υλοποιούν το interface Comparable Τα interfaces εφαρµόζονται µόνο σε κλάσεις Ένας primitive τύπος (π.χ., double) δεν µπορεί να υλοποιεί ένα interface 20 Κλάση GeneralizedSelectionSort: Μέθοδος sort 21 7

Κλάση GeneralizedSelectionSort: Μέθοδος sort 22 Κλάση GeneralizedSelectionSort: Μέθοδος sort 23 Ταξινόµηση πινάκων τύπου Comparable 24 8

Ταξινόµηση πινάκων τύπου Comparable 25 Ταξινόµηση πινάκων τύπου Comparable 26 Ορισµένες σταθερές σε interfaces Ένα interface µπορείναπεριέχεικαιορισµένες constants, πέρα από τις κεφαλίδες µεθόδων Όποιες µεταβλητές ορίζονται σε ένα interface πρέπει να είναι public, static, και final Επειδή αυτό είναι η µόνη επιλογή, η Java επιτρέπει να παραλείπουµε αυτούς τους modifiers Κάθε κλάση που υλοποιεί το interface έχει πρόσβαση σε αυτές τις defined constants 27 9

Παγίδα: Ασυνεπή interfaces Στη Java, κάθε κλάση µπορεί να έχει µια µόνο base κλάση Αυτό αποτρέπει ασυνέπειες που µπορεί να προκύψουν από διαφορετικούς ορισµούς µεθόδων που έχουν την ίδια κεφαλίδα Επιπρόσθετα, µια κλάση µπορεί να υλοποιεί οποιοδήποτε αριθµό απόinterfaces Αφού τα interfaces δεν έχουν σώµατα µεθόδων, το παραπάνω πρόβληµα δενµπορεί να προκύψει Όµως, υπάρχουν άλλα είδη ασυνεπειών που µπορεί να προκύψουν 28 Παγίδα: Ασυνεπή interfaces Όταν µια κλάση υλοποιεί δυο interfaces: Ένας τύπος ασυνέπειας θα προκύψει, εάν τα interfaces έχουν constants µετοίδιοόνοµα, αλλά µε διαφορετικές τιµές Ένας άλλος τύπος ασυνέπειας θα προκύψει, εάν τα interfaces περιέχουν µεθόδους µετοίδιοόνοµα αλλά µε διαφορετικούς επιστρεφόµενους τύπους Εάν ο ορισµόςτηςκλάσηςυλοποιείδυοασυνεπή interfaces, τότε αυτό είναι error, και ο ορισµός τηςκλάσηςείναιµηέγκυρος 29 To interface Serializable Ένα ακραίο, αλλά κοινά χρησιµοποιούµενο παράδειγµα interface είναι το interface Serializable εν έχει κεφαλίδες µεθόδων ούτε και defined constants: Είναι εντελώς κενό Χρησιµοποιείται απλά ως ετικέτα τύπου που σηµατοδοτεί στο σύστηµα ότιµπορεί να υλοποιήσει I/O αρχείων µε έναν συγκεκριµένο τρόπο 30 10

To interface Cloneable Το interface Cloneable είναι ακόµηέναµη συνηθισµένο παράδειγµαενόςjava interface εν περιέχει κεφαλίδες µεθόδων ούτε defined constants Χρησιµοποιείται για να δηλώσει πώς η µέθοδος clone (κληρονοµούµενη από την κλάση Object) θα πρέπει να χρησιµοποιηθεί και να ξανα-οριστεί 31 To interface Cloneable Η µέθοδος Object.clone() εκτελεί µια bitby-bit αντιγραφή των δεδοµένων του αντικειµένου στον αποθηκευτικό χώρο Εάν τα δεδοµένα είναι όλα primitive τύπου ή δεδοµένα από immutable τύπους κλάσεων (όπως η κλάση String), τότε αυτή είναι αρκετή Αυτή είναι η απλούστερη περίπτωση Το επόµενο είναι ένα παράδειγµα µιας απλής κλάσης που δεν έχει instance variables τύπου mutable κλάσης, και δεν έχει καθορισµένη base κλάση Έτσι, η base κλάση είναι η Object 32 Υλοποίηση της clone: Απλή περίπτωση 33 11

To interface Cloneable Εάν τα δεδοµένα του αντικειµένου, που πρόκειται να αντιγραφεί µετηνclone, περιλαµβάνουν instance variables τωνοποίωνοτύποςείναιµια mutable κλάση, τότε η απλή υλοποίηση της clone θα προκαλούσε ένα κενό ασφάλειας (privacy leak) Όταν υλοποιούµετοinterface Cloneable για µια κλάση όπως αυτή που αναφέραµε: Πρώτα ενεργοποιούµετηµέθοδο clone της βασικής κλάσης Object (ή οποιασδήποτε βασικής κλάσης από την οποία παράγεται ηεξεταζόµενη κλάση) Κατόπιν, κάνουµε reset τις τιµές των νέων instance variables των οποίων οι τύποι είναι mutable κλάσεις Αυτό γίνεται µετονακάνουµε αντίγραφατωνinstance variables µε ενεργοποίηση των δικών τους µεθόδων clone 34 To interface Cloneable Να σηµειωθεί ότι αυτό θα δουλέψει κανονικά µόνο εάν το interface Cloneable υλοποιείται ορθά για τις κλάσεις στις οποίες ανήκουν οι instance variables Και για τις κλάσεις οι οποίες περιλαµβάνονται στις κλάσεις των instance variables, κ.ο.κ. Το επόµενο δείχνει ένα παράδειγµα 35 Υλοποίηση της clone: ύσκολη περίπτωση 36 12

Απλές χρήσεις των Εσωτερικών Κλάσεων (Inner Classes) Οι Inner κλάσεις είναι κλάσεις που ορίζονται µέσα σε άλλες κλάσεις Ηκλάσηπουπεριλαµβάνει την inner κλάση αποκαλείται outer κλάση εν υπάρχει συγκεκριµένη θέση στην outer κλάση, όπου θα πρέπει να τοποθετηθεί ο ορισµός της inner κλάσης (ή των κλάσεων) Τοποθετώντας τον στην αρχή ή στο τέλος, σηµαίνει ότι θα τον εντοπίζουµε εύκολα 37 Απλές χρήσεις των Inner κλάσεων Οορισµός µιας inner κλάσεις είναι ένα µέλος της outer κλάσης µε τον ίδιο τρόπο που οι instance variables και οι µέθοδοι της outer class είναι µέλη της Μια inner κλάση είναι τοπική (local) στον ορισµό της outer κλάσης Το όνοµα µιας inner κλάσης µπορεί να χρησιµοποιηθεί οπουδήποτε εκτός του ορισµού της outer κλάσης Εάν η inner κλάση είναι ιδιωτική, τότε η inner κλάση δεν µπορεί να προσπελαστεί by name εκτός του ορισµού της outer κλάσης 38 Απλές χρήσεις των Inner κλάσεων Οι inner κλάσεις έχουν δυο κύρια πλεονεκτήµατα Καθιστούν τις outer κλάσεις περισσότερο αυτόπεριεχόµενες Οι µέθοδοί τους έχουν πρόσβαση στις ιδιωτικές µεθόδους και στις instance variables της άλλης κλάσης Χρησιµοποιώντας µια inner κλάση ως βοηθητική κλάση είναι µιααπότιςπιοχρήσιµες εφαρµογές των inner κλάσεων Εάν χρησιµοποιηθεί ως βοηθητική κλάση, η inner κλάση θα πρέπει να καθορίζεται ως private 39 13

Υπόδειξη: Οι Inner και Outer κλάσεις έχουν πρόσβαση η µια στα ιδιωτικά µέλη της άλλης Μέσα στον ορισµό µιας µεθόδου µιας inner κλάσης: Είναι έγκυρο να αναφερόµαστε σε µια private instance variable της outer κλάσης Είναι έγκυρο να ενεργοποιούµε µια private µέθοδο της outer κλάσης Μέσα στον ορισµό µιας µεθόδου µιας outer κλάσης Είναι έγκυρο να αναφερόµαστε σε µια private instance variable της inner κλάσης για ένα αντικείµενο της inner κλάσης Είναι έγκυρο να ενεργοποιούµε µια (nonstatic) µέθοδο της inner κλάσης, εφόσον κάποιο αντικείµενο της inner κλάσης χρησιµοποιείται ως καλούν αντικείµενο Μέσα στον ορισµό τωνinner ή outer κλάσεων, οι modifiers public και private είναι ισοδύναµοι 40 Κλάση που περιέχει Inner κλάση 41 Κλάση που περιέχει Inner κλάση 42 14

Κλάση που περιέχει Inner κλάση 43 Το αρχείο.class για µια Inner κλάση Μεταγλωττίζοντας µια οποιαδήποτε κλάση στη Java παράγει ένα αρχείο.class µεόνοµα ClassName.class Μεταγλωττίζοντας µια κλάση µε µια (ή περισσότερες) inner κλάσεις προκαλεί τη µεταγλώττιση και των δυο (ήόλων) των κλάσεων, και παράγει δυο (ή περισσότερα) αρχεία.class Όπως ClassName.class και ClassName$InnerClassName.class 44 Static Inner κλάσεις Μια κανονική inner κλάση έχει µια σχέση µεταξύ των αντικειµένων της και του αντικειµένου της outer κλάσης που δηµιούργησε το αντικείµενο της inner κλάσης Αυτό επιτρέπει τον ορισµό τηςinner κλάσης να αναφέρεται σε µια instance variable, ήνα ενεργοποιεί µια µέθοδο της outer κλάσης Υπάρχουν µερικές καταστάσεις όµως, όπου µια inner κλάση πρέπει να είναι static Εάν ένα αντικείµενο της inner κλάσης δηµιουργείται µέσα σε µια static µέθοδο της outer κλάσης Εάν η inner κλάση πρέπει να έχει static µέλη 45 15

Static Inner κλάσεις Αφού µια static inner κλάση δενέχεισχέση µε ένα αντικείµενο της outer κλάσης, τότε µέσα σε µια µέθοδο της inner κλάσης Οι instance variables της outer κλάσης δεν µπορούν να προσπελαστούν Οι nonstatic µέθοδοι της outer κλάσης δεν µπορούν να ενεργοποιηθούν Γιαναενεργοποιήσουµε µια static µέθοδο ή για να ονοµατίσουµε µια static µεταβλητή µιας static inner κλάσης µέσα σε µια outer κλάση, βάζουµεωςπρόθεµάτουςτοόνοµατηςinner κλάσης και µια dot 46 Public Inner κλάσεις Εάν η inner κλάση είναι public, τότε µπορεί να χρησιµοποιηθεί εκτός της outer κλάσης Στην περίπτωση της nonstatic inner κλάσης, πρέπει να δηµιουργηθεί χρησιµοποιώντας ένα αντικείµενο της outer κλάσης BankAccount account = new BankAccount(); BankAccount.Money amount = account.new Money("41.99"); Σηµειώστε ότι το πρόθεµα account. πρέπει να προηγείται του new Το νέο αντικείµενο amount µπορεί τώρα να ενεργοποιήσει µεθόδους της inner κλάσης, αλλά µόνο µέσα από την inner κλάση 47 Public Inner κλάσεις Στην περίπτωση µιας static inner κλάσης, η διαδικασία είναι παρόµοια µε, αλλά απλούστερη, µε εκείνη για τις nonstatic inner κλάσεις OuterClass.InnerClass innerobject = new OuterClass.InnerClass(); Σηµειώστεότιόλεςοιεπόµενες δηλώσεις είναι αποδεκτές innerobject.nonstaticmethod(); innerobject.staticmethod(); OuterClass.InnerClass.staticMethod(); 48 16

Υπόδειξη: Αναφορά σε µέθοδο της outer κλάσης Εάν µια µέθοδος ενεργοποιηθεί σε µια inner κλάση Εάν η inner κλάση δεν έχει τέτοια µέθοδο, τότε υπονοείται ενεργοποίηση της µεθόδου µετοίδιο όνοµατηςouter κλάσης Εάν και οι δυο κλάσεις, inner και outer, έχουν µια µέθοδο µεαυτότοόνοµα, τότε υπονοείται ενεργοποίηση της µεθόδου της inner κλάσης Εάν και οι δυο κλάσεις, inner και outer, έχουν µια µέθοδο µεαυτότοόνοµα, και η πρόθεσή µας είναι να ενεργοποιήσουµε τηµέθοδο της outer κλάσης, τότε πρέπει να χρησιµοποιήσουµετον ακόλουθο τρόπο: OuterClassName.this.methodName() 49 Φωλιάζοντας Inner κλάσεις Είναι έγκυρο να φωλιάζουµε inner κλάσεις µέσα σε inner κλάσεις Οι κανόνες είναι οι ίδιοι όπως πριν, αλλά τα ονόµατα γίνονται µεγαλύτερα εδοµένης µιας κλάσης A, ηοποίαέχειµια public inner κλάση B, ηοποίαέχειµια public inner κλάση C, τότε το επόµενο είναι έγκυρο: A aobject = new A(); A.B bobject = aobject.new B(); A.B.C cobject = bobject.new C(); 50 Inner κλάσεις και κληρονοµικότητα εδοµένης µιας OuterClass ηοποίαέχειµια InnerClass Οποιαδήποτε DerivedClass της OuterClass θα έχει αυτόµατα την InnerClass ως inner κλάση Στην περίπτωση αυτή, η DerivedClass δεν µπορεί να κάνει override την InnerClass Μια outer κλάση µπορεί να είναι µια παραγόµενη κλάση Μια inner κλάση µπορεί επίσης να είναι µια παραγόµενη κλάση 51 17

Ανώνυµες κλάσεις Εάν πρόκειται να δηµιουργηθεί ένα αντικείµενο, αλλά δεν υπάρχει ανάγκη να ονοµατίσουµετηνκλάσητου αντικειµένου, τότε µπορεί να χρησιµοποιηθεί ο ορισµός µιας ανώνυµης κλάσης (anonymous class) Οορισµόςτηςκλάσηςενσωµατώνεται µέσα στην έκφραση µετον τελεστή new Οι ανώνυµες κλάσεις µερικές φορές χρησιµοποιούνται όταν πρόκειται να ανατεθούν σε µια µεταβλητή άλλου τύπου Ο άλλος τύπος πρέπει να είναι τέτοιος, ώστε το αντικείµενο της ανώνυµης κλάσης να είναι επίσης τύπου ίδιου µε αυτότης µεταβλητής όπου ανατίθεται Ο άλλος τύπος είναι συνήθως ένα Java interface 52 Ανώνυµες κλάσεις 53 Ανώνυµες κλάσεις 54 18

Ανώνυµες κλάσεις 55 19