Σάββατο, 9 Ιουνίου 2018

Χρήση Υπερκλάσης και Γεγονότων για παραγωγή ομάδων με σειριακό αριθμό!

Και αυτό το παράδειγμα έχει γραφτεί στο νέο μικρό εγχειρίδιο που ετοιμάζω.
Η κλάση ΝέαΟμαδα δημιουργεί μια κλάση που κληρονομεί την υπερκλάση ένα. Στη Μ2000 μια ομάδα μπορεί να έχει μια υπερκλάση, και μια υπερκλάση δεν μπορεί να έχει άλλη. Μπορούμε όμως να δημιουργήσουμε ομάδες από άλλες ομάδες, έτσι κατά μια έννοια η κληρονομικότητα γίνεται λόγω "Συγχώνευσης" ομάδων. Η διαφορά με την υπερκλάση είναι ότι αφήνει ένα σύνδεσμο σε αυτή,  ένα δείκτη, και η Για Υπερκλάση {} καλεί στοιχεία της υπερκλάσης, και έτσι όσες ομάδες έχουν συνδεθεί με την υπερκλάση έχουν πρόσβαση σε κοινές ιδιότητες. Μια υπερκλάση μπορεί να έχει μοανδικά στοιχεία που δεν τα δίνει στις υποκλάσεος αλλά αυτές μπορούν να τα προσεγγίσουν. Εδώ η μεταβλητή "αρχικός" είναι μοναδική και κρατάει τον επόμενο αριθμό σειράς.
Καλώντας την κλάση δέκα φορές με πέρασμα με τιμή της Δύο, ο δείκτης της υπερκλάσης αντιγράφεται, όπως επίσης και η λίστα συνδεδεμένων γεγονότων. Έτσι δημουργούμε στο τελικό προιόν της συνάρτησης κλάσης, μια ομάδα με υπερκλάση και με λίστα γεγονότων (εδώ έχουμε ένα μόνο γεγονός το "αριθμός_σειράς".
Από το πίνακα Α(10) με δέκα στοιχεία από 0 έως 9, δημιουργούμε δυο άλλες ομάδες ως αποτέλεσμα της συνάρτησης Παραγωγή(). Αυτή η συνάρτηση αρχικά σώνει τον αριθμό σειράς, μετά παράγει έναν άλλο και τον γράφει έτσι ώστε να βγει ένα αντίγραφο που θα επιστραφεί από τη συνάρτηση με τον νέο αριθμό σειράς και μετά επαναφέρουμε τον παλιό αριθμό σειράς. Κάθε φορά χειριζόμαστε την ιδιωτική μεταβλητή, πίσω από την ιδιότητα ΣειριακόςΑριθμός, η οποία είναι μόνο για ανάγνωση (αλλά παίρνει την τιμή από την ιδιωτική [ΣειριακόςΑριθμός].
Στο τέλος από το τελευταίο παραγώμενο κάνουμε επίσης μια παραγωγή, το ΜΜ3. Και αυτό θα πάρει το κανονικό αριθμό σειράς (εδώ 13). Σε κάθε περίπτωση, το γεγονός της παραγωγής του επόμενου αριθμού σειράς θα εξυπηρετηθεί και θα φανεί σαν ενημέρωση στην κονσόλα με την Τύπωσε.

Η συναρτηση Δύο_αριθμός_σειράς είναι μια "ψεύτικη" συνάρτηση. Όταν κληθεί από το σύστημα των γεγονότων, θα αλλαχθεί το όνομά της με το όνομα του τμήματος όπου βρίσκεται (πχ αν το πρόγραμμα βρίσκεται στο Α θα μπει ως όνομα το Α) έτσι κάθε μεταβλητή του Α θα είναι θεατή στη κλήση αυτή.
Με τον ίδιο τρόπο γίνονται και οι κλήσεις γεγονότων στο σύστημα των παραθύρων της Μ2000.



\\ Θέλουμε η υπερκλάση να κρατάει τον μοναδικό επόμενο αριθμό σειράς
Υπερκλάση Ένα {
      Γεγονός "αριθμός_σειράς"
      Μοναδικό:
            αρχικός=1&
      Δημοσιο:
            Συνάρτηση Επόμενος {
                  Για Υπερκλάση {
                        =.αρχικός
                        Κάλεσε Γεγονός "αριθμός_σειράς", .αρχικός
                        .αρχικός++
                  }
            }      
}
\\ Θέλουμε μια κλάση να παίρνει την υπερκλάση και να δημιουργεί
\\ μια νέα ομάδα, με κατάλληλο αριθμό σειράς
\\ και με δυνατότητα παραγωγής αντιγράφου με τον επόμενο αριθμό σειράς
Κλάση ΝεαΟμάδα {
      Ιδιότητα ΣειριακόςΑριθμός { Αξία }=0
      Συνάρτηση Παραγωγή {
            Παλιός=.[ΣειριακόςΑριθμός]
            .[ΣειριακόςΑριθμός]<=.Επόμενος()
            =Αυτό
            .[ΣειριακόςΑριθμός]<=Παλιός
      }
Κλάση:
      Τμήμα ΝεαΟμάδα (Ομαδα1) {
              Αυτό=Ομάδα1
             .[ΣειριακόςΑριθμός]<=Ομάδα1.Επόμενος()
      }
}
\\ Παράλληλα θέλουμε όταν παράγεται ένας αριθμός σειράς να φαίνεται
\\ μέσα από την κλήση ενός γεγονότος.
\\ Η υπερκλάση δεν μπορεί να συνδεθεί άμεσα με εξυπηρετητές γεγονότων
\\ μπορεί όμως μια ομάδα να πάρει την υπερκλάση και να συνδεθεί με εξυπηρέτηση γεγονότων
Ομάδα ΜεΓεγονότα Δύο=Ένα
Συνάρτηση Δύο_αριθμός_σειράς {
      Τύπωσε "Νέος αριθμός σειράς", Αριθμός
}
\\ Ο τελεστής << κάνει την Κλάση ΝέαΟμάδα() να εκτελείται για κάθε στοιχείο του Α()
\\ Έτσι παράγεται για κάθε στοιχείο ένας νέος σειριακός αριθμός και ένα γεγονός μας το λέει!
Πίνακας Α(10)<<ΝεαΟμαδα(Δύο)
\\ Μπορούμε να διαβάσουμε το σειριακό αριθμό με τη χρήση της ιδιότητας για ανάγνωση μόνο
Για ι=0 έως 9 {
      Τύπωσε Α(ι).ΣειριακόςΑριθμός
}
\\ Κάθε στοιχείο μπορεί να παράγει ένα ίδιο με τον επόμενο αριθμό σειράς!
\\ τώρα παράγουμε ένα αντίγραφο με νέο αριθμό σειράς το 11
ΜΜ=Α(3).Παραγωγή()
Τύπωσε ΜΜ.ΣειριακόςΑριθμός ' δίνει 11
ΜΜ2=Α(6).Παραγωγή()
Τύπωσε ΜΜ2.ΣειριακόςΑριθμός ' δίνει 12
\\ Τώρα θα παράγουμε από το ΜΜ2 που έχει παραχθεί από το Α(6)
ΜΜ3=ΜΜ.Παραγωγή()
Τύπωσε ΜΜ3.ΣειριακόςΑριθμός ' δίνει 13