Τετάρτη, 2 Μαρτίου 2016

Αναθεώρηση 175 Επέκταση του Αντικειμένου Γεγονός

Έκανα μεγαλύτερη ενσωμάτωση του αντικειμένου στη γλώσσα. Αρκετές διορθώσεις (τα παραδείγματα που έχουν αναφερθεί τρέχουν κανονικά, αλλά τρέχουν και επιπρόσθετα).
Τα προβλήματα ξεπεράστηκαν και τώρα μπορούμε να δώσουμε την κλάση Άλφα σε πίνακα και το αντικείμενο Γεγονός του κάθε στοιχείου του πίνακα τρέχει το δικό του πρόγραμμα (στη ανώνυμη συνάρτηση) και βλέπει τις μεταβλητές του στοιχείου. Υπάρχουν περιθώρια βελτίωσης, σε άλλη αναθεώρηση να προσθέσω τις Μ2000 φόρμες.  Δείτε κάτι άλλο, όταν η κλειστή ομάδα ανοίγει με τη Για, αντιγράφεται πρόσκαιρα σε μια κανονική ομάδα. Στην αντιγραφή παίρνει ένα όνομα, και αυτό το όνομα μπαίνει στις συνδρομές (εδώ έχουμε μόνο μία την ανώνυμη συνάρτηση). Προφανώς αν θέλουμε να δουλέψουμε συνεχώς με Γεγονότα, θα ήταν καλό να δουλεύαμε με ανοικτό/με όνομα αντικείμενο, μια ομάδα και όχι ένα στοιχείο πίνακα με μια ομάδα (κλειστό/ανώνυμο αντικείμενο).
Στη Μ2000 οι κλάσεις είναι συναρτήσεις που δημιουργούν ένα αντικείμενο, το κλείνουν, και το επιστρέφουν σαν αποτέλεσμα. Το Α=Άλφα() κάνει το Α ομάδα, ένα αντικείμενο με λίστα με διάφορα, και όλα αυτά χωριστά.  Π.χ. το Α.μετρητής θα είναι μια κανονική μεταβλητή. Η ομάδα το Α, όταν χρησιμοποιηθεί χωρίς ιδιαίτερο στοιχείο, πχ. όψι Α.βββ$, μπορεί να βγάλει αντίγραφο, ή να περάσει με  αναφορά σε κάποιο άλλο πρόγραμμα. Δεν μπορεί να σβήσει όμως. Σε αντίθεση τα κλειστά/ανώνυμα αντικείμενα (ομάδες) μπορούν να σβήσουν όσο είναι κλειστά.


Κλάση Αλφα {
      μετρητής
      βββ$="οκ12212"
      Γεγονός Κ {
            Διάβασε Κάτι$
            Συνάρτηση {
                  τύπωσε .βββ$, .μετρητής
            }
      }
      Συνάρτηση ΜεΌνομα {
                  Διάβασε Κ$
                  Τύπωσε Κ$
                  .μετρητής++
              
            }
      Τμήμα Άλφα {
            Γεγονός .Κ Νέο .ΜεΌνομα()
      }
      Τμήμα Διαδικασία {
            Κάλεσε Γεγονός,"οκ"
            Τύπωσε .μετρητής
      }
}
Πίνακας Α(10)=αλφα()
Α(1).βββ$="τεστ"
Για Α(4) {
      Κάλεσε Γεγονός "τέλειο"
      Τύπωσε .μετρητής
      Κάλεσε Γεγονός "τέλειο"
      Τύπωσε .μετρητής
}
Για Α(1) {
      Κάλεσε Γεγονός "τέλειο 1"
      Τύπωσε .μετρητής
      Κάλεσε Γεγονός "τέλειο 1"
      Τύπωσε .μετρητής
}
Για Α(4) {
      Κάλεσε Γεγονός "τέλειο"
      Τύπωσε .μετρητής
      Κάλεσε Γεγονός "τέλειο"
      Τύπωσε .μετρητής
}
Για Α(1) {
      Κάλεσε Γεγονός "τέλειο 1"
      Τύπωσε .μετρητής
      Κάλεσε Γεγονός "τέλειο 1"
      Τύπωσε .μετρητής
}


Άλλο παράδειγμα με πέρασμα με αναφορά. Έχουμε μια γενική ομάδα Δ που έχει ένα Γεγονός Α. και μια συνάρτηση που την συνδέουμε με το Γεγονός. Μετά έχουμε μια κλάση με ένα τμήμα με όνομα Διαδικασία, το οποίο κάθε φορά στέλνει ένα οκ και ζητάει ένα νούμερο. (αυτός είναι ο σκοπός της αναφοράς, να επιστρέψει κάτι). Δείτε ότι σε μια γραμμή ενώσαμε το Γεγονός με μια συνάρτηση, έξω από τα αντικείμενα.


Γενική Ομάδα Δ {
      ΚΛΜ=1
      Γεγονός Α {
            Διάβασε Μ$, &ΑΑ
      }
      Συνάρτηση ΠάρεΜ {
            Διάβασε μ$, &ΒΒ
            Τύπωσε "Το έλαβα"
            ΒΒ=.ΚΛΜ
            .ΚΛΜ++
      }
}
Γεγονός Δ.Α νέο Δ.ΠάρεΜ()
Κλάση Αλφα {
      Νούμερο
      Τμήμα Διαδικασία {
           Κάλεσε Γεγονός Δ.Α , "οκ", &.Νούμερο
      }
}
Πίνακας Α(10)=Άλφα()
Α(3).Διαδικασία
Α(7).Διαδικασία
Α(1).Διαδικασία
? Α(3).Νούμερο, Α(7).Νούμερο, Α(1).Νούμερο


Προσθήκη (13/4/2016)
Παραλλαγή με δείκτη. Οι δείκτες στην Μ2000 είναι αλφαριθμητικά και δείχνουν το όνομα, είναι δηλαδή ισχνές αναφορές. Τις λέμε ισχνές γιατί ενώ είναι αναφορές, για να χρησιμοποιηθούν θέλουν ένα στάδιο ακόμα, δηλαδή αυτό της ένωσης ή αναζήτησης του αναφερόμενου, που ενδέχεται να μην υπάρχει!

Τώρα στον κώδικα της κλάσης Άλφα δεν έχουμε γνωστοποιήσει το γεγονός που θα συνδεθεί. Εδώ στην Διαδικασία παίρνω αντίγραφο στην Μ. Αλλά θα μπορούσα να δημιουργήσω κανονική αναφορά, με έναν από τους δύο τρόπους που δείχνουν οι σημειώσεις 1 και 2
Προσοχή δεν μπορώ να διαβάσω δυο φορές την Μ στο &Μ, δηλαδή δεν μπορώ να ορίσω πριν δώσω αναφορά στην Μ. (υπάρχει τρόπος με  Διάβασε Νέο &Μ αλλά το αποφεύγουμε όταν ξέρουμε ότι θα φτιαχτεί μια μεταβλητή, θα δουλέψουμε με αυτήν και μετά θα χαθεί όπως πρέπει στο πέρας της κλήσης).

Ομάδα Δ {
      ΚΛΜ=1
      Γεγονός Α {
            Διάβασε Μ$, &ΑΑ
      }
      Συνάρτηση ΠάρεΜ {
            Διάβασε μ$, &ΒΒ
            Τύπωσε "Το έλαβα"
            ΒΒ=.ΚΛΜ
            .ΚΛΜ++
      }
}
Γεγονός Δ.Α νέο Δ.ΠάρεΜ()
Κλάση Αλφα {
      Νούμερο, Δείκτης$
      Τμήμα Αλφα {
            Διάβασε .Δείκτης$
      }
      Τμήμα Διαδικασία {
           Μ=εκφρ(.Δείκτης$)

Σημ 1 : Βάλε .Δείκτης$ : Διάβασε
Σημ 2 : Ένωσε Ισχνή .Δείκτης$ στο Μ
           Κάλεσε Γεγονός Μ , "οκ", &.Νούμερο
      }
}
Πίνακας Α(10)=Άλφα(&Δ.Α)
Α(3).Διαδικασία
Α(7).Διαδικασία
Α(1).Διαδικασία
? Α(3).Νούμερο, Α(7).Νούμερο, Α(1).Νούμερο




Άλλο πρόγραμμα. Εδώ βάζουμε δυο φορές την Κ() στο Γεγονός Α. Δείχνω πως αντιγράφω το Γεγονός σε άλλο,
Γεγονός Α {
      Διάβασε μ$
}
Συνάρτηση Κ {
      διαβασε μ$
      Τύπωσε μ$
}
Γεγονός Α νέο Κ()
Γεγονός Α νέο Κ() \\ 2η φορά!
Κάλεσε Γεγονός Α, "οκ Α"
Βαλε Α
Τύπωσε Φάκελος$()
Σωρος
Τύπωσε Ταύτιση("Ε")
Διάβασε Β
Γεγονός Α πέτα Κ()
Κάλεσε Γεγονός Α, "οκ Α"
Κάλεσε Γεγονός Β, "οκ Β"

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

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