java:packages:intro

Πακέτα στη γλώσσα προγραμματισμού Java

Σε αυτό το κεφάλαιο θα δούμε πως μπορούμε να ομαδοποιήσουμε κλάσεις σε πακέτα (packages). Τα πακέτα μπορούν να περιέχουν τόσο κλάσεις όσο και διεπαφές (interfaces). Επειδή προς το παρόν δεν έχουμε μιλήσει για διεπαφές θεωρήστε ότι τα πακέτα σας διαθέτουν μόνο κλάσεις. Για τις διεπαφές ισχύει ότι ισχύει και για τις κλάσεις.

Προκειμένου να είναι ευκολότερη η ομαδοποίηση και η αναζήτηση κλάσεων που έχουν κοινά χαρακτηριστικά προτείνεται από τη Java η ομαδοποίηση τους σε πακέτα που περιέχουν κλάσεις. Φανταστείτε ένα εικονικό “πακέτο” ή “κουτί” που περιέχει κλάσεις.

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

Για παράδειγμα, η κλάση File βρίσκεται στο πακέτο java.io. Το πλήρες όνομα της κλάσης είναι java.io.File. Σε περίπτωση που θέλετε να φτιάξετε την δική σας κλάση File, το μόνο που έχετε να κάνετε είναι να την βάλετε σε ένα δικό σας πακέτο (π.χ. my_package.my_subpackage.File).

Η Java απαγορεύει την ύπαρξη δύο κλάσεων που έχουν το ίδιο όνομα και ανήκουν στο ίδιο πακέτο.

Ας υποθέσουμε ότι έχουμε μία σειρά κλάσεων που περιγράφουν διάφορα είδη ποδηλάτου.

//file Bicycle.java
public class Bicycle {
   ....
}
 
//file MountainBike.java
public class MountainBike extends Bicycle {
   ....
}
 
//file BicycleForTwo.java
public class BicycleForTwo extends Bicycle {
   ....
}
 
//file MotorBike.java
public class MotorBike extends Bicycle {
   ....
}

Έχουμε αναφέρει ότι κάθε κλάση ανήκει σε ξεχωριστό αρχείο .java. Η παραπάνω γραφή γίνεται για λόγους οικονομίας χώρου και δεν ανταποκρίνεται στις προδιαγραφές που θέτει ο compiler της Java. Το ίδιο ισχύει και για τον κώδικα παρακάτω.

Καθώς όλες οι παραπάνω κλάσεις αφορούν τύπους ποδηλάτου θα μπορούσαν να ομαδοποιηθούν σε ένα πακέτο (package). Συνιστάται η ομαδοποίηση κλάσεων σε πακέτα για τους εξής λόγους:

  1. Κλάσεις με συγγενές αντικείμενο ομαδοποιούνται σε ένα πακέτο, ώστε οι προγραμματιστές να αναγνωρίζουν ότι οι κλάσεις αυτές αφορούν συγκεκριμένες λειτουργίες του λογισμικού.
  2. Αποφεύγεται μία πιθανή “σύγκρουση” (conflict) στην ονοματοδοσία των κλάσεων, όπως εξηγήσαμε παραπάνω.
  3. Όπως θα δούμε στη συνέχεια, για οποιαδήποτε κλάση ανήκει σε συγκεκριμένο πακέτο (package) μπορούμε με χρήση κατάλληλων προσδιοριστών πρόσβασης να επιτρέψουμε διαφορετικά επίπεδα πρόσβασης στα πεδία και τις μεθόδους της κλάσης αυτής από τις κλάσεις που ανήκουν στο ίδιο πακέτο σε σχέση με την πρόσβαση που έχουν κλάσεις εκτός του πακέτου αυτού.

Δημιουργία ενός πακέτου

Για το παραπάνω απόσπασμα κώδικα η δημιουργία ενός πακέτου που να περιέχει όλες τις παραπάνω κλάσεις θα μπορούσε να δοθεί ως εξής.

//file Bicycle.java
package bicycles;
public class Bicycle {
   ....
}
 
//file MountainBike.java
package bicycles;
public class MountainBike extends Bicycle {
   ....
}
 
//file BicycleForTwo.java
package bicycles;
public class BicycleForTwo extends Bicycle {
   ....
}
 
//file MotorBike.java
package bicycles;
public class MotorBike extends Bicycle {
   ....
}

Εάν δεν δημιουργήσετε ένα πακέτο για μία κλάση αυτή θα τοποθετηθεί στο ανώνυμο default πακέτο. Κατά κανόνα, ο μη ορισμός πακέτων μπορεί να λειτουργήσει μόνο σε μικρής έκτασης προγράμματα. Μεγαλύτερα προγράμματα συνίσταται να είναι χωρισμένα σε πακέτα.

Κατά σύμβαση στη Java, όλα τα αρχεία .java των κλάσεων που ανήκουν στο πακέτο bicycles θα πρέπει να περιέχονται μέσα σε ένα κατάλογο με το όνομα bicycles, όπως παρακάτω:

bicycles/
bicycles/Bicycle.java
bicycles/MountainBike.java
bicycles/BicycleForTwo.java
bicycles/MotorBike.java

Η δήλωση δηλαδή ενός ή περισσότερων πακέτων προϋποθέτει την ύπαρξη μία ιεραρχίας καταλόγων για τα αρχεία .java που περιέχονται στα πακέτα αυτά.

java/packages/intro.txt · Last modified: 2016/02/27 07:51 by gthanos