\* Συνέχεια της προηγούμενης ανάρτησης. Βάλτε το σε ένα νέο τμήμα.
\* Προχωρημένο παράδειγμα!
\* Ένας λόγος που φτιάχνουμε αντικείμενα είναι ότι μπορούμε να προσθέσουμε
\* λειτουργικότητα χωρίς να πειράξουμε πολλά πράγματα στο πρόγραμμα
\* Δημιουργούμε γενικές κλάσεις, που θα ισχύουν για αυτό το τμήμα
\* και όσα τρέξουν σε αυτό.
Κλάση Γενική Αντικείμενο {
όνομα$ \\ δεν βάζουμε όνομα
Τμήμα Αντικείμενο { \\κατασκευαστής - ελέγουμε αν έχουμε είσοδο, και τι
Αν ταύτιση("G") τότε Διάβασε α : Αυτό=α
}
}
Κλάση Γενική Επιλέξιμο {
Ενεργό
Τμήμα Επιλέξιμο {
Αν ταύτιση("G") τότε Διάβασε α : Αυτό=α
}
}
Κλάση Γενική Τετράπλευρο {
πάνω, αριστερά, πλάτος, ύψος
Τμήμα Τετράπλευρο {
Αν ταύτιση("G") τότε Διάβασε α : Αυτό=α
}
}
Κλάση Πλήκτρο {
Αναγνωριστικό
Τμήμα Πλήκτρο {
Αν ταύτιση("G") τότε Διάβασε α : Αυτό=α
}
}
β1=Αντικείμενο(Τετράπλευρο(Επιλέξιμο(Πλήκτρο())))
\* Όλα βρίσκονται στο ίδιο επίπεδο. Αυτό μπορεί να είναι πρόβλημα αν υπάρχουν
\* ίδια ονόματα (μεταβλητών, πινάκων, συναρτήσεων, τμημάτων, άλλων ομάδων)
Λίστα
\*
\* Εδώ είναι η άλλη περίπτωση να κάνει κανείς συνδυασμό κλάσεων.
\* Μπορούμε να ορίσουμε ομάδες που θα έχουν μια αρχική σχεδίαση
\* και μπορούμε να εμπλουτίσουμε μετά - εδώ θα το κάνουμε για το ΤΤ
\*
Κλάση ΝέοΠλήκτρο {
Αντικείμενο ΑΑ
Τετράπλευρο ΤΤ
Επιλέξιμο ΕΕ
Συνάρτηση όνομα$ { =.ΑΑ.όνομα$}
Τμήμα ΝέοΠλήκτρο { \\ για να το κατασκευάσουμε θα δώσουμε όνομα
Διάβασε .ΑΑ.όνομα$
}
}
β2=ΝέοΠλήκτρο("Πλήκτρο 1")
Τύπωσε β2.όνομα$()
Για Αυτό { \\ δεν θέλουμε να κρατήσουμε τη κ
ομάδα κ {πάνω=500, αριστερά=100, πλάτος=1000, ύψος=500 }
ομάδα κ {Συνάρτηση κίνηση { Δες { Διάβασε .πάνω , .αριστερά , .πλάτος , .ύψος}
Δες { Ενθεση γραμμα$ }}}
Βάλε κ \\ κάνουμε τη κ πτητική!
}
\*
\* Ουσιαστικά θα κάνουμε επέκταση της ομάδας ΤΤ (Τετράπλευρο) με μια συνάρτηση
\* Είναι έτσι φτιαγμένη που αν λείπει μία από τις 1η, 2η, 3η, 4η παράμετρο να σταματάει την Διάβασε
\* Αυτό το πετυχαίνει το μπλοκ Δες { } που πετάει το λάθος που γυρνάει ο μεταφραστής και συνεχίζει!
\*Με την διάβασε πέρνουμε την κ που υπάρχει τώρα μόνο στο σωρό και την αντιγράφουμε στο ΤΤ του β2
\*
\* Η ΤΤ όμως είναι στέραιη ομάδα, οπότε δεν μπορούμε να την "φορτώσουμε" με νέα καλά, σε μια Για ... {}
\* Για το λόγο αυτό την έχουμε απ έξω
\*
Διάβασε β2.ΤΤ
\*
\* Χρησιμοποιούμε την κάλεσε και βάζουμε από μία μέχρι τέσσερις παραμέτρους
Για Αυτό { \\ αυτός είναι ένας τρόπος να σβήσουμε το Τ μετά το πέρας του μπλοκ
Κάλεσε β2.ΤΤ.κίνηση(5000,5000)
Τύπωσε β2.ΤΤ.πάνω
Ένωσε β2.ΤΤ στο Τ
Τ.πάνω+=200
Τύπωσε Τ.πάνω, β2.ΤΤ.πάνω \\ είναι ίδια
}
\*
\* Αντί να περάσουμε παράμετρο, περνάμε εντολές!
\* Επειδή έτσι το φτιάξαμε να κάνει!
\* Δεν μπορούμε όμως να δούμε τα άλλα αντικείμενα μέσα από αυτό το αντικείμενο!
\*
Κάλεσε β2.ΤΤ.κίνηση({ .αριστερά+=1000 : Τύπωσε .πάνω, .αριστερά })
\*
\* Τώρα θα φτιάξουμε ένα αντίγραφο του β2 (που έχει τρεις ομάδες μέσα)
\* δεν θα το βάλουμε σε "στέραια" ομάδα, αλλά σε "πτητική". (μπορεί να μετακινηθεί από το τμήμα).
\*
Πίνακας α(10)
α(2)=β2 \\ αντιγράφουμε όλο το β2 στη θέση 3 του πίνακα (δείκτης 0 δείχνει στην πρώτη θέση).
Τύπωσε α(2).ΤΤ.πάνω \\ 5200
για α(2) { κάλεσε .ΤΤ.κίνηση(100,100,3000,5000) } \\ Η κάλεσε δεν δουλεύει με πτητική ομάδα!
Τύπωσε α(2).ΤΤ.πλάτος
αα=α(2).ΤΤ.κίνηση(1000,1000,2000,4000)
Τύπωσε α(2).ΤΤ.πλάτος
\* Δεν μπορούμε να ενώσουμε μια ομάδα που περιέχει η πτητική ομάδα ή την ίδια την ομάδα
\* όσο βρίσκεται σε αυτή τη κατάσταση (σαν "παγωμένη" ένα πράγμα)
\* Μπορούμε όμως πρόσκαιρα να δουλέψουμε σε ένα αντίγραφο που είναι στέραιο!
\*
Τμήμα Δοκίμασέ_με {
\* Το καλούμε παρακάτω...
Διάβασε &μιαΟμάδα, &μιαΆλληΟμάδα
μιαΆλληΟμάδα.ύψος+=1000
\\ είναι ακριβώς το ίδιο πράγμα!
Τύπωσε μιαΟμάδα.ΤΤ.Ύψος, μιαΆλληΟμάδα.ύψος
}
Για α(2) {
Ένωσε &.ΤΤ στο &Τετράπλευρο
Τύπωσε Τετράπλευρο.πλάτος
Τετράπλευρο.πλάτος+=500
Δοκίμασέ_με &Αυτό, &Τετράπλευρο
}
\* με το πέρας της ΓΙΑ ότι έχει δημιουργηθεί χάνεται, εδώ χάνεται η Τετράπλευρο
\* και επίσης το αντίγραφο ξαναγίνεται πτητικό, στην ουσία αντιγράφεται στο πίνακα!
Τύπωσε α(2).ΤΤ.πλάτος, α(2).ΤΤ.ύψος
Τμήμα ΠέρασεΠίνακα {
διαβασε &αβγ()
Τύπωσε αβγ(2).ΤΤ.ύψος
}
ΠέρασεΠίνακα &α()
\* Λίστα \\ βγάλε αυτό \* από την αρχή της γραμμής να δεις τη λίστα μεταβλητών!
\*
\* Η αλήθεια είναι ότι μπορούμε να κρατήσουμε αναφορά σε μεταβλητές, πίνακες και συναρτήσεις
\* Όσο η ομάδα είναι σε στέραιη μορφή. Εδώ θα φτιάξουμε μία χωρίς χρήση της Κλάσης
\*
Ομάδα ΔείξεΜου {
Πίνακας Α()
Τμήμα Σύνδεσέ_με {
Ανέθεσε .Α()
\\ είναι μια ειδική διάβασε το & το παραλείπει, και περιμένει μεταβλητές ομάδας μόνο!
\\ μπορεί να ξαναπεράσει αναφορά!
\\ δεν μπορεί να περάσει αναφορά σε ομάδα
\\ εκεί θέλουμε την ισχνή αναφορά!
}
Τμήμα Παράδειγμα {
Διάβασε Ποιο
Τύπωσε .Α(Ποιο).ΤΤ.πάνω
}
}
ΔείξεΜου.Σύνδεσέ_με &α()
ΔείξεΜου.Παράδειγμα 2 \\ τυπώνει 1000
Α(1)=ΔείξεΜου \\ πάει ένα αντίγραφο του Δείξε μου. Αλλά όχι την αναφορά
Για Α(1) { Τύπωσε διάσταση(.α()) } \\ τυπώνει μηδέν, δεν υπάρχει πίνακας, μόνο το όνομα!
Δες { Τύπωσε Α(1).Παράδειγμα 2 } \\ θα βγει λάθος, αλλά το εξαφανίζει η Δες
\* Πρέπει να τον ξανασυνδέσουμε!
Για Α(1) { .Σύνδεσέ_με &α() : .Παράδειγμα 2 } \\ τυπώνει 1000
\* Υπάρχουν και οι ισχνές αναφορές όπως στο παράδειγμα με τον Χειριστή Γεγονότων
\* Η ισχνή αναφορά είναι το αλφαριθμητικό που παίρνει η Διάβασε και βρίσκει τη μνήμη που
\* θα δώσει σε μια νέα μεταβλητή που της λέμε με το & ότι θα είναι αναφορά. Π.χ.:
Α=12
Βάλε &Α
Πάνω \\ χωρίς παράμετρο διπλασιάζει τη κορυφή του σωρού (άλλοι την λένε στοίβα).
\* τώρα έχουμε δυο φορές την αναφορά.
\* αν αυτό το τμήμα λέγεται Α τότε η Ισχνή$ είναι η Α.Α (όχι πάντα δες στο τέλος)
Διάβασε Ισχνή$ : Τύπωσε Ισχνή$ : Διάβασε &Β : Τύπωσε Β \\ τυπώνει 12, δείχνει την μνήμη του Α
\* Οπότε μπορούμε να κρατήσουμε την Ισχνή$ και να περάσουμε αυτήν σε μια ομάδα, αφού
\* γνωρίζουμε ότι για όσο ζει η ομάδα θα παραμείνει η μεταβλητή στη θέση της!
Τύπωσε Τμήμα$+".Α" = &Α \\ τυπώνει αληθές, το &Α είναι ακριβώς αυτό!
\* Το Τμήμα$ μπορεί να μην είναι το όνομα του τμήματος που έχουμε ονομάσει κατά τη συγγραφή
\* Αυτό συμβαίνει αν κληθεί το τμήμα με την Κάλεσε, ή αν καλέσουμε αναδρομικά συνάρτηση.
\* Σε αυτή την περίπτωση το όνομα παράγεται από το σύστημα και είναι της μορφής Όνομα[αριθμός]
\* Το όνομα είναι του αρχικού τμήματος και ο αριθμός το επίπεδο κλήσης, μετά από το αρχικό.
\* Αν είναι 3 τότε είμαστε σε βάθος 3 (στην τέταρτη κλήση, τρεις με την Κάλεσε)
\* Η πρώτη είναι χωρίς τη κάλεσε και γίνεται από την γραμμή εντολών,
\* ακόμα και αν δεν την δούμε:
\* π.χ. έχουμε κάνε διπλό κλικ το αρχείο gsb που έχει το κώδικα και τελευταία εντολή
\* έχει την εντολή εκκίνησης ενός τμήματος.
\* Προχωρημένο παράδειγμα!
\* Ένας λόγος που φτιάχνουμε αντικείμενα είναι ότι μπορούμε να προσθέσουμε
\* λειτουργικότητα χωρίς να πειράξουμε πολλά πράγματα στο πρόγραμμα
\* Δημιουργούμε γενικές κλάσεις, που θα ισχύουν για αυτό το τμήμα
\* και όσα τρέξουν σε αυτό.
Κλάση Γενική Αντικείμενο {
όνομα$ \\ δεν βάζουμε όνομα
Τμήμα Αντικείμενο { \\κατασκευαστής - ελέγουμε αν έχουμε είσοδο, και τι
Αν ταύτιση("G") τότε Διάβασε α : Αυτό=α
}
}
Κλάση Γενική Επιλέξιμο {
Ενεργό
Τμήμα Επιλέξιμο {
Αν ταύτιση("G") τότε Διάβασε α : Αυτό=α
}
}
Κλάση Γενική Τετράπλευρο {
πάνω, αριστερά, πλάτος, ύψος
Τμήμα Τετράπλευρο {
Αν ταύτιση("G") τότε Διάβασε α : Αυτό=α
}
}
Κλάση Πλήκτρο {
Αναγνωριστικό
Τμήμα Πλήκτρο {
Αν ταύτιση("G") τότε Διάβασε α : Αυτό=α
}
}
β1=Αντικείμενο(Τετράπλευρο(Επιλέξιμο(Πλήκτρο())))
\* Όλα βρίσκονται στο ίδιο επίπεδο. Αυτό μπορεί να είναι πρόβλημα αν υπάρχουν
\* ίδια ονόματα (μεταβλητών, πινάκων, συναρτήσεων, τμημάτων, άλλων ομάδων)
Λίστα
\*
\* Εδώ είναι η άλλη περίπτωση να κάνει κανείς συνδυασμό κλάσεων.
\* Μπορούμε να ορίσουμε ομάδες που θα έχουν μια αρχική σχεδίαση
\* και μπορούμε να εμπλουτίσουμε μετά - εδώ θα το κάνουμε για το ΤΤ
\*
Κλάση ΝέοΠλήκτρο {
Αντικείμενο ΑΑ
Τετράπλευρο ΤΤ
Επιλέξιμο ΕΕ
Συνάρτηση όνομα$ { =.ΑΑ.όνομα$}
Τμήμα ΝέοΠλήκτρο { \\ για να το κατασκευάσουμε θα δώσουμε όνομα
Διάβασε .ΑΑ.όνομα$
}
}
β2=ΝέοΠλήκτρο("Πλήκτρο 1")
Τύπωσε β2.όνομα$()
Για Αυτό { \\ δεν θέλουμε να κρατήσουμε τη κ
ομάδα κ {πάνω=500, αριστερά=100, πλάτος=1000, ύψος=500 }
ομάδα κ {Συνάρτηση κίνηση { Δες { Διάβασε .πάνω , .αριστερά , .πλάτος , .ύψος}
Δες { Ενθεση γραμμα$ }}}
Βάλε κ \\ κάνουμε τη κ πτητική!
}
\*
\* Ουσιαστικά θα κάνουμε επέκταση της ομάδας ΤΤ (Τετράπλευρο) με μια συνάρτηση
\* Είναι έτσι φτιαγμένη που αν λείπει μία από τις 1η, 2η, 3η, 4η παράμετρο να σταματάει την Διάβασε
\* Αυτό το πετυχαίνει το μπλοκ Δες { } που πετάει το λάθος που γυρνάει ο μεταφραστής και συνεχίζει!
\*Με την διάβασε πέρνουμε την κ που υπάρχει τώρα μόνο στο σωρό και την αντιγράφουμε στο ΤΤ του β2
\*
\* Η ΤΤ όμως είναι στέραιη ομάδα, οπότε δεν μπορούμε να την "φορτώσουμε" με νέα καλά, σε μια Για ... {}
\* Για το λόγο αυτό την έχουμε απ έξω
\*
Διάβασε β2.ΤΤ
\*
\* Χρησιμοποιούμε την κάλεσε και βάζουμε από μία μέχρι τέσσερις παραμέτρους
Για Αυτό { \\ αυτός είναι ένας τρόπος να σβήσουμε το Τ μετά το πέρας του μπλοκ
Κάλεσε β2.ΤΤ.κίνηση(5000,5000)
Τύπωσε β2.ΤΤ.πάνω
Ένωσε β2.ΤΤ στο Τ
Τ.πάνω+=200
Τύπωσε Τ.πάνω, β2.ΤΤ.πάνω \\ είναι ίδια
}
\*
\* Αντί να περάσουμε παράμετρο, περνάμε εντολές!
\* Επειδή έτσι το φτιάξαμε να κάνει!
\* Δεν μπορούμε όμως να δούμε τα άλλα αντικείμενα μέσα από αυτό το αντικείμενο!
\*
Κάλεσε β2.ΤΤ.κίνηση({ .αριστερά+=1000 : Τύπωσε .πάνω, .αριστερά })
\*
\* Τώρα θα φτιάξουμε ένα αντίγραφο του β2 (που έχει τρεις ομάδες μέσα)
\* δεν θα το βάλουμε σε "στέραια" ομάδα, αλλά σε "πτητική". (μπορεί να μετακινηθεί από το τμήμα).
\*
Πίνακας α(10)
α(2)=β2 \\ αντιγράφουμε όλο το β2 στη θέση 3 του πίνακα (δείκτης 0 δείχνει στην πρώτη θέση).
Τύπωσε α(2).ΤΤ.πάνω \\ 5200
για α(2) { κάλεσε .ΤΤ.κίνηση(100,100,3000,5000) } \\ Η κάλεσε δεν δουλεύει με πτητική ομάδα!
Τύπωσε α(2).ΤΤ.πλάτος
αα=α(2).ΤΤ.κίνηση(1000,1000,2000,4000)
Τύπωσε α(2).ΤΤ.πλάτος
\* Δεν μπορούμε να ενώσουμε μια ομάδα που περιέχει η πτητική ομάδα ή την ίδια την ομάδα
\* όσο βρίσκεται σε αυτή τη κατάσταση (σαν "παγωμένη" ένα πράγμα)
\* Μπορούμε όμως πρόσκαιρα να δουλέψουμε σε ένα αντίγραφο που είναι στέραιο!
\*
Τμήμα Δοκίμασέ_με {
\* Το καλούμε παρακάτω...
Διάβασε &μιαΟμάδα, &μιαΆλληΟμάδα
μιαΆλληΟμάδα.ύψος+=1000
\\ είναι ακριβώς το ίδιο πράγμα!
Τύπωσε μιαΟμάδα.ΤΤ.Ύψος, μιαΆλληΟμάδα.ύψος
}
Για α(2) {
Ένωσε &.ΤΤ στο &Τετράπλευρο
Τύπωσε Τετράπλευρο.πλάτος
Τετράπλευρο.πλάτος+=500
Δοκίμασέ_με &Αυτό, &Τετράπλευρο
}
\* με το πέρας της ΓΙΑ ότι έχει δημιουργηθεί χάνεται, εδώ χάνεται η Τετράπλευρο
\* και επίσης το αντίγραφο ξαναγίνεται πτητικό, στην ουσία αντιγράφεται στο πίνακα!
Τύπωσε α(2).ΤΤ.πλάτος, α(2).ΤΤ.ύψος
Τμήμα ΠέρασεΠίνακα {
διαβασε &αβγ()
Τύπωσε αβγ(2).ΤΤ.ύψος
}
ΠέρασεΠίνακα &α()
\* Λίστα \\ βγάλε αυτό \* από την αρχή της γραμμής να δεις τη λίστα μεταβλητών!
\*
\* Η αλήθεια είναι ότι μπορούμε να κρατήσουμε αναφορά σε μεταβλητές, πίνακες και συναρτήσεις
\* Όσο η ομάδα είναι σε στέραιη μορφή. Εδώ θα φτιάξουμε μία χωρίς χρήση της Κλάσης
\*
Ομάδα ΔείξεΜου {
Πίνακας Α()
Τμήμα Σύνδεσέ_με {
Ανέθεσε .Α()
\\ είναι μια ειδική διάβασε το & το παραλείπει, και περιμένει μεταβλητές ομάδας μόνο!
\\ μπορεί να ξαναπεράσει αναφορά!
\\ δεν μπορεί να περάσει αναφορά σε ομάδα
\\ εκεί θέλουμε την ισχνή αναφορά!
}
Τμήμα Παράδειγμα {
Διάβασε Ποιο
Τύπωσε .Α(Ποιο).ΤΤ.πάνω
}
}
ΔείξεΜου.Σύνδεσέ_με &α()
ΔείξεΜου.Παράδειγμα 2 \\ τυπώνει 1000
Α(1)=ΔείξεΜου \\ πάει ένα αντίγραφο του Δείξε μου. Αλλά όχι την αναφορά
Για Α(1) { Τύπωσε διάσταση(.α()) } \\ τυπώνει μηδέν, δεν υπάρχει πίνακας, μόνο το όνομα!
Δες { Τύπωσε Α(1).Παράδειγμα 2 } \\ θα βγει λάθος, αλλά το εξαφανίζει η Δες
\* Πρέπει να τον ξανασυνδέσουμε!
Για Α(1) { .Σύνδεσέ_με &α() : .Παράδειγμα 2 } \\ τυπώνει 1000
\* Υπάρχουν και οι ισχνές αναφορές όπως στο παράδειγμα με τον Χειριστή Γεγονότων
\* Η ισχνή αναφορά είναι το αλφαριθμητικό που παίρνει η Διάβασε και βρίσκει τη μνήμη που
\* θα δώσει σε μια νέα μεταβλητή που της λέμε με το & ότι θα είναι αναφορά. Π.χ.:
Α=12
Βάλε &Α
Πάνω \\ χωρίς παράμετρο διπλασιάζει τη κορυφή του σωρού (άλλοι την λένε στοίβα).
\* τώρα έχουμε δυο φορές την αναφορά.
\* αν αυτό το τμήμα λέγεται Α τότε η Ισχνή$ είναι η Α.Α (όχι πάντα δες στο τέλος)
Διάβασε Ισχνή$ : Τύπωσε Ισχνή$ : Διάβασε &Β : Τύπωσε Β \\ τυπώνει 12, δείχνει την μνήμη του Α
\* Οπότε μπορούμε να κρατήσουμε την Ισχνή$ και να περάσουμε αυτήν σε μια ομάδα, αφού
\* γνωρίζουμε ότι για όσο ζει η ομάδα θα παραμείνει η μεταβλητή στη θέση της!
Τύπωσε Τμήμα$+".Α" = &Α \\ τυπώνει αληθές, το &Α είναι ακριβώς αυτό!
\* Το Τμήμα$ μπορεί να μην είναι το όνομα του τμήματος που έχουμε ονομάσει κατά τη συγγραφή
\* Αυτό συμβαίνει αν κληθεί το τμήμα με την Κάλεσε, ή αν καλέσουμε αναδρομικά συνάρτηση.
\* Σε αυτή την περίπτωση το όνομα παράγεται από το σύστημα και είναι της μορφής Όνομα[αριθμός]
\* Το όνομα είναι του αρχικού τμήματος και ο αριθμός το επίπεδο κλήσης, μετά από το αρχικό.
\* Αν είναι 3 τότε είμαστε σε βάθος 3 (στην τέταρτη κλήση, τρεις με την Κάλεσε)
\* Η πρώτη είναι χωρίς τη κάλεσε και γίνεται από την γραμμή εντολών,
\* ακόμα και αν δεν την δούμε:
\* π.χ. έχουμε κάνε διπλό κλικ το αρχείο gsb που έχει το κώδικα και τελευταία εντολή
\* έχει την εντολή εκκίνησης ενός τμήματος.
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου
You can feel free to write any suggestion, or idea on the subject.