User Tools

Site Tools


java:packages:intro

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
java:packages:intro [2017/02/10 11:16] – [Πακέτα στη γλώσσα προγραμματισμού Java] gthanosjava:packages:intro [2022/02/24 13:59] (current) – external edit 127.0.0.1
Line 4: Line 4:
  
 Προκειμένου να είναι ευκολότερη η ομαδοποίηση και η αναζήτηση κλάσεων που έχουν κοινά χαρακτηριστικά προτείνεται από τη Java η ομαδοποίηση τους σε πακέτα. Φανταστείτε ένα εικονικό "πακέτο" ή "κουτί" που περιέχει κλάσεις. Προκειμένου να είναι ευκολότερη η ομαδοποίηση και η αναζήτηση κλάσεων που έχουν κοινά χαρακτηριστικά προτείνεται από τη Java η ομαδοποίηση τους σε πακέτα. Φανταστείτε ένα εικονικό "πακέτο" ή "κουτί" που περιέχει κλάσεις.
- 
-Επιπλέον, τα πακέτα χρησιμοποιούνται ώστε να αποφεύγονται συγκρούσεις ονοματοδοσίας σε κλάσεις που έχουν το ίδιο όνομα, αλλά ανήκουν σε διαφορετικά πακέτα. Αν δύο κλάσεις έχουν το ίδιο όνομα, υπάρχει το πρόβλημα της διάκρισης μεταξύ τους, όταν χρησιμοποιούνται στο ίδιο πρόγραμμα. Η απάντηση στο πρόβλημα αυτό είναι ότι κλάσεις με το ίδιο όνομα μπορεί να βρίσκονται σε διαφορετικά πακέτα. Όταν μία κλάση ανήκει σε ένα πακέτο το πλήρες όνομα της κλάσης προκύπτει από την συνένωση του ονόματος του πακέτου με το όνομα της κλάσης. Το πακέτο δηλαδή λειτουργεί ως χώρος ονομάτων (//namespace//). 
- 
-Για παράδειγμα, η κλάση [[http://docs.oracle.com/javase/7/docs/api/java/io/File.html|File]] βρίσκεται στο πακέτο **java.io**. Το πλήρες όνομα της κλάσης είναι [[http://docs.oracle.com/javase/7/docs/api/java/io/File.html|java.io.File]]. Σε περίπτωση που θέλετε να φτιάξετε την δική σας κλάση File, το μόνο που έχετε να κάνετε είναι να την βάλετε σε ένα δικό σας πακέτο (π.χ. **my_package.my_subpackage.File**). 
- 
-<WRAP important center round 60%>  
-O compiler της Java απαγορεύει την ύπαρξη δύο κλάσεων που έχουν το ίδιο όνομα και ανήκουν στο ίδιο πακέτο. 
-</WRAP> 
  
 Ας υποθέσουμε ότι έχουμε μία σειρά κλάσεων που περιγράφουν διάφορα είδη ποδηλάτου. Ας υποθέσουμε ότι έχουμε μία σειρά κλάσεων που περιγράφουν διάφορα είδη ποδηλάτου.
  
-<code java> +  * Bicycle 
-//file Bicycle.java +  MountainBike 
-public class Bicycle { +  BicycleForTwo 
-   .... +  MotorBike
-+
- +
-//file MountainBike.java +
-public class MountainBike extends Bicycle { +
-   .... +
-+
- +
-//file BicycleForTwo.java +
-public class BicycleForTwo extends Bicycle { +
-   .... +
-+
- +
-//file MotorBike.java +
-public class MotorBike extends Bicycle { +
-   .... +
-+
-</code> +
- +
-<WRAP info 80% center round> Έχουμε αναφέρει ότι κάθε κλάση ανήκει σε ξεχωριστό αρχείο .java. Η παραπάνω γραφή γίνεται για λόγους οικονομίας χώρου και δεν ανταποκρίνεται στις προδιαγραφές που θέτει ο compiler της Java. Το ίδιο ισχύει και για τον κώδικα παρακάτω. +
-</WRAP>+
  
 Καθώς όλες οι παραπάνω κλάσεις αφορούν τύπους ποδηλάτου θα μπορούσαν να ομαδοποιηθούν σε ένα πακέτο (package). Συνιστάται η ομαδοποίηση κλάσεων σε πακέτα για τους εξής λόγους: Καθώς όλες οι παραπάνω κλάσεις αφορούν τύπους ποδηλάτου θα μπορούσαν να ομαδοποιηθούν σε ένα πακέτο (package). Συνιστάται η ομαδοποίηση κλάσεων σε πακέτα για τους εξής λόγους:
-  Κλάσεις με συγγενές αντικείμενο ομαδοποιούνται σε ένα πακέτο, ώστε οι προγραμματιστές να αναγνωρίζουν ότι οι κλάσεις αυτές αφορούν συγκεκριμένες λειτουργίες του λογισμικού. +  Κλάσεις με συγγενές αντικείμενο ομαδοποιούνται σε ένα πακέτο, ώστε οι προγραμματιστές να αναγνωρίζουν ότι οι κλάσεις αυτές αφορούν συγκεκριμένες λειτουργίες του λογισμικού. 
-  - Αποφεύγεται μία πιθανή "σύγκρουση" (conflict) στην ονοματοδοσία των κλάσεων, όπως εξηγήσαμε παραπάνω. +  Όπως θα δούμε στη συνέχεια, για οποιαδήποτε κλάση ανήκει σε συγκεκριμένο πακέτο μπορούμε με χρήση κατάλληλων προσδιοριστών πρόσβασης να επιτρέψουμε διαφορετικά επίπεδα πρόσβασης στα πεδία και τις μεθόδους της κλάσης αυτής.
-  - Όπως θα δούμε στη συνέχεια, για οποιαδήποτε κλάση ανήκει σε συγκεκριμένο πακέτο μπορούμε με χρήση κατάλληλων προσδιοριστών πρόσβασης να επιτρέψουμε διαφορετικά επίπεδα πρόσβασης στα πεδία και τις μεθόδους της κλάσης αυτής από τις κλάσεις που ανήκουν στο ίδιο πακέτο σε σχέση με την πρόσβαση που έχουν κλάσεις εκτός του πακέτου αυτού.+
  
-====== Δημιουργία πακέτου ======+==== Δημιουργία πακέτου ====
  
-Για το παραπάνω απόσπασμα κώδικα η δημιουργία ενός πακέτου που να περιέχει όλες τις παραπάνω κλάσεις θα μπορούσε να δοθεί ως εξής.+Για το παραπάνω απόσπασμα κώδικα η δημιουργία ενός πακέτου που να περιέχει όλες τις παραπάνω κλάσεις θα μπορούσε να τοποθετώντας τη λέξη package ακολουθούμενη από το όνομα του πακέτου στην πρώτη γραμμή του αρχείου .java κάθε κλάσης που ανήκει στο πακέτο αυτό. Για το παραπάνω παράδειγμα μπορούμε να έχουμε τα εξής:
  
-<code java+<code java Bicycle.java>
-//file Bicycle.java+
 package bicycles; package bicycles;
 public class Bicycle { public class Bicycle {
    ....    ....
 } }
 +</code>
  
-//file MountainBike.java+<code java MountainBike.java>
 package bicycles; package bicycles;
-public class MountainBike extends Bicycle {+public class MountainBike {
    ....    ....
 } }
 +</code>
  
-//file BicycleForTwo.java+<code java BicycleForTwo.java>
 package bicycles; package bicycles;
-public class BicycleForTwo extends Bicycle {+public class BicycleForTwo {
    ....    ....
 } }
 +</code>
  
-//file MotorBike.java+<code java MotorBike.java>
 package bicycles; package bicycles;
-public class MotorBike extends Bicycle {+public class MotorBike {
    ....    ....
 } }
 </code> </code>
  
-Εάν δεν δημιουργήσετε ένα πακέτο για μία κλάση αυτή θα τοποθετηθεί στο ανώνυμο //default// πακέτο. Κατά κανόνα, ο μη ορισμός πακέτων μπορεί να λειτουργήσει μόνο σε μικρής έκτασης προγράμματα. Μεγαλύτερα προγράμματα συνιστάται να είναι χωρισμένα σε πακέτα.  +Κατά σύμβαση στη Java, όλα τα αρχεία **.java** των κλάσεων που ανήκουν στο πακέτο ''bicycles'' θα πρέπει να περιέχονται μέσα σε ένα κατάλογο με το όνομα ''bicycles''. Αυτό μας οδηγεί σε μία ιεραρχία καταλόγων αι αρχείων όπως παρακάτω:
- +
-Κατά σύμβαση στη Java, όλα τα αρχεία **.java** των κλάσεων που ανήκουν στο πακέτο ''bicycles'' θα πρέπει να περιέχονται μέσα σε ένα κατάλογο με το όνομα ''bicycles''όπως παρακάτω:+
  
 <code> <code>
Line 87: Line 58:
 </code> </code>
  
-Η δήλωση δηλαδή ενός ή περισσότερων πακέτων προϋποθέτει την ύπαρξη μία ιεραρχίας καταλόγων για τα αρχεία **.java** που περιέχονται στα πακέτα αυτά.+<WRAP tip 80% center round> 
 +Εάν δεν δημιουργήσετε ένα πακέτο για μία κλάση αυτή θα τοποθετηθεί στο ανώνυμο //default// πακέτο. Κατά κανόνα, ο μη ορισμός πακέτων μπορεί να λειτουργήσει μόνο σε μικρής έκτασης προγράμματα. Μεγαλύτερα προγράμματα συνιστάται να είναι χωρισμένα σε πακέτα. 
 +</WRAP> 
 + 
 +==== Συγκρούσεις ονομάτων ==== 
 + 
 +Επιπρόσθετα, τα πακέτα χρησιμοποιούνται για να αποφεύγονται συγκρούσεις ονοματοδοσίας σε κλάσεις που έχουν το ίδιο όνομα. Στην περίπτωση που δύο κλάσεις έχουν το ίδιο όνομα, υπάρχει το πρόβλημα της διάκρισης μεταξύ τους, όταν χρησιμοποιούνται στο ίδιο πρόγραμμα. Η απάντηση στο πρόβλημα αυτό είναι ότι κλάσεις με το ίδιο όνομα μπορεί να βρίσκονται σε διαφορετικά πακέτα. Όταν μία κλάση ανήκει σε ένα πακέτο το πλήρες όνομα της κλάσης προκύπτει από την συνένωση του ονόματος του πακέτου με το όνομα της κλάσης. Το πακέτο δηλαδήαντιπροσωπεύει το πρώτο συνθετικό του πλήρους ονόματος της κλάσης. 
 + 
 +Για παράδειγμα, η κλάση [[http://docs.oracle.com/javase/7/docs/api/java/io/File.html|File]] βρίσκεται στο πακέτο **java.io**. Το πλήρες όνομα της κλάσης είναι [[http://docs.oracle.com/javase/7/docs/api/java/io/File.html|java.io.File]]. Σε περίπτωση που θέλετε να φτιάξετε την δική σας κλάση File, το μόνο που έχετε να κάνετε είναι να τη βάλετε σε ένα νέο πακέτο της επιλογής σας. 
 + 
 +<WRAP important center round 80%>  
 +O compiler της Java απαγορεύει τη χρήση στο ίδιο πρόγραμμα δύο κλάσεων που έχουν το ίδιο όνομα και ανήκουν στο ίδιο πακέτο. 
 +</WRAP>
  
 |Προηγούμενο: [[:java:toString | Η μέθοδος toString ]] |[[:toc | Περιεχόμενα ]] | Επόμενο: [[ :java:packages:naming | Ονοματοδοσία πακέτων ]]| |Προηγούμενο: [[:java:toString | Η μέθοδος toString ]] |[[:toc | Περιεχόμενα ]] | Επόμενο: [[ :java:packages:naming | Ονοματοδοσία πακέτων ]]|
java/packages/intro.1486725414.txt.gz · Last modified: 2017/02/10 11:16 by gthanos