Σάββατο, 11 Μαρτίου 2017

Αναθεώρηση 5 (Έκδοση 8.4)

Μερικές πινελιές ακόμα...και είναι έτοιμη η Μ2000. Σήμερα κοίταξα το αντικείμενο Γεγονός. Μπήκαν μερικές πρόσθετες δυνατότητες, όπως το να καλούμε το γεγονός από πίνακα.
Ένα αντικείμενο γεγονός είναι μια συλλογή συναρτήσεων με ίδιο σετ παραμέτρων, που μπορεί να κληθεί απ' όπουδήποτε έχουμε πρόσβαση σε αυτό. Αν είναι γενικό τότε έχουμε από παντού. Όμως έχουμε και δυο περιπτώσεις. Να είναι σε ομάδα, ανοικτού τύπου (επώνυμη) ή να είναι σε κλειστού τύπου σε πίνακα ή κατάσταση. Όταν είναι σε πίνακα και θα θέλαμε να ελέγχεται το γεγονός για όλα τα στοιχεία, ώστε να το αλλάζουμε για όλα άμεσα,  τότε βάζουμε το αντικείμενο σε πίνακα στην ομάδα, και καθώς αντιγράφεται σε όλα τα στοιχεία του πίνακα, αντιγράφεται μόνο η αναφορά στο στοιχείο, άρα κάθε ομάδα μπορεί να χρησιμοποιήσει το ίδιο γεγονός. Θα μπορούσαμε να έχουμε το γεγονός έτσι ώστε κάθε ομάδα να έχει το δικό της αντικείμενο, αρκεί να το γράψουμε στην ομάδα και όχι έμμεσα σε πίνακα στην ομάδα!
Παρατήρηση 1: τα [ ] δεν είναι ειδικά σύμβολα για τα ονόματα, ο διερμηνευτής τα βλέπει ως χαρακτήρες. Η εντολή Ιδιότητα είναι εσωτερικά μακροεντολή, δηλαδή ετοιμάζει κώδικα της Μ2000 και τον αφήνει στη θέση της εντολής. Στην μακροεντολή αυτή έχει επιλεγεί να εμφανίζεται το όνομα της μεταβλητής πίσω από την ιδιότητα με [ ] . Οι ιδιότητες με αλφαριθμητικό έχουν βασική ομάδα χωρίς το $, και μια αναφορά σε αυτή με $. Στο όνομα της μεταβλητής από πίσω έχουμε το δολάριο $ ακριβώς μετά το ], πχ η αα$ θα είναι [αα]$
Παρατήρηση 2. Ιδιότητα φτιάχνουμε και με δυο αναγνωριστικά το Ιδιότητα και το όνομα της ιδιότητας. Απλά θα διαβάζεται και θα γράφεται. Αλλά δεν θα έχει τελεστές ++ -- και άλλους που έχουν οι απλές μεταβλητές σε ομάδα. Οι ιδιότητες είναι πάντα δημόσιες. Οι μεταβλητές πίσω από αυτές είναι ιδιωτικές.
Παρατήρηση 3. Σε μια ιδιότητα αν έχει οριστεί Αξία χωρίς να δώσουμε μπλοκ { } με οδηγίες, και δεν έχει οριστεί το τμήμα Θέσε, για να πάρει τιμή, θα είναι μόνο για ανάγνωση. Μπορούμε όμως να κάνουμε και το αντίθετο, να μην ορίσουμε Αξία και να ορίσουμε το τμήμα Θέσε (χωρίς το αναγνωριστικό Τμήμα).


Οθόνη 5, 0 \\ καθαρίζουμε την οθόνη με χρώμα Ματζέντα
                    \\ από την πρώτη γραμμή (0) που θα γίνεται και ολίσθηση!
Κλάση Κάτι {
       \\ Ιδιότητα μόνο για ανάγνωση
       Ιδιότητα Άθροισμα {Αξια}=0
  
       \\ Αυτό το τμήμα έχει ίδιο όνομα με την Κλάση
       \\ Αφού φτιαχτεί η ομάδα, θα κλήθεί το τμήμα αυτό
       \\ το οποίο καλείται με τρόπο ώστε οι προσθήκες να μένουν.
       \\ Εδώ δεν έχουμε προσθήκη αλλά διαβάζουμε προαιρετικά την Άλφα
       Τμήμα Κάτι {
               \\ Το τμήμα αυτό βλέπει την ιδιότητα .Άλφα
               \\ γιατί ανήκει στην ίδια ομάδα
               .Άλφα<=350
               Διάβασε ? .Άλφα
          
       }
       Κατάσταση Υποδοχή
       Ιδιότητα Άλφα {
             Αξία {
                        \\ Τα αναγνωριστικά Υποδοχή & ['Αθροισμα] ανήκουν στη γονική ομάδα.
                        \\ Η Ιδιότητα Άλφα είναι ομάδα που περιέχεται στην γονική
                        \\ Στη Μ2000 η προς τα άνω θέαση μεταβλητών δεν γίνεται!
                        \\ Παρόλα αυτά οι ομάδες μπορούν να βλέπουν μέχρι τη γονική ομάδα.
                        Ένωσε γονικό Υποδοχή στο Υποδοχή
                        Ένωσε γονικό [Άθροισμα] στο Αθ
                        Αν Άλφα>300 τότε {
                             \\ κάθε φορά αυξάνουμε την ιδιότητα Άθροισμα
                             \\ που είναι μόνο για ανάγνωση - αλλά εδώ έχουμε..
                             \\ ...πρόσβαση στην μεταβλητή πίσω από την ιδιότητα
                             \\ για την ακρίβεια έχουμε βγάλει μια αναφορά σε αυτή!
                              Αθ++
                              Κάλεσε Γεγονός Υποδοχή(1), "Υψηλή Τιμή"
                        }
            }
            Θέσε {
                  Αν Αξία>400 τότε Αξία=400
            }
      } = 10
      \\ προσθέτουμε στην Ιδιότητα Άθροισμα μια μέθοδο (Τμήμα)
      Ομάδα Άθροισμα {
            Τμήμα Μηδένισε {
                  Ένωσε γονικό [Άθροισμα] στο Αθ
                  Αθ=0
            }
      }
}
Κάτι=Κάτι()
\\ δώσαμε την υπογραφή των παραμέτρων
\\ αλλά όχι συναρτήσεις
Για Αυτό {
      \\ η ΓΓ θα φτιαχτεί για αυτό το μπλοκ μόνο
      \\ αλλά θα φυλαχτεί το αντικείμενο στην Κατάσταση
      \\ Κάτι.Υποδοχή
      Γεγονός ΓΓ { Διάβασε Τι$ }
      \\ Θα δώσουμε την παρακάτω
      \\ Το όνομα δεν έχει σημασία, θα εκτελεστεί ως έχει
      Προσθήκη Κάτι.Υποδοχή, 1:=ΓΓ
}
Κάτι.Άλφα=500
Τύπωσε Κάτι.Άλφα, Κάτι.Άθροισμα


Συνάρτηση Τυπ {
      Διάβασε Τι$ \\ Τύπωσε Γράμμα$  \\ χωρίς μεταβλητή!
      Τύπωσε Τι$
}


Γεγονός Κάτι.Υποδοχή(1) Νέο Τυπ()


\\ διαβάζουμε τιμή που είναι πάνω από 300 και θα βγάλει γεγονός!
Μ=Κάτι.Άλφα
Τύπωσε Μ, Κάτι.Άθροισμα


\\ Γεμίζουμε το πίνακα με Κάτι!
\\ Οι καταστάσεις είναι με αναφορά, οπότε έχουμε αρχικά την ίδια κατάσταση
\\ σε όλες τις ομάδες
Κάτι.Άθροισμα.Μηδένισε
Πίνακας Α(10)=Κάτι


Μ=Α(1).Άλφα \\ προκαλεί κάλεσμα γεγονότος
Τύπωσε Μ, Α(1).Άθροισμα
ΠάταΠλήκτρο()
Τύπωσε "Αφαιρούμε την τυπ() από το γεγονός"
Για Α(1) {
      Γεγονός .Υποδοχή(1) Πέτα Τυπ()
}
Για Ι=0 έως Μήκος(Α())-1
Μ=Α(Ι).Άλφα \\ προκαλεί κάλεσμα γεγονότος
Τύπωσε Μ, Α(Ι).Άθροισμα
Επόμενο Ι
ΠάταΠλήκτρο()
Τύπωσε "Προσθέτουμε δυο φορές την τυπ() στο γεγονός"
Για Α(1) {
      Γεγονός .Υποδοχή(1) Νέο Τυπ(), Τυπ()
}
Για Ι=0 έως Μήκος(Α())-1
Μ=Α(Ι).Άλφα \\ προκαλεί κάλεσμα γεγονότος
Τύπωσε Μ, Α(Ι).Άθροισμα
Επόμενο Ι
\\ Εδώ καλούμε ένα τμήμα (διαδικασία ή μέθοδο)
\\ που ανήκει στην ιδιότητα Άθροισμα!
\\ Μηδενίζει την μεταβλητή που είναι στη γονική ομάδα!
\\ Οι ιδιότητες είναι ομάδες και αυτές και μπορούν να έχουν μεταβλητές, τμήματα, συναρτήσεις και άλλες ιδιότητες
Α(0).Άθροισμα.Μηδένισε
Τύπωσε Α(0).Άθροισμα
Τέλος \\ προαιρετικό να γράψουμε τέλος. Θα γίνει όταν ο Διερμηνευτής βρει τη λέξη Ρουτίνα.
Ρουτίνα ΠάταΠλήκτρο()
      Τοπική Α$=Κομ$
Τέλος Ρουτίνας