Κυριακή 20 Σεπτεμβρίου 2015

Υποκλάσεις (Κληρονομικότητα)- Μ2000 - Μέρος 2ον

\* Συνέχεια της προηγούμενης ανάρτησης. Βάλτε το σε ένα νέο τμήμα.
\* Προχωρημένο παράδειγμα!
\* Ένας λόγος που φτιάχνουμε αντικείμενα είναι ότι μπορούμε να προσθέσουμε
\* λειτουργικότητα χωρίς να πειράξουμε πολλά πράγματα στο πρόγραμμα
\* Δημιουργούμε γενικές κλάσεις, που θα ισχύουν για αυτό το τμήμα
\* και όσα τρέξουν σε αυτό.


Κλάση Γενική Αντικείμενο {
      όνομα$    \\ δεν βάζουμε όνομα
      Τμήμα Αντικείμενο { \\κατασκευαστής - ελέγουμε αν έχουμε είσοδο, και τι
            Αν ταύτιση("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.