Προγραμματισμός

Εφαρμογές, μικροεφαρμογές και υβρίδια

Εάν παρακολουθείτε Java 101, γνωρίζετε ότι ο Jacob Weintraub δημιούργησε μια εξαιρετική σειρά άρθρων που έχουν σχεδιαστεί για να βοηθήσουν τους αρχάριους Java να γίνουν προγραμματιστές Java. Ωστόσο, καθώς ο Jacob δεν μπορεί πλέον να συνεχίσει αυτήν τη στήλη, JavaWorld μου έδωσε το φακό.

Θα ανακαλύψετε γρήγορα ότι η διαδρομή μου για να γίνω προγραμματιστής Java ακολουθεί μια διαφορετική διαδρομή. Για παράδειγμα, προτιμώ να μιλήσω για τις πτυχές προγραμματισμού της Java που δεν είναι αντικειμενοστρεφείς (όπως τύποι, μεταβλητές, τελεστές, εκφράσεις και δηλώσεις) πριν εξερευνήσω την αντικειμενοστραφή πλευρά της. Πιστεύω ότι αυτή η προσέγγιση θα βελτιωθεί Java 101Η φυσική ροή από το ένα θέμα στο άλλο - μια ροή που κινείται απρόσκοπτα από την αρχή στο τέλος. Για να διευκολύνω τη συζήτηση, μερικές φορές θα παρουσιάσω μια προηγμένη ιδέα προτού την εξηγήσω πλήρως. Ως αποτέλεσμα, θα συναντήσετε σύντομες εξηγήσεις για πιο προχωρημένα θέματα καθώς προχωράτε σε αυτό και σε μελλοντικά άρθρα.

Java 101 θα εισαγάγει πολλά παραδείγματα προγραμμάτων. Κάθε πρόγραμμα μεταγλωττίζεται με μεταγλωττιστή Sun's Java 2 Platform, Standard Edition έκδοση 1.4 (επίσης γνωστό ως SDK 1.4) και δοκιμάζεται στην πλατφόρμα Windows 98 SE. Παρόλο που θα προσπαθήσω να περιορίσω τις αναφορές των Windows στο ελάχιστο, αυτό δεν θα είναι πάντα δυνατό, επομένως θα σας προειδοποιήσω όταν ένα άρθρο εισέλθει στον κόσμο των Windows.

Επειδή δεν έχω περάσει πολύ χρόνο να ασχοληθώ με την Java από την οπτική γωνία του διακομιστή, αυτή η στήλη θα επικεντρωθεί στην Java από την πλευρά του πελάτη. Αυτό δεν σημαίνει ότι δεν θα διερευνήσουμε θέματα όπως η απομακρυσμένη μέθοδος επίκλησης και το JDBC, που γεφυρώνουν τις πλευρές του πελάτη και του διακομιστή. Ωστόσο, δεν θα παρουσιάσω servlets, Enterprise JavaBeans, Java Server Pages και άλλα θέματα από τον διακομιστή. Για να πάρετε μια καλύτερη ιδέα για τα θέματα που θα καλύψω, δείτε την πλαϊνή μπάρα, The Road Ahead, για το Java 101 περίγραμμα μαθημάτων.

Στο άρθρο αυτού του μήνα, συζητώ τη δομή των εφαρμογών, των μικροεφαρμογών και των υβριδικών προγραμμάτων. Από την άποψη της εφαρμογής, μπορεί να βρείτε κάποια αλληλεπικάλυψη από τα προηγούμενα άρθρα του Jacob, αλλά θα παρουσιάσω επίσης αρκετά νέο περιεχόμενο.

Κατηγορίες προγράμματος

Η Java σάς δίνει τη δυνατότητα να δημιουργήσετε τέσσερα είδη προγραμμάτων: εφαρμογές, μικροεφαρμογές, υβρίδια και servlets. Συζητώ τα πρώτα τρία προγράμματα σε αυτό το άρθρο. Για να μάθετε περισσότερα σχετικά με servlets, συμβουλευτείτε την τεκμηρίωση Java 2 Platform, Enterprise Edition.

Εφαρμογές

Ενα εφαρμογή είναι ένα αυτόνομο πρόγραμμα που αποτελείται από τουλάχιστον μία τάξη με ένα κύριος() μέθοδος. Αυτή η μέθοδος διαθέτει την ακόλουθη υπογραφή:

δημόσιο στατικό κενό κενών (String [] args)

ο δημόσιο σημαίνει λέξη-κλειδί κύριος() καλείται από έξω από την τάξη στην οποία δηλώνεται. ο στατικός σημαίνει λέξη-κλειδί κύριος() καλείται χωρίς αναφορά αντικειμένου. Με άλλα λόγια, το JVM δεν χρειάζεται να δημιουργήσει ένα αντικείμενο από την κλάση που δηλώνει κύριος() πριν καλέσετε κύριος(). Τέλος, το κενός σημαίνει λέξη-κλειδί κύριος() δεν επιστρέφει μια τιμή.

Όπως και με άλλες μεθόδους, κύριος() έχει μια λίστα παραμέτρων, μια λίστα τύπων και ονομάτων μεταβλητών. Σε κύριος()Στην περίπτωση, εμφανίζεται μόνο μία παράμετρος - υποστηρίζει. Αυτή η παράμετρος δηλώνεται ως αναφορά σε - επίσης γνωστή ως διεύθυνση - ενός πίνακα Σειρά αντικείμενα. Κάθε αντικείμενο περιέχει τα περιεχόμενα ενός επιχειρήματος που περνά στην εφαρμογή μέσω της γραμμής εντολών του προγράμματος. Σημείωση: Δεν χρειάζεται να το χρησιμοποιήσετε υποστηρίζει ως το όνομα αυτής της παραμέτρου. Μπορείτε εξίσου εύκολα να καθορίσετε κοτόπουλα, όπως λέμε Χορδές [] κοτόπουλα.

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

Λίστα 1. App.java

// App.java class App {public static void main (String [] args) {System.out.println ("Ορίσματα εντολών \ n"); για (int i = 0; i <args.length; i ++) System.out.println (args [i]); }} 

ΠΛΑΙΣΙΟ ΚΕΙΜΕΝΟΥ:

TEXTBOX_HEAD: Σχόλια

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

: END_TEXTBOX

Κωδικός εντός Εφαρμογή'μικρό κύριος() μέθοδος καλεί ένα από τα έξω μεταβλητή αναφοράς αντικειμένου εκτύπωση () μέθοδοι εξόδου πληροφοριών στην τυπική συσκευή εξόδου. Συνήθως, αυτή η συσκευή είναι ένα παράθυρο εντολών όπως το παράθυρο Microsoft Windows DOS, αν και η συσκευή μπορεί να ανακατευθυνθεί σε ένα αρχείο. (Θα δείξω αυτήν την ανακατεύθυνση σε επόμενο άρθρο.) Ο χαρακτήρας περιόδου διαχωρίζει το εκτύπωση () κλήση μεθόδου από το έξω μεταβλητή αναφοράς αντικειμένου. Με τη σειρά του, έξω δηλώνεται σε μια τάξη που ονομάζεται Σύστημα και χωρίστηκε από Σύστημα με χαρακτήρα τελείας. Μια μεταβλητή αναφοράς αντικειμένου μοιάζει πολύ με ένα δείκτη C ή C ++: Είναι μια μεταβλητή που περιέχει τη διεύθυνση μιας άλλης μεταβλητής. Θα λάβετε αρκετή έκθεση σε μεταβλητές αναφοράς αντικειμένων σε επερχόμενα άρθρα.

Εάν έχετε συνεργαστεί με C ή C ++, πιθανότατα γνωρίζετε τη δομή της δήλωσης for for loop (που εμφανίζεται στον πηγαίο κώδικα μέσω λέξης-κλειδιού Για). Η δήλωση για βρόχο εκτελεί επαναλαμβανόμενα μία ή περισσότερες δηλώσεις είτε για καθορισμένο αριθμό φορών είτε επ 'αόριστον. (Σε μελλοντικά άρθρα, θα διερευνήσω λεπτομερώς τη δήλωση για βρόχο και άλλες δηλώσεις.) Εφαρμογήπερίπτωση, Για εκτελεί α System.out.println μέθοδος κλήσης για κάθε όρισμα που μεταβιβάστηκε σε αυτό το πρόγραμμα στη γραμμή εντολών. Ειδοποίηση args.length. Στην Ιάβα, μήκος είναι μια ιδιότητα ενός πίνακα και επιστρέφει έναν αριθμό στοιχείων πίνακα.

Στη γραμμή εντολών, πληκτρολογήστε javac App.java να μεταγλωττιστεί Εφαρμογή. Εάν έχετε εισαγάγει τα πάντα όπως φαίνεται, θα πρέπει να καταλήξετε με ένα αρχείο τάξης που ονομάζεται App.class που περιέχει Εφαρμογήοδηγίες κώδικα byte. Λοιπόν, πώς τρέχετε Εφαρμογή; Ρίξτε μια ματιά στο σχήμα 1. Αυτό το σχήμα δείχνει Εφαρμογή τρέχει από τη γραμμή εντολών με τρία ορίσματα: ένας, δύο, και τρία.

Σημείωση: Το σχήμα 1 δείχνει Εφαρμογή λειτουργεί με Windows 98 SE. Εκτέλεση Unix και Linux Εφαρμογή ομοίως. Ωστόσο, όταν τρέχετε κάτω από το Mac, πιθανότατα θα πρέπει να ολοκληρώσετε λίγο περισσότερη δουλειά. Θα ήθελα πολύ να σας δείξω πώς να το κάνετε αυτό, αλλά δεν έχω χρησιμοποιήσει ποτέ Java σε Mac.

ο Ιάβα το πρόγραμμα εκτελεί μια εφαρμογή. Στα Windows, αυτό το πρόγραμμα αποθηκεύεται σε ένα εκτελέσιμο αρχείο που ονομάζεται java.exe. Οπως και με javac, Ιάβα καθορίζεται στη γραμμή εντολών. Το όνομα του αρχείου κλάσης που περιέχει το κύριος() ακολουθεί η μέθοδος Ιάβα.

ο Ιάβα το πρόγραμμα αναζητά το κύριος() μέθοδο στο αρχείο κλάσης. Εάν δεν το βρει κύριος(), εξάγει ένα μήνυμα σφάλματος. (Όπως μπορείτε να δείτε από το Σχήμα 1, εσείς ΜΗΝ καθορίστε το .τάξη επέκταση αρχείου.)

Τα επιχειρήματα μπορούν να ακολουθούν το όνομα της τάξης, αλλά είναι προαιρετικά. Στο σχήμα 1, αυτά τα επιχειρήματα είναι ένας, δύο, και τρία. Ιάβα δημιουργεί ένα Σειρά array (μέσω του Java Native Interface - JNI) και συμπληρώνει κάθε στοιχείο με αναφορά σε a Σειρά αντικείμενο που περιέχει τους χαρακτήρες που συνθέτουν ένα όρισμα. Μόλις ολοκληρωθεί, το κύριος() Η μέθοδος καλείται (μέσω του JNI) και πέρασε μια αναφορά στο Σειρά πίνακας.

Ας υποθέσουμε ότι έπρεπε να πληκτρολογήσετε εφαρμογή java * στη γραμμή εντολών. Τι πιστεύετε ότι θα εμφανιστεί το παράθυρο εντολών; Εάν πιστεύετε ότι η απάντηση είναι αστερίσκος, ρίξτε μια ματιά στο Σχήμα 2.

Το σχήμα 2 δείχνει Εφαρμογή εμφανίζει τα ονόματα των αρχείων που βρίσκονται στον ίδιο κατάλογο με App.class. Αποδεικνύεται ότι ο χαρακτήρας αστερίσκου αντιπροσωπεύει ένα μπαλαντέρ. Με άλλα λόγια, αντιπροσωπεύει όλα τα ονόματα αρχείων στον τρέχοντα κατάλογο. Πότε Ιάβα χτίζει το Σειρά πίνακα, λαμβάνει μια λίστα με όλα τα ονόματα αρχείων του τρέχοντος καταλόγου και τοποθετεί κάθε όνομα αρχείου σε ξεχωριστό Σειρά αντικείμενο, το οποίο στη συνέχεια αποθηκεύεται ως στοιχείο στον πίνακα.

Δοκιμάστε να τρέξετε εφαρμογή java * *. Μαντέψτε τι θα εμφανιστεί. Επειδή κάθε αστερίσκος προκαλεί Ιάβα για να αποκτήσετε μια λίστα με όλα τα ονόματα αρχείων, θα δείτε δύο αντίγραφα όλων των ονομάτων αρχείων στον τρέχοντα κατάλογο.

Ας υποθέσουμε ότι γράφετε ένα Αριθμομηχανή εφαρμογή που πολλαπλασιάζει δύο αριθμούς με τον αστερίσκο, όπως στο Υπολογιστής java 4 * 3. Με βάση την προηγούμενη συζήτηση, τα 4 και 3 δεν θα πολλαπλασιαστούν. Εάν θέλετε ο αστερίσκος να ερμηνευτεί ως ίδιος - και όχι μπαλαντέρ - πρέπει να τον περιβάλλετε με ένα ζευγάρι διπλών χαρακτήρων. Για παράδειγμα, θα πληκτρολογήσετε Υπολογιστής java 4 "*" 3. Επιπλέον, εάν το όρισμα σας περιέχει ενσωματωμένους χαρακτήρες διαστήματος και θέλετε να συμπεριλάβετε αυτούς τους διαστημικούς χαρακτήρες ως μέρος του ορίσματος, πρέπει να χρησιμοποιήσετε διπλά εισαγωγικά. Για παράδειγμα, πληκτρολογήστε java App "το σύνθετο επιχείρημά μου" στη γραμμή εντολών για καθορισμό το σύνθετο επιχείρημά μου όπως και ΕφαρμογήΤο μόνο επιχείρημα.

Η πρώτη μας εφαρμογή Java περιελάμβανε μία κατηγορία. Ωστόσο, μπορείτε επίσης να δημιουργήσετε εφαρμογές που αποτελούνται από πολλές κατηγορίες. Επιπλέον, κάθε τάξη μπορεί να έχει τη δική της κύριος() μέθοδος. Για να δείτε πώς μοιάζει αυτή η κατάσταση, ανατρέξτε στην Καταχώριση 2.

Λίστα 2. Fred.java

// Fred.java class A {public static void main (String [] dog) {System.out.println ("Class A main () method"); }} κλάση Β {δημόσια στατική κενή κενή (String [] κοτόπουλα) {System.out.println ("Κατηγορία Β κύρια () μέθοδος"); System.out.println ("Num args:" + chickens.length); }} 

Η λίστα 2 παρουσιάζει τον πηγαίο κώδικα που είναι αποθηκευμένος σε ένα αρχείο που ονομάζεται Φρεντ Τζάβα. Αυτός ο πηγαίος κώδικας αποτελείται από δύο κατηγορίες: ΕΝΑ και σι. Κατά τη σύνταξη (όπως στο javac Fred.java), καταλήγετε με δύο αρχεία κατηγορίας: Μια τάξη και B. κλάση. Εάν επρόκειτο να πληκτρολογήσετε java Α, θα δεις Κύρια μέθοδος κατηγορίας Α () στο παράθυρο εντολών. Ωστόσο, εάν επρόκειτο να πληκτρολογήσετε java Β, θα εμφανιστεί το παράθυρο εντολών Κύρια μέθοδος κατηγορίας Β (), ακολουθούμενη από μια γραμμή που ξεκινά με Ο Num υποστηρίζει: και προσδιορίζει τον αριθμό των ορισμάτων που έχουν περάσει στη γραμμή εντολών.

Είναι Φρειδερίκος μία εφαρμογή ή δύο εφαρμογές; Η απάντηση εξαρτάται από την προοπτική σας. Κανονικά, μια εφαρμογή αποτελείται από μία κλάση με ένα κύριος() μέθοδος. Όπως έχετε δει, εκτελείτε την εφαρμογή καθορίζοντας Ιάβα και το όνομα της κλάσης που περιέχει κύριος(). Ωστόσο, ίσως βρεθείτε να τοποθετείτε ένα κύριος() μέθοδο σε άλλες κατηγορίες (για σκοπούς εντοπισμού σφαλμάτων). Για να αποφύγετε τη σύγχυση για οποιονδήποτε χρησιμοποιεί το πρόγραμμά σας, καταργήστε όλα κύριος() μεθόδους εκτός από το κύριος() μέθοδος που ξεκινά την εφαρμογή ή προσδιορίστε το αρχείο κλάσης που περιέχει τον επίσημο κύριος() πριν από την ανάπτυξη της εφαρμογής.

Επιπρόσθετα Ιάβα, το Java 2 SDK περιλαμβάνει ένα javaw πρόγραμμα που μπορείτε να χρησιμοποιήσετε για την εκτέλεση εφαρμογών. Αυτό το πρόγραμμα είναι σχεδόν πανομοιότυπο με Ιάβα, εκτός από javaw δεν εμφανίζει ένα παράθυρο εντολών κατά την εκτέλεση μιας εφαρμογής (εκτός εάν εκτελείτε την εφαρμογή μέσω ενός αρχείου δέσμης των Windows, το οποίο ανοίγει αυτόματα ένα παράθυρο εντολών). Για παράδειγμα, ας υποθέσουμε ότι το αρχείο τάξης ονομάζεται GUIDemo αποθηκεύεται στο c: \ jdk1.4 \ έργα κατάλογος (υποθέτοντας τα Windows). Αποφασίζετε να δημιουργήσετε μια συντόμευση Windows για την εκτέλεση αυτού του προγράμματος και να επιλέξετε την ακόλουθη γραμμή εντολών: java -cp c: \ jdk1.4 \ έργα GUIDemo. (Ο -cp η επιλογή λέει Ιάβα πού να βρείτε ένα αρχείο τάξης που ονομάζεται GUIDemo.class.) Όταν επιλέγετε τη συντόμευση, εμφανίζεται ένα παράθυρο εντολών GUIDemoΤο παράθυρο GUI. Ωστόσο, εάν αλλάξετε Ιάβα προς την javaw, δεν θα δείτε το παράθυρο εντολών.

Τώρα που είχατε την ευκαιρία να παίξετε με εφαρμογές, ας ρίξουμε μια ματιά στη δεύτερη κατηγορία προγραμμάτων Java - applets.

Μικροεφαρμογές

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

Τα αρχεία τάξης μιας μικροεφαρμογής κατεβάζουν αυτόματα στο μηχάνημα ενός χρήστη όταν ο χρήστης περιηγείται σε μια Ιστοσελίδα που περιέχει τη μικροεφαρμογή. Μετά τη λήψη, η εικονική μηχανή του προγράμματος περιήγησης ή το λογισμικό Java Plug-in εκτελεί αυτά τα αρχεία κλάσης. (Δείτε πόρους για ένα άρθρο που εξερευνά την προσθήκη Java.)

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

Η Sun έχει καθιερώσει μια συγκεκριμένη (και εμπλεκόμενη) διαδικασία για τη μετατροπή των περιορισμένων μικροεφαρμογών σε μη περιορισμένες εφαρμογές. Ωστόσο, οι απεριόριστες μικροεφαρμογές μπορούν να εκτελεστούν μόνο με την άδεια του χρήστη. (Θα διερευνήσουμε αυτό το θέμα σε μελλοντικό άρθρο.) Για να είναι ένα applet, ένα - και μόνο ένα - από τα μαθήματα της applet πρέπει να συμμορφώνεται με το ακόλουθο μοτίβο:

δημόσια τάξη όνομα τάξης επεκτείνει java.applet.Applet {} 

Τα απαιτούμενα δημόσιο Η λέξη-κλειδί δίνει στο πρόγραμμα περιήγησης πρόσβαση στο applet. ο εκτείνεται Η λέξη-κλειδί υποδηλώνει την αντικειμενοστραφή έννοια προγραμματισμού της κληρονομιάς και υποδηλώνει ότι το όνομα τάξης Η κλάση κληρονομεί δυνατότητες applet από μια κλάση που ονομάζεται Applet (βρίσκεται στο java.applet πακέτο - ένας οργανωτικός μηχανισμός για τάξεις και αρχεία τάξεων - για διερεύνηση σε μελλοντικό άρθρο).

Κάθε μικροεφαρμογή έχει κύκλο ζωής. Ένα applet αρχικοποιείται (μία και μόνο μία φορά), ξεκινά και σταματά (μία ή περισσότερες φορές κατά τη διάρκεια της ζωής του) και καταστρέφεται (μία και μόνο μία φορά). Το πρόγραμμα περιήγησης καλεί μία από τις τέσσερις μεθόδους σε σημαντικά σημεία κατά τη διάρκεια αυτού του κύκλου ζωής για να δείξει ότι η μικροεφαρμογή έχει εισέλθει σε μια άλλη φάση ύπαρξης. Αυτές οι μέθοδοι είναι μέσα σε αυτό(), αρχή(), να σταματήσει(), και καταστρέφω().

$config[zx-auto] not found$config[zx-overlay] not found