Τρίτη 22 Σεπτεμβρίου 2015

Επικάλυψη και πολυμορφισμός

Ανανέωση για συμβατότητα με τις εκδόσεις 9 και 10

Σε γλώσσες με δυνατότητα αντικειμενοστραφή προγραμματισμού, υπάρχουν δυο έννοιες που τις συνοδεύουν η Επικάλυψη και ο Πολυμορφισμός.

Η Μ2000 είχε από την πρώτη έκδοση (που δεν υποστήριζε αντικείμενα) την επικάλυψη. Ενώ σε άλλες γλώσσες πρέπει να γράψει κανείς πρόσθετες συναρτήσεις με το ίδιο όνομα, εδώ η Επικάλυψη γίνεται μέσα από μια συνάρτηση με τον έλεγχο του τύπου των παραμέτρων. Στο αντικειμενοστραφή προγραμμματισμό (OOP) λέμε τις συναρτήσεις/τμήματα ως μεθόδους και τις μεταβλητές/δεδομένα ως ιδιότητες. Όταν μιλάμε για επικάλυψη, μιλάμε για το τι μπορούμε να περάσουμε σε μια μέθοδο. Στις παραμέτρους μπορεί να είναι ένα άλλο αντικείμενο, ως αναφορά ή ως αντίγραφο. Αυτή η δυνατότητα να περνάμε ένα αντικείμενο με τις μεθόδους του, σημαίνει ότι ξεφεύγουμε από την απλή υπόθεση ότι επικάλυψη είναι απλά μια διαφοροποίηση "διακριτών" παραμέτρων.
Γιατί όμως η επικάλυψη να είναι χρήσιμη; Η απάντηση είναι ότι στον OOP βλέπουμε τι έχουμε και κάνουμε, δηλαδή συνήθως δεν φτιάχνουμε όλα τα αντικείμενα αλλά παίρνουμε έτοιμα! Θέλουμε λοιπόν τα έτοιμα να μας παρέχουν εναλλακτικές και η επικάλυψη μας δίνει αυτό το πλεονέκτημα. αν σκεφτούμε ότι φτιάχνουμε το πρόγραμμα σταδιακά, τότε η επικάλυψη λύνει ένα πρόβλημα τοπικά, χωρίς να χαλάσει το κώδικα αλλού.

Οι νεότερες αναθεωρήσεις αναγνωρίζουν τα Α (αριθμός)  και Γ (γράμματα) στην θέση των N και S - υπάρχουν και τα αγγλικά N (number) και S (string)
κλάση δείξεμου {
      ονομασία$, αναγνωριστικό
      Τμήμα δείξεμου {
             \\ τα "Α" και "Γ" στα ελληνικά
            αν ταύτιση("Α") τότε {
                  διάβασε .αναγνωριστικό
            } Αλλιώς.αν ταύτιση("Γ") τότε διάβασε .ονομασία$
      }
}


Αυτή ήταν η αρχική δείξεμου

κλάση δείξεμου {
      ονομασία$, αναγνωριστικό
      Τμήμα δείξεμου {
             \\ τα "N" και "S"στα αγγλικά.
            αν ταύτιση("N") τότε {
                  διάβασε .αναγνωριστικό
            } Αλλιώς.αν ταύτιση("S") τότε διάβασε .ονομασία$
      }
}
Τμήμα Έλεγχος {
      Διάβασε &Κάτι
      Αν Κάτι.ονομασία$<>"" τότε {
            Τύπωσε Κάτι.ονομασία$
      } Αλλιώς Τύπωσε Κάτι.αναγνωριστικό
}



Κ=δείξεμου("Πέτρος")
Β=δείξεμου(12045)

\\ Εδώ ξέρουμε τι έχουμε και τυπώνουμε ανάλογα
Τύπωσε Κ.ονομασία$, Β.αναγνωριστικό

\\ Εδώ στον Έλεγχο έχουμε περιγράψει τι θα κάνει σε κάθε περίπτωση
\\ Εδώ έχουμε το κέρδος της επικάλυψης.
\\ Ότι χρειάζεται η Έλεγχος το έχει μέσα στο αντικείμενο.
\\ Αρκεί να μην αλλάξουμε το σχεδιασμό της Δείξεμου

Έλεγχος
Έλεγχος


Αν χρησιμοποιηθεί το Κ ή το Β ως παράμετρος σε μια συνάρτηση τότε εκεί μπορεί να ελεγχθεί τι υπάρχει και να μας δώσει τη κατάλληλη απάντηση!
Στις γλώσσες με μεταγλωττιστή η σύνδεση των μεθόδων της επικάλυψης (είναι ξεχωριστές) λέγεται στατική σύνδεση και γίνεται καθώς ετοιμάζεται το πρόγραμμα. Εδώ στη Μ2000 έχουμε διερμηνευτή, ο οποίος τρέχει το πρόγραμμα με την έννοια ότι γνωρίζει ό,τι μέχρι στιγμής έχει δει, δηλαδή δεν υπάρχει δεύτερο πέρασμα, έτσι δεν συνδέει μεθόδους, απλά τις αναζητεί σε λίστες.
Στις νεότερες εκδόσεις υπάρχουν Ρουτίνες και Συναρτήσεις που γράφονται στο τέλος μέσα σε ένα τμήμα ή μια συνάρτηση, και αυτές είναι στατικές, δηλαδή δεν αλλάζουν κώδικα όπως οι κανονικές συναρτήσεις και τα τμήματα της Μ2000. Αυτά τα βρίσκει στη πρώτη αναζήτηση ο διερμηνευτής και κρατάει "σημειώσεις" για την επόμενη φορά. Επίσης αυτές οι στατικές ρουτίνες και συναρτήσεις έχουν το διαφορετικό ότι βλέπουν ό,τι έχει το τμήμα, και μπορούν να σκιάζουν ίδια ονόματα με εντολή Τοπική ή Τοπικές. Τα τμήματα και οι κανονικές συναρτήσεις έχουν δικό τους όνομα χώρου, δηλαδή έχουν δικές τους μεταβλητές εξ ορισμού τοπικές και δεν δίνουν πρόσβαση σε κάτι άλλο εκτός αν είναι γενικό. Ειδική περίπτωση είναι τα τμήματα και οι συναρτήσεις σε αντικείμενα όπου εκεί υπάρχει πρόσβαση στα μέλη του αντικειμένου. Όμως μια .Χ=10 θα γράψει νέα τοπική ενώ το .Χ<=10 θα γράψει στο Αυτό.Χ (μέλος του αντικειμένου). Δείτε ότι το .Χ=10 έχει τελεία πριν το Χ. Αυτό δεν τον πειράζει τον διερμηνευτή γιατί η τελεία αναφέρεται στο τρέχον όνομα χώρου. Οι τοπικές έχουν πάντα προτεραιότητα έναντι οτιδήποτε άλλων. Υπάρχουν και στατικές μεταβλητές, αλλά απαγορεύεται να έχουμε στατική και τοπική με το ίδιο όνομα (βγαίνει λάθος). Οι στατικές κρατάνε τιμή και για την επόμενη κλήση.


\\* Πολυμορφισμός
\\ Ιδέα από ένα ppt (παρουσίαση) του Χατζηγεωργίου Αλέξανδρου.
Κλάση Πρόσωπο {
      όνομα$
      τμήμα Πρόσωπο {
      διάβασε .όνομα$
      }
       τμήμα Παρουσιά_σου {
             Τύπωσε .όνομα$
      }
}
Κλάση Φοιτητής {
      σχολή$
      τμήμα Φοιτητής {
            διαβασε το_Πρόσωπο
            \\ Πολυμορφισμός
            ομαδα το_Πρόσωπο {
                  τμήμα Παρουσιά_σου {
                         Τύπωσε .όνομα$, .σχολή$
                  }
                  }
            αυτό=το_Πρόσωπο
            Διάβασε .σχολή$
      }
}
Πίνακας Α(10)
α(0)=Πρόσωπο("Γιώργος"), Φοιτητής(Πρόσωπο("Πέτρος"),"ΑΣΟΕΕ"), Φοιτητής(Πρόσωπο("Μήτσος"),"ΕΚΠΑ")
α(3)=Πρόσωπο("Μάρκος"), Πρόσωπο("Στέλιος"), Φοιτητής(Πρόσωπο("Σοφία"),"ΤΕΙ Πειραιά")
Για ν=0 έως 5 {
      α(ν).Παρουσιά_σου
}
\\ περνάμε κανονικά μια ομάδα πρόσωπο
α(0)=Φοιτητής(α(0),"ΕΚΠΑ")
α(0).Παρουσιά_σου
\\ Περνάμε κανονικά ένα αλφαριθμητικό από μια ομάδα
α(1)=Πρόσωπο(α(1).ονομα$)
α(1).Παρουσιά_σου
\\ Περνάμε μια ομάδα Φοιτητής εκεί που περιμένει Πρόσωπο
\\ Αλλά δεν μας πειράζει - Δείτε όμως στον ορισμό ότι τη σχολή τη διαβάζουμε
\\ αφού αντιγράψουμε στο Αυτό το αντίγραφο του α(2) (το περνάμε με αντιγραφή).
\\ Εκεί που περίμενε πρόσωπο πήρε φοιτητή
α(2)=Φοιτητής(α(2),"")
\\ Απλά εδώ η Παρουσία_σου τυπώνει κενή σχολή
α(2).Παρουσιά_σου
\\ Όμως μπορούμε να το αλλάξουμε για τη συγκεκριμένη ομάδα το α(2)
Για α(2) {
      κλάση ΠρόσθετοΑ {
            τμήμα Παρουσιά_σου {
                    Τύπωσε .όνομα$, "Παλιός Φοιτήτης"
            }
            συνάρτηση Είμαι_Πρόσωπο {
                  =.σχολή$=""
            }
      }
      Αυτό =ΠρόσθετοΑ()
}
α(2).Παρουσιά_σου
Τύπωσε α(2).Είμαι_Πρόσωπο()




Εδώ στον πίνακα α() έχουμε δυο ειδών αντικείμενα, το Πρόσωπο και το Φοιτητή (ομάδες λέγονται στην Μ2000). Ο Φοιτητής είναι υποκλάση του πρόσωπου και αλλάζει την συνάρτηση Παρουσία_σου με μια άλλη με ίδιο όνομα που διαβάζει και την δική του ιδιότητα, σχολή!
Στη διαδοχική κλήση της Παρουσία_σου, ανάλογα με το τι έχουμε θα έχουμε εκτύπωση ονόματος ή ονόματος και σχολής.

Περί Αντικειμένων
Παρακάτω θα συνεχίσω το "παλιό" άρθρο (του 2015), αλλά το 2021, η Μ2000 είναι πιο προχωρημένη!
Η γλώσσα είναι εκπαιδευτική, όχι για να κάνει γρήγορα πράγματα αλλά για να κάνει πράγματα που σε άλλες γλώσσες κάποια από αυτά δεν υπάρχουν, για λόγους ευκολίας! 

Η Μ2000 δεν έχει τύπους αντικειμένων. Οι κλάσεις είναι κατασκευαστές. Αυτό σημαίνει ότι μπορούμε όποτε θέλουμε να αλλάξουμε σε συγκεκριμένη ομάδα, π.χ. στο Α(2) την Παρουσία_σου, όπως κάνουμε στο τέλος.
Στις νεότερες εκδόσεις υπάρχουν τυποι αντικειμένων για τις ομάδες. Αν κατασκευάζουμε με κλάση τότε σίγουρα ο τύπος της ομάδας θα είναι το όνομα της κλάσης. Όμως όλες οι ομάδες είναι του ίδιου γενικού τύπου. Κατασκευάζουμε ομάδες είτε με Κλάση είτε με ορισμό Ομάδα. Η κλάση περιέχει τον ορισμό Ομάδα, απλά επιστρέφει το αντικείμενο. Με ορισμό Ομάδα αν θέλουμε γράφουμε τύπο, σε ξεχωριστό πεδίο. Αυτό μας βολεύει για να ελέγχουμε το τύπο αργότερα, αν θέλουμε!
Στο παράδειγμα στη Κάππα() έχουμε περιορίσει το κ να είναι τύπου ΕΝΑ.
Ομάδα Αλφα {
Τύπος: ΕΝΑ
Χ=10
}
Τύπωσε Αλφα είναι τύπος ΕΝΑ
Τύπωσε @Κάππα(Αλφα)
// στατική συνάρτηση, το όνομα λειτουργεί και ως έξοδος, αν περάσει η ροή από εδώ!
Συνάρτηση Κάππα(κ ως ΕΝΑ)
=Κ.Χ*1000
Τέλος Συνάρτησης

Να μια τροποποίηση, η Α χρησιμοποιείται από τη @καππα() γιατί η Α είναι και ΕΝΑ. Αυτό που θα περάσει όμως είναι και ΔΥΟ, αφού το Α μπαίνει εδώ με αντιγραφή ως έχει.
Κλάση ΕΝΑ {
Χ=10
}
Κλάση ΔΥΟ ως ΕΝΑ {
Συνάρτηση Κάππα {
=*1000
}
}
Α=ΔΥΟ()
Τύπωσε Α είναι τύπος ΕΝΑ
Τύπωσε Α είναι τύπος ΔΥΟ
Τύπωσε @Κάππα(Α), Α.Κάππα()
// στατική συνάρτηση, το όνομα λειτουργεί και ως έξοδος, αν περάσει η ροή από εδώ!
Συνάρτηση Κάππα(κ ως ΕΝΑ)
=Κ.Χ*1000
Τέλος Συνάρτησης

Και μια παραλλαγή ακόμα. Το Α τώρα δεν είναι ένα επώνυμο αντκείμενο, αλλά ένας δείκτης σε αντικείμενο. Στην @Κάππα() λέμε ότι θα περάσουμε δείκτη (θα μπορούσαμε να αφήναμε την @Κάππα() όπως ήταν πριν, και ο διερμηνευτής θα βγάλει αντίγραφο του αντικειμένου που δείχνει το Α).
Κλάση ΕΝΑ {
Χ=10
}
Κλάση ΔΥΟ ως ΕΝΑ {
Συνάρτηση Κάππα {
=*1000
}
}
Α->ΔΥΟ()
Τύπωσε Α είναι τύπος ΕΝΑ
Τύπωσε Α είναι τύπος ΔΥΟ
Τύπωσε @Κάππα(Α), Α=>Κάππα()
// στατική συνάρτηση, το όνομα λειτουργεί και ως έξοδος, αν περάσει η ροή από εδώ!
Συνάρτηση Κάππα(κ ως * ΕΝΑ)
=Κ=>Χ*1000
Τέλος Συνάρτησης

Η διαφορά μιας στατικής συνάρτησης με μια κανονική είναι ότι η στατική βλέπει και τις μεταβλητές και ότι άλλο υπάρχει στο τμήμα. Η κανονική συνάρτηση είναι όπως και το τμήμα "απομονωμένη", βλέπει ότι είναι τοπικό και ότι είναι γενικό. Εδώ το τμήμα δεν είναι "γνωστό" στη συνάρτηση Κάππα(). Επίσης εδώ περάσα το δείκτη με αναφορά. Αυτό σημαίνει ότι αν ήθελα να τον αλλάξω θα μπορούσα, πχ να του δώσω το κ->0& ή κ=Δείκτης() που δίνει το Μηδενικό αντικείμενο (και διαγράφει το αντικείμενο αν δεν υπάρχει άλλος δείκτης αυτό που δείχνει ο δείκτης, εφόσον ο δείκτης δεν δείχνει επώνυμο αντικείμενο - γίνεται και αυτό). Εδώ δεν μπορώ να δώσω &κ ως ΕΝΑ επειδή το κ είναι δείκτης θα πρέπει να δώσω το αστεράκι γιατί δίνω με αναφορά δείκτη. Οι κανονικές συναρτήσεις δεν χρησιμοποιούν το @ πριν το όνομα. Δείτε ότι σε δείκτες χρησιμοποιούμε το => αντί για τελεία.

Συνάρτηση Κάππα(&κ ως *ΕΝΑ) {
=Κ=>Χ*1000
}
Κλάση ΕΝΑ {
Χ=10
}
Κλάση ΔΥΟ ως ΕΝΑ {
Συνάρτηση Κάππα {
=*1000
}
}
Α->ΔΥΟ()
Τύπωσε Α είναι τύπος ΕΝΑ
Τύπωσε Α είναι τύπος ΔΥΟ
Τύπωσε Κάππα(&Α), Α=>Κάππα()

Και να μια ακόμα παραλλαγή! Εδώ έχουμε περάσει την Α ως κλείσιμο σε μια λάμδα συνάρτηση. Κανονικά τα κλεισίματα είναι με αντιγραφές. Αλλά ανιγραφή δείκτη σημαίνει ότι το αντίγραφο θα δείχνει το ίδιο αντικείμενο. Πράγματι αυξάνουμε το Χ κατά ένα και το "καταλαβαίνει" και η Κάππα(). Η μεταβλητή Κάππα είναι  πολίτης πρώτης τάξης και έχει στην ουσία δυο ονόματα, το Κάππα και το Κάππα(), όπου το δεύτερο είναι η συνάρτηση της λάμδα, ενώ το πρώτο είναι η λάμδα. Αν θέλαμε να κάνουμε το Α στην Λάμδα Κ θα έπρεπε να δίναμε το Κ=Δείκτης(Α) αμέσως μετά το Λάμδα και πριν το βελάκι ή αν έχουμε και παραμέτρους πριν τις παραμέτρους. Όμως εδώ το Α μέσα στη Λάμδα είναι διαφορετικό. Αυτό σημαίνει ότι αν στο εξωτερικό Α αλλάξουμε δείκτη, δεν θα το δει η Λάμδα στο δικό της Α. Αν θέλουμε λάμδα να επιστρέφει αλφαριθμητικό φτιάχνουμε συνάρτηση με το $, δηλαδή Κάππα$=Λάμδα$ -> { ορισμός } ή αν θέλουμε απλά μια επιστροφή τιμής δίνουμε μετά το βελάκι την παράσταση.
Κλάση ΕΝΑ {
Χ=10
}
Κλάση ΔΥΟ ως ΕΝΑ {
Συνάρτηση Κάππα {
=*1000
}
}
Α->ΔΥΟ()
Τύπωσε Α είναι τύπος ΕΝΑ
Τύπωσε Α είναι τύπος ΔΥΟ
Κάππα=Λάμδα Α -> {
=Α=>Χ*1000
}
Τύπωσε Κάππα(), Α=>Κάππα()
Α=>Χ++
Τύπωσε Κάππα(), Α=>Κάππα()

Τις λάμδα τις χρησιμοποιούμε και χωρίς όνομα: Τύπωσε λάμδα (Χ)->{=Χ**2}(3)

Δοκιμάστε και αυτό: Τύπωσε λάμδα (Χ)->{=Χ**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 {
       α(ν).Παρουσιά_σου
}
\\ τα άλλα ως έχουν


Τύπωσε α(1) είναι τύπος Φοιτητής = Αληθές
Τύπωσε α(4) είναι τύπος Φοιτητής = Ψευδές
Τύπωσε α(4) είναι τύπος Πρόσωπο = Αληθές
Τύπωσε α(1) είναι τύπος Πρόσωπο = Αληθές


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

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

You can feel free to write any suggestion, or idea on the subject.