design patterns java
Σε αυτό το σεμινάριο θα συζητήσουμε τα σχέδια σχεδίασης στην Java. Θα μελετήσουμε μοτίβα Singleton, Factory και Builder με παραδείγματα και πλεονεκτήματα:
Όταν επιλύουμε ένα συγκεκριμένο πρόβλημα, μπορούμε να το λύσουμε πιο αποτελεσματικά εάν έχουμε ήδη ορίσει κάποιες βέλτιστες πρακτικές. Αυτό πράγματι θα μας βοηθήσει να ακολουθήσουμε αυτές τις βέλτιστες πρακτικές και να αναπτύξουμε πιο αξιόπιστες λύσεις.
Αυτά τα βέλτιστες πρακτικές που μπορεί να χρησιμοποιηθεί για την ανάπτυξη καλά αποδεδειγμένες λύσεις για την επίλυση προβλημάτων ονομάζονται « Σχεδιαστικά πρότυπα '. Οι έμπειροι προγραμματιστές λογισμικού OOP χρησιμοποιούν μοτίβα σχεδίασης για την επίλυση συγκεκριμένων εργασιών.
=> Ρίξτε μια ματιά στον οδηγό για αρχάριους Java εδώ
Τι θα μάθετε:
- Σχέδια σχεδίων στην Ιάβα
- Μοναδικό μοτίβο στην Ιάβα
- Εργοστάσιο μοτίβο στην Ιάβα
- Οικοδόμος μοτίβο στην Ιάβα
- συμπέρασμα
Σχέδια σχεδίων στην Ιάβα
Τα σχέδια σχεδίασης εφευρέθηκαν για πρώτη φορά από τον Christopher Alexander το 1977. Αλλά αργότερα τέσσερις προγραμματιστές, ο Erich Gamma, ο Richard Helm, ο John Vlissides και ο Ralph Johnson, έγραψαν ένα βιβλίο με τίτλο: Συμμορία μοτίβων τεσσάρων σχεδιασμών, στοιχεία επαναχρησιμοποιήσιμου αντικειμενοστραφούς λογισμικού 'Το έτος 1995.
Από τότε όλα τα σχέδια σχεδίασης έγιναν γνωστά ως « Συμμορία τεσσάρων σχεδίων σχεδίασης '.
πώς να προσαρτήσετε αρχεία .bin
Τα μοτίβα σχεδιασμού είναι ανεξάρτητα από οποιεσδήποτε γλώσσες προγραμματισμού, καθώς χρησιμοποιούνται για την επίλυση κοινών αντικειμενικών προβλημάτων σχεδιασμού και δεν περιορίζονται μόνο σε μια συγκεκριμένη γλώσσα προγραμματισμού. Ουσιαστικά, είναι μια ιδέα και όχι μια εφαρμογή.
Έτσι, χρησιμοποιώντας μοτίβα σχεδιασμού μπορούμε να αναπτύξουμε προγράμματα που είναι πιο αποτελεσματικά, ευέλικτα, διατηρήσιμα και επαναχρησιμοποιήσιμα.
Πλεονεκτήματα των σχεδίων σχεδίασης
Παρακάτω αναφέρονται μερικά από τα πλεονεκτήματα της χρήσης προτύπων σχεδίασης στις εφαρμογές μας:
- Τα σχέδια σχεδίασης είναι επαναχρησιμοποιήσιμα και μπορούν να χρησιμοποιηθούν από πολλαπλά έργα.
- Μπορούμε να ορίσουμε την αρχιτεκτονική του συστήματος χρησιμοποιώντας μοτίβα σχεδίασης.
- Τα πρότυπα σχεδίασης παρέχουν διαφάνεια στο σχεδιασμό της εφαρμογής.
- Τα σχέδια σχεδίασης είναι ήδη καλά δοκιμασμένα και αποδεδειγμένα, ώστε να μπορούμε να τα χρησιμοποιήσουμε χωρίς καμία ανησυχία.
- Τα μοτίβα σχεδιασμού μας επιτρέπουν να χτίζουμε καλύτερα συστήματα και επίσης να παρέχουμε σαφήνεια στην αρχιτεκτονική του συστήματος.
Πότε να χρησιμοποιήσετε μοτίβα σχεδίασης
Λοιπόν, πότε πρέπει να χρησιμοποιούμε τα σχέδια σχεδίασης;
Συνήθως χρησιμοποιούμε ένα σχέδιο σχεδίασης κατά την αρχική φάση ανάλυσης και απαίτησης του SDLC (Κύκλος ζωής ανάπτυξης λογισμικού). Όταν χρησιμοποιείται κατά τη φάση ανάλυσης και απαίτησης του SDLC, παρέχει περισσότερες πληροφορίες σε αυτήν τη φάση. Η Java υποστηρίζει εσωτερικά σχέδια σχεδίασης.
Τα σχέδια σχεδίασης στην Java κατηγοριοποιούνται ως εξής:
Όσον αφορά αυτό το σεμινάριο, ενδιαφερόμαστε μόνο για δημιουργικά σχέδια σχεδίασης.
Τα δημιουργικά σχέδια σχεδιασμού ταξινομούνται περαιτέρω ως εξής:
Σε αυτό το σεμινάριο, θα συζητήσουμε τα ακόλουθα σχέδια σχεδίασης:
- Μοτίβο σχεδίασης Singleton
- Σχέδιο εργοστασίου
- Πρότυπο σχεδίασης οικοδόμου
Ας ξεκινήσουμε με ένα μοναδικό μοτίβο σχεδίασης στην Java.
Συνιστώμενη ανάγνωση = >> Σχέδια μοτίβων για εφαρμογές με βάση τη φιάλη
Μοναδικό μοτίβο στην Ιάβα
Ένα μοτίβο singleton είναι ένας τύπος δημιουργικού μοτίβου στην Java. Το μοτίβο Singleton είναι ένα μοτίβο σχεδίασης στο οποίο υπάρχει μόνο μία παρουσία μιας κλάσης στην εικονική μηχανή Java. Μια τάξη singleton (εφαρμογή μοτίβου singleton) πρέπει να παρέχει ένα παγκόσμιο σημείο πρόσβασης για να πάρει την παρουσία της τάξης.
Με άλλα λόγια, ένα μοτίβο singleton περιορίζει την παρουσία μιας τάξης. Το μοτίβο Singleton χρησιμοποιείται στην υλοποίηση του καταγραφικού για εφαρμογές. Χρησιμοποιείται επίσης στην εφαρμογή του νήματος ή στην προσωρινή μνήμη.
Τα μαθήματα Java, java.awt.Desktop και java.lang.runtime χρησιμοποιήστε επίσης ένα μοτίβο singleton.
Πλεονεκτήματα
- Καθώς χρησιμοποιείται μόνο μία παρουσία της τάξης singleton, εξοικονομούμε μνήμη.
- Επίσης, διασφαλίζει την επαναχρησιμοποίηση καθώς το ίδιο αντικείμενο χρησιμοποιείται ξανά και ξανά.
Τώρα ας προχωρήσουμε στην εφαρμογή του μονού μοτίβου.
Εφαρμογή του μοτίβου Singleton
Όπως έχει ήδη αναφερθεί, ένα μοτίβο σχεδίασης singleton περιορίζει την τάξη με μία μόνο παρουσία και σε αυτήν την περίπτωση δίνεται ένα παγκόσμιο σημείο πρόσβασης. Ήταν όλες οι τάξεις που αναφέρονται στο ίδιο αντικείμενο ξανά και ξανά.
Το ακόλουθο διάγραμμα UML εξηγεί το μοτίβο Singleton.
Όπως δείχνει το παραπάνω διάγραμμα UML, μια κλάση singleton έχει ένα μόνο στιγμιότυπο και έχουμε πρόσβαση σε αυτήν με τη μέθοδο getInstance (). Έτσι, ένα εργοστάσιο singleton που είναι υπεύθυνο για τη δημιουργία αντικειμένων χρησιμοποιεί τη μέθοδο getInstance για να επιστρέψει το ίδιο αντικείμενο (το οποίο υπάρχει στην τάξη) ξανά και ξανά.
Λοιπόν, πώς εφαρμόζουμε το μοτίβο Singleton σε ένα πρόγραμμα;
Δημιουργούμε μια τάξη singleton και έχουμε τον κατασκευαστή του ως «ιδιωτικό» έτσι ώστε η τάξη να μην μπορεί να δημιουργηθεί. Στη συνέχεια, δημιουργούμε μια ιδιωτική παρουσία αυτής της κατηγορίας singleton μέσα στην ίδια την τάξη. Έπειτα έχουμε μια ειδική δημόσια μέθοδο getInstance () που επιστρέφει ένα μοναδικό αντικείμενο στον έξω κόσμο.
Αυτή η εφαρμογή αυτής της κατηγορίας singleton, όπως εξηγείται παραπάνω, φαίνεται στο παρακάτω πρόγραμμα Java.
class SingletonObject { //create an object of SingletonObject private static SingletonObject instance = new SingletonObject(); //private constructor so that we cannot instantiate the class private SingletonObject(){} //returns the only available object public static SingletonObject getInstance(){ return instance; } public void printMessage(){ System.out.println('Hello from Singleton object!!!'); } } public class Main { public static void main(String() args) { //illegal statement because constructor is private //Compile Time Error: The constructor SingletonObject() is not visible //SingletonObject object = new SingletonObject(); //call getInstance to retrieve the object available from the class SingletonObject object = SingletonObject.getInstance(); //show the message object.printMessage(); } }
Παραγωγή:
Τώρα αν ελέγξουμε την κύρια μέθοδο, σημειώστε ότι εάν προσπαθήσουμε να δημιουργήσουμε ένα αντικείμενο της τάξης singleton χρησιμοποιώντας έναν νέο τελεστή, ο μεταγλωττιστής θα δώσει ένα σφάλμα σύνταξης (δείτε τον κωδικό που σχολιάστηκε στην κύρια μέθοδο). Λαμβάνουμε το αντικείμενο της κατηγορίας singleton χρησιμοποιώντας τη μέθοδο getInstance () και μετά μπορούμε να το χρησιμοποιήσουμε ως συνήθως για πρόσβαση σε μεθόδους.
Εργοστάσιο μοτίβο στην Ιάβα
Το εργοστασιακό μοτίβο ονομάζεται επίσης 'Factory Method pattern' ή 'Virtual Constructor' στην Java. Σε αυτό το μοτίβο, δημιουργούμε μια διεπαφή ή μια αφηρημένη κλάση με δηλώσεις μεθόδου και, στη συνέχεια, οι συγκεκριμένες τάξεις ή υποκατηγορίες που εφαρμόζουν αυτήν τη διεπαφή ή κληρονομούν την κλάση είναι υπεύθυνες για τη δημιουργία παρουσιών της κλάσης.
Πλεονεκτήματα
- Το εργοστασιακό μοτίβο είναι ένας τύπος δημιουργικού μοτίβου και είναι το πιο συχνά χρησιμοποιούμενο μοτίβο στην Ιάβα.
- Χρησιμοποιώντας ένα εργοστασιακό μοτίβο διασφαλίζουμε ότι η πραγματική λογική δημιουργίας δεν εκτίθεται στον έξω κόσμο.
Έτσι, εάν μια τάξη που εφαρμόζει ένα εργοστασιακό μοτίβο έχει μια μέθοδο για τον υπολογισμό του επιτοκίου, τότε οι συγκεκριμένες τάξεις θα εφαρμόσουν αυτήν την κλάση και θα εφαρμόσουν επίσης τη μέθοδο για τον υπολογισμό του επιτοκίου.
Τότε θα υπάρξει μια άλλη τάξη που είναι μια κλάση εργοστασίων που θα έχει πρόσβαση σε αυτές τις συγκεκριμένες εμφανίσεις κλάσης, ώστε να μην γνωρίζουμε πώς εφαρμόζεται η λογική για τον υπολογισμό του επιτοκίου. Καλούμε μόνο τη μέθοδο και λαμβάνουμε την έξοδο.
Πότε ακριβώς μπορούμε να χρησιμοποιήσουμε το πρότυπο Factory Method;
Όταν οι τάξεις γονέων αποφασίζουν να αναθέσουν τη δημιουργία παρουσιών στις υποκατηγορίες τους, τότε μπορούμε να ακολουθήσουμε ένα εργοστασιακό μοτίβο (Αυτό εξηγείται παραπάνω). Μπορούμε επίσης να χρησιμοποιήσουμε την εργοστασιακή μέθοδο όταν το μάθημα δεν γνωρίζει ποιες υποκατηγορίες πρόκειται να δημιουργηθούν.
Τώρα ας δούμε την εφαρμογή του προτύπου εργοστασιακής μεθόδου.
Εφαρμογή του εργοστασιακού προτύπου
Για παράδειγμα, ας εφαρμόσουμε μια γενική διεπαφή σχήματος. Μπορούμε να αντλήσουμε διάφορες κλάσεις σκυροδέματος από αυτήν τη διεπαφή, όπως ο κύκλος, το ορθογώνιο κ.λπ. Το UML για αυτό το μοτίβο φαίνεται παρακάτω.
Όπως έχει ήδη εξηγηθεί, αυτό είναι το διάγραμμα UML για εργοστασιακό μοτίβο. Τώρα θα εφαρμόσουμε ένα πρόγραμμα Java που δείχνει το εργοστασιακό μοτίβο.
//Geometric_shape interface interface Geometric_shape { void draw_shape(); } //Geometric shape classes implementing Geometric_shape interface class Rectangle implements Geometric_shape { @Override public void draw_shape() { System.out.println('Rectangle class::draw_shape() method.'); } } class Square implements Geometric_shape { @Override public void draw_shape() { System.out.println('Square class::draw_shape() method.'); } } class Circle implements Geometric_shape { @Override public void draw_shape() { System.out.println('Circle class::draw_shape() method.'); } } //Factory class for Geometric_shape class ShapeFactory { //shapeObject method gets particular shapeType (circle, Square or Rectangle) public Geometric_shape shapeObject(String shapeType){ if(shapeType == null){ return null; } //retrieve Circle object if(shapeType.equalsIgnoreCase('Circle')){ return new Circle(); //retrieve Rectangle object } else if(shapeType.equalsIgnoreCase('Rectangle')){ return new Rectangle(); ////retrieve Square object } else if(shapeType.equalsIgnoreCase('Square')){ return new Square(); } return null; } } public class Main { public static void main(String() args) { //Create a ShapeFactory object to get different geometric shapes ShapeFactory shapeFactory = new ShapeFactory(); //circle Geometric_shape shape_Circle = shapeFactory.shapeObject('CIRCLE'); //draw method of Circle shape_Circle.draw_shape(); //Rectangle Geometric_shape shape_Rectangle = shapeFactory.shapeObject('RECTANGLE'); //draw method of Rectangle shape_Rectangle.draw_shape(); //Square Geometric_shape shape_Square = shapeFactory.shapeObject('SQUARE'); //draw method of square shape_Square.draw_shape(); } }
Παραγωγή:
Οικοδόμος μοτίβο στην Ιάβα
Στο μοτίβο Builder, χρησιμοποιούμε μια βήμα προς βήμα προσέγγιση για τη δημιουργία ενός σύνθετου αντικειμένου χρησιμοποιώντας μικρά και απλά αντικείμενα.
Έτσι, κάθε φορά που συναντάμε ένα αντικείμενο που δεν μπορεί να δημιουργηθεί σε ένα μόνο βήμα, ψάχνουμε για ένα μοτίβο δημιουργού.
Πλεονεκτήματα
- Χρησιμοποιώντας το μοτίβο Builder, μπορούμε να διαχωρίσουμε την κατασκευή και την αναπαράσταση ενός αντικειμένου.
- Μπορούμε επίσης να αλλάξουμε την εσωτερική αναπαράσταση του αντικειμένου.
- Μπορούμε να χτίσουμε πολύπλοκα σχέδια όπως ένα ολόκληρο σύστημα παράδοσης χρησιμοποιώντας το μοτίβο δημιουργού.
Ένα πρακτικό παράδειγμα ενός μοτίβου Builder είναι το σύστημα παραγγελίας φαγητού το οποίο περιελάμβανε πολύπλοκα βήματα για τη συλλογή ειδών διατροφής που παραγγέλθηκαν, στη συνέχεια τη συσκευασία, τη χρέωση, την παραγγελία και στη συνέχεια την αποστολή του.
Σε αυτό το σεμινάριο, θα εφαρμόσουμε ένα παράδειγμα συστήματος παραγγελίας tablet χρησιμοποιώντας το μοτίβο Builder.
Εφαρμογή του προτύπου Builder
Το γενικό διάγραμμα UML για το μοτίβο Builder δίνεται παρακάτω.
Το παραπάνω διάγραμμα δείχνει το διάγραμμα UML μοτίβου Builder. Όπως φαίνεται στο παραπάνω διάγραμμα, έχουμε τέσσερα στοιχεία στο μοτίβο Builder.
- Προϊόν: Αυτό αντιπροσωπεύει το περίπλοκο αντικείμενο που πρόκειται να κατασκευαστεί.
- Περίληψη κλάσης Builder: Μια αφηρημένη κλάση που περιέχει πρωτότυπα όλων των λειτουργιών που απαιτούνται για τη δημιουργία ενός σύνθετου αντικειμένου.
- Κατηγορία ConcreteBuilder: Αυτή είναι μια συγκεκριμένη κλάση που κληρονομεί από την κατηγορία Builder και δημιουργεί ένα συγκεκριμένο περίπλοκο αντικείμενο. Μπορούμε να έχουμε όσες τάξεις ConcreteBuilder χρειαζόμαστε.
- Τάξη σκηνοθέτη: Αυτή η τάξη ελέγχει τους αλγόριθμους που δημιουργούν το τελικό προϊόν.
Το ακόλουθο παράδειγμα προγραμματισμού δείχνει την επίδειξη ενός μοτίβου Builder χρησιμοποιώντας ένα σύστημα δόμησης παραγγελιών tablet.
import java.util.ArrayList; import java.util.List; //Packing interface for tablets interface Packing { public String pack(); public int price(); } //Tablet class - abstract abstract class Tablet implements Packing{ public abstract String pack(); } //company - extends Tablet abstract class Company extends Tablet{ public abstract int price(); } //Lenovo tablet class Lenovo extends Company{ @Override public int price(){ return 541; } @Override public String pack(){ return 'Lenovo Yoga'; } } //Micromax tablet class MicroMax extends Company { @Override public int price(){ return 338; } @Override public String pack(){ return 'MicroMax'; } } //Tablet type class TabType { private List items=new ArrayList(); //add items public void addItem(Packing packs) { items.add(packs); } //retrieve cost public void getCost(){ for (Packing packs : items) { packs.price(); } } //show all items public void showItems(){ for (Packing packing : items){ System.out.print('Tablet name : '+packing.pack()); System.out.println(', Price(in U.S.Dollars) : '+packing.price()); } } } //builder class for tablets order class TabBuilder { public TabType buildLenovoTab(){ TabType lenovo =new TabType(); lenovo.addItem(new Lenovo()); return lenovo; } public TabType buildMicroMaxTab(){ TabType mmx=new TabType(); mmx.addItem(new MicroMax()); return mmx; } } public class Main{ public static void main(String args()){ //build the tablets order and display the order TabBuilder tabBuilder=new TabBuilder(); TabType tabtype1=tabBuilder.buildLenovoTab(); tabtype1.showItems(); TabType tabtype2=tabBuilder.buildMicroMaxTab(); tabtype2.showItems(); } }
Παραγωγή:
Στο παραπάνω παράδειγμα, έχουμε δημιουργήσει το πλήρες σύστημα παραγγελίας tablet για δύο μάρκες tablet, δηλαδή Lenovo και Micromax. Αυτές είναι οι κατηγορίες concreteBuilder που κληρονομούν από την εταιρεία αφηρημένων τάξεων. Έπειτα έχουμε μια κλάση TabBuilder που δημιουργεί τις παραγγελίες και για τις δύο τάξεις tablet.
Συχνές Ερωτήσεις
Ε # 1) Ποια είναι τα μοτίβα σχεδίασης στην Java; Ποιοι είναι οι τύποι σχεδίων σχεδιασμού στην Java;
χρειάζομαι έναν νέο πάροχο email
Απάντηση: Τα σχέδια σχεδιασμού είναι οι βέλτιστες πρακτικές που μπορούν να χρησιμοποιηθούν για την ανάπτυξη δοκιμασμένων λύσεων.
Η Java έχει τρεις τύπους σχεδίων σχεδίασης:
- Δημιουργικό σχέδιο σχεδίασης: Factory pattern, Abstract Factory factory, Singleton pattern, Builder pattern και prototype pattern είναι παραδείγματα δημιουργικών σχεδίων. Αυτά σχετίζονται κυρίως με τη δημιουργία αντικειμένων.
- Σχέδιο δομικού σχεδιασμού: Χρησιμοποιούνται κυρίως για τη δημιουργία μιας δομής τάξης. Ο προσαρμογέας, το Bridge και το σύνθετο μοτίβο είναι δημοφιλή μοτίβα δομικών σχεδίων.
- Σχέδιο συμπεριφορικής σχεδίασης: Αυτά παρέχουν καλύτερη αλληλεπίδραση μεταξύ των αντικειμένων μαζί με την ευελιξία για εύκολη επέκταση της υλοποίησης. Τα μοτίβα παρατηρητών, το σχέδιο στρατηγικής κ.λπ. είναι μερικά παραδείγματα των προτύπων συμπεριφοράς.
Ε # 2) Γιατί χρησιμοποιούνται τα σχέδια σχεδίασης;
Απάντηση: Τα πρότυπα σχεδίασης μας παρέχουν ένα αποδεδειγμένο και δοκιμασμένο μοντέλο λύσης που μπορούμε να χρησιμοποιήσουμε για την επίλυση σύνθετων προβλημάτων. Τα μοτίβα σχεδιασμού μας επιτρέπουν να κατασκευάζουμε συνεκτικές μονάδες με χαλαρή ζεύξη. Τα σχέδια σχεδίασης κάνουν επίσης την αλληλεπίδραση μεταξύ σχεδιαστών πιο αποτελεσματική και αποτελεσματική.
Q # 3) Ποια είναι τα παραδείγματα των προτύπων;
Απάντηση: Παραδείγματα φυσικών μοτίβων είναι ορατές κανονικότητες που βρίσκονται στη φύση. Φυσικά μοτίβα όπως συμμετρίες, δέντρα, κύματα, αφροί, ρίγες, ρωγμές κ.λπ. είναι μερικά παραδείγματα φυσικών σχεδίων.
Q # 4) Είναι το MVC σχέδιο μοτίβου;
Απάντηση: Ναι, είναι ένα είδος μοτίβου σχεδίασης με το οποίο μπορούμε να δημιουργήσουμε μια εφαρμογή που αποτελείται από το μοντέλο δεδομένων, την παρουσίαση ή το επίπεδο προβολής και τον ελεγκτή. Μπορούμε να το ταξινομήσουμε περισσότερο ως αρχιτεκτονικό σχέδιο.
συμπέρασμα
Αυτό ολοκληρώνει τη συζήτησή μας για μοτίβα σχεδιασμού στην Java. Παρόλο που η Java υποστηρίζει τρεις τύπους σχεδίων σχεδίασης, δηλαδή. Δημιουργικά, Δομικά και Συμπεριφορικά μοτίβα, ενδιαφερόμαστε περισσότερο για το δημιουργικό σχέδιο.
Σύμφωνα με το πεδίο αυτού του σεμιναρίου, έχουμε συζητήσει τρία παραδείγματα μοτίβων δημιουργικής σχεδίασης, το μοτίβο singleton, το εργοστασιακό μοτίβο και το μοτίβο δημιουργού.
Το μοτίβο Singleton είναι το απλούστερο σχέδιο σχεδίασης και η εργοστασιακή μέθοδος υποτίθεται ότι είναι ένα κοινό σχέδιο σχεδιασμού που χρησιμοποιείται ευρέως. Το μοτίβο δόμησης χρησιμοποιείται για την κατασκευή σύνθετων αντικειμένων και χρησιμοποιείται κυρίως για την ανάπτυξη σύνθετων εφαρμογών.
=> Ανατρέξτε στον τέλειο οδηγό εκπαίδευσης Java εδώ.
Συνιστώμενη ανάγνωση
- Java String με String Buffer και String Builder Tutorial
- Ανάπτυξη Java: Δημιουργία και εκτέλεση αρχείου Java JAR
- Βασικά Java: Java Syntax, Java Class και Core Java Concepts
- Java Virtual Machine: Πώς βοηθά το JVM στην εκτέλεση της εφαρμογής Java
- Εκπαιδευτικό πρόγραμμα JAVA για αρχάριους: 100+ πρακτικά εκπαιδευτικά βίντεο Java
- Java Integer και Java BigInteger Class με παραδείγματα
- Java Components: Java Platform, JDK, JRE και Java Virtual Machine
- Σημαντική λίστα λέξεων-κλειδιών Java - δεσμευμένες λέξεις σε Java