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



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

! Προσδιοριστές πρόσβασης και απόκρυψη πληροφορίας. ! Προγραμματιστικές Συμβάσεις. ! Σε περίπτωση που δεν χρησιμοποιείται προσδιοριστής

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 8: Πακέτα (Packages)

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

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

Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, :00-10:00 π.μ.

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

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

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

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

ΕΠΛ233 ΠΛΗΡΟΦΟΡΙΑ ΤΥΠΟΥ. Type Information. Μ. Δικαιάκος

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

9:00-10:00 π.μ. (60 λεπτά) Παρασκευή, 14 Οκτωβρίου, 2016

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

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

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

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

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

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

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

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

Εισαγωγή στον Προγραμματισμό με C++

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

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

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

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

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

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

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


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

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

Βρίγκας Μιχαήλ Α.Μ.744 Μπράχος Χ. Ευάγγελος Α.Μ.795

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

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

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

Η γλώσσα προγραμματισμού C

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

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

CSD Univ. of Crete Φθινόπωρο Άσκηση 1 Εκφώνηση

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων Tοπικές μεταβλητές To αντικείμενο this Accessor, Mutator μέθοδοι

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

Εισαγωγή ΕΙΣΑΓΩΓΗ. Γεώργιος Παπαϊωάννου ( )

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

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

Κλάσεις και αντικείμενα #include <iostream.h<

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

Ανάλυση Πληροφοριακών Συστημάτων. Εαρινό Εξάμηνο Lec08 09/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

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

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

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

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

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

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

ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

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

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

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

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

Λογισµικό (Software SW) Γλώσσες

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

Transcript:

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

2 «Μονάδα Μετάφρασης»

2 «Μονάδα Μετάφρασης» Όταν δημιουργείται ένα αρχείο πηγαίου κώδικα στην Java, το αρχείο καλείται µονάδα µετάφρασης (compilation unit) και πρέπει να έχει όνομα που να τελειώνει σε «.java».

2 «Μονάδα Μετάφρασης» Όταν δημιουργείται ένα αρχείο πηγαίου κώδικα στην Java, το αρχείο καλείται µονάδα µετάφρασης (compilation unit) και πρέπει να έχει όνομα που να τελειώνει σε «.java». Μέσα στη μονάδα μετάφρασης μπορεί να ορίζεται το πολύ μια δημόσια κλάση (public class), η οποία πρέπει να έχει το ίδιο ακριβώς όνομα με το όνομα του αρχείου (με αποκοπή του επιθέματος.java).

2 «Μονάδα Μετάφρασης» Όταν δημιουργείται ένα αρχείο πηγαίου κώδικα στην Java, το αρχείο καλείται µονάδα µετάφρασης (compilation unit) και πρέπει να έχει όνομα που να τελειώνει σε «.java». Μέσα στη μονάδα μετάφρασης μπορεί να ορίζεται το πολύ μια δημόσια κλάση (public class), η οποία πρέπει να έχει το ίδιο ακριβώς όνομα με το όνομα του αρχείου (με αποκοπή του επιθέματος.java). Οι υπόλοιπες κλάσεις που ορίζονται στο αρχείο παραμένουν «κρυμμένες» από τον «έξω κόσμο», αφού δεν είναι δηµόσιες και ρόλος τους είναι να υποστηρίξουν την δημόσια κλάση.

2 «Μονάδα Μετάφρασης» Όταν δημιουργείται ένα αρχείο πηγαίου κώδικα στην Java, το αρχείο καλείται µονάδα µετάφρασης (compilation unit) και πρέπει να έχει όνομα που να τελειώνει σε «.java». Μέσα στη μονάδα μετάφρασης μπορεί να ορίζεται το πολύ μια δημόσια κλάση (public class), η οποία πρέπει να έχει το ίδιο ακριβώς όνομα με το όνομα του αρχείου (με αποκοπή του επιθέματος.java). Οι υπόλοιπες κλάσεις που ορίζονται στο αρχείο παραμένουν «κρυμμένες» από τον «έξω κόσμο», αφού δεν είναι δηµόσιες και ρόλος τους είναι να υποστηρίξουν την δημόσια κλάση. Μετά την μετάφραση της μονάδας μετάφρασης, ο μεταφραστής επιστρέφει από ένα αρχείο με επίθεμα.class για κάθε κλάση που ορίζεται μέσα στην μονάδα μετάφρασης.

2 «Μονάδα Μετάφρασης» Όταν δημιουργείται ένα αρχείο πηγαίου κώδικα στην Java, το αρχείο καλείται µονάδα µετάφρασης (compilation unit) και πρέπει να έχει όνομα που να τελειώνει σε «.java». Μέσα στη μονάδα μετάφρασης μπορεί να ορίζεται το πολύ μια δημόσια κλάση (public class), η οποία πρέπει να έχει το ίδιο ακριβώς όνομα με το όνομα του αρχείου (με αποκοπή του επιθέματος.java). Οι υπόλοιπες κλάσεις που ορίζονται στο αρχείο παραμένουν «κρυμμένες» από τον «έξω κόσμο», αφού δεν είναι δηµόσιες και ρόλος τους είναι να υποστηρίξουν την δημόσια κλάση. Μετά την μετάφραση της μονάδας μετάφρασης, ο μεταφραστής επιστρέφει από ένα αρχείο με επίθεμα.class για κάθε κλάση που ορίζεται μέσα στην μονάδα μετάφρασης. Τα ονόματα αυτών των αρχείων είναι τα ίδια με τα ονόματα των αντιστοίχων κλάσεων.

3 Δήλωση Βιβλιοθηκών JAVA με την package

3 Δήλωση Βιβλιοθηκών JAVA με την package Ένα πακέτο (βιβλιοθήκη) JAVA απαρτίζεται από μια ομάδα κλάσεων, οι οποίες εντάσσονται στον ίδιο χώρο ονοµάτων (namespace).

3 Δήλωση Βιβλιοθηκών JAVA με την package Ένα πακέτο (βιβλιοθήκη) JAVA απαρτίζεται από μια ομάδα κλάσεων, οι οποίες εντάσσονται στον ίδιο χώρο ονοµάτων (namespace). Για τη δημιουργία μιας βιβλιοθήκης Java, πρέπει να χρησιμοποιήσουμε την λέξη-κλειδί package μαζί με το όνομα της βιβλιοθήκης, στην αρχή κάθε αρχείου, το οποίο θέλουμε να εντάξουμε στην βιβλιοθήκη.

3 Δήλωση Βιβλιοθηκών JAVA με την package Ένα πακέτο (βιβλιοθήκη) JAVA απαρτίζεται από μια ομάδα κλάσεων, οι οποίες εντάσσονται στον ίδιο χώρο ονοµάτων (namespace). Για τη δημιουργία μιας βιβλιοθήκης Java, πρέπει να χρησιμοποιήσουμε την λέξη-κλειδί package μαζί με το όνομα της βιβλιοθήκης, στην αρχή κάθε αρχείου, το οποίο θέλουμε να εντάξουμε στην βιβλιοθήκη. Έτσι, δηλώνοντας :

3 Δήλωση Βιβλιοθηκών JAVA με την package Ένα πακέτο (βιβλιοθήκη) JAVA απαρτίζεται από μια ομάδα κλάσεων, οι οποίες εντάσσονται στον ίδιο χώρο ονοµάτων (namespace). Για τη δημιουργία μιας βιβλιοθήκης Java, πρέπει να χρησιμοποιήσουμε την λέξη-κλειδί package μαζί με το όνομα της βιβλιοθήκης, στην αρχή κάθε αρχείου, το οποίο θέλουμε να εντάξουμε στην βιβλιοθήκη. Έτσι, δηλώνοντας : package mypackage

3 Δήλωση Βιβλιοθηκών JAVA με την package Ένα πακέτο (βιβλιοθήκη) JAVA απαρτίζεται από μια ομάδα κλάσεων, οι οποίες εντάσσονται στον ίδιο χώρο ονοµάτων (namespace). Για τη δημιουργία μιας βιβλιοθήκης Java, πρέπει να χρησιμοποιήσουμε την λέξη-κλειδί package μαζί με το όνομα της βιβλιοθήκης, στην αρχή κάθε αρχείου, το οποίο θέλουμε να εντάξουμε στην βιβλιοθήκη. Έτσι, δηλώνοντας : package mypackage στην αρχή κάποιων αρχείων Java, ορίζουμε ότι τα αρχεία αυτά εντάσσονται στην ίδια βιβλιοθήκη, η οποία έχει το όνομα mypackage.

Δήλωση Βιβλιοθηκών JAVA με την package Ένα πακέτο (βιβλιοθήκη) JAVA απαρτίζεται από μια ομάδα κλάσεων, οι οποίες εντάσσονται στον ίδιο χώρο ονοµάτων (namespace). Για τη δημιουργία μιας βιβλιοθήκης Java, πρέπει να χρησιμοποιήσουμε την λέξη-κλειδί package μαζί με το όνομα της βιβλιοθήκης, στην αρχή κάθε αρχείου, το οποίο θέλουμε να εντάξουμε στην βιβλιοθήκη. Έτσι, δηλώνοντας : package mypackage στην αρχή κάποιων αρχείων Java, ορίζουμε ότι τα αρχεία αυτά εντάσσονται στην ίδια βιβλιοθήκη, η οποία έχει το όνομα mypackage. Η δημιουργία μιας βιβλιοθήκης Java («πακέτου») δεν προϋποθέτει ούτε συνεπάγεται την τοποθέτηση αρχείων-κλάσεων μέσα στο ίδιο αρχείο. Μ. Δικαιάκος 3

4 package: η μονάδα βιβλιοθήκης στην JAVA

4 package: η μονάδα βιβλιοθήκης στην JAVA Ο λόγος της εισαγωγής βιβλιοθηκών στην JAVA, μέσα στον πηγαίο κώδικα, οφείλεται στην ανάγκη διαχείρισης της ονοµατολογίας (name spaces) για την αποφυγή συγκρούσεων (name clashes).

4 package: η μονάδα βιβλιοθήκης στην JAVA Ο λόγος της εισαγωγής βιβλιοθηκών στην JAVA, μέσα στον πηγαίο κώδικα, οφείλεται στην ανάγκη διαχείρισης της ονοµατολογίας (name spaces) για την αποφυγή συγκρούσεων (name clashes). Π.χ. τι θα συμβεί αν ορίσουμε κάποια κλάση stack και η ίδια κλάση βρίσκεται ήδη στην μηχανή μας ή φορτώνεται αυτόματα από το δίκτυο καθώς τρέχει μία εφαρμογή μας;

4 package: η μονάδα βιβλιοθήκης στην JAVA Ο λόγος της εισαγωγής βιβλιοθηκών στην JAVA, μέσα στον πηγαίο κώδικα, οφείλεται στην ανάγκη διαχείρισης της ονοµατολογίας (name spaces) για την αποφυγή συγκρούσεων (name clashes). Π.χ. τι θα συμβεί αν ορίσουμε κάποια κλάση stack και η ίδια κλάση βρίσκεται ήδη στην μηχανή μας ή φορτώνεται αυτόματα από το δίκτυο καθώς τρέχει μία εφαρμογή μας; Για την πρόληψη των προβλημάτων αυτών η JAVA μας δίνει (μέσω των βιβλιοθηκών) πλήρη έλεγχο στην ονοματολογία και τη δυνατότητα να δημιουργούμε απολύτως μοναδικά ονόματα, ασχέτως των περιορισμών του Διαδικτύου.

5 Αξιοποίηση βιβλιοθηκών

Αξιοποίηση βιβλιοθηκών Η Java μας δίνει τη δυνατότητα να επαναχρησιμοποιήσουμε τις κλάσεις μιας βιβλιοθήκης JAVA, με χρήση της εντολής import στον κώδικα των αρχείων στα οποία θέλουμε να κάνουμε χρήση των κλάσεων της βιβλιοθήκης. Μ. Δικαιάκος 5

5 Αξιοποίηση βιβλιοθηκών Η Java μας δίνει τη δυνατότητα να επαναχρησιμοποιήσουμε τις κλάσεις μιας βιβλιοθήκης JAVA, με χρήση της εντολής import στον κώδικα των αρχείων στα οποία θέλουμε να κάνουμε χρήση των κλάσεων της βιβλιοθήκης. Αν υποθέσουμε ότι στο mypackage έχουμε συμπεριλάβει τις δημόσιες κλάσεις : foo, pub, publ2, τότε μπορούμε να τις χρησιμοποιήσουμε από κάποιο άλλο πρόγραμμα είτε με: επίκληση του mypackage.foo... κοκ χρήση του import mypackage; και απευθείας χρήση του foo(), publ () κλπ.

6 Οργάνωση κλάσεων βιβλιοθήκης JAVA

Οργάνωση κλάσεων βιβλιοθήκης JAVA Τα αρχεία των κλάσεων (class files) που έχουν δηλωθεί ότι ανήκουν στην ίδια βιβλιοθήκη, πρέπει να τοποθετούνται σε κοινό υποκατάλογο (subdirectory), με όνομα το οποίο συνάγεται από το όνομα της βιβλιοθήκης. Μ. Δικαιάκος 6

6 Οργάνωση κλάσεων βιβλιοθήκης JAVA Τα αρχεία των κλάσεων (class files) που έχουν δηλωθεί ότι ανήκουν στην ίδια βιβλιοθήκη, πρέπει να τοποθετούνται σε κοινό υποκατάλογο (subdirectory), με όνομα το οποίο συνάγεται από το όνομα της βιβλιοθήκης. Η διαρύθμιση αυτή μας επιτρέπει:

6 Οργάνωση κλάσεων βιβλιοθήκης JAVA Τα αρχεία των κλάσεων (class files) που έχουν δηλωθεί ότι ανήκουν στην ίδια βιβλιοθήκη, πρέπει να τοποθετούνται σε κοινό υποκατάλογο (subdirectory), με όνομα το οποίο συνάγεται από το όνομα της βιβλιοθήκης. Η διαρύθμιση αυτή μας επιτρέπει: Να επιλύσουμε το πρόβλημα της ονοματολογίας, χρησιμοποιώντας την ιεραρχική δομή των καταλόγων τού συστήματος αρχείων για να δώσουμε μοναδικά ονόματα σε βιβλιοθήκες - το όνομα της βιβλιοθήκης αντιστοιχεί στην θέση της στο σύστημα αρχείων.

6 Οργάνωση κλάσεων βιβλιοθήκης JAVA Τα αρχεία των κλάσεων (class files) που έχουν δηλωθεί ότι ανήκουν στην ίδια βιβλιοθήκη, πρέπει να τοποθετούνται σε κοινό υποκατάλογο (subdirectory), με όνομα το οποίο συνάγεται από το όνομα της βιβλιοθήκης. Η διαρύθμιση αυτή μας επιτρέπει: Να επιλύσουμε το πρόβλημα της ονοματολογίας, χρησιμοποιώντας την ιεραρχική δομή των καταλόγων τού συστήματος αρχείων για να δώσουμε μοναδικά ονόματα σε βιβλιοθήκες - το όνομα της βιβλιοθήκης αντιστοιχεί στην θέση της στο σύστημα αρχείων. Να εντοπίζουμε με ευκολία τις κλάσεις μιας βιβλιοθήκης.

Παράδειγμα Μ. Δικαιάκος package mypackage; public class MyClass { public void test() { System.out.println( test pack ); } } Ο κώδικας αυτός πρέπει να σωθεί σε αρχείο MyClass.java. Αφού μεταφραστεί το αρχείο, το αντίστοιχο αρχείο κλάσης πρέπει να αποθηκευθεί σε κάποιον υποκατάλογο με όνομα mypackage. Ο μεταφραστής (κι αργότερα ο διερμηνέας ) θα ψάξουν μέσα στον κατάλογο mypackage για να βρούν την MyClass.class. 7

Παράδειγμα Μ. Δικαιάκος Κατά συνθήκη, το όνοµα µιας βιβλιοθήκης γράφεται µε µικρά γράµµατα package mypackage; public class MyClass { public void test() { System.out.println( test pack ); } } Ο κώδικας αυτός πρέπει να σωθεί σε αρχείο MyClass.java. Αφού μεταφραστεί το αρχείο, το αντίστοιχο αρχείο κλάσης πρέπει να αποθηκευθεί σε κάποιον υποκατάλογο με όνομα mypackage. Ο μεταφραστής (κι αργότερα ο διερμηνέας ) θα ψάξουν μέσα στον κατάλογο mypackage για να βρούν την MyClass.class. 7

8 Παράδειγμα (συνέχεια) import mypackage.myclass; class PackageTestApp { public static void main(string args[]) { MyClass theclass = new MyClass(); theclass.test(); } } Τα αρχεία που θα δημιουργηθούν από τον μεταφραστή της Java, στο παράδειγμά μας, πρέπει να τα τοποθετήσουμε ως εξής : classes PackageTestApp.java PackageTestApp.class mypackage MyClass.java MyClass.class

9 Εντοπισμός κλάσεων βιβλιοθηκών

9 Εντοπισμός κλάσεων βιβλιοθηκών Ο διερμηνέας εντοπίζει τις κλάσεις μιάς βιβλιοθήκης ως εξής:

9 Εντοπισμός κλάσεων βιβλιοθηκών Ο διερμηνέας εντοπίζει τις κλάσεις μιάς βιβλιοθήκης ως εξής: Πρώτα εντοπίζει και διαβάζει την μεταβλητή περιβάλλοντος CLASSPATH, η οποία περιέχει μια σειρά από καταλόγους της μηχανής, από τους οποίους μπορεί να ξεκινήσει η αναζήτηση των κλάσεων.

9 Εντοπισμός κλάσεων βιβλιοθηκών Ο διερμηνέας εντοπίζει τις κλάσεις μιάς βιβλιοθήκης ως εξής: Πρώτα εντοπίζει και διαβάζει την μεταβλητή περιβάλλοντος CLASSPATH, η οποία περιέχει μια σειρά από καταλόγους της μηχανής, από τους οποίους μπορεί να ξεκινήσει η αναζήτηση των κλάσεων. Στη συνέχεια «επιλύει» το όνομα μιας βιβλιοθήκης η οποία έχει εισαχθεί στον κώδικα, σε όνομα καταλόγου του συστήματος αρχείων. Π.χ.: το package foo.bar.baz επιλύεται σε foo/bar/baz

9 Εντοπισμός κλάσεων βιβλιοθηκών Ο διερμηνέας εντοπίζει τις κλάσεις μιάς βιβλιοθήκης ως εξής: Πρώτα εντοπίζει και διαβάζει την μεταβλητή περιβάλλοντος CLASSPATH, η οποία περιέχει μια σειρά από καταλόγους της μηχανής, από τους οποίους μπορεί να ξεκινήσει η αναζήτηση των κλάσεων. Στη συνέχεια «επιλύει» το όνομα μιας βιβλιοθήκης η οποία έχει εισαχθεί στον κώδικα, σε όνομα καταλόγου του συστήματος αρχείων. Π.χ.: το package foo.bar.baz επιλύεται σε foo/bar/baz Το όνομα του καταλόγου αυτού επικολλάται στα περιεχόμενα του CLASSPATH, δημιουργώντας έτσι την ακριβή διεύθυνση στο σύστημα αρχείων απʼ όπου μπορούν να αναζητηθούν οι κλάσεις της βιβλιοθήκης.

9 Εντοπισμός κλάσεων βιβλιοθηκών Ο διερμηνέας εντοπίζει τις κλάσεις μιάς βιβλιοθήκης ως εξής: Πρώτα εντοπίζει και διαβάζει την μεταβλητή περιβάλλοντος CLASSPATH, η οποία περιέχει μια σειρά από καταλόγους της μηχανής, από τους οποίους μπορεί να ξεκινήσει η αναζήτηση των κλάσεων. Στη συνέχεια «επιλύει» το όνομα μιας βιβλιοθήκης η οποία έχει εισαχθεί στον κώδικα, σε όνομα καταλόγου του συστήματος αρχείων. Π.χ.: το package foo.bar.baz επιλύεται σε foo/bar/baz Το όνομα του καταλόγου αυτού επικολλάται στα περιεχόμενα του CLASSPATH, δημιουργώντας έτσι την ακριβή διεύθυνση στο σύστημα αρχείων απʼ όπου μπορούν να αναζητηθούν οι κλάσεις της βιβλιοθήκης. Σημειώστε ότι στο CLASSPATH πρέπει να έχετε τοποθετήσει και τον κατάλογο «.».

10 Ονοματολογία στην Java

10 Ονοματολογία στην Java Ας υποθέσουμε ότι θέλετε να δημιουργήσετε και να τοποθετήσετε κάποιες κλάσεις στο Διαδίκτυο, οπότε θέλετε να τους δώσετε και μοναδική ονομασία.

10 Ονοματολογία στην Java Ας υποθέσουμε ότι θέλετε να δημιουργήσετε και να τοποθετήσετε κάποιες κλάσεις στο Διαδίκτυο, οπότε θέλετε να τους δώσετε και μοναδική ονομασία. Τότε, μπορείτε να ονομάσετε τις κλάσεις με βάση το δικό σας Πεδίο Διαδικτύου (internet domain), το οποίο θεωρείται μοναδικό. Π.χ.:

10 Ονοματολογία στην Java Ας υποθέσουμε ότι θέλετε να δημιουργήσετε και να τοποθετήσετε κάποιες κλάσεις στο Διαδίκτυο, οπότε θέλετε να τους δώσετε και μοναδική ονομασία. Τότε, μπορείτε να ονομάσετε τις κλάσεις με βάση το δικό σας Πεδίο Διαδικτύου (internet domain), το οποίο θεωρείται μοναδικό. Π.χ.: package com.bruceeckel.util;

10 Ονοματολογία στην Java Ας υποθέσουμε ότι θέλετε να δημιουργήσετε και να τοποθετήσετε κάποιες κλάσεις στο Διαδίκτυο, οπότε θέλετε να τους δώσετε και μοναδική ονομασία. Τότε, μπορείτε να ονομάσετε τις κλάσεις με βάση το δικό σας Πεδίο Διαδικτύου (internet domain), το οποίο θεωρείται μοναδικό. Π.χ.: package com.bruceeckel.util; package cy.ac.ucy.cs.epl233.util;

10 Ονοματολογία στην Java Ας υποθέσουμε ότι θέλετε να δημιουργήσετε και να τοποθετήσετε κάποιες κλάσεις στο Διαδίκτυο, οπότε θέλετε να τους δώσετε και μοναδική ονομασία. Τότε, μπορείτε να ονομάσετε τις κλάσεις με βάση το δικό σας Πεδίο Διαδικτύου (internet domain), το οποίο θεωρείται μοναδικό. Π.χ.: package com.bruceeckel.util; package cy.ac.ucy.cs.epl233.util; Αν υποθέσουμε ότι στο CLASSPATH υπάρχει μόνο ο τρέχων κατάλογος (. ) και αναζητούμε τη βιβλιοθήκη cy.ac.ucy.cs.epl233.util, o διερμηνέας θα αναζητήσει το αρχείο :

10 Ονοματολογία στην Java Ας υποθέσουμε ότι θέλετε να δημιουργήσετε και να τοποθετήσετε κάποιες κλάσεις στο Διαδίκτυο, οπότε θέλετε να τους δώσετε και μοναδική ονομασία. Τότε, μπορείτε να ονομάσετε τις κλάσεις με βάση το δικό σας Πεδίο Διαδικτύου (internet domain), το οποίο θεωρείται μοναδικό. Π.χ.: package com.bruceeckel.util; package cy.ac.ucy.cs.epl233.util; Αν υποθέσουμε ότι στο CLASSPATH υπάρχει μόνο ο τρέχων κατάλογος (. ) και αναζητούμε τη βιβλιοθήκη cy.ac.ucy.cs.epl233.util, o διερμηνέας θα αναζητήσει το αρχείο :./cy/ac/ucy/cs/epl233/util

10 Ονοματολογία στην Java Ας υποθέσουμε ότι θέλετε να δημιουργήσετε και να τοποθετήσετε κάποιες κλάσεις στο Διαδίκτυο, οπότε θέλετε να τους δώσετε και μοναδική ονομασία. Τότε, μπορείτε να ονομάσετε τις κλάσεις με βάση το δικό σας Πεδίο Διαδικτύου (internet domain), το οποίο θεωρείται μοναδικό. Π.χ.: package com.bruceeckel.util; package cy.ac.ucy.cs.epl233.util; Αν υποθέσουμε ότι στο CLASSPATH υπάρχει μόνο ο τρέχων κατάλογος (. ) και αναζητούμε τη βιβλιοθήκη cy.ac.ucy.cs.epl233.util, o διερμηνέας θα αναζητήσει το αρχείο :./cy/ac/ucy/cs/epl233/util σε σύστημα UNIX και:

10 Ονοματολογία στην Java Ας υποθέσουμε ότι θέλετε να δημιουργήσετε και να τοποθετήσετε κάποιες κλάσεις στο Διαδίκτυο, οπότε θέλετε να τους δώσετε και μοναδική ονομασία. Τότε, μπορείτε να ονομάσετε τις κλάσεις με βάση το δικό σας Πεδίο Διαδικτύου (internet domain), το οποίο θεωρείται μοναδικό. Π.χ.: package com.bruceeckel.util; package cy.ac.ucy.cs.epl233.util; Αν υποθέσουμε ότι στο CLASSPATH υπάρχει μόνο ο τρέχων κατάλογος (. ) και αναζητούμε τη βιβλιοθήκη cy.ac.ucy.cs.epl233.util, o διερμηνέας θα αναζητήσει το αρχείο :./cy/ac/ucy/cs/epl233/util σε σύστημα UNIX και:.\cy\ac\ucy\cs\epl233\util

10 Ονοματολογία στην Java Ας υποθέσουμε ότι θέλετε να δημιουργήσετε και να τοποθετήσετε κάποιες κλάσεις στο Διαδίκτυο, οπότε θέλετε να τους δώσετε και μοναδική ονομασία. Τότε, μπορείτε να ονομάσετε τις κλάσεις με βάση το δικό σας Πεδίο Διαδικτύου (internet domain), το οποίο θεωρείται μοναδικό. Π.χ.: package com.bruceeckel.util; package cy.ac.ucy.cs.epl233.util; Αν υποθέσουμε ότι στο CLASSPATH υπάρχει μόνο ο τρέχων κατάλογος (. ) και αναζητούμε τη βιβλιοθήκη cy.ac.ucy.cs.epl233.util, o διερμηνέας θα αναζητήσει το αρχείο :./cy/ac/ucy/cs/epl233/util σε σύστημα UNIX και:.\cy\ac\ucy\cs\epl233\util σε σύστημα DOS-Windows.

11 Μετάφραση και Βιβλιοθήκες Στην περίπτωση δημιουργίας ενός αντικειμένου με βάση κάποια εισαγόμενη κλάση, ο μεταφραστής θα αναζητήσει την κλάση σε αρχείο με το ίδιο όνομα, χρησιμοποιώντας το όνομα της κλάσης. Αν βρεθεί το αρχείο, η κλάση θα φορτωθεί από τον μεταφραστή. Στην περίπτωση όμως όπου υπάρχει αντίστοιχο αρχείο.java νεώτερης «έκδοσης», το αρχείο αυτό θα μεταφραστεί αυτόματα και θα φορτωθεί η καινούρια έκδοση τού.class αρχείου.

12 Συγκρούσεις

12 Συγκρούσεις Ας υποθέσουμε ότι σε κάποιο πρόγραμμα Java εισάγονται δύο βιβλιοθήκες, οι οποίες περιλαμβάνουν κλάσεις με τα ίδια ονόματα. Π.χ.: import com.bruceeckel.util.*; import java.util.*;

12 Συγκρούσεις Ας υποθέσουμε ότι σε κάποιο πρόγραμμα Java εισάγονται δύο βιβλιοθήκες, οι οποίες περιλαμβάνουν κλάσεις με τα ίδια ονόματα. Π.χ.: import com.bruceeckel.util.*; import java.util.*; όπου και οι δύο βιβλιοθήκες ορίζουν την κλάση Vector.

12 Συγκρούσεις Ας υποθέσουμε ότι σε κάποιο πρόγραμμα Java εισάγονται δύο βιβλιοθήκες, οι οποίες περιλαμβάνουν κλάσεις με τα ίδια ονόματα. Π.χ.: import com.bruceeckel.util.*; import java.util.*; όπου και οι δύο βιβλιοθήκες ορίζουν την κλάση Vector. Δεν υπάρχει πρόβλημα στο βαθμό που δεν χρησιμοποιούμε την Vector. Διαφορετικά ο μεταφραστής βγάζει σχετικό μήνυμα λάθους, διότι δεν έχει τρόπο να γνωρίζει για ποιά κλάση πρόκειται.

Συγκρούσεις Μ. Δικαιάκος Ας υποθέσουμε ότι σε κάποιο πρόγραμμα Java εισάγονται δύο βιβλιοθήκες, οι οποίες περιλαμβάνουν κλάσεις με τα ίδια ονόματα. Π.χ.: import com.bruceeckel.util.*; import java.util.*; όπου και οι δύο βιβλιοθήκες ορίζουν την κλάση Vector. Δεν υπάρχει πρόβλημα στο βαθμό που δεν χρησιμοποιούμε την Vector. Διαφορετικά ο μεταφραστής βγάζει σχετικό μήνυμα λάθους, διότι δεν έχει τρόπο να γνωρίζει για ποιά κλάση πρόκειται. Αν ωστόσο η κλάση Vector ορίζεται μέσα στο αρχείο μας ή στον κατάλογο όπου αποθηκεύεται το αρχείο μας, τότε ο μεταφραστής υποθέτει ότι οι δύο κλάσεις βρίσκονται στην default βιβλιοθήκη και άρα δεν υπάρχει πρόβλημα σύγκρουσης (θα χρησιμοποιηθεί η τοπική Vector). 12

13 Προκαθορισμένη Βιβλιοθήκη (default package) Αρχεία κλάσεων τα οποία: Είναι τοποθετημένα στον ίδιο υποκατάλογο Δεν περιέχουν δήλωση package Θεωρούνται ότι ανήκουν στην ίδια βιβλιοθήκη, το λεγόμενο default package.

14 Παγίδες με το CLASSPATH

Παγίδες με το CLASSPATH Είναι καλό να αποφεύγουμε να προσθέτουμε πολλούς καταλόγους στο CLASSPATH, ώστε να έχουμε καλύτερο έλεγχο των κλάσεων που χρησιμοποιούμε. Μ. Δικαιάκος 14

14 Παγίδες με το CLASSPATH Είναι καλό να αποφεύγουμε να προσθέτουμε πολλούς καταλόγους στο CLASSPATH, ώστε να έχουμε καλύτερο έλεγχο των κλάσεων που χρησιμοποιούμε. Η εισαγωγή μιας βιβλιοθήκης σε κάποιο αρχείο Java μέσω της import, σηματοδοτεί ότι κάποια κλάση µπορεί να βρεθεί μέσα στην βιβλιοθήκη.

14 Παγίδες με το CLASSPATH Είναι καλό να αποφεύγουμε να προσθέτουμε πολλούς καταλόγους στο CLASSPATH, ώστε να έχουμε καλύτερο έλεγχο των κλάσεων που χρησιμοποιούμε. Η εισαγωγή μιας βιβλιοθήκης σε κάποιο αρχείο Java μέσω της import, σηματοδοτεί ότι κάποια κλάση µπορεί να βρεθεί μέσα στην βιβλιοθήκη. Ωστόσο, ο μεταφραστής ελέγχει ολόκληρο το CLASSPATH κι έτσι υπάρχει η πιθανότητα να βρει την αναζητούμενη κλάση κάπου αλλού.

14 Παγίδες με το CLASSPATH Είναι καλό να αποφεύγουμε να προσθέτουμε πολλούς καταλόγους στο CLASSPATH, ώστε να έχουμε καλύτερο έλεγχο των κλάσεων που χρησιμοποιούμε. Η εισαγωγή μιας βιβλιοθήκης σε κάποιο αρχείο Java μέσω της import, σηματοδοτεί ότι κάποια κλάση µπορεί να βρεθεί μέσα στην βιβλιοθήκη. Ωστόσο, ο μεταφραστής ελέγχει ολόκληρο το CLASSPATH κι έτσι υπάρχει η πιθανότητα να βρει την αναζητούμενη κλάση κάπου αλλού. Αν η «λανθασμένη» κλάση βρεθεί πρώτη, τότε ο μεταφραστής σταματάει την αναζήτηση και χρησιμοποιεί την λανθασμένη κλάση.

Static import (Java5) Μ. Δικαιάκος Παράδειγμα πρόσβασης σε στατικά μέλη μιας κλασης: double r = Math.cos(Math.PI * theta); Με τη χρήση στατικής εισαγωγής μπορούμε να κάνουμε χρήση των στατικών πεδίων μιας κλάσης, χωρίς να χρησιμοποιούμε το όνομα της κλάσης στην οποία ανήκουν: import static java.lang.math.pi; import static java.lang.math.*; double r = cos(pi * theta); Η δήλωση στατικής εισαγωγής εισαγει τα στατικά μέλη μιας κλάσης (ή κλάσεων) στο πρόγραμμά μας. 15

16 ΠΡΟΣΔΙΟΡΙΣΤΕΣ ΠΡΟΣΒΑΣΗΣ Access Specifiers

17 Προσδιοριστές Πρόσβασης Βασική αρχή: Μια κλάση ελέγχει την πρόσβαση που μπορούν να αποκτήσουν άλλες κλάσεις στα μέλη της. Οι προσδιοριστές πρόσβασης public, protected και private της Java χρησιμοποιούνται μπροστά από τον ορισμό κάθε µέλους μιας κλάσης (είτε μεθόδου είτε δεδομένου) και καθορίζουν τις δυνατές προσβάσεις προς αυτό.

18 Πρόσβαση βιβλιοθήκης Σε περίπτωση που δεν χρησιμοποιείται προσδιοριστής πρόσβασης, έχουμε τον προκαθορισμένο (default) προσδιοριστής πρόσβασης, ο οποίος αναφέρεται σαν «φιλικός» (friendly): Ο φιλικός προσδιοριστής καθορίζει ότι όλες οι κλάσεις σε ένα πακέτο (βιβλιοθήκη) έχουν πρόσβαση στα «φιλικά» μέλη, τα οποία εμφανίζονται ως «ιδιωτικά» σε όλες τις κλάσεις έξω από την βιβλιοθήκη. Αφού μια μονάδα μετάφρασης (αρχείο) μπορεί να ανήκει σε μια μόνο βιβλιοθήκη, όλες οι κλάσεις μέσα σε αυτή θεωρούνται αυτομάτως φιλικές η μια προς την άλλη.

Παροχή Πρόσβασης Μ. Δικαιάκος Για να αποκτηθεί πρόσβαση προς τα μέλη μιας κλάσης, από άλλες κλάσεις, υπάρχουν οι εξής εναλλακτικές δυνατότητες: Να καταστεί το μέλος της κλάσης που μας ενδιαφέρει δηµόσιο. Όλοι μπορούν να έχουν πρόσβαση σε αυτό. Να γίνει το μέλος της κλάσης που μας ενδιαφέρει φιλικό, οριζόμενο χωρίς κανέναν προσδιοριστή και οι υπόλοιπες κλάσεις να τοποθετηθούν στην ίδια βιβλιοθήκη. Στην περίπτωση κληρονομικότητας, με χρήση του προσδιοριστή protected. Με δήλωση μεθόδων πρόσβασης/τροποποίησης (accessor/mutator), οι οποίες διαβάζουν και γράφουν κάποιες τιμές-μέλη της κλάσης που μας αφορά. 19

20 Η χρήση του public package c05.dessert; public class Cookie { public Cookie() { System.out.println("Cookie constructor"); } void bite() { System.out.println("bite"); } } import c05.dessert.*; public class Dinner { public Dinner() { System.out.println("Dinner constructor"); } public static void main(string[] args) { Cookie x = new Cookie(); //! x.bite(); // Can't access } }

To προκαθορισμένο (default) πακέτο class Cake { public static void main(string[] args) { Pie x = new Pie(); x.f(); }} Cake.java file class Pie { Pie.java file void f() { System.out.println("Pie.f()");}} Μ. Δικαιάκος Η κλάση Cake μπορεί να χρησιμοποιήσει τη μέθοδο f() της Pie, εφόσον η Cake και η Pie βρίσκονται στον ίδιο κατάλογο, δεν ανήκουν ρητά σε κάποια βιβλιοθήκη και άρα ο μεταφραστής θεωρεί ότι ανήκουν στο προκαθορισμένο «πακέτο». 21

22 Ιδιωτικά μέλη Ο προσδιοριστής πρόσβασης private υποδηλοί ότι κανείς δεν έχει πρόσβαση στο «ιδιωτικό» μέλος μιας κλάσης, εκτός από τις μεθόδους που είναι εσωτερικές σε αυτή την κλάση. Άλλες κλάσεις της ίδιας βιβλιοθήκης επίσης δεν έχουν πρόσβαση σε ιδιωτικά μέλη της κλάσης. Π.χ.: class Sundae { private Sundae() {} static Sundae makeasundae() { return new Sundae(); }} public class IceCream { public static void main(string[] args) { Sundae y = new Sundae(); Sundae x = Sundae.makeASundae(); } }

23 Διαπροσωπεία και Υλοποίηση

23 Διαπροσωπεία και Υλοποίηση Ο έλεγχος πρόσβασης αποτελεί τον μηχανισμό της JAVA για επίτευξη της απόκρυψης πληροφορίας (information hiding) ή απόκρυψης της υλοποίησης.

23 Διαπροσωπεία και Υλοποίηση Ο έλεγχος πρόσβασης αποτελεί τον μηχανισμό της JAVA για επίτευξη της απόκρυψης πληροφορίας (information hiding) ή απόκρυψης της υλοποίησης. Η ενσωμάτωση δεδομένων και μεθόδων σε συνδυασμό με την απόκρυψη υλοποίησης αποκαλείται συχνά ενθυλάκωση (encapsulation) και μας επιτρέπει να ορίζουμε νέους τύπους δεδομένων με χαρακτηριστικά και συμπεριφορές.

23 Διαπροσωπεία και Υλοποίηση Ο έλεγχος πρόσβασης αποτελεί τον μηχανισμό της JAVA για επίτευξη της απόκρυψης πληροφορίας (information hiding) ή απόκρυψης της υλοποίησης. Η ενσωμάτωση δεδομένων και μεθόδων σε συνδυασμό με την απόκρυψη υλοποίησης αποκαλείται συχνά ενθυλάκωση (encapsulation) και μας επιτρέπει να ορίζουμε νέους τύπους δεδομένων με χαρακτηριστικά και συμπεριφορές. Ο έλεγχος πρόσβασης περιορίζει την πρόσβαση σε έναν τύπο δεδομένων, για δύο λόγους:

23 Διαπροσωπεία και Υλοποίηση Ο έλεγχος πρόσβασης αποτελεί τον μηχανισμό της JAVA για επίτευξη της απόκρυψης πληροφορίας (information hiding) ή απόκρυψης της υλοποίησης. Η ενσωμάτωση δεδομένων και μεθόδων σε συνδυασμό με την απόκρυψη υλοποίησης αποκαλείται συχνά ενθυλάκωση (encapsulation) και μας επιτρέπει να ορίζουμε νέους τύπους δεδομένων με χαρακτηριστικά και συμπεριφορές. Ο έλεγχος πρόσβασης περιορίζει την πρόσβαση σε έναν τύπο δεδομένων, για δύο λόγους: Για να προσδιορίσει τι μπορούν και τι δεν μπορούν να χρησιμοποιήσουν «τρίτοι» προγραμματιστές (client programmers): ο προγραμματιστής μιας κλάσης μπορεί να υλοποιήσει εσωτερικούς μηχανισμούς χωρίς να φοβάται ότι κάποιος τρίτος προγραμματιστής θα τους χρησιμοποιήσει κατά τρόπο μη ενδεδειγμένο.

23 Διαπροσωπεία και Υλοποίηση Ο έλεγχος πρόσβασης αποτελεί τον μηχανισμό της JAVA για επίτευξη της απόκρυψης πληροφορίας (information hiding) ή απόκρυψης της υλοποίησης. Η ενσωμάτωση δεδομένων και μεθόδων σε συνδυασμό με την απόκρυψη υλοποίησης αποκαλείται συχνά ενθυλάκωση (encapsulation) και μας επιτρέπει να ορίζουμε νέους τύπους δεδομένων με χαρακτηριστικά και συμπεριφορές. Ο έλεγχος πρόσβασης περιορίζει την πρόσβαση σε έναν τύπο δεδομένων, για δύο λόγους: Για να προσδιορίσει τι μπορούν και τι δεν μπορούν να χρησιμοποιήσουν «τρίτοι» προγραμματιστές (client programmers): ο προγραμματιστής μιας κλάσης μπορεί να υλοποιήσει εσωτερικούς μηχανισμούς χωρίς να φοβάται ότι κάποιος τρίτος προγραμματιστής θα τους χρησιμοποιήσει κατά τρόπο μη ενδεδειγμένο. Για να διαχωρίσει τη διαπροσωπεία από την υλοποίηση. Εφόσον η πρόσβαση τρίτων προγραμματιστών περιορίζεται στα δημόσια μέλη της κλάσης (τη διαπροσωπεία της), ο προγραμματιστής της κλάσης μπορεί να αλλάξει ελεύθερα ο,τιδήποτε δεν είναι δημόσιο χωρίς να επηρεάζει τον κώδικα των τρίτων προγραμματιστών.

24 Πρόσβαση κλάσης (class access)

Πρόσβαση κλάσης (class access) Οι προσδιοριστές πρόσβασης μπορούν να χρησιμοποιηθούν και για τον καθορισμό των κλάσεων μιας βιβλιοθήκης που είναι προσβάσιμες είτε μέσα από την ίδια βιβλιοθήκη είτε από άλλες βιβλιοθήκες. Μ. Δικαιάκος 24

24 Πρόσβαση κλάσης (class access) Οι προσδιοριστές πρόσβασης μπορούν να χρησιμοποιηθούν και για τον καθορισμό των κλάσεων μιας βιβλιοθήκης που είναι προσβάσιμες είτε μέσα από την ίδια βιβλιοθήκη είτε από άλλες βιβλιοθήκες. Μια κλάση μπορεί να προσδιορισθεί µόνο σαν φιλική ή σαν δημόσια.

24 Πρόσβαση κλάσης (class access) Οι προσδιοριστές πρόσβασης μπορούν να χρησιμοποιηθούν και για τον καθορισμό των κλάσεων μιας βιβλιοθήκης που είναι προσβάσιμες είτε μέσα από την ίδια βιβλιοθήκη είτε από άλλες βιβλιοθήκες. Μια κλάση μπορεί να προσδιορισθεί µόνο σαν φιλική ή σαν δημόσια. Κανονικές (μη εσωτερικές) κλάσεις δεν μπορούν να συνδυαστούν με προσδιοριστές πρόσβασης private ή protected.

25 Περιορισμοί στο Class Access

Περιορισμοί στο Class Access Το πολύ μια public κλάση σε μια μονάδα μετάφρασης (αρχείο Java). Μ. Δικαιάκος 25

25 Περιορισμοί στο Class Access Το πολύ μια public κλάση σε μια μονάδα μετάφρασης (αρχείο Java). Το όνομα της public κλάσης πρέπει να είναι το ίδο με το όνομα του αρχείου που την περιλαμβάνει.

25 Περιορισμοί στο Class Access Το πολύ μια public κλάση σε μια μονάδα μετάφρασης (αρχείο Java). Το όνομα της public κλάσης πρέπει να είναι το ίδο με το όνομα του αρχείου που την περιλαμβάνει. Είναι αποδεκτό (αλλά όχι συνηθισμένο)να έχουμε μια μονάδα μετάφρασης χωρίς δημόσια κλάση στο εσωτερικό της. Στην περίπτωση αυτή, το όνομα του αρχείου μπορεί να είναι οποιοδήποτε (καλό είναι, όμως, να μην χρησιμοποιούμε άσχετα ονόματα).

26 Καλές προγραμματιστικές πρακτικές

26 Καλές προγραμματιστικές πρακτικές Όταν κατασκευάζετε μια κλάση είναι σκόπιμο να δηλώσετε τα πεδία δεδομένων της σαν ιδιωτικά, για να τα προστατεύσετε από ανεπιθύμητες αλλαγές από άλλες κλάσεις.

26 Καλές προγραμματιστικές πρακτικές Όταν κατασκευάζετε μια κλάση είναι σκόπιμο να δηλώσετε τα πεδία δεδομένων της σαν ιδιωτικά, για να τα προστατεύσετε από ανεπιθύμητες αλλαγές από άλλες κλάσεις. Αυτό ισχύει ακόμα κι αν η κλάση σας είναι προσβάσιμη από τη βιβλιοθήκη της μόνο (όχι δημόσια).

26 Καλές προγραμματιστικές πρακτικές Όταν κατασκευάζετε μια κλάση είναι σκόπιμο να δηλώσετε τα πεδία δεδομένων της σαν ιδιωτικά, για να τα προστατεύσετε από ανεπιθύμητες αλλαγές από άλλες κλάσεις. Αυτό ισχύει ακόμα κι αν η κλάση σας είναι προσβάσιμη από τη βιβλιοθήκη της μόνο (όχι δημόσια). Επίσης, είναι συνήθως λογικό να δώσετε στις μεθόδους της κλάσης την ίδια προσβασιμότητα με την κλάση, δηλαδή είτε δημόσια είτε φιλική.

Καλές προγραμματιστικές πρακτικές Μ. Δικαιάκος Όταν κατασκευάζετε μια κλάση είναι σκόπιμο να δηλώσετε τα πεδία δεδομένων της σαν ιδιωτικά, για να τα προστατεύσετε από ανεπιθύμητες αλλαγές από άλλες κλάσεις. Αυτό ισχύει ακόμα κι αν η κλάση σας είναι προσβάσιμη από τη βιβλιοθήκη της μόνο (όχι δημόσια). Επίσης, είναι συνήθως λογικό να δώσετε στις μεθόδους της κλάσης την ίδια προσβασιμότητα με την κλάση, δηλαδή είτε δημόσια είτε φιλική. Αν θέλετε να αποκλείσετε τη χρήση μιας κλάσης από οποιονδήποτε τρίτο προγραμματιστή, μπορείτε να καταστήσετε όλους τους κατασκευαστές της private. Έτσι, κανείς δεν μπορεί να δημιουργήσει αντικείμενα της κλάσης, εκτός από εσάς (μέσα από ένα στατικό μέλος της κλάσης). 26

27 Παράδειγμα class Soup1 { private Soup1() {} public static Soup1 makesoup() { return new Soup(); } } class Soup2 {// singleton private Soup2() { } private static Soup2 ps1 = new Soup2(); public static Soup2 access() { return ps1; } public void f() {} }

28 Παράδειγμα (συνέχεια) public class Lunch { void test1() { // Soup priv1 = new Soup(); } void test2() { Soup1 soup = Soup1.makeSoup(); Soup2.access().f(); } }