Η Μ2000 είχε από την πρώτη έκδοση (που δεν υποστήριζε αντικείμενα) την επικάλυψη. Ενώ σε άλλες γλώσσες πρέπει να γράψει κανείς πρόσθετες συναρτήσεις με το ίδιο όνομα, εδώ η Επικάλυψη γίνεται μέσα από μια συνάρτηση με τον έλεγχο του τύπου των παραμέτρων. Στο αντικειμενοστραφή προγραμμματισμό (OOP) λέμε τις συναρτήσεις/τμήματα ως μεθόδους και τις μεταβλητές/δεδομένα ως ιδιότητες. Όταν μιλάμε για επικάλυψη, μιλάμε για το τι μπορούμε να περάσουμε σε μια μέθοδο. Στις παραμέτρους μπορεί να είναι ένα άλλο αντικείμενο, ως αναφορά ή ως αντίγραφο. Αυτή η δυνατότητα να περνάμε ένα αντικείμενο με τις μεθόδους του, σημαίνει ότι ξεφεύγουμε από την απλή υπόθεση ότι επικάλυψη είναι απλά μια διαφοροποίηση "διακριτών" παραμέτρων.
Γιατί όμως η επικάλυψη να είναι χρήσιμη; Η απάντηση είναι ότι στον OOP βλέπουμε τι έχουμε και κάνουμε, δηλαδή συνήθως δεν φτιάχνουμε όλα τα αντικείμενα αλλά παίρνουμε έτοιμα! Θέλουμε λοιπόν τα έτοιμα να μας παρέχουν εναλλακτικές και η επικάλυψη μας δίνει αυτό το πλεονέκτημα. αν σκεφτούμε ότι φτιάχνουμε το πρόγραμμα σταδιακά, τότε η επικάλυψη λύνει ένα πρόβλημα τοπικά, χωρίς να χαλάσει το κώδικα αλλού.
Οι νεότερες αναθεωρήσεις αναγνωρίζουν τα Α (αριθμός) και Γ (γράμματα) στην θέση των N και S - υπάρχουν και τα αγγλικά N (number) και S (string)
κλάση δείξεμου {
ονομασία$, αναγνωριστικό
Τμήμα δείξεμου {
\\ τα "Α" και "Γ" στα ελληνικά
αν ταύτιση("Α") τότε {
διάβασε .αναγνωριστικό
} Αλλιώς.αν ταύτιση("Γ") τότε διάβασε .ονομασία$
}
}
Αυτή ήταν η αρχική δείξεμου
κλάση δείξεμου {
ονομασία$, αναγνωριστικό
Τμήμα δείξεμου {
\\ τα "N" και "S"στα αγγλικά.
αν ταύτιση("N") τότε {
διάβασε .αναγνωριστικό
} Αλλιώς.αν ταύτιση("S") τότε διάβασε .ονομασία$
}
}
Τμήμα Έλεγχος {
Διάβασε &Κάτι
Αν Κάτι.ονομασία$<>"" τότε {
Τύπωσε Κάτι.ονομασία$
} Αλλιώς Τύπωσε Κάτι.αναγνωριστικό
}
Κ=δείξεμου("Πέτρος")
Β=δείξεμου(12045)
\\ Εδώ ξέρουμε τι έχουμε και τυπώνουμε ανάλογα
Τύπωσε Κ.ονομασία$, Β.αναγνωριστικό
\\ Εδώ στον Έλεγχο έχουμε περιγράψει τι θα κάνει σε κάθε περίπτωση
\\ Εδώ έχουμε το κέρδος της επικάλυψης.
\\ Ότι χρειάζεται η Έλεγχος το έχει μέσα στο αντικείμενο.
\\ Αρκεί να μην αλλάξουμε το σχεδιασμό της Δείξεμου
Έλεγχος &Κ
Έλεγχος &Β
Αν χρησιμοποιηθεί το Κ ή το Β ως παράμετρος σε μια συνάρτηση τότε εκεί μπορεί να ελεγχθεί τι υπάρχει και να μας δώσει τη κατάλληλη απάντηση!
Στις γλώσσες με μεταγλωττιστή η σύνδεση των μεθόδων της επικάλυψης (είναι ξεχωριστές) λέγεται στατική σύνδεση και γίνεται καθώς ετοιμάζεται το πρόγραμμα. Εδώ στη Μ2000 έχουμε διερμηνευτή, ο οποίος τρέχει το πρόγραμμα με την έννοια ότι γνωρίζει ό,τι μέχρι στιγμής έχει δει, δηλαδή δεν υπάρχει δεύτερο πέρασμα, έτσι δεν συνδέει μεθόδους, απλά τις αναζητεί σε λίστες.
\\ Ιδέα από ένα ppt (παρουσίαση) του Χατζηγεωργίου Αλέξανδρου.
Κλάση Πρόσωπο {
όνομα$
τμήμα Πρόσωπο {
διάβασε .όνομα$
}
τμήμα Παρουσιά_σου {
Τύπωσε .όνομα$
}
}
Κλάση Φοιτητής {
σχολή$
τμήμα Φοιτητής {
διαβασε το_Πρόσωπο
\\ Πολυμορφισμός
ομαδα το_Πρόσωπο {
τμήμα Παρουσιά_σου {
Τύπωσε .όνομα$, .σχολή$
}
}
αυτό=το_Πρόσωπο
Διάβασε .σχολή$
}
}
Πίνακας Α(10)
α(0)=Πρόσωπο("Γιώργος"), Φοιτητής(Πρόσωπο("Πέτρος"),"ΑΣΟΕΕ"), Φοιτητής(Πρόσωπο("Μήτσος"),"ΕΚΠΑ")
α(3)=Πρόσωπο("Μάρκος"), Πρόσωπο("Στέλιος"), Φοιτητής(Πρόσωπο("Σοφία"),"ΤΕΙ Πειραιά")
Για ν=0 έως 5 {
α(ν).Παρουσιά_σου
}
\\ περνάμε κανονικά μια ομάδα πρόσωπο
α(0)=Φοιτητής(α(0),"ΕΚΠΑ")
α(0).Παρουσιά_σου
\\ Περνάμε κανονικά ένα αλφαριθμητικό από μια ομάδα
α(1)=Πρόσωπο(α(1).ονομα$)
α(1).Παρουσιά_σου
\\ Περνάμε μια ομάδα Φοιτητής εκεί που περιμένει Πρόσωπο
\\ Αλλά δεν μας πειράζει - Δείτε όμως στον ορισμό ότι τη σχολή τη διαβάζουμε
\\ αφού αντιγράψουμε στο Αυτό το αντίγραφο του α(2) (το περνάμε με αντιγραφή).
\\ Εκεί που περίμενε πρόσωπο πήρε φοιτητή
α(2)=Φοιτητής(α(2),"")
\\ Απλά εδώ η Παρουσία_σου τυπώνει κενή σχολή
α(2).Παρουσιά_σου
\\ Όμως μπορούμε να το αλλάξουμε για τη συγκεκριμένη ομάδα το α(2)
Για α(2) {
κλάση ΠρόσθετοΑ {
τμήμα Παρουσιά_σου {
Τύπωσε .όνομα$, "Παλιός Φοιτήτης"
}
συνάρτηση Είμαι_Πρόσωπο {
=.σχολή$=""
}
}
Αυτό =ΠρόσθετοΑ()
}
α(2).Παρουσιά_σου
Τύπωσε α(2).Είμαι_Πρόσωπο()
Στη διαδοχική κλήση της Παρουσία_σου, ανάλογα με το τι έχουμε θα έχουμε εκτύπωση ονόματος ή ονόματος και σχολής.
Ομάδα Αλφα {
Τύπος: ΕΝΑ
Χ=10
}
Τύπωσε Αλφα είναι τύπος ΕΝΑ
Τύπωσε @Κάππα(Αλφα)
// στατική συνάρτηση, το όνομα λειτουργεί και ως έξοδος, αν περάσει η ροή από εδώ!
Συνάρτηση Κάππα(κ ως ΕΝΑ)
=Κ.Χ*1000
Τέλος Συνάρτησης
Κλάση ΕΝΑ {
Χ=10
}
Κλάση ΔΥΟ ως ΕΝΑ {
Συνάρτηση Κάππα {
=.Χ*1000
}
}
Α=ΔΥΟ()
Τύπωσε Α είναι τύπος ΕΝΑ
Τύπωσε Α είναι τύπος ΔΥΟ
Τύπωσε @Κάππα(Α), Α.Κάππα()
// στατική συνάρτηση, το όνομα λειτουργεί και ως έξοδος, αν περάσει η ροή από εδώ!
Συνάρτηση Κάππα(κ ως ΕΝΑ)
=Κ.Χ*1000
Τέλος Συνάρτησης
Κλάση ΕΝΑ {
Χ=10
}
Κλάση ΔΥΟ ως ΕΝΑ {
Συνάρτηση Κάππα {
=.Χ*1000
}
}
Α->ΔΥΟ()
Τύπωσε Α είναι τύπος ΕΝΑ
Τύπωσε Α είναι τύπος ΔΥΟ
Τύπωσε @Κάππα(Α), Α=>Κάππα()
// στατική συνάρτηση, το όνομα λειτουργεί και ως έξοδος, αν περάσει η ροή από εδώ!
Συνάρτηση Κάππα(κ ως * ΕΝΑ)
=Κ=>Χ*1000
Τέλος Συνάρτησης
Συνάρτηση Κάππα(&κ ως *ΕΝΑ) {
=Κ=>Χ*1000
}
Κλάση ΕΝΑ {
Χ=10
}
Κλάση ΔΥΟ ως ΕΝΑ {
Συνάρτηση Κάππα {
=.Χ*1000
}
}
Α->ΔΥΟ()
Τύπωσε Α είναι τύπος ΕΝΑ
Τύπωσε Α είναι τύπος ΔΥΟ
Τύπωσε Κάππα(&Α), Α=>Κάππα()
Κλάση ΕΝΑ {
Χ=10
}
Κλάση ΔΥΟ ως ΕΝΑ {
Συνάρτηση Κάππα {
=.Χ*1000
}
}
Α->ΔΥΟ()
Τύπωσε Α είναι τύπος ΕΝΑ
Τύπωσε Α είναι τύπος ΔΥΟ
Κάππα=Λάμδα Α -> {
=Α=>Χ*1000
}
Τύπωσε Κάππα(), Α=>Κάππα()
Α=>Χ++
Τύπωσε Κάππα(), Α=>Κάππα()
Δοκιμάστε και αυτό: Τύπωσε λάμδα (Χ)->{=Χ**2}(3)=9, λάμδα (Χ)->{=Χ**2}(7)=49
Μπορούμε να βάλουμε τις παρακάτω προσθήκες (η Α είναι απαραίτητη για την Β, λόγω πίνακα)
Προσθήκη Α
Πίνακας Α(30) \\ +20 στοιχεία
Α(18)=Φοιτητής(Πρόσωπο("Ιωάννης"),"Πανεπιστήμιο Κρήτης")
Α(18).Παρουσιά_σου
Προσθήκη Β
\\ εδώ δεν είναι γνωστή η κλάση Φοιτητής όπως και η κλάση Πρόσωπο
\\ όμως αυτό δεν έχει σημασία για τη Μ2000
\\ Κάθε αντικείμενο έχει τα στοιχεία του μαζί!
Διάβασε &β(),μ, κάτι
β(μ)=Κάτι \\ το Κάτι είναι ομάδα
β(μ).Παρουσιά_σου
}
ΑΛΦΑ &Α(), 19, Φοιτητής(Πρόσωπο("Σταύρος"),"Πανεπιστήμιο Θράκης")
Α(19).Παρουσιά_σου \\ οι αλλαγές ισχύουν και στην επιστροφή
Β' Τρόπος (φαίνονται οι αλλαγές)
\\ Κατασκευάζουμε με δυο αλφαριθμητικά Φοιτητής("Πέτρος","ΑΣΟΕΕ")
\\* Πολυμορφισμός
\\ Ιδέα από ένα ppt (παρουσίαση) του Χατζηγεωργίου Αλέξανδρου.
Κλάση Πρόσωπο {
όνομα$
τμήμα Πρόσωπο {
διάβασε .όνομα$
}
τμήμα Παρουσιά_σου {
τύπωσε .όνομα$
}
}
Κλάση Φοιτητής {
σχολή$
Κλάση Πρόσωπο {
όνομα$
τμήμα Πρόσωπο {
διάβασε .όνομα$
}
τμήμα Παρουσιά_σου {
τύπωσε .όνομα$
}
}
τμήμα Φοιτητής {
Αυτο=.Πρόσωπο()
διαβασε .όνομα$
\\ Πολυμορφισμός
ομαδα προσθήκη {
τμήμα Παρουσιά_σου {
τύπωσε .όνομα$, .σχολή$
}
}
αυτό=προσθήκη
Διάβασε .σχολή$
}
}
Πίνακας Α(10)
α(0)=Πρόσωπο("Γιώργος") , Φοιτητής("Πέτρος","ΑΣΟΕΕ"), Φοιτητής("Μήτσος","ΕΚΠΑ")
α(3)=Πρόσωπο("Μάρκος"), Πρόσωπο("Στέλιος"), Φοιτητής("Σοφία","ΤΕΙ Πειραιά")
Για ν=0 έως 5 {
α(ν).Παρουσιά_σου
}
\\ περνάμε κανονικά μια ομάδα πρόσωπο
α(0)=Φοιτητής(α(0).ονομα$,"ΕΚΠΑ")
α(0).Παρουσιά_σου
\\ Περνάμε κανονικά ένα αλφαριθμητικό από μια ομάδα
α(1)=Πρόσωπο(α(1).ονομα$)
α(1).Παρουσιά_σου
\\ Περνάμε μια ομάδα Φοιτητής εκεί που περιμένει Πρόσωπο
\\ Αλλά δεν μας πειράζει - Δείτε όμως στον ορισμό ότι τη σχολή τη διαβάζουμε
\\ αφού αντιγράψουμε στο Αυτό το αντίγραφο του α(2) (το περνάμε με αντιγραφή).
\\ Εκεί που περίμενε πρόσωπο πήρε φοιτητή
α(2)=Φοιτητής(α(2).όνομα$,"")
\\ Απλά εδώ η Παρουσία_σου τυπώνει κενή σχολή
α(2).Παρουσιά_σου
\\ Όμως μπορούμε να το αλλάξουμε για τη συγκεκριμένη ομάδα το α(2)
για α(2) {
ομαδα Μ {
τμήμα Παρουσιά_σου {
τύπωσε .όνομα$, "Παλιός Φοιτήτης"
}
συνάρτηση Είμαι_Πρόσωπο {
=.σχολή$=""
}
}
Αυτό=Μ
}
α(2).Παρουσιά_σου
τύπωσε α(2).Είμαι_Πρόσωπο()
Γ' Τρόπος
Οι κλάσεις είναι γενικές συναρτήσεις (Κλάση Γενική Πρόσωπο { } παλιός ορισμός) αν είναι μέλος ενός τμήματος (είτε είναι σε ομάδα είτε όχι), αλλά είναι τοπικές αν είναι μέλος ομάδας (εκτός αν η ομάδα είναι γενική, οπότε και τα μέλη της είναι γενικά, αλλά έχουν το όνομα της ομάδας ως πρώτο συνθετικό).
\\ Ιδέα από ένα ppt (παρουσίαση) του Χατζηγεωργίου Αλέξανδρου.
Κλάση Πρόσωπο {
όνομα$
τμήμα Πρόσωπο {
διάβασε .όνομα$
}
τμήμα Παρουσιά_σου {
Τύπωσε .όνομα$
}
}
Κλάση Φοιτητής {
σχολή$
τμήμα Φοιτητής {
Αυτο=Πρόσωπο() \\ έφυγε η τελεία πριν τη φράση Πρόσωπο
διαβασε .όνομα$
\\ Πολυμορφισμός
ομαδα προσθήκη {
τμήμα Παρουσιά_σου {
Τύπωσε .όνομα$, .σχολή$
}
}
αυτό=προσθήκη
Διάβασε .σχολή$
}
}
Πίνακας Α(10)
α(0)=Πρόσωπο("Γιώργος") , Φοιτητής("Πέτρος","ΑΣΟΕΕ"), Φοιτητής("Μήτσος","ΕΚΠΑ")
α(3)=Πρόσωπο("Μάρκος"), Πρόσωπο("Στέλιος"), Φοιτητής("Σοφία","ΤΕΙ Πειραιά")
Για ν=0 έως 5 {
α(ν).Παρουσιά_σου
}
\\ τα άλλα ως έχουν
Τύπωσε α(4) είναι τύπος Φοιτητής = Ψευδές
Τύπωσε α(4) είναι τύπος Πρόσωπο = Αληθές
Τύπωσε α(1) είναι τύπος Πρόσωπο = Αληθές
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου
You can feel free to write any suggestion, or idea on the subject.