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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!!

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

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

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

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

Η λέξη κλειδί this. Γαβαλάς Δαμιανός

Προγραµµατισµός ΙΙ Java 2

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

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

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

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

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

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

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΕΙΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Ιανουάριος 2007 Οι απαντήσεις να είναι καθαρογραμμένες με ευδιάκριτους όλους του χαρακτήρες.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

Κεφάλαιο 15 Γλώσσα προγραμματισμού Java

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 5 : ΠΕΡΙΣΣΟΤΕΡΑ ΓΙΑ ΤΙΣ CLASSES

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

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

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

5.1 ηµιουργία αντικειµένων

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 5: Κατασκευαστές (Constructors)

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

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

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

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

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

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

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

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

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

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

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

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

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

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

Συλλογές, Στοίβες και Ουρές

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

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

12.6. Άσκηση 6 - [αξιοποίηση γραφικής διεπαφής (GUI)] (έκδοση 2006)

Transcript:

Κλάσεις Τροποποιητές, ιασυνδέσεις, Πακέτα Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων Υπάρχουν 4τροποποιητές: default, public, private, protected. Default: εν προηγείται τροποποιητής του ονόµατος της µεθόδου ή της µεταβλητής. Σε αυτή την περίπτωση η µέθοδος ή η µεταβλητή είναι ορατή σε κάθε κλάση µέσα στο ίδιο πακέτο. Οποιαδήποτε κλάσητουπακέτουµπορείναδιαβάσειήακόµηκαινα τροποποιήσει µια µεταβλητή αυτής της κατηγορίας και µπορεί επίσης και να χρησιµοποιήσει κάθε µέθοδο της κατηγορίας αυτής. Private: εν µπορεί καµιά άλλη κλάση να έχει προσπέλαση στις private µεταβλητές ή µεθόδους µιας κλάσης. Public: Κάθε κλάση µπορεί να έχει προσπέλαση σε µεταβλητές ή µεθόδους αυτής της κατηγορίας. Protected: Οι µέθοδοι και οι µεταβλητές αυτής της κατηγορίας µπορούν να προσπελαστούν τόσο από υποκλάσεις όσο και από κλάσεις που βρίσκονται στο ίδιο πακέτο. (Σηµείωση οι κλάσεις ενόςπακέτουδενανήκουνπάνταστοίδιοπακέτοµετις υπερκλάσειςσους). 1

Κλάσεις και κληρονοµικότητα Μια κλάση µπορεί να κληρονοµεί: Από προηγούµενα ορισµένες από το χρήστη κλάσεις (extends ->κληρονοµικότητα) Από µια κλάση της βασικής βιβλιοθήκης των κλάσεων (import ->έτοιµηβιβλιοθήκη) Έλεγχος προσπέλασης και υπέρβαση µεθόδου Αν σε µία δευτερεύουσα κλάση γίνεται υπέρβαση µιας µεθόδου πρέπει να ληφθεί υπόψη ο τροποποιητής προσπέλασης της αντίστοιχης µεθόδου της υπερκλάσης προκειµένου να αποφασιστεί ο τροποποιητής ελέγχου προσπέλασης της µεθόδου της υποκλάσης. Ο γενικότερος κανόνας που ισχύει σε αυτές τις περιπτώσεις λέει πωςδενµπορείναγίνειυπέρβασηµιαςµεθόδουκαιηµέθοδοςτης δευτερεύουσας κλάσης να είναι πιο περισσότερο ιδιωτική από αυτή της υπερκλάσης. Αντιθέτως µπορεί να γίνει περισσότερο δηµόσια. Πιο συγκεκριµένα οι κανόνες ανάλογα µε τον τροποποιητή ελέγχου της µεθόδου της υπερκλάσης έχουν ως εξής: Οι µέθοδοι που δηλώνονται σαν public στην υπερκλάση πρέπει υποχρεωτικά να είναι public σε όλες τις δευτερεύουσες κλάσεις. Οι µέθοδοι που δηλώνονται σαν protected στην υπερκλάση µπορεί ναείναι protected ή public στιςυποκλάσεις. Οι µέθοδοι που δεν έχουν τροποποιητή (default) µπορούν να δηλώνονται είτε χωρίς τροποποιητή (default) είτε protected είτε private. Για τις private δεν υπάρχει θέµα γιατί δεν κληρονοµούνται. 2

Προσπέλαση µεταβλητών που έχουν δηλωθεί private Η µεταβλητή που έχει δηλωθεί private δεν είναι ορατή σε άλλες κλάσεις. Κάποιες φορές όµως είναι απαραίτητο κάποια άλλη κλάση ναθέσειήναδιαβάσειτηντιµήµιαςµεταβλητής. Σε αυτές τις περιπτώσεις χρησιµοποιούνται µέθοδοι (που δεν είναι private) οι οποίες δίνουν µε έµµεσο τρόπο την δυνατότητα να δωθεί µια τιµή σε private µεταβλητή ή να διαβαστεί η τιµή της µεταβλητής από κάποια µέθοδο. Στις µεθόδους αυτές συνήθως δίνουµε ονόµατα που ξεκινούν µε set ή get. (Συνηθίζεται αυτό στις γλώσσες αντικειµενοστρεφούς προγραµµατισµού χωρίς να είναι υποχρεωτικό). Παράδειγµα: public class access_method { private int x; public void set_x(int k){ x=k; public int get_x(){ return x; public class access_main { public static void main(string args[]){ access_method item = new access_method(); item.set_x(5); System.out.println("h timh tou x einai "+item.get_x()); Τροποποιητής static Η λέξη κλειδί static χρησιµοποιείται για να δηλώσουµε µεθόδους και µεταβλητές κλάσης. Ο τρόπος προσπέλασης των µεταβλητών κλάσης γίνεται µε το όνοµα της κλάσης ακολουθούµενο από µια τελεία και το όνοµα της µεταβλητής ή της µεθόδου. Μπορεί να χρησιµοποιηθεί και το όνοµα του αντικειµένου ακολουθούµενουαπόµιατελείακαιτοόνοµατηςµεθόδουήτης µεταβλητής αλλά καλό είναι να αποφεύγεται. Αντιθέτως οι µεταβλητές υπόστασης (αντικειµένου) θα πρέπει να χρησιµοποιούνται µε το όνοµα του αντικειµένου και όχι µε το όνοµα της κλάσης. Οι µεταβλητές κλάσης αρχικοποιούνται όταν δηµιουργείται η κλάση. Στο παράδειγµα που ακολουθεί υπάρχει µεταβλητή και µέθοδος static. Η µεταβλητή υπολογίζει το πλήθος των αντικειµένων που δηµιουργούνται. Η µεταβλητή αυτή δεν έχει σχέση µε κάποιο συγκεκριµένο αντικείµενο αλλά µε το πλήθος των αντικειµένων. Για το λόγο αυτό δηλώνεται ως static. 3

public class metrhsh_antikeimenwn { private static int numinstances=0; protected static int getnuminstances(){ return numinstances; private static void addinstance(){ numinstances++; metrhsh_antikeimenwn(){ metrhsh_antikeimenwn.addinstance(); public static void main(string args[]){ System.out.println( Αρχήµε " + metrhsh_antikeimenwn.getnuminstances() +" αντικείµενα"); for (int i=0; i<10; ++i) new metrhsh_antikeimenwn(); System.out.println( Σύνολο: + metrhsh_antikeimenwn.getnuminstances() + αντικείµενα"); Αποτέλεσµα Αρχή µε 0 αντικείµενα Σύνολο: 10 αντικείµενα Τροποποιητής final Χρησιµοποιείταιµεκλάσεις, µεθόδους, µεταβλητές. Κλάσεις: Μία κλάση που δηλώνεται final δεν µπορεί να έχει υποκλάσεις Μέθοδοι: Σε µία µέθοδο final δεν µπορεί να γίνει υπάρβαση από µέθοδο σε δευτερεύουσακλάση. Μία µέθοδος δηλώνεται final µόνο και µόνο για να επιτύχουµε υψηλότερες ταχύτητες. Αυτό επιτυγχάνεται ως εξής: όταν καλείται µία µέθοδος ο µεταγλωττιστής java ελέγχει πρώτα αν υπάρχει η µέθοδος στην τρέχουσα κλάση και στη συνέχεια την αναζητά στην υπερκλάση και συνεχίζει ώσπου να την βρεί. Αν όµως η µέθοδος δηλωθεί final ο µεταγλωττιστής τοποθετεί εκτελέσιµο bytecode στην κλάση που καλεί την µέθοδο και η ταχύτητα του προγράµµατος βελτιώνεται. Χρειάζεται προσοχή η δήλωση µιας µεθόδου ως final γιατίπρέπειναελεχθείαπότηναρχήανθαχρειαστείναγίνει υπέρβαση αυτής στη συνέχεια ή όχι. Οι µέθοδοι private είναι final εξ ορισµού γιατί δεν µπορεί να γίνει υπέρβαση αυτών στη συνέχεια Μεταβλητές: Μία µεταβλητή final δεν µπορεί να αλλάξει τιµή. Με τις µεταβλητές ο τροποποιητής χρησιµοποιείται συνήθως µε τον τροποποιητή static γιατί αν η τιµή δεν αλλάξει ποτέ δεν υπάρχει λόγος κάθε αντικείµενο ναέχειτοδικότουαντίγραφοτιµής. Μία κλάση που δηλώνεται final δεν µπορεί να χρησιµοποιηθεί σε υποκλάσειςαλλάυπάρχουνκαιεδώκάποιαοφέληόπωςστιςµεθόδους. Μερικέςγνωστές final κλάσειςείναιοι String, Math (java.lang.string, java.lang.math). 4

Τροποποιητής abstract Κάθε φορά που δηµιουργείται µία ιεραρχία κλάσεων συλλέγονται οι κοινές συµπεριφορές και ιδιότητες όσο πιο ψηλά γίνεται στην ιεραρχία. Μερικές φορές φτάνοντας στην κορυφή της ιεραρχίας δεν υπάρχει συγκεκριµένη κοινή συµπεριφορά για να κληρονοµηθεί. Σε αυτές τις περιπτώσεις ορίζονται abstract µέθοδοι που είναι ουσιαστικά υπογραφές µεθόδων χωρίς υλοποίηση. Οι µέθοδοι δηλώνονται τότε ως abstract και οι κλάσεις που τις περιέχουν ορίζονται abstract επίσης. Αν µία κλάση έχει µία abstract µέθοδο είναι και αυτή abstract. Οι abstract κλάσεις χρησιµοποιούνται µόνο για να ορίσουν γενικές έννοιες από τις οποίες εκπορεύονται συγκεκριµένες κλάσεις. abstract class Shape { private double x, y; public double get_x() { return x; public double get_y() { return y; public void shmeio(double cor_x, double cor_y ) { this.x = cor_x; this.y = cor_y; public abstract double area(); public String tostring() { return "Shape(x=" + x + ", y=" + y + ", area=" + area() + ")"; 5

class Rectangle extends Shape { private double height, width; public void setdimensions(double h, double w) { height = h; width = w; public double area() { return height * width; public String tostring() { return super.tostring() + ": Rectangle(" + height + " * " + width + ")"; class Circle extends Shape { private double radius; public void setradius(double r) { radius = r; public double area() { return Math.PI * radius * radius; public String tostring() { return super.tostring() + ": Circle(" + radius + ")"; public class Shape_main { static public void main(string args[ ]) { Circle c = new Circle(); Rectangle r = new Rectangle(); Shape s[] = new Shape[2]; s[0] = r; r.shmeio(5, 8); r.setdimensions(50, 50); s[1] = c; c.shmeio(2, 6); c.setradius(10); for (int i = 0; i < s.length; i++) System.out.println(s[i]); 6

Πακέτα Ένας τρόπος οργάνωσης των κλάσεων στη java είναι η χρησιµοποίηση πακέτων. Κάθε πακέτο περιλαµβάνει έναν αριθµό κλάσεων στην java που σχετίζονται µεταξύ τους είτε γιατί ικανοποιούν τους στόχους µιας εφαρµογής, είτε γιατί υλοποιούν κάποιο δέντρο κληρονοµικότητας είτε για οποιαδήποτε άλλο σκοπό αποφασίσει ο προγραµµατιστής να τις οργανώσει στο ίδιο πακέτο. Η οργάνωση των κλάσεων σε πακέτα διευκολύνει την καλύτερη οργάνωση των προγραµµάτων. Μειώνονται τα προβλήµατα µε την χρήση ίδιων ονοµάτων. Προστατεύεται η κατά λάθος πρόσβασησεκλάσεις, µεθόδουςκαιµεταβλητές. Ταπακέταµπορούνεπίσηςναπεριλαµβάνουνάλλαπακέτα. Επιτυγχάνεται έτσι καλύτερη οργάνωση των κλάσεων. Αν δεν δηµιουργήσουµε πακέτο για τις κλάσεις µας αυτές αυτόµατα τοποθετούνται στο default package. Για να εισάγω κλάσεις από ένα πακέτο χρησιµοποιώ την εντολή import. Ακολουθεί το όνοµα του πακέτου και στη συνέχεια το όνοµα της κλάσης. Όταν θέλω να εισάγω όλες τις κλάσεις ενός πακέτου βάζω *. Για παράδειγµα import java.awt.* Από τις κλάσεις του πακέτου εισάγονται µόνο αυτές που ζητούνται στηνκλάσηκαιστιςοποίεςητρέχουσακλάσηµπορείναέχει προσπέλαση δηλαδή να είναι public ιασυνδέσεις Οι διασυνδέσεις παρέχουν πρότυπα συµπεριφοράς που αναµένεται να υλοποιήσουν άλλες κλάσεις όπως ακριβώς συµβαίνει µε τις abstract κλάσεις και µεθόδους. Πολλές φορές χρειάζεται κάποιες κλάσεις να κληρονοµήσουν συµπεριφορές από περισσότερες από µία κλάσεις ενός δέντρου ιεραρχίας. Στις περιπτώσεις αυτές χρησιµοποιείται µία άλλη ιεραρχία πέρα από την ιεραρχία κλάσεων που ονοµάζεται ιεραρχία διασυνδέσεων. Μια διασύνδεση αποτελείται από ορισµούς αφηρηµένων µεθόδων. εν περιέχει µεταβλητές αντικειµένου ούτε υλοποιήσεις µεθόδων. Μια κλάση µπορεί να κληρονοµεί από µία κύρια κλάση και να υλοποιεί µία ή περισσότερες διασυνδέσεις. Αν υλοποιηθεί µια διασύνδεση πρέπει να υλοποιηθούν όλες οι µέθοδοι αυτής και όχι µόνο αυτές που χρειαζόµαστε. Αν µία κλάση υλοποιήσει µία διασύνδεση τότε όλες οι δευτερεύουσες κλάσεις αυτής κληρονοµούν τις µεθόδους της διασύνδεσης και µπορούν να τις υπερβούν, να τις υπερφορτώσουν σαννατιςείχεορίσειηαρχικήκλάση. Αν η υπερκλάση κληρονοµεί µια διασύνδεση δεν χρειάζεται να οριστεί η λέξη κλειδί implements στην δευτερεύουσα κλάση. Έχει αυτόµατα κληρονοµήσει όλες τις µεθόδους της διασύνδεσης. 7

Παράδειγµα Για να δηµιουργήσω µια διασύνδεση χρησιµοποιώ τη λέξη κλειδί interface. Για παράδειγµα interface oxhma { void count_speed(); void timh();. Και έστω πως θέλω η κλάση car να κληρονοµεί από την tetratroxo και να υλοποιεί την παραπάνω διασύνδεση class car extends tetratroxo implements oxhma{ private String kwdikos; int num_pers; Θα µπορούσε η κλάση να υλοποιεί παραπάνω από µία διασύνδεση. Έστω και η διασύνδεση interface machine { int forol+ippoi(); void montelo();. Σεαυτήτηνπερίπτωσηστηδήλωσητηςκλάσηςθαέγραφα class car extends tetratroxo implements oxhma,machine{ private String kwdikos; int num_pers; Μέθοδοι και πολλές διασυνδέσεις Μίακλάσηανκαικληρονοµείαπόµίακαιµόνοκλάσηµπορείνα υλοποιεί παραπάνω από µία διασυνδέσεις όπως φάνηκε από το προηγούµενοπαράδειγµα. Υπάρχει όµως το ενδεχόµενο κάθε φορά που µία κλάση υλοποιεί παραπάνω από µία διασυνδέσεις να βρεθεί µέθοδος µε το ίδιο όνοµα και στις δύο διασυνδέσεις. Στις περιπτώσεις αυτές αν οι µέθοδοι έχουν ίδιες παραµέτρους και επιστρεφόµενο τύπο υλοποιείται η µέθοδος και ικανοποιεί και τις δύο διασυνδέσεις. Αν οι µέθοδοι έχουν διαφορετική λίστα παραµέτρων και επιστρέφουν τον ίδιο τύπο υλοποιούνται και οι δύο µέθοδοι και όπως συµβαίνει στην υπερφόρτωση µεθόδων είναι γνωστό ποιά µέθοδος αντιστοιχεί σε κάθε διασύνδεση. Αν οι µέθοδοι δεν έχουν τον ίδιο επιστρεφόµενο τύπο τότε πρέπει να ελεχθεί η σχεδίαση των διασυνδέσεων γιατί υπάρχει πρόβληµα. Γενικότερα απαιτείται προσεχτικός σχεδιασµός των κλάσεων και των διασυνδέσεων και προσοχή στην ονοµατολογία προκειµένου να αποφευχθεί η άσκοπη χρήση του ίδιου ονόµατος µεθόδου σε περισσότερες από µία διασυνδέσεις. 8

Πηγές και Προτεινόµενη Βιβλιογραφία ιαδικτυακόςπρογραµµατισµός: JAVA εκδότης Σταµούλης, Η βίβλος της Java 2 εκδότης Μ. Γκιούρδας, Πλήρες εγχειρίδιο της Java 6 εκδότης Μ. Γκιούρδας, Thinking in Java published by Prentice-Hall. 9