Εργαστήριο Java Διδάσκουσα: Πρέντζα Ανδριάνα aprentza@unipi.gr Εργαστηριακοί Συνεργάτες: Γεωργιοπούλου Ρούλα Λύβας Χρήστος roulageorio@ssl-unipi.gr clyvas@unipi.gr
Εργαστήριο 8 Πακέτα (Packages) Access Modifiers Java Non-Access Modifiers Διεπαφες (Interfaces)
Πακέτα (Packages) Ένα Πακέτο (Package) προσφέρει οµαδοποίηση κλάσεων. Ένα Package µπορεί να περιέχει οποιαδήποτε αριθµό κλάσεων. Οι περισσότερες υλοποιήσεις της Java µέσω των πακέτων προσφέρουν ιεραρχική δοµή από φακέλους και αρχεία για τη διαχείριση πηγαίου κώδικα και κλάσεων.
Πακέτα (Packages) Παράδειγµα Πακέτων και Κλάσεων:
Πακέτα (Packages) Αποτέλεσµα:
Access Modifiers Public: Ορατά από οποιαδήποτε κλάση. [Lab 3] Private: Μέθοδοι και πεδία ορατά µόνο µέσα στη κλάση στην οποία ανήκουν. [Lab 3] Protected: Προσβάσιµες µέθοδοι και πεδία από τις κλάσεις που ανήκουν στο ίδιο πακέτο ή στις υποκλάσεις. Default: έλλειψη των παραπάνω access modifiers συνυποδηλώνει πρόσβαση µεθόδων και πεδίων από όλες τις κλάσεις που βρίσκονται στο ίδιο πακέτο. [Lab 3]
Access Modifiers com.unipi.common com.unipi.test com.unipi.core
Πακέτα (Packages) & Access Modifiers Προσαρµόστε το lab 7 ώστε να έχει την µορφή: Ποιους Modifiers πρέπει να τροποποιήσετε ώστε η αλλαγές να µην επηρεάζουν τα αποτελέσµατα του Lab 7?
Java Non-Access Modifiers Η Java παρέχει τελεστές, οι οποίοι δε χρησιµοποιούνται για τον ορισµό της προσβασιµότητας των χαρακτηριστικών των κλάσεων (πεδία, µέθοδοι): Ο τελεστής abstract χρησιµοποιείται για τη δήλωση αφηρηµένων µεθόδων. [Lab 7] Ο τελεστής static χρησιµοποιείται για τη δήλωση στατικών µεθόδων και πεδίων. Οι static µεθόδου και πεδία ανήκουν στην κλάση και όχι σε ένα στιγµιότυπο της κλάσης. Εξαιτίας της προσβασιµότητας µεθόδων και πεδίων σε επίπεδο κλάσεων δεν είναι απαραίτητη η δηµιουργία αντικειµένων για την κλήση τους. Ο τελεστής final χρησιµοποιείται για την οριστικοποίηση των δηλώσεων κλάσεων, µεθόδων και µεταβλητών.
Τελεστής static Παράδειγµα χρήσης του τελεστή static στα πεδία:
Τελεστής static Παράδειγµα χρήσης του τελεστή static σε µεθόδους:
Τελεστής static Παράδειγµα χρήσης του τελεστή static σε µεθόδους: Δεν είναι δυνατή η χρήση ενός instance πεδίου ή η κλήση µιας instance µεθόδου από µια static µέθοδο
Τελεστής final Παράδειγµα χρήσης του τελεστή static σε πεδία: Ενώ είναι δυνατή η κλήση µια static µέθοδο ή η χρήση ενός static πεδίου σε µια instance µέθοδο.
Τελεστής final Παράδειγµα χρήσης του τελεστή final σε πεδία: Τα πεδία final πρέπει οπωσδήποτε να αρχικοποιούνται, είτε στη δήλωση του πεδίου, είτε στους κατασκευαστές.
Τελεστής final Παράδειγµα χρήσης του τελεστή final σε πεδία: Στα πεδία final δεν µπορεί να µεταβάλλεται η τιµή τους κατά τη διάρκεια εκτέλεσης του προγράµµατος.
Τελεστής final Παράδειγµα χρήσης του τελεστή final σε µεθόδους: Δεν είναι δυνατό µια final µέθοδος να γίνει override
Τελεστής final Παράδειγµα χρήσης του τελεστή final σε µεθόδους: Δεν είναι δυνατό να γίνει extend µια κλάση που έχει δηλωθεί ως final.
Τελεστής final & static Παράδειγµα χρήσης του τελεστή final & static σε πεδία: Στα πεδία final δεν µπορεί να µεταβάλλεται η τιµή τους κατά τη διάρκεια εκτέλεσης του προγράµµατος.
Διεπαφες (Interfaces) Το Java Interface είναι µια συλλογή από abstract µεθόδους. Μια κλάση υλοποιεί (implements) ένα Interface υπό την έννοια ότι υλοποιεί όλες τις abstract µεθόδους που ορίζονται µέσα στο Interface. Τα Interfaces δεν είναι κλάσεις. Παρόλο που η σύνταξή του µοιάζει µε αυτή των κλάσεων, χρησιµοποιούνται για διαφορετικό σκοπό: Οι κλάσεις περιγράφουν τα χαρακτηριστικά και τη συµπεριφορά ενός αντικειµένου Τα Interfaces ορίζουν τη συµπεριφορά των κλάσεων που επιλέγουν να τα υλοποιούν
Διεπαφες (Interfaces) Για τη δηµιουργία ενός Java Interface, χρησιµοποιείται η λέξη κλειδί interface :
Διεπαφες (Interfaces) Παράδειγµα Interface και Υλοποίηση Μεθόδου: Οι µέθοδοι µέσα σε ένα interface, θεωρούνται public abstract.
Διεπαφες (Interfaces) Παράδειγµα Υλοποίηση Μεθόδων πολλαπλών Interface και πεδίων: Τα πεδία µέσα σε ένα interface, θεωρούνται public static και final.
Java Interface vs Abstract Java Class Java Interface Θεωρείται πάντα abstract και δεν μπορεί να έχει υλοποιήσεις μεθόδων. Τα πεδία θεωρούνται πάντα public static final. Abstract Java Class Μπορεί να έχει υλοποιήσεις μεθόδων. Μπορεί να μην περιέχει final/public/static πεδία. Υλοποιείται με τη χρήση της λέξης κλειδί implements. Μπορεί να κάνει exten μόνο άλλα interfaces (οποιοδήποτε πλήθος από interfaces). Κληρονομείται με τη χρήση της λέξης κλειδί exten. Μπορεί να κάνει exten μια άλλη κλάση και implements οποιοδήποτε πλήθος από interfaces. Δεν μπορεί να δημιουργηθεί αντικείμενο με χρήση μόνο του interface. Δεν μπορεί να δημιουργηθεί αντικείμενο με χρήση μόνο του abstract class.