Τρίτη, 15 Δεκεμβρίου 2015

Παραλλαγή στο Χεριστή Γεγονότων

Στον Χειριστή Γεγονότων που υπάρχει εδώ  έκανα μια παραλλαγή. Έβαλα την νέα εντολή ισχνή$() για ισχνές αναφορές (αναφορές που γίνονται κατ΄απαίτηση,  κανονικές, και όχι την στιγμή που σχηματίζονται ως αναφορές επιγραμματικά).
Οι κανονικές αναφορές δημιουργούν σε αντικείμενα ομάδες που τα  μέλη τους είναι παραγματικές  αναφορές. Οι ισχνές αναφορές δημιουργούν όταν τις χρειαζόμαστε μια κρυφή πραγματική αναφορά. Ο κίνδυνος είναι η ισχνή αναφορά να έχει κρατηθεί τόσο ώστε όταν την χρειστούμε να μην μπορεί να δώσει την αναφορά, επειδή δεν θα υπάρχει αυτό που αναφέρεται. Στην κανονική αναφορά η κλήση είναι τέτοια που δεν γίνεται να μην υπάρχει η αναφορά. Όμως το πένανλτι είναι ότι σε κάθε κλήση δημιουργούνται όλες οι επιμέρους αναφορές για τα μέλη. Σε κάποιες γλώσσες τα αντικείμενα έχουν μια αναφορά σε μια συνάρτηση η οποία διαχειρίζεται μια κλήση τύπου "κάλεσε την μέθοδο Χ με παράμετρους Κ,Λ". Σε ορισμένες περιπτώσεις το Χ μπορεί να είναι το όνομα της μεθόδου, ή σε άλλες είναι ο αριθμός σύνάρτησης. Εδώ όμως έχουμε τα μέλη της ομάδας-αντικειμένου ως πραγματικές μεταβλητές, με όνομα που έχει ως πρόθεμα το όνομα του αντικειμένου αν είναι επώνυμο ή στα ανώνυμα ένα κρυφό όνομα όταν το αντικείμενο πρόσκαιρα "ανοίγει", γίνεται στατικό ή στέρεο. Μια ομάδα που μένει σε ένα στοιχείο πίνακα είναι ανώνυμη και τα δεδομένα της είναι ερμητικά κλειστά. Για να τα χρησιμοποιήσουμε πρέπει να τα κάνουμε πρόσκαιρα στέρεα. Δείτε στη συνάρτηση Παρατήρησε (την έχω υπογραμμίσει), τι γίνεται με τη χρήση της ισχνής αναφοράς και το δείκτη (μ). Ο διερμηνευτής βρίσκει ότι είναι ισχνή αναφορά και βάζει τη αναφερόμενη διεύθυνση ως πραγματική. Εδώ μπορούμε να χρησιμοποιήσουμε ισχνή αναφορά γιατί ο Χειριστής_Γεγονότων
είναι στατικό αντικείμενο! Δηλαδή όταν κάνουμε τις αναφορές έχει παραγματική διεύθυνση και όχι κρυφή (και τυχαία κάθε φορά που βγαίνει για τα κλειστά/πτητικά αντικείμενα)


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


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

 

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

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