Πίνακας περιεχομένων:
Βίντεο: Web Scraping with Nokogirl/Kimono by Robert Krabek 2024
Η λέξη συμβάν δημιουργεί όλα τα είδη εικόνων. Για έναν μη προγραμματιστή, ένα γεγονός είναι μόνο "κάτι που συμβαίνει. "Εάν είστε συνηθισμένοι να ασχολείστε με παράθυρα και καρέ στην Java, τότε ίσως σκεφτείτε ένα γεγονός ως ένα περιστατικό που ξυπνά ένα κομμάτι κώδικα. Για παράδειγμα, το κλικ του ποντικιού ή το πάτημα ενός πλήκτρου του χρήστη ξυπνά τον κωδικό που θέτει μια επιλογή και εμφανίζει ένα πλαίσιο OK. Το ίδιο κλικ ή πλήκτρο καλείται συμβάν επειδή συμβαίνει ανεξάρτητα από το τρέχον πρόγραμμα. Μόνο ο χρήστης γνωρίζει πότε θα πατήσει αυτό το κουμπί. Και όταν πατηθεί το κουμπί, κάποιο μέρος του προγράμματος Java ξυπνάει και ασχολείται με την κατάσταση. Αυτό το σενάριο ονομάζεται προγραμματισμός που καθοδηγείται από συμβάντα .
Προγραμματισμός που βασίζεται σε συμβάντα
Τα προγράμματα SAX είναι οδηγούμενα από συμβάντα . Για παράδειγμα, παίρνετε στο κρεβάτι για έναν καλό ύπνο. Θα φτάσετε πάνω για να ρυθμίσετε το ξυπνητήρι σας και στη συνέχεια να εγκατασταθεί, κλείστε τα μάτια σας, και να γίνει ασυνείδητο για αρκετές ώρες. Στη συνέχεια συμβαίνει ένα σημαντικό γεγονός: έρχεται μια συγκεκριμένη ώρα της ημέρας. Όταν πραγματοποιηθεί το συμβάν, το ξυπνητήρι εισέρχεται στη λειτουργία "ξυπνήστε" - και κάνει ένα φοβερό να σας ανακαλέσει από τον ξεκούραστο ύπνο σας.
Ακολουθεί ένα άλλο σενάριο. Είστε απασχολημένος στέλεχος και θα είστε έξω για αρκετές ώρες, αλλά δεν θέλετε να χάσετε οποιαδήποτε σημαντική δραστηριότητα. Πριν βγείτε από το γραφείο, πείτε στο βοηθό σας: "Καλέστε μου αν εμφανιστεί κάτι σημαντικό. "Η έκδοση αυτής της παραγγελίας είναι παρόμοια με τη ρύθμιση του ξυπνητηριού. Εσείς λέτε στον βοηθό σας (το ξυπνητήρι σας) να σας ξυπνήσει αν συμβεί κάποιο γεγονός. Πραγματοποιώντας αυτό το αίτημα στον βοηθό σας (ή στον ξυπνητήρι σας) ονομάζεται εγγραφή . Σε κάθε σενάριο, εγγράφεστε στον εαυτό σας με μια υπηρεσία αφύπνισης. Μετά την εγγραφή σας, μπορείτε να συνεχίσετε τη χαλαρή μη άσκηση δραστηριότητάς σας, αγνοώντας όλες τις πραγματικές επιχειρήσεις μέχρι να συμβεί κάποιο γεγονός. Στη συνέχεια …
Δακτύλιος, δακτύλιος. Το κινητό σου κουράζει. "Χαίρετε? "
" Γεια σας. Αυτός είναι ο βοηθός σας. Έχω τα στοιχεία πωλήσεων για το πρώτο τρίμηνο. Είναι 1 εκατομμύριο, 4 εκατομμύρια και 2 εκατομμύρια. "
" Ας δούμε. Αυτό είναι ένα σύνολο 7 εκατομμυρίων, "λέτε. "Θα το σημειώσω στο PalmPilot μου. Ευχαριστώ. "Κρεμάστε.
Πολλές στιγμές αργότερα, θα λάβετε μια άλλη κλήση. "Ο πρόεδρος της Big Bucks, Inc., θέλει να κλείσει αυτή τη συμφωνία. Μιλάνε 10 εκατομμύρια δολάρια. "
"Χμμ", απαντάς. "Αυτό θα φέρει τα ετήσια έσοδα μέχρι και 17 megabucks. Θα αποθηκεύσω αυτές τις πληροφορίες στην εφαρμογή υπολογιστικού φύλλου μου. Ευχαριστώ που κάλεσες. "
Κάθε μία από αυτές τις αλληλεπιδράσεις είναι γνωστή ως επανάκληση .Νωρίτερα την ημέρα, όταν καταχωρήσατε την επιθυμία σας με τον βοηθό, ζητήσατε μια επανάκληση. Στη συνέχεια, κάθε φορά που λαμβάνει χώρα ένα συμβάν, ο βοηθός κάνει μια επανάκληση για να σας ειδοποιήσει για το συμβάν. Σε όρους προγραμματισμού Java, ο βοηθός καλεί μία από τις πολλές μεθόδους (ένα από τα υποπρογράμματα Java).
Η ουσία του προγραμματισμού που οδηγείται από γεγονόταΟ προγραμματισμός που βασίζεται σε γεγονότα έχει τρία μέρη:
- Εγγραφή: Καταγράφετε την επιθυμία σας να ενημερώνεστε κάθε φορά που συμβαίνει κάποιο συμβάν. Καταγράφετε αυτήν την επιθυμία με ένα άλλο κομμάτι κώδικα - άλλο αντικείμενο, συνήθως κάτι που έχετε εισάγει (όπως ένα κομμάτι κώδικα που είναι μέρος του API κάποιου άλλου). Αυτό το αντικείμενο παρακολουθεί, από πίσω, για την εμφάνιση του γεγονότος που καθορίσατε.
- Συμβάν συμβάν: Συμβαίνει ένα συγκεκριμένο συμβάν.
- Επανάκληση: Το άλλο κομμάτι του κώδικα πραγματοποιεί επανάκληση. Μία από τις μεθόδους σας καλείται.
Δύο είδη κωδικών
Η διάκριση μεταξύ κώδικα ενεργών και παθητικού είναι χρήσιμη:
- Ο ενεργός κώδικας έχει μια κύρια μέθοδο. Ο ενεργός κώδικας, όταν αρχίσει να τρέχει, παίρνει την κεντρική σκηνή. Ο ενεργός κώδικας περιέχει το νήμα εκτέλεσης που ελέγχει ολόκληρο το παιχνίδι με μπάλα.
- Ο παθητικός κώδικας βρίσκεται ακριβώς εκεί, περιμένοντας να τον καλέσετε. Μια παθητική τάξη ζαριών δεν κάνει τίποτα μέχρι να αποκαλυφθεί κάποιος άλλος κωδικός Dice. ρολό().
Τώρα, μπορείτε να σκεφτείτε ότι ο παθητικός κώδικας είναι το μόνο που χρειάζεστε για προγραμματισμό που βασίζεται σε γεγονότα, αλλά δεν είναι. Για το χειρισμό συμβάντων, χρειάζεστε αυτό το βήμα εγγραφής. Ο παθητικός κώδικας ξεκινά με την καταχώρισή του με κάποιο άλλο κομμάτι κώδικα.
Για να εδραιώσετε αυτή την έννοια της εγγραφής, σκεφτείτε ένα παράδειγμα από τον κόσμο των ποντικιών, των παραθύρων και των κουμπιών στην οθόνη. Δημιουργείτε ένα παράθυρο ή ένα πλαίσιο. Θέλετε το πλαίσιο σας να ανταποκρίνεται στα κλικ του ποντικιού, ώστε να εκδώσετε την ακόλουθη εντολή:
κουμπί. addMouseListener (αυτό);
Αυτή η εντολή καταχωρεί το πλαίσιο σας με το κουμπί. Η εντολή λέει, στην πραγματικότητα, Όποτε συμβαίνει ένα συμβάν ποντικιού, καλέστε μία από τις μεθόδους χειρισμού του ποντικιού του πλαισίου . Αργότερα, όταν ο χρήστης κάνει κλικ στο ποντίκι, το πλαίσιο παίρνει μια επανάκληση. Ο υπολογιστής καλεί τη μέθοδο του ποντικιού του πλαισίου.
Συμβάντα SAX
Σίγουρα, το SAX είναι αποτέλεσμα συμβάντων, αλλά αυτό δεν σημαίνει ότι ένα πρόγραμμα SAX περιμένει τα κλικ του ποντικιού. Αντ 'αυτού, ο κώδικας SAX ακολουθεί το μοντέλο καταχωρητή-συμβάντος-επανάκλησης που περιγράφεται στις τελευταίες παραγράφους. Κάθε πρόγραμμα SAX έχει δύο απαραίτητα κομμάτια κώδικα:
- Ένα κομμάτι κώδικα που γράφετε - ο χειρισμός . (Ο χειριστής σας μπορεί να επεκτείνει μια προ-γραπτή κλάση DefaultHandler.) Ο χειριστής είναι σαν το εκτελεστικό εκατομμυρίου δολαρίων στην προηγούμενη ενότητα.
- Ένα κομμάτι κώδικα που κανονικά δεν γράφετε - ο αναλυτής . Ο αναλυτής παίζει ρόλο όπως αυτός του βοηθού της εκτελεστικής εξουσίας. Το API του Java 1. 4 διαθέτει ενσωματωμένο αναλυτή. Δημιουργείτε μια ενότητα αυτού του αναλυτή και, στη συνέχεια, καταχωρίζετε τον χειριστή σας με την εν λόγω παράσταση αναλυτή. Στην πραγματικότητα, πείτε στο Ίδρυμα να καλέσει τον χειριστή σας όποτε συμβαίνει κάποιο συμβάν.
Οτιδήποτε έχει να κάνει με την XML είναι καινούργιο και βρίσκεται ακόμα σε κατάσταση ροής. Εξαιτίας αυτού, η ορολογία είναι επιμελημένη με κάποιους ιδιόμορφους τρόπους. Κατά την ανάπτυξη της έκδοσης 2 της SAX, ορισμένοι τεχνικοί είχαν ένα φεστιβάλ make-up-new-names. Αυτό που συνήθως ονομάζεται "αναλυτής" ενσωματώνεται σε μια διεπαφή Java που ονομάζεται XMLReader. Υπήρχε μια τάξη που ονομάζεται org. xml. σαξ. Parser, αλλά η τάξη πήρε υποτιμημένη (πράγμα που σημαίνει ότι πρέπει να το ξύνετε από το κάτω μέρος του παπουτσιού σας). Για να κάνουμε τα πράγματα λίγο πιο περίπλοκα, υπάρχει ακόμα ένα εργαλείο ανάλυσης, javax. xml. αναλυτές. SAXParser. Χρησιμοποιείτε αυτό το SAXParser για να κάνετε τον εαυτό σας έναν XMLReader. Με λίγη τύχη, σύντομα θα εξοικειωθείτε με αυτή την περίπλοκη ορολογία. Προς το παρόν, θυμηθείτε ότι αυτό που ονομάζεται "αναλυτής" είναι συνήθως μια παρουσία του XMLReader.
Το σενάριο εγγραφής και επανάκλησης είναι αυτό που κάνει το SAX συμβάν. Τώρα το αστείο είναι ότι ένα γεγονός SAX δεν είναι απτό. Ένα συμβάν SAX δεν θα σας υπενθυμίσει την πληκτρολόγηση ή το πάτημα ενός κουμπιού. Στο SAX, ο αναλυτής σαρώνει ένα έγγραφο XML από πάνω προς τα κάτω. Κάθε φορά που ο αναλυτής συναντά κάτι ενδιαφέρον, ο αναλυτής εκλύει ένα συμβάν και καλεί τον χειριστή. Στη συνέχεια, ο χειριστής πρέπει να κάνει κάτι για αυτή την ενδιαφέρουσα συνάντηση.