java:packages:intro

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
java:packages:intro [2015/02/15 21:12]
gthanos [Δημιουργία ενός πακέτου]
java:packages:intro [2016/02/27 07:51] (current)
gthanos [Δημιουργία ενός πακέτου]
Line 1: Line 1:
 ====== ​ Πακέτα στη γλώσσα προγραμματισμού Java ====== ====== ​ Πακέτα στη γλώσσα προγραμματισμού Java ======
  
-Σε αυτό το κεφάλαιο θα δούμε πως μπορούμε ​αν ομαδοποιήσουμε κλάσεις σε **πακέτα** (**packages**). Τα πακέτα μπορούν να περιέχουν τόσο κλάσεις όσο και διεπαφές (interfaces). Επειδή προς το παρόν δεν έχουμε μιλήσει για διεπαφές θεωρήστε ότι τα πακέτα σας διαθέτουν μόνο κλάσεις.+Σε αυτό το κεφάλαιο θα δούμε πως μπορούμε να ομαδοποιήσουμε κλάσεις σε **πακέτα** (**packages**). Τα πακέτα μπορούν να περιέχουν τόσο κλάσεις όσο και διεπαφές (interfaces). Επειδή προς το παρόν δεν έχουμε μιλήσει για διεπαφές θεωρήστε ότι τα πακέτα σας διαθέτουν μόνο ​κλάσεις. Για τις διεπαφές ισχύει ότι ισχύει και για τις ​κλάσεις.
  
-Προκειμένου να είναι ευκολότερη η αναζήτηση και η ομαδοποίηση κλάσεων που έχουν κοινά χαρακτηριστικά προκρίνεται από τη Java η ομάδοποίηση τους σε πακέτα που περιέχουν κλάσεις. Φανταστείτε ένα εικονικό "​πακέτο"​ ή "​κουτί"​ που περιέχει κλάσεις.+Προκειμένου να είναι ευκολότερη η ομαδοποίηση και η αναζήτηση κλάσεων που έχουν κοινά χαρακτηριστικά προτείνεται από τη Java η ομαδοποίηση τους σε πακέτα που περιέχουν κλάσεις. Φανταστείτε ένα εικονικό "​πακέτο"​ ή "​κουτί"​ που περιέχει κλάσεις.
  
-Επιπλέον,​ τα πακέτα χρησιμοποιούνται ώστε να αποφεύγονται προβλήματα ονοματοδοσίας σε κλάσεις που έχουν το ίδιο όνομα, αλλά ανήκουν σε διαφορετικά πακέτα. Αν δύο κλάσεις διαφορετικών πακέτων έχουν το ίδιο όνομα, υπάρχει το πρόβλημα της διάκρισης μεταξύ τους. Η απάντηση στο πρόβλημα αυτό είναι ότι ​αν κάθε ​κλάση βρίσκεται σε διαφορετικό πακέτο, τότε μπορούμε ​να χρησιμοποιήσουμε την κλάση που επιθυμούμε βάζοντας ως πρόθεμα στο όνομα της το όνομα του πακέτου.+Επιπλέον,​ τα πακέτα χρησιμοποιούνται ώστε να αποφεύγονται προβλήματα ονοματοδοσίας σε κλάσεις που έχουν το ίδιο όνομα, αλλά ανήκουν σε διαφορετικά πακέτα. Αν δύο κλάσεις διαφορετικών πακέτων έχουν το ίδιο όνομα, υπάρχει το πρόβλημα της διάκρισης μεταξύ τους. Η απάντηση στο πρόβλημα αυτό είναι ότι ​δύο ​κλάσεις με το ίδιο όνομα μπορεί να βρίσκονται σε δύο ​διαφορετικά πακέτα. Όταν μία κλάση ανήκει σε ένα ​πακέτο το πλήρες όνομα της κλάσης προκύπτει από την συνένωση του ονόματος ​του πακέτου ​με το όνομα της κλάσης
  
-<WRAP center ​info round 60%> ​+Για παράδειγμα,​ η κλάση [[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%> ​
 Η Java απαγορεύει την ύπαρξη δύο κλάσεων που έχουν το ίδιο όνομα και ανήκουν στο ίδιο πακέτο. Η Java απαγορεύει την ύπαρξη δύο κλάσεων που έχουν το ίδιο όνομα και ανήκουν στο ίδιο πακέτο.
 </​WRAP>​ </​WRAP>​
  
-Ας υποθέσουμε ότι ​στο γνωστό παράδειγμα του ποδηλάτου ​έχουμε τις εξής κλάσεις.+Ας υποθέσουμε ότι ​έχουμε μία σειρά κλάσεων που περιγράφουν διάφορα είδη ​ποδηλάτου.
  
 <code java> <code java>
 +//file Bicycle.java
 public class Bicycle { public class Bicycle {
    ....    ....
 } }
  
 +//file MountainBike.java
 public class MountainBike extends Bicycle { public class MountainBike extends Bicycle {
    ....    ....
 } }
  
 +//file BicycleForTwo.java
 public class BicycleForTwo extends Bicycle { public class BicycleForTwo extends Bicycle {
    ....    ....
 } }
  
 +//file MotorBike.java
 public class MotorBike extends Bicycle { public class MotorBike extends Bicycle {
    ....    ....
Line 31: Line 37:
 </​code>​ </​code>​
  
-<​WRAP ​note> Έχουμε αναφέρει ότι κάθε κλάση ανήκει σε ξεχωριστό αρχείο .java. Η παραπάνω γραφή γίνεται για λόγους οικονομίας χώρου και δεν ανταποκρίνεται στις προδιαγραφές που θέτει ο compiler της Java. Το ίδιο ισχύει και για τον κώδικα παρακάτω.+<​WRAP ​info 80% center round> Έχουμε αναφέρει ότι κάθε κλάση ανήκει σε ξεχωριστό αρχείο .java. Η παραπάνω γραφή γίνεται για λόγους οικονομίας χώρου και δεν ανταποκρίνεται στις προδιαγραφές που θέτει ο compiler της Java. Το ίδιο ισχύει και για τον κώδικα παρακάτω.
 </​WRAP>​ </​WRAP>​
  
 Καθώς όλες οι παραπάνω κλάσεις αφορούν τύπους ποδηλάτου θα μπορούσαν να ομαδοποιηθούν σε ένα πακέτο (package). Συνιστάται η ομαδοποίηση κλάσεων σε πακέτα για τους εξής λόγους:​ Καθώς όλες οι παραπάνω κλάσεις αφορούν τύπους ποδηλάτου θα μπορούσαν να ομαδοποιηθούν σε ένα πακέτο (package). Συνιστάται η ομαδοποίηση κλάσεων σε πακέτα για τους εξής λόγους:​
-  - Κλάσεις με συγγενές αντικείμενο ομαδοποιούνται σε ένα πακέτο,​ ώστε οι προγραμματιστές να γνωρίζουν ότι οι κλάσεις αυτές αφορούν συγκεκριμένες λειτουργίες του λογισμικού+  - Κλάσεις με συγγενές αντικείμενο ομαδοποιούνται σε ένα πακέτο,​ ώστε οι προγραμματιστές ​να αναγνωρίζουν ότι οι κλάσεις αυτές αφορούν συγκεκριμένες λειτουργίες του λογισμικού.
-  - Επεκτείνοντας την παραπάνω λογική άλλοι προγραμματιστές θα προσπαθήσουν να βρουν συγγενείς κλάσεις μέσα στο ίδιο πακέτο.+
   - Αποφεύγεται μία πιθανή "​σύγκρουση"​ (conflict) στην ονοματοδοσία των κλάσεων,​ όπως εξηγήσαμε παραπάνω.   - Αποφεύγεται μία πιθανή "​σύγκρουση"​ (conflict) στην ονοματοδοσία των κλάσεων,​ όπως εξηγήσαμε παραπάνω.
-  - Όπως θα δούμε στη συνέχεια, ​σε μία κλάση ​που ​ανήκει σε συγκεκριμένο πακέτο (package) μπορούμε ​να επιτρέψουμε οι κλάσεις ​που ανήκουν ​στο ίδιο πακέτο ​να έχουν διαφορετικό επίπεδο πρόσβασης σε πεδία και μεθόδους από τις κλάσεις εκτός του πακέτου αυτού.+  - Όπως θα δούμε στη συνέχεια, ​για οποιαδήποτε ​κλάση ανήκει σε συγκεκριμένο πακέτο (package) μπορούμε με χρήση ​κατάλληλων ​προσδιοριστών ​πρόσβασης ​να επιτρέψουμε διαφορετικά επίπεδα πρόσβασης στα πεδία και ​τις ​μεθόδους της κλάσης αυτής από τις ​κλάσεις που ανήκουν στο ίδιο πακέτο σε σχέση με την πρόσβαση που έχουν ​κλάσεις εκτός του πακέτου αυτού.
  
 ====== Δημιουργία ενός πακέτου ====== ====== Δημιουργία ενός πακέτου ======
Line 45: Line 50:
  
 <code java> <code java>
 +//file Bicycle.java
 package bicycles; package bicycles;
 public class Bicycle { public class Bicycle {
Line 50: Line 56:
 } }
  
 +//file MountainBike.java
 package bicycles; package bicycles;
 public class MountainBike extends Bicycle { public class MountainBike extends Bicycle {
Line 55: Line 62:
 } }
  
 +//file BicycleForTwo.java
 package bicycles; package bicycles;
 public class BicycleForTwo extends Bicycle { public class BicycleForTwo extends Bicycle {
Line 60: Line 68:
 } }
  
 +//file MotorBike.java
 package bicycles; package bicycles;
 public class MotorBike extends Bicycle { public class MotorBike extends Bicycle {
Line 66: Line 75:
 </​code>​ </​code>​
  
-Εάν δεν δημιουργήσετε ένα πακέτο για ​τις ​κλάσεις σας ​αυτές θα τοποθετηθούν ​στο ανώνυμο default πακέτο. ​Γενικά, ο μη ορισμός πακέτων μπορεί να λειτουργήσει μόνο σε μικρής έκτασης προγράμματα. Μεγαλύτερα προγράμματα ​θα πρέπει απαραίτητα να είναι χωρισμένα σε πακέτα.+Εάν δεν δημιουργήσετε ένα πακέτο για ​μία ​κλάση αυτή θα τοποθετηθεί στο ανώνυμο ​//default// πακέτο. ​Κατά κανόνα, ο μη ορισμός πακέτων μπορεί να λειτουργήσει μόνο σε μικρής έκτασης προγράμματα. Μεγαλύτερα προγράμματα ​συνίσταται να είναι χωρισμένα σε πακέτα. ​
  
 +Κατά σύμβαση στη Java, όλα τα αρχεία **.java** των κλάσεων που ανήκουν στο πακέτο ''​bicycles''​ θα πρέπει να περιέχονται μέσα σε ένα κατάλογο με το όνομα ''​bicycles'',​ όπως παρακάτω:​
  
-|Προηγούμενο:​ [[:java:​static_keyword | Στατικές μεταβλητές και μέθοδοι ]] | Επόμενο:​ [[ :java:​packages:​naming | Ονοματοδοσία πακέτων ]]|+<​code>​ 
 +bicycles/ 
 +bicycles/​Bicycle.java 
 +bicycles/​MountainBike.java 
 +bicycles/​BicycleForTwo.java 
 +bicycles/​MotorBike.java 
 +</​code>​
  
 +Η δήλωση δηλαδή ενός ή περισσότερων πακέτων προϋποθέτει την ύπαρξη μία ιεραρχίας καταλόγων για τα αρχεία **.java** που περιέχονται στα πακέτα αυτά.
  
 +|Προηγούμενο:​ [[:​java:​enum | Enumerations ]] |[[:toc | Περιεχόμενα ]] | Επόμενο:​ [[ :​java:​packages:​naming | Ονοματοδοσία πακέτων ]]|
java/packages/intro.1424034753.txt.gz · Last modified: 2016/02/26 11:15 (external edit)