Κυριακή, 9 Δεκεμβρίου 2018

Αναθεώρηση 5 Έκδοση 9.6

Οι προηγούμενες τρεις αναθεωρήσεις (2,3,4) είχαν θέματα, τα οποία λύθηκαν στην 5. Επιπλέον έγινε έλεγχος συμβατότητας και η τελευταία αναθεώρηση πέρασε επιτυχώς.

Προστέθηκε μια συνάρτηση η Δείκτης() ή Pointer() που επιστρέφει δείκτη σε ομάδα. Παλαιότερα μπορούσε μόνο να γίνει με ανάθεση με τον χειριστή -> και τώρα με την συνάρτηση μπορεί να γίνει απευθείας σε κλήση χωρίς μεσολάβηση μεταβλητής τύπου δείκτη. Ενημερώθηκε και η βοήθεια.



Δείκτες για ομάδες (αντικείμενα της Μ2000)
δ=δείκτης(όνομα_ομάδας)   ' δείκτης σε επώνυμη ομάδα (η ομάδα ζει όσο το τμήμα ή η συνάρτηση που τη δημιούργησε)
δ=δείκτης((όνομα_ομάδας))  ' αντίγραφο της ομάδας ως ανώνυμη ομάδα
δ=δείκτης(πίνακαςΑ(1,2)) ' δείκτης σε ομάδα σε πίνακα (ανώνυμη ομάδα)

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


\\ Παράδειγμα
Κλάση Άλφα {
      χ=10
}
\\ το δ είναι δείκτης σε ομάδα (αντικείμενο)
\\ τώρα δείχνει ένα ανώνυμο αντικείμενο.
\\ Τα ανώνυμα αντικείμενα "πεθαίνουν" όταν ο τελευταίος δείκτης χαθεί
\\ now point to a unnamed group. The unnamed group lives untii no pointers point to it.
δ=Δείκτης(Άλφα())
\\ Αυτό είναι το ίδιο με αυτό  δ->Άλφα()
Τύπωσε δ=>χ

ζ=Άλφα()
\\ now point to a named group (we can't use the pointer if ζ erased, επειδή has a reference only)
\\ τώρα ο δείκτης δείχνει σε ένα επώνυμο αντικείμενο τύπου ομάδα. Το άλλο που έδειχνε έσβησε
\\ Τα επώνυμα αντικείμενα "πεθαίνουν" όταν τερματίσει το τμήμα ή η συνάρτηση που τα δημιούργησε.
\\ ο δείκτης θα έχει ισχύ όσο το επώνυμο αντικείμενο υπάρχει, ή εφόσον του δώσουμε άλλο αντικείμενο
δ=Δείκτης(ζ)
\\ Αυτό είναι το ίδιο με αυτό  δ->ζ
Τύπωσε δ=>χ
δ=>χ+=10
Τύπωσε ζ.χ=δ=>χ ' επειδή ζ.χ  είναι το ίδιο με το δ=>χ
δ=Δείκτης((ζ)) ' look the ( ), we get a copy of ζ as unnamed group.
\\ Αυτό είναι το ίδιο με αυτό   δ->(ζ)
Τύπωσε δ=>χ
δ=>χ+=10
Τύπωσε ζ.χ<>δ=>χ ' επειδή ζ.χ δεν είναι το ίδιο με το δ=>χ
Λίστα  ' Δείχνει όλες τις μεταβλητές (εκτός από τις ιδιωτικές των ομάδων, και απ΄ ότι περιέχουν οι δείκτες)

Με αγγλικές εντολές:

\\Example
class alfa {
      x=10
}
\\ p is a pointer to group
\\ now point to a unnamed group. The unnamed group lives untii no pointers point to it.
p=pointer(alfa())
\\ this is the same as p->alfa()
Print p=>x

z=alfa()
\\ now point to a named group (we can't use the pointer if z erased, because has a reference only)
p=pointer(z)
\\ this is the same as p->z
Print p=>x
p=>x+=10
Print z.x=p=>x ' because z.x is the same as p=>x
p=pointer((z)) ' look the ( ), we get a copy of z as unnamed group.
\\ this is the same as  p->(z)
Print p=>x
p=>x+=10
Print z.x<>p=>x ' because z.x is not the same as p=>x
list  ' show all variables





 

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

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