====== Πακέτα στη γλώσσα προγραμματισμού Java ====== Σε αυτό το κεφάλαιο θα δούμε πως μπορούμε να ομαδοποιήσουμε κλάσεις σε **πακέτα** (**packages**). Τα πακέτα μπορούν να περιέχουν τόσο κλάσεις όσο και διεπαφές (interfaces). Επειδή προς το παρόν δεν έχουμε μιλήσει για διεπαφές θεωρήστε ότι τα πακέτα σας διαθέτουν μόνο κλάσεις. Για τις διεπαφές ισχύει ότι ισχύει και για τις κλάσεις. Προκειμένου να είναι ευκολότερη η ομαδοποίηση και η αναζήτηση κλάσεων που έχουν κοινά χαρακτηριστικά προτείνεται από τη Java η ομαδοποίηση τους σε πακέτα. Φανταστείτε ένα εικονικό "πακέτο" ή "κουτί" που περιέχει κλάσεις. Ας υποθέσουμε ότι έχουμε μία σειρά κλάσεων που περιγράφουν διάφορα είδη ποδηλάτου. * Bicycle * MountainBike * BicycleForTwo * MotorBike Καθώς όλες οι παραπάνω κλάσεις αφορούν τύπους ποδηλάτου θα μπορούσαν να ομαδοποιηθούν σε ένα πακέτο (package). Συνιστάται η ομαδοποίηση κλάσεων σε πακέτα για τους εξής λόγους: * Κλάσεις με συγγενές αντικείμενο ομαδοποιούνται σε ένα πακέτο, ώστε οι προγραμματιστές να αναγνωρίζουν ότι οι κλάσεις αυτές αφορούν συγκεκριμένες λειτουργίες του λογισμικού. * Όπως θα δούμε στη συνέχεια, για οποιαδήποτε κλάση ανήκει σε συγκεκριμένο πακέτο μπορούμε με χρήση κατάλληλων προσδιοριστών πρόσβασης να επιτρέψουμε διαφορετικά επίπεδα πρόσβασης στα πεδία και τις μεθόδους της κλάσης αυτής. ==== Δημιουργία πακέτου ==== Για το παραπάνω απόσπασμα κώδικα η δημιουργία ενός πακέτου που να περιέχει όλες τις παραπάνω κλάσεις θα μπορούσε να τοποθετώντας τη λέξη package ακολουθούμενη από το όνομα του πακέτου στην πρώτη γραμμή του αρχείου .java κάθε κλάσης που ανήκει στο πακέτο αυτό. Για το παραπάνω παράδειγμα μπορούμε να έχουμε τα εξής: package bicycles; public class Bicycle { .... } package bicycles; public class MountainBike { .... } package bicycles; public class BicycleForTwo { .... } package bicycles; public class MotorBike { .... } Κατά σύμβαση στη Java, όλα τα αρχεία **.java** των κλάσεων που ανήκουν στο πακέτο ''bicycles'' θα πρέπει να περιέχονται μέσα σε ένα κατάλογο με το όνομα ''bicycles''. Αυτό μας οδηγεί σε μία ιεραρχία καταλόγων αι αρχείων όπως παρακάτω: bicycles/ bicycles/Bicycle.java bicycles/MountainBike.java bicycles/BicycleForTwo.java bicycles/MotorBike.java Εάν δεν δημιουργήσετε ένα πακέτο για μία κλάση αυτή θα τοποθετηθεί στο ανώνυμο //default// πακέτο. Κατά κανόνα, ο μη ορισμός πακέτων μπορεί να λειτουργήσει μόνο σε μικρής έκτασης προγράμματα. Μεγαλύτερα προγράμματα συνιστάται να είναι χωρισμένα σε πακέτα. ==== Συγκρούσεις ονομάτων ==== Επιπρόσθετα, τα πακέτα χρησιμοποιούνται για να αποφεύγονται συγκρούσεις ονοματοδοσίας σε κλάσεις που έχουν το ίδιο όνομα. Στην περίπτωση που δύο κλάσεις έχουν το ίδιο όνομα, υπάρχει το πρόβλημα της διάκρισης μεταξύ τους, όταν χρησιμοποιούνται στο ίδιο πρόγραμμα. Η απάντηση στο πρόβλημα αυτό είναι ότι κλάσεις με το ίδιο όνομα μπορεί να βρίσκονται σε διαφορετικά πακέτα. Όταν μία κλάση ανήκει σε ένα πακέτο το πλήρες όνομα της κλάσης προκύπτει από την συνένωση του ονόματος του πακέτου με το όνομα της κλάσης. Το πακέτο δηλαδήαντιπροσωπεύει το πρώτο συνθετικό του πλήρους ονόματος της κλάσης. Για παράδειγμα, η κλάση [[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, το μόνο που έχετε να κάνετε είναι να τη βάλετε σε ένα νέο πακέτο της επιλογής σας. O compiler της Java απαγορεύει τη χρήση στο ίδιο πρόγραμμα δύο κλάσεων που έχουν το ίδιο όνομα και ανήκουν στο ίδιο πακέτο. |Προηγούμενο: [[:java:toString | Η μέθοδος toString ]] |[[:toc | Περιεχόμενα ]] | Επόμενο: [[ :java:packages:naming | Ονοματοδοσία πακέτων ]]|