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



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

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

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

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

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

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

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

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

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

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

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

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγικές έννοιες. Ιωάννης Γ. Τσούλος 2014

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

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

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

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

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

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

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

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

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

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

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

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

Διάλεξη 08: ΛίστεςΙΙ Κυκλικές Λίστες. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

ΕΠΛ131 Αρχές Προγραμματισμού

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

Ευφυείς Τεχνολογίες ----Πράκτορες

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

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

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

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

Διάλεξη 20: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΕΞΑΙΡΕΣΕΙΣ ΚΑΙ Ο ΧΕΙΡΙΣΜΟΣ ΤΟΥΣ

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Έλεγχος ισότητας String Interning Αποαναφοροποίηση - dereferencing

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

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

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

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

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

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

Δοκιμή και Αποσφαλμάτωση Testing and Debugging

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

Διάγραμμα Κλάσεων. Class Diagram

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

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

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

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

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

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

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

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

Η κατασκευή αντικειμένων της κλάσης Student μπορεί να πραγματοποιηθεί είτε στη main είτε σε οποιαδήποτε μέθοδο κλάσης:

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

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

Γενικά (για τις γραπτές εξετάσεις)

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

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

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

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

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

Σχηματίζοντας Γραφικές Παραστάσεις για Ημίτονο και Συνημίτονο και Ελέγχοντας Περιορισμούς σε Συστάδες Καρτών Τόμπολας

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

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

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

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

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

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

Transcript:

Διάλεξη 6: Αφαιρετικότητα, Βιβλιοθήκες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Αφαιρετικότητα -Βιβλιοθήκες (packages) Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 1

Αφαιρετικότητα (abstraction) Η αφαιρετικότητα είναι επιλεκτική άγνοια! Επιλογή του τι είναι σημαντικό και τι όχι Έμφαση και Εξάρτηση στα σημαντικά Αγνόηση και Απεξάρτηση από τα ΜΗ σημαντικά Χρήση της ενθυλάκωσης (encapsulation) για να επιτύχουμε την αφαιρετικότητα EdsgerDijkstra: The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 2

Αφαιρετικότητα (abstraction)(συν.) Αφαιρετικότητα (Abstraction) Κάθε αντικείμενο έχει συγκεκριμένο ρόλο και ευθύνες. Παράδειγμα: Ο Γιάννης και ο Άθως είναι μόνο ανθοπώληδες, ο Ανδρέας είναι μόνο αποστολέας. Αυτό φυσικά εναπόκειται στις καλές σχεδιαστικές ικανότητες του προγραμματιστή public class Anthopolis{ private createbouquet(int noofflowers, Color c){ public class Apostoleas{ private sendbouquet(flowers f, Address a){ ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 3

Παράδειγμα Αφαιρετικότητας 1 Κάθε ζώο βρίσκεται σε μία τοποθεσία (location) Κάθε ζώο έχει κάποια ενεργειακά αποθέματα Κάθε ζώο είναι πεινασμένο ή όχι Κάθε ζώο μπορεί να φάει κάποιο φαγητό Κάθε ζώο μπορεί να κινηθεί σε κάποια άλλη τοποθεσία Κάθε ζώο ανήκει στην κατηγορία των ζωντανών πλασμάτων Κληρονομικότητα (διαφορετικά επίπεδα αφαιρετικότητας) public class Animal { private Location loc; private double energyreserves; public boolean ishungry() { return energyreserves < 2.5; public void eat(food f) { // Consume food energyreserves += f.getcalories(); public void moveto(location l) { // Move to new location loc = l; public class Animal extends Living ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 4

Παράδειγμα Αφαιρετικότητας 2 Κινητά τηλέφωνα Παρατηρήσεις Πολλά HTC τηλέφωνα 1 iphone Μοντέλα για Ψυχαγωγία Μοντέλα Δουλειά Μοντέλα για Κοινωνικότητα Touch ή με keypad Διαφορετικά χρώματα, βάρος και πολλά άλλα HTC One X HTC Desire C HTC CHA CHA HTC One S HTC Desire X HTC Desire C HTC Incredible S HTC Sensation XE Όλα είναι κινητά τηλέφωνα iphone HTC Sensation XL ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 5

Παράδειγμα Αφαιρετικότητας 2 (συν.) Όλα είναι κινητά τηλέφωνα Οικογένεια Κινητών Τηλεφώνων ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 6

Παράδειγμα Αφαιρετικότητας 2(συν.) Χρειαζόμαστε όμως καλύτερη κατηγοριοποίηση Ας τα κατηγοριοποιήσουμε ανάλογα με τον κατασκευαστή τους Οικογένεια Κινητών Τηλεφώνων HTC Apple ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 7

Παράδειγμα Αφαιρετικότητας 2(συν.) Θα μπορούσαμε όμως να τα κατηγοριοποιήσουμε και σύμφωνα με τη χρήση τους π.χ., εργασία, ψυχαγωγία, κοινωνικότητα. Οικογένεια Κινητών Τηλεφώνων HTC Apple Entertainment Business Fashion ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 8

Παράδειγμα Αφαιρετικότητας 2(συν.) Θα μπορούσαμε όμως να τα κατηγοριοποιήσουμε και σύμφωνα με το αν είναι touch ή type. Οικογένεια Κινητών Τηλεφώνων HTC Apple Entertainment Business Fashion Type Touch ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 9

Βιβλιοθήκες/Πακέτα (packages) (Συνήθως) Ομαδοποιούμε τις κλάσεις σύμφωνα με τα αντικείμενα που αναπαριστούν και τις λειτουργίες τους. Ένα πακέτο (βιβλιοθήκη) JAVA απαρτίζεται από μια ομάδα κλάσεων, οι οποίες ανήκουν στον ίδιο χώρο ονομάτων (namespace). Για τη δημιουργία μιας βιβλιοθήκης Java, πρέπει να χρησιμοποιήσουμε την λέξη-κλειδί packageμαζί με το όνομα της βιβλιοθήκης, στην αρχή κάθε αρχείου, το οποίο θέλουμε να εντάξουμε στην βιβλιοθήκη. Έτσι, δηλώνοντας : package mypackage F στην αρχή κάποιων αρχείων Java, ορίζουμε ότι τα αρχεία αυτά ανήκουν στην ίδια βιβλιοθήκη, η οποία έχει το όνομα mypackage. Η δημιουργία μιας βιβλιοθήκης Java(«πακέτου») δεν προϋποθέτει ούτε συνεπάγεται την τοποθέτηση αρχείων-κλάσεων σε κάποιο ενιαίο αρχείο. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 10

Βιβλιοθήκες/Πακέτα (packages) (συν.) Παράδειγμα: package test.animals; package test.animals; public class Tiger { public String name; public Tiger(){ public Tiger(String name){ this.name = name; public String getname(){ return name; package test.animals; public class Lion { public String name; public Lion(){ public Lion(String name){ this.name = name; public String getname(){ return name; public String isking(){ return I am the king ; ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 11

Βιβλιοθήκες/Πακέτα (packages)(συν.) Η Javaμας δίνει τη δυνατότητα να επαναχρησιμοποιήσουμε τις κλάσεις μιας βιβλιοθήκης JAVA, με χρήση της εντολής importστον κώδικα των αρχείων στα οποία θέλουμε να κάνουμε χρήση των κλάσεων της βιβλιοθήκης. Τρόπος 1 (χρήση import): import test.animals.lion; Lion l = new Lion(); Τρόπος 2(χωρίς τη χρήση import): test.animals.lion l = new test.animals.lion(); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 12

Βιβλιοθήκες/Πακέτα (packages)(συν.) Παράδειγμα: import test.animals.lion; import test.animals.tiger; // OR import test.animals.*; public class TestAnimals{ public static void main(string args[]){ Lion l1 = new Lion("lion"); // OR test.animals.lion l1 = new test.animals.lion("lion"); Tiger t1 = new Tiger("tiger"); // OR test.animals.tiger t1 = new test.animals.tiger( tiger"); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 13

Βιβλιοθήκες/Πακέτα (packages)(συν.) Ο λόγος της εισαγωγής βιβλιοθηκών στην JAVA, μέσα στον πηγαίο κώδικα, οφείλεται στην ανάγκη διαχείρισης της ονοματολογίας (namespaces) για την αποφυγή συγκρούσεων (name clashes). Π.χ. τι θα συμβεί αν ορίσουμε κάποια άλλη κλάση Lionκαι η ίδια κλάση βρίσκεται ήδη στην μηχανή μας ή φορτώνεται αυτόματα από το δίκτυο καθώς τρέχει μία εφαρμογή μας; Για την πρόληψη των προβλημάτων αυτών η JAVA μας δίνει (μέσω των βιβλιοθηκών) πλήρη έλεγχο στην ονοματολογία και τη δυνατότητα να δημιουργούμε απολύτως μοναδικά ονόματα, ασχέτως των περιορισμών του Διαδικτύου. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 14

Οργάνωση Πακέτων Τα αρχεία των κλάσεων (classfiles) που έχουν δηλωθεί ότι ανήκουν στην ίδια βιβλιοθήκη, πρέπει να τοποθετούνται σε κοινό υποκατάλογο (sub-directory), με όνομα το οποίο συνάγεται από το όνομα της βιβλιοθήκης. Παράδειγμα: package test.animals <root>/test/animals Η διαρρύθμιση αυτή μας επιτρέπει: Να επιλύσουμε το πρόβλημα της ονοματολογίας, χρησιμοποιώντας την ιεραρχική δομή των καταλόγων τού συστήματος αρχείων για να δώσουμε μοναδικά ονόματα σε βιβλιοθήκες -το όνομα της βιβλιοθήκης αντιστοιχεί στην θέση της στο σύστημα αρχείων. Να εντοπίζουμε με ευκολία τις κλάσεις μιας βιβλιοθήκης. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 15

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

Ονοματολογία στην Java Ας υποθέσουμε ότι θέλετε να δημιουργήσετε και να τοποθετήσετε κάποιες κλάσεις στο Διαδίκτυο, οπότε θέλετε να τους δώσετε και μοναδική ονομασία. Τότε, μπορείτε να ονομάσετε τις κλάσεις με βάση το δικό σας Πεδίο Διαδικτύου (internetdomain), το οποίο θεωρείται μοναδικό. Π.χ.: package mypackage.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. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 17

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

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

Παράδειγμα: Σύγκρουση Ονομάτων Παράδειγμα: name clash Ερώτηση: Ποια κλάση Lion θα χρησιμοποιηθεί; <root> TestAnimals.java Lion.java 1 test import test.animals.lion; public class TestAnimals{ animals public static void main(string args[]){ Lion l1 = new Lion("lion"); 2 Lion.java Tiger.java ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 20

Προκαθορισμένη Βιβλιοθήκη Αρχεία κλάσεων τα οποία: Είναι τοποθετημένα στον ίδιο υποκατάλογο Δεν περιέχουν δήλωση package Θεωρούνται ότι ανήκουν στην ίδια βιβλιοθήκη, το λεγόμενο default package Παράδειγμα: <root> TestAnimals.java Lion.java ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 21

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