Τρίτη, 11 Ιουλίου 2017

Παράδειγμα με στατικές και χρήση της Καθαρό

Υπάρχει ένα παράδειγμα στη βοήθεια για τις Στατικές
Για να τρέξει πρέπει ή να ορίσουμε Τμήμα Γενικό Άλφα ή να γράψουμε το πρόγραμμα απευθείας σε αρχείο ώστε με την φόρτωση, από την κοσνόλα της Μ2000,  τα Άλφα και Βήτα να γίνουν γενικά.

όλα τα τμήματα που δημιουργούμε από την κονσόλα λέγονται επιπέδου 0 και είναι γενικά, ενώ τα εσωτερικά τμήματα για να είναι γενικά πρέπει να οριστούν ως γενικά.

Το τμήμα άλφα έχει ένα τμήμα Μ που έχει οριστεί γενικό (το Μ διαγράφεται στο πέρας εκτέλεσης του άλφα). Ένα τμήμα μπορεί να βρίσκεται ως ορισμός σε άλλο τμήμα, ή μπορεί να έχει εκτελεστεί ο ορισμός και να υπάρχει στην λίστα τμημάτων, άρα να μπορεί να εκτελεστεί, ή μπορεί να βρίσκεται ήδη σε εκτέλεση σε ένα αντικείμενο εκτέλεσης όπου έχει αντίγραφο του κώδικα προς "κατανάλωση". Λέμε ότι καταναλώνεται ο κώδικας γιατί πράγματι αφαιρείται κώδικας που εκτελείται. Όταν χρειάζεται να γίνει άλμα (με μια Προς), ή με κλήση ρουτίνας τότε το αντικείμενο εκτέλεσης παίρνει το κώδικα από τη λίστα τμημάτων. Οι ρουτίνες δεν έχουν δικό τους αντικείμενο εκτέλεσης, αλλά τρέχουν σε αυτό που τις καλεί. Το αντικείμενο εκτέλεσης κρατάει στοιχεία μετά την πρώτη αναζήτηση ετικέτας ή ρουτίνας και στις επόμενες χρήσεις δεν κάνει αναζήτηση αλλά απευθείας παίρνει από τη λίστα τμημάτων (και συναρτήσεων)  το κώδικα από το σημείο που γνωρίζει.

Γράφουμε το Σ "στ.gsb" ανοίγει ο διορθωτής (και τώρα αναφέρει στη πάνω αριστερή γωνία το όνομα του αρχείου και όχι όνομα τμήματος ή συνάρτησης), αμέσως αντιγράφουμε το παρακάτω πρόγραμμα και πατάμε Esc. Έτσι έχουμε στο στ το πρόγραμμα που θα τρέξουμε. Γράφουμε Νέο ή Αρχή (το δεύτερο είναι σαν να πατήσαμε το πλήκτρο Break, αλλά με εντολή) και γράφουμε Φόρτωσε στ και αμέσως θα φορτωθεί και θα τρέξει το πρόγραμμα (επειδή στο τέλος έχουμε τα ονόματα των τμημάτων που θα εκτελεστούν. Αν συνεχίσουμε να δίνουμε την εντολή Φόρτωση στ θα δούμε ότι οι στατικές αυξάνουν τις τιμές τους. Αυτό συμβαίνει γιατί παρόλο που φορτώνουμε το αρχείο, τα τμήματα απλά ξαναδιαβάζουν τους ορισμούς ενώ οι στατικές υπάρχουν στο κύριο αντικείμενο εκτέλεσης, αυτό της κονσόλας. Μια εντολή Καθαρό στην κοσνόλα θα καθαρίσει τις όποιες μεταβλητές και τις στατικές. Και η εντολή Νέο καθαρίζει τις στατικές, αλλά όχι άλλες μεταβλητές.που έχουν οριστεί απευθείας στην κονσόλα (και αυτές είναι γενικές εξ ορισμού)

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

Τμήμα άλφα {
      Αν Ταύτιση("Α") Τότε Πέτα : Καθαρό
      \\ γενικό μόνο στο Τμήμα άλφα και σε ότι καλεί.
      Τμήμα Γενικό Μ {
            Στατικές α=0, β$="όνομα", ζ=(1,2,3,4,5)
            ζ+=20
            Τύπωσε ζ
      }
      Τμήμα Δοκιμή1 {
            Μ
            Μ
            Μ
      }
      Τύπωσε "3 φορές καλούμε το Μ από το Δοκιμή1"
      Δοκιμή1
      Τύπωσε "2 φορές καλούμε το Μ από Τμήμα αυτό"; Τμήμα$
      Μ
      Μ
      Τύπωσε "3 φορές καλούμε ξανά το Μ από το Δοκιμή1"
      Δοκιμή1
}
Τμήμα βήτα {
      κ=100
      άλφα 1 ' το βήτα έχει δικό του αντικείμενο εκτέλεσης, και κρατάει δικές του στατικές για ότι καλεί.
      Τύπωσε κ
}
άλφα
βήτα

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

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