Σάββατο, 19 Σεπτεμβρίου 2015

Χειριστής Γεγονότων - Αντικειμενοστρεφής προγραμματισμός (M2000)- Νέο

Ένα δύσκολο θέμα είναι ο Αντικειμενοστρεφής προγραμματισμός (OOP ή object-oriented programming ). Η γλώσσα Μ2000 από την όγδοη έκδοση είναι ικανή να φτιάχνει τέτοια προγράμματα. Τελευταία διάβαζα εδώ  το "Event-Driven Programming: Introduction, Tutorial, History" του Stephen Ferg, απ΄ όπου μπορείτε να κατεβάσετε ένα πολύ ωραίο κείμενο πάνω στο θέμα.

Με πολύ λίγα λόγια, έχουμε δυο υπηρεσίες, όπου βλέπει η μία το πλήκτρο του ποντικιού, η υπηρεσία δείκτη και μια άλλη που βλέπει ένα συγκεκριμένο πλήκτρο στο πληκτρολόγιο. Υπάρχει ένας Χειριστής Γεγονότων τον οποίο αρχικά χρησιμοποιούμε για να φτιάξουμε τρία υποκείμενα πλήκτρα, ως στοιχεία ελέγχου, και τα ονομάζουμε β1, β2, β3. Φτιάχνουμε τρεις υπηρεσίες, δυο για τα πλήκτρα 1 και 2,  καθώς και μια για το αριστερό πλήκτρο του ποντικού. Καταχωρούμε στο Χειριστή Γεγονότων την κάθε υπηρεσία στη λίστα γεγονότων. Επίσης καταχωρούμε ποια υπηρεσία συνδέεται με ποιο υποκείμενο (ή στοιχείο ελέγχου). Μάλιστα εδώ έχουμε καταχωρήσει το πλήκτρο 1 του πληκτρολογίου στα β1 και β2. Μετά από το στήσιμο αυτό πάμε σε ένα βρόχο όπου κάθε 150 ms προβαίνει σε παρατήρηση, δηλαδή στην παρακολούθηση των υπηρεσιών. Αν κάποια υπηρεσία επιβεβαιωθεί, τότε καλούμε το αντίστοιχο βν (1 ή 2 ή 3) και ειδικότερα την συνάρτηση Κάλεσε_Πίσω η οποία καλεί από το στοιχείο ελέγχου τον Χειριστή Γεγονότων με την συνάρτηση Ερώτημα παρέχοντάς του την αναφορά σε αυτόν, ώστε τελικά ο Χειριστής να δει ποιος είναι, να διαβάσει την ονομασία του και να μας την δείξει στην οθόνη. Με το δεξί πλήκτρο του ποντικού τερματίζουμε το βρόχο και το πρόγραμμα.

Στην αναθεώρηση 88 βελτιώθηκε η ταχύτητα του περιβάλλοντος, αλλά βγήκε η ανανέωση οθόνης από την εντολή Κάθε. Οπότε ή γράφουμε Θέσε Αργα σαν πρώτη εντολή ή γράφουμε την εντολή Ανανέωση σαν τελευταία εντολή στο μπλοκ της Κάθε. Βγάλτε τα \\ απ΄όπου θέλετε.

\\ Θέσε Αργά
Φορμα 80,40
Οθόνη 1, 0
Πένα 14
Αναφορά 2, "Χειριστής Γεγονότων"
Αναφορά "Χρησιμοποίησε πλήκρα 1, 2 και Δείκτης (ποντίκι) Αριστερά, και για έξοδο Δείκτης Δεξιά"
Οθόνη, 2
Κλάση Υπηρεσία_Δείκτη {
      όνομα$="Πλήκτρο_Δείκτη", το_κουμπί_μου, αθροιστής
      Πίνακας αναφ$()
      Τμήμα Υπηρεσία_Δείκτη {
            Διάβασε .το_κουμπί_μου
            .όνομα$<=μορφή$("{0}({1})", .όνομα$, .το_κουμπί_μου)
      }
      Τμήμα καταχώρησε {
            .αθροιστής++
            Πίνακας .αναφ$(.αθροιστής)
            Διάβασε .αναφ$(.αθροιστής-1)
      }
      Συνάρτηση Επιβεβαίωση {
            =Δείκτης=.το_κουμπί_μου
      }
}
Κλάση Υπηρεσία_Πλήκτρου {
      όνομα$="Πλήκτρο", το_κουμπί_μου, αθροιστής
      Πίνακας αναφ$()
      Τμήμα Υπηρεσία_Πλήκτρου {
            Διάβασε .το_κουμπί_μου
            .όνομα$<=μορφή$("{0}({1})", .όνομα$, .το_κουμπί_μου)
      }
      Τμήμα καταχώρησε {
            .αθροιστής++
            Πίνακας .αναφ$(.αθροιστής)
            Διάβασε .αναφ$(.αθροιστής-1)
      }
      Συνάρτηση Επιβεβαίωση {
            =Πατημένο(.το_κουμπί_μου)
      }
}
Κλάση Χειριστής_Γεγονότων {
      αθροιστής, αθροιστής_γεγονότων, Επιτρέπω_Γεγονότα
      Πίνακας Γεγονότα()
      Κλάση Στοιχείο_Ελέγχου {
            αναφ$
            αναγνωριστικό, ονομασία$, Επιτρέπεται=Αληθής
            Τμήμα Σύνδεσε {
                  Διάβασε .αναφ$
            }
            Τμήμα Στοιχείο_Ελέγχου {
                  Διάβασε .αναγνωριστικό
                  Διάβασε .ονομασία$
            }
            Συνάρτηση Κάλεσε_Πίσω {
                  Διάβασε περιγραφή$
                  Βάλε .αναφ$ : Διάβασε &αναφ
                  =αναφ.Ερώτημα(.αναγνωριστικό, περιγραφή$, &Αυτό)
            }
      }
      Συνάρτηση Στοιχείο_Πλήκτρο {
         .αθροιστής++
         Διάβασε περιγραφή$
         φτιάξε_με =.Στοιχείο_Ελέγχου(.αθροιστής,περιγραφή$)
         φτιάξε_με.Σύνδεσε &Αυτό
         =φτιάξε_με
      }
      Συνάρτηση Λίστα_Γεγονότων {
            χειριστής=.αθροιστής_γεγονότων
            .αθροιστής_γεγονότων++
            Πίνακας .Γεγονότα(.αθροιστής_γεγονότων)
            Διάβασε .Γεγονότα(χειριστής)
            =χειριστής
      }
      Τμήμα καταχώρησε {
           Διάβασε χειριστής, αναφ$
            .Γεγονότα(χειριστής).καταχώρησε αναφ$
      }
     Συνάρτηση Παρατήρησε {
     Αν Δεν .Επιτρέπω_Γεγονότα Τότε =Αληθής : Έξοδος
     Τύπωσε "Παρατηρώ για Γεγονότα"
           Για ν=0 Έως .αθροιστής_γεγονότων-1 {
                 Για .Γεγονότα(ν) {
                        Αν .Επιβεβαίωση() Τότε {
                              Για μ=0 Έως .αθροιστής-1 {
                                    Για Αυτό {
                                          Βάλε .αναφ$(μ) : Διάβασε &Σύνδεση
                                          Κάλεσε Σύνδεση.Κάλεσε_Πίσω(.όνομα$)
                                     }
                                }
                        }
                 }
           }
     }
      Συνάρτηση Ερώτημα {
            Διάβασε αναγνωριστικό, περιγραφή$, &Στοιχείο_Ελέγχου
            Τύπωσε υπό "Μέσα στο Χειριστής_Γεγονότων";
            Τύπωσε υπό
            Τύπωσε μέρος "Έλαβα ένα ερώτημα από το Στοιχείο_Ελέγχου με αριθμό ";αναγνωριστικό
            Τύπωσε
            Τύπωσε μέρος "Λέει:";περιγραφή$
            Τύπωσε
            Για Στοιχείο_Ελέγχου {
                  Τύπωσε μέρος "Πήρα αυτή την ονομασία:";.ονομασία$
                  Τύπωσε
                  =0
            }          
      }
}
Χειριστής_Γεγονότων=Χειριστής_Γεγονότων() \\ δημιουργούμε τον χειριστή
β1=Χειριστής_Γεγονότων.Στοιχείο_Πλήκτρο("Πλήκτρο 1") \\ δημιουργούμε υποκείμενα
β2=Χειριστής_Γεγονότων.Στοιχείο_Πλήκτρο("Πλήκτρο 2")
β3=Χειριστής_Γεγονότων.Στοιχείο_Πλήκτρο("Πλήκτρο 3")


Για Χειριστής_Γεγονότων {
      Πάτα_πλήκτρο_ένα=.Λίστα_Γεγονότων(Υπηρεσία_Πλήκτρου(49))
      .καταχώρησε Πάτα_πλήκτρο_ένα, &β1 \\καταχώρησε γεγονός στο υποκείμενο
      .καταχώρησε Πάτα_πλήκτρο_ένα, &β2
      .καταχώρησε .Λίστα_Γεγονότων(Υπηρεσία_Πλήκτρου(50)) , &β1
      .καταχώρησε .Λίστα_Γεγονότων(Υπηρεσία_Δείκτη(1)) , &β3
      .Επιτρέπω_Γεγονότα=Αληθής
}
Κάθε 150 {
      Αν Χειριστής_Γεγονότων.Παρατήρησε() Τότε Έξοδος
      Αν Δείκτης=2 Τότε Έξοδος
     Ανανέωση
}

Για να τρέξετε το πρόγραμμα να κατεβάσετε το κώδικα της Μ2000 (δες δεξιά στις προτεινόμενες σελίδες), υπάρχει και το εκτελέσιμο αρχείο, όπως και το ca.crt το οποίο εγκαθιστούμε ως ριζικό πιστοποιητικό. Οπότε τρέχουμε το πρόγραμμα M2000.exe και γράφουμε σ α που σημαίνει συγγραφή α, δηλαδή ανοίγει ο διορθωτής για το τμήμα α. Εκεί κάνουμε επικόλληση το κείμενο του προγράμματος, πατάμε ESC και γράφουμε α και πατάμε enter. Ο μεταφραστής κλείνει με την εντολή Τέλος. Πριν όμως μπορούμε να σώσουμε το πρόγραμμα, με την σώσε ονομακατι (δεν χρειάζεται εισαγωγικά). Αργότερα μπορούμε να το φορτώσουμε πάλι με την εντολή φόρτωσε ονομακατι.

Υ.Γ.
Με εντολή φόρμα 80,125 φτιάχνουμε τύπο οθόνης με 80 χαρακτήρες επί 125 γραμμές...και με σ α (το σ από το συγγραφή), ανοίγει ο διορθωτής! Εδώ είναι μια προβολή από την έκδοση 8 αναθεώρηση 74 (29/10/2015)


Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου