Πέμπτη, 30 Μαρτίου 2017

Αναθεώρηση 8 (Έκδοση 8.6)

Επαναφορά των στατικών μεταβλητών στη συμβατότητα. Διορθώθηκε η χρήση τελεστών ++ -- και += -= /= *= κ.α. για τις στατικές.
Στο παράδειγμα η Δοκίμασε καλεί τον εαυτό της, ενώ κάνει χρήση στατικής και παράλληλα καλεί με δυο τρόπους την συνάρτηση Άλλη η οποία και αυτή έχει στατική μεταβλητή. Η δοκίμασε βρίσκεται σε ομάδα (αντικείμενο). Αυτή η συνάρτηση ανήκει στην ομάδα και βλέπει τις μεταβλητές της (εδώ την Μ ως   τελεία-Μ, ή .Μ  που είναι συντόμευση του Αυτό.Μ και περιέχει επίσης μια συνάρτηση Άλλη η οποία δεν βλέπει κανονικά την .Μ εκτός και αν την καλέσουμε "τοπικά". Παρόλο που την καλούμε τοπικά, έχει δική της στατική Α, δεν μπλέκεται με τις στατικές της Δοκίμασε. Η Κάλεσε τοπικά βάζει στην Άλλη το όνομα της Δοκίμασε, και τον κώδικά της τον κάνει "τοπικό" στην Δοκίμασε. Όμως τρέχει σε άλλο αντικείμενο εκτέλεσης και έτσι έχει δική του συλλογή στατικών.

Η ομάδα Β έχει επιπλέον ένα τμήμα Άλλο το οποίο καλεί και αυτό τη Δοκίμασε(). Επειδή αυτό τρέχει στο δικό του αντικείμενο εκτέλεσης, οι στατικές στην Δοκίμασε και Άλλη είναι διαφορετικές, από αυτές που είχαμε με την κλήση από το τμήμα (δεν φαίνεται το όνομα) που βρίσκεται η Ομάδα Β.

Σε κάθε περίπτωση οι μεταβλητές της ομάδας (Εδώ η Μ) είναι θεατές σε όλα τα αντικείμενα εκτέλεσης που τρέχουν μεθόδους της (τμήματα, συναρτήσεις, τελεστές) (όχι όμως σε τμήματα και συνάρτησεις εντός μεθόδων, εκτός και τα καλέσουμε με την Κάλεσε Τοπικά)
(επειδή καλούμε την Τύπωσε μέσα από την Τύπωσε (στην Β.Δοικίμασε()), έβαλα την πρώτη γραμμή για να ξεκινάει από την τελευταία γραμμή της κονσόλας έτσι ώστε να μην τυπώνει η Τύπωσε γράμματα πάνω σε άλλα γράμματα..Στην Κονσόλα τα γράμματα είναι "Διάφανα", δεν έχουν φόντο, οπότε ή βάζουμε εμείς ή έχουμε κανονίσει να είναι "καθαρή". Εδώ η τελευταία γραμμή έρχεται κάθε φορά καθαρή)

Οθόνη ,0 : Δρομέας 0,Ύψος
Ομάδα Β {
      Μ=100
      Συνάρτηση Δοκίμασε {
            Στατική Α=0
            Α++
            Διάβασε Β
            Συνάρτηση Άλλη {
                  Στατική Α=100
                  Α++
                  Τύπωσε "<<";Α;">>", έγκυρο()
            }
            \\ κλήση με την κάλεσε
            Κάλεσε Άλλη()
            \\ Κλήση με την κάλεσε τοπικά
            Κάλεσε Τοπικά Άλλη()
            Τύπωσε "Α=";Α,
            Αν Β=0 Τότε =Α : Έξοδος
           =.Δοκίμασε(Β-1)
      }
      Τμήμα άλλο {
            κλμ=.Δοκίμασε(5)
      }
}
Τύπωσε Β.Δοκίμασε(10)
Τύπωσε Β.Δοκίμασε(10)
Τύπωσε Β.Δοκίμασε(10)
Β.Άλλο