Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Γ΄ Λυκείου => Μήνυμα ξεκίνησε από: donquixote στις 16 Απρ 2022, 11:10:48 ΜΜ

Τίτλος: Θέματα ΟΕΦΕ 2022
Αποστολή από: donquixote στις 16 Απρ 2022, 11:10:48 ΜΜ
Γεια σας.
Θα ήθελα να ρωτήσω αν και πού μπορούμε να βρούμε τα τελευταία θέματα ΟΕΦΕ 2022.
Ευχαριστώ.
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: dpa2006 στις 19 Απρ 2022, 12:06:55 ΠΜ
Καλησπέρα,
νομίζω πως είναι νωρίς ακόμη...
https://www.panellinies.net/aepp-oefe-2022/

ΠΡΟΓΡΑΜΜΑ ΕΞΕΤΑΣΕΩΝ ΟΕΦΕ 2022
https://epan.oefe.cloud/CMS/site/pdf/%CE%A0%CE%A1%CE%9F%CE%93%CE%A1%CE%91%CE%9C%CE%9C%CE%91%20%CE%95%CE%98%202022.pdf
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: ΤΙΜ στις 05 Μαΐου 2022, 02:05:39 ΜΜ
Καλησπέρα έχει βρει κάποιος τα φετινά θέματα της Ο.Ε.Φ.Ε. ;
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: Γιάννης Σ. στις 05 Μαΐου 2022, 11:12:08 ΜΜ
http://host.keystone.gr/news/knnewsfile.php?R=542&ID=891&SID=5467 (http://host.keystone.gr/news/knnewsfile.php?R=542&ID=891&SID=5467)

Αυτά εδώ; Δεν είμαι σίγουρος... ;)
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: epsilonXi στις 06 Μαΐου 2022, 11:36:31 ΠΜ
Στο Β2.10 έχω τη διαφωνία μου...
στις λύσεις το δίνουν σωστό
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: Λαμπράκης Μανώλης στις 06 Μαΐου 2022, 11:39:47 ΠΜ
Καλημέρα

συμφωνώ και εγώ, αλλά δεν ΄ξέρω αν μπορούμα να το συζητήσουμε επίσημα...έχουν βγει τα θέματα ??
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: petrosp13 στις 06 Μαΐου 2022, 02:40:32 ΜΜ
Εφόσον κληρονομεί και την από πάνω, δεν είναι 3;
Άρα και το 8 θα πρέπει να είναι αντίστοιχα λάθος
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: Λαμπράκης Μανώλης στις 06 Μαΐου 2022, 02:50:33 ΜΜ
η μέθοδος ΔέχεταιΠαραγγελία() που είναι πολυμορφική, κληρονομείται ή απλά υλοποιείται με διαφορετικό τρόπο ?? εγώ λάθος θα το έλεγα, 2 μεθόδους έχει η Β...αλλά είναι λίγο μπέρδεμα, δε διευκρινίζει το βιβλίο το σημείο αυτό
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: ΤΙΜ στις 06 Μαΐου 2022, 03:05:10 ΜΜ
Παράθεση από: Γιάννης Σ. στις 05 Μαΐου 2022, 11:12:08 ΜΜhttp://host.keystone.gr/news/knnewsfile.php?R=542&ID=891&SID=5467 (http://host.keystone.gr/news/knnewsfile.php?R=542&ID=891&SID=5467)

Αυτά εδώ; Δεν είμαι σίγουρος... ;)
Σε ευχαριστώ πάρα πολύ να είσαι καλά ! Καλή δύναμη και επιτυχία στους μαθητές σας ! 
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: ΜΑΘΗΤΡΙΑ στις 06 Μαΐου 2022, 06:42:41 ΜΜ
θα μπορουσε καποιος να στειλει και τις λυσεις;ειμαι μαθητρια της γ το ελυσα και θελω να τα ελεγξω !Σας ευχαριστώ 
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: sstauross στις 07 Μαΐου 2022, 03:25:00 ΜΜ
Έχει μηπως κάποιος τις απαντήσεις στα θέματα;
Ευχαριστώ!
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: pgrontas στις 07 Μαΐου 2022, 04:20:57 ΜΜ
Παράθεση από: Λαμπράκης Μανώλης στις 06 Μαΐου 2022, 02:50:33 ΜΜη μέθοδος ΔέχεταιΠαραγγελία() που είναι πολυμορφική, κληρονομείται ή απλά υλοποιείται με διαφορετικό τρόπο ?? εγώ λάθος θα το έλεγα, 2 μεθόδους έχει η Β...αλλά είναι λίγο μπέρδεμα, δε διευκρινίζει το βιβλίο το σημείο αυτό
Συμφωνώ, σε ένα αντικείμενο β τύπου B μπορεί κάποιος να καλέσει 2 μεθόδους.
β.ΔέχεταιΠαραγγελία() και β.ΚάνειΣυνεργασία().
Η ομώνυμη μέθοδος της υπερκλάσης Α παρακάμπτεται στο Β, δεν υπάρχει και αυτή. Αλλιώς πώς θα μπορούσε κάποιος να ξεχωρίσει ποια από τις δύο θέλει. 
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: George Eco στις 07 Μαΐου 2022, 05:20:32 ΜΜ
Παράθεση από: pgrontas στις 07 Μαΐου 2022, 04:20:57 ΜΜΑλλιώς πώς θα μπορούσε κάποιος να ξεχωρίσει ποια από τις δύο θέλει.
Και πάλι όμως, είτε καλούσε τη superclass από την υλοποίησή της, είτε έκανε τα δικά της, τίποτα δεν άλλαζει.
Οι μέθοδοι είναι ΔΥΟ κι όχι τρεις. Συμφωνώ κι εγώ.
Οτιδήποτε προσπαθήσει να στηρίξει το τρεις, ενδεχομένως βγαίνει εκτός ύλης, έτσι κι αλλιώς. Κάνω λάθος; ???
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: pgrontas στις 07 Μαΐου 2022, 05:41:06 ΜΜ
Παράθεση από: George Eco στις 07 Μαΐου 2022, 05:20:32 ΜΜΚαι πάλι όμως, είτε καλούσε τη superclass από την υλοποίησή της, είτε έκανε τα δικά της, τίποτα δεν άλλαζει.
Οι μέθοδοι είναι ΔΥΟ κι όχι τρεις. Συμφωνώ κι εγώ.
Οτιδήποτε προσπαθήσει να στηρίξει το τρεις, ενδεχομένως βγαίνει εκτός ύλης, έτσι κι αλλιώς. Κάνω λάθος; ???
Το τρεις είναι λάθος, όχι εκτός ύλης. Θα  μου έκανε μεγάλη εντύπωση αν (σε κάποια κουφή γλώσσα) κρατούσες και την παλιά και την νέα έκδοση μιας πολυμορφικής μεθόδου. Σε όσες γλώσσες έχω συναντήσει, αν θες να αναφερθείς στην μέθοδο της υπερκλάσης, πρέπει να κάνεις casting, οπότε ουσιαστικά μετατρέπεις το αντικείμενο τύπου Β σε τύπου Α, ή χρησιμοποιείς κάποια λέξη κλειδί πχ. super που πάλι αναφέρεται στην Α.
Η κλάση Β έχει δύο μεθόδους.
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: akouts στις 07 Μαΐου 2022, 07:24:08 ΜΜ
Ποιος ο λόγος η κλάση Α να υλοποιεί την ΔέχεταιΠαραγγελία(), αφού και στις δύο υποκλάσεις αυτή υλοποιείται ξανά; 
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: Λαμπράκης Μανώλης στις 07 Μαΐου 2022, 07:27:10 ΜΜ
Σύμφωνα με το βιβλίο όταν συμβαίνει αυτό είναι πολυμορφική μέθοδος, υλοποιείται διαφορετικά σε κάθε υποκλάση και σαν σύνταξη τη γράφουμε ξανα σε κάθε υποκλάση (για να δηλώσουμε τον πολυμορφισμό)
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: petrosp13 στις 07 Μαΐου 2022, 07:58:49 ΜΜ
Λάθος μου παιδιά, είδα λάθος το όνομα της μεθόδου της υπερκλάσης
Εννοείται ότι είναι δυο οι μέθοδοι τελικά
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: pgrontas στις 07 Μαΐου 2022, 08:13:15 ΜΜ
Παράθεση από: akouts στις 07 Μαΐου 2022, 07:24:08 ΜΜΠοιος ο λόγος η κλάση Α να υλοποιεί την ΔέχεταιΠαραγγελία(), αφού και στις δύο υποκλάσεις αυτή υλοποιείται ξανά;
Τα ονόματα των κλάσεων Α,Β δεν μας βοηθούν να καταλάβουμε το χώρο του προβλήματος για να είμαστε συγκεκριμένοι, αλλά σε μια πραγματική εφαρμογή στην υπερκλάση θα μπορούσε να υπάρχει μια γενική υλοποίηση, ενώ στις υποκλάσεις πιο συγκεκριμένες που να εκμεταλλευονται τα ειδικά χαρακτηριστικά τους.
Στο πρόγραμμα μπορεί να υπάρχουν τα αντικείμενα όλων των κλάσεων (και της υπερκλάσης και των υποκλάσεων,) οπότε να υπάρχει μια ποικιλία στη συμπεριφορά ανάλογα με τον τύπο του αντικειμένου του οποίου η μέθοδος καλείται.
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: George Eco στις 07 Μαΐου 2022, 08:43:12 ΜΜ
Παράθεση από: pgrontas στις 07 Μαΐου 2022, 05:41:06 ΜΜΤο τρεις είναι λάθος, όχι εκτός ύλης. Θα  μου έκανε μεγάλη εντύπωση αν (σε κάποια κουφή γλώσσα) κρατούσες και την παλιά και την νέα έκδοση μιας πολυμορφικής μεθόδου. Σε όσες γλώσσες έχω συναντήσει, αν θες να αναφερθείς στην μέθοδο της υπερκλάσης, πρέπει να κάνεις casting, οπότε ουσιαστικά μετατρέπεις το αντικείμενο τύπου Β σε τύπου Α, ή χρησιμοποιείς κάποια λέξη κλειδί πχ. super που πάλι αναφέρεται στην Α.
Η κλάση Β έχει δύο μεθόδους.

Είπα να μη το πω, αλλά ναι! Πες το override, πες το overload, πες το όπως θες, πάντως δε κάνει όπως εικάζεται. Είναι όντως λάθος, όπως και να έχει. Το είπα εκτός ύλης, με τακτ. Τι να πω; Ότι έχασα τα λογικά μου και ρωτούσα γιατί επί 2 λεπτά; Ε, μετά είπα κι εγώ πως είναι λάθος και προχώρησα με τη ζωή μου. Μικρό το κακό πάντως. Για εμάς τουλάχιστο.
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: akouts στις 08 Μαΐου 2022, 01:48:19 ΜΜ
Παράθεση από: pgrontas στις 07 Μαΐου 2022, 08:13:15 ΜΜΤα ονόματα των κλάσεων Α,Β δεν μας βοηθούν να καταλάβουμε το χώρο του προβλήματος για να είμαστε συγκεκριμένοι, αλλά σε μια πραγματική εφαρμογή στην υπερκλάση θα μπορούσε να υπάρχει μια γενική υλοποίηση, ενώ στις υποκλάσεις πιο συγκεκριμένες που να εκμεταλλευονται τα ειδικά χαρακτηριστικά τους.
Στο πρόγραμμα μπορεί να υπάρχουν τα αντικείμενα όλων των κλάσεων (και της υπερκλάσης και των υποκλάσεων,) οπότε να υπάρχει μια ποικιλία στη συμπεριφορά ανάλογα με τον τύπο του αντικειμένου του οποίου η μέθοδος καλείται.
Εάν δεν υπήρχε η ΔέχεταιΠαραγγελία() στην υπερκλάση, θα είχαμε πολυμορφισμό;
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: pgrontas στις 08 Μαΐου 2022, 03:20:58 ΜΜ
Παράθεση από: akouts στις 08 Μαΐου 2022, 01:48:19 ΜΜΕάν δεν υπήρχε η ΔέχεταιΠαραγγελία() στην υπερκλάση, θα είχαμε πολυμορφισμό;
Ναι  αλλά για να το συσχετίσω με τα προηγούμενα δεν θα μπορούσε η υπερκλαση να δεχτεί παραγγελίες. 
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: gthal στις 11 Μαΐου 2022, 06:37:47 ΜΜ
Παράθεση από: akouts στις 08 Μαΐου 2022, 01:48:19 ΜΜΕάν δεν υπήρχε η ΔέχεταιΠαραγγελία() στην υπερκλάση, θα είχαμε πολυμορφισμό;
Νομίζω ότι δεν θα μιλάγαμε για πολυμορφισμό. Είναι σαν να έχω δύο υποπρογράμματα με ίδιο όνομα σε δύο διαφορετικά προγράμματα. Δεν έχουν καμία συσχέτιση μεταξύ τους.
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: pgrontas στις 11 Μαΐου 2022, 07:46:09 ΜΜ
Παράθεση από: gthal στις 11 Μαΐου 2022, 06:37:47 ΜΜΝομίζω ότι δεν θα μιλάγαμε για πολυμορφισμό. Είναι σαν να έχω δύο υποπρογράμματα με ίδιο όνομα σε δύο διαφορετικά προγράμματα. Δεν έχουν καμία συσχέτιση μεταξύ τους.
Μπορούμε να έχουμε πολυμορφισμό χωρίς κληρονομικότητα.
Πχ. με interfaces όπως στη Java αλλά και με overloading όπως κάνει πχ. η Python στους τελεστές. 
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: gthal στις 12 Μαΐου 2022, 02:15:04 ΠΜ
Ίσως έχεις δίκιο αλλά για να καταλάβει ο συνομιλητής που ρώτησε,
(που υποθέτω ότι ρωτάει σε σχέση με τη σχολική ύλη) ας αφήσουμε έξω τα interfaces.
Γιατί εδώ θα περιπλέξουν τα πράγματα και κυρίως δεν μπορούν να αντιστοιχιστούν σε καμία έννοια της σχολικής θεωρίας. Οπότε για εμάς δεν υπάρχουν interfaces.
Πάνω στο σχήμα λοιπόν που συζητάμε, και με δεδομένη την υπόθεση που κάνει ο akouts, ότι η υπερκλάση δεν διαθέτει μέθοδο ΔέχεταιΠαραγγελία(), επιμένω ότι δεν μπορούμε να ονομάσουμε πολυμορφισμό το γεγονός ότι οι δύο υποκλάσεις τυχαίνει να έχουν η καθεμία τους μία μέθοδο με όνομα  ΔέχεταιΠαραγγελία(). Οι δύο αυτές μέθοδοι είναι ασυσχέτιστες και το κοινό τους όνομα θα έλεγα πως είναι "σύμπτωση". Χαρακτηριστικά μάλιστα, θα μπορούσαν να μετονομαστούν σε μεθ1() και μεθ2() και να μην αλλάξει καθόλου η λειτουργικότητα (και φυσικά να μη διαμαρτυρηθεί κανένας μεταγλωττιστής). Ενώ, αντιθέτως, είναι χαρακτηριστικό ότι μια μέθοδος που πολυμορφίζεται, θα έχει το ίδιο όνομα σε όλες τις κλάσεις (υποκλάσεις-υπερκλάσεις) της ιεραρχίας, οι οποίες την υλοποιούν.
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: pgrontas στις 12 Μαΐου 2022, 01:41:49 ΜΜ
Αν λάβουμε υπόψιν την σχολική ύλη, πάλι έχουμε πολυμορφισμό, αφού αυτός ορίζεται γενικά ως
Παράθεσημια ιδιότητα του αντικειμενοστραφούς προγραμματισμού με την οποία μια λειτουργία μπορεί να υλοποιείται με πολλούς διαφορετικούς τρόπους
Στο βιβλίο μάλιστα έχει δύο παραδείγματα: ένα με την πρόσθεση όπου δεν το συνδέει με την κληρονομικότητα και ένα με τα σχήματα όπου το συνδέει.
Άρα και στο σχήμα εφόσον η λειτουργία ΔέχεταιΠαραγγελία() είναι ίδια, υπάρχει πολυμορφισμός είτε υπάρχει στην υπερκλάση είτε όχι για τον ίδιο λόγο που αναφέρεται και η πρόσθεση ως πολυμορφική.
Επιπλέον στην άσκηση Ε.2 δέχεται ότι ο πολυμορφισμός είναι η δυνατότητα αντικειμένων να διαθέτουν μεθόδους με ίδιο όνομα αλλά διαφορετική υλοποίηση (δική μου σημείωση: οποιονδήποτε αντικειμένων).
Τα παραπάνω συμβαδίζουν και με την πραγματικότητα (στη συγκεκριμένη περίπτωση) όπου η κληρονομικότητα δεν είναι αναγκαία για τον πολυμορφισμό.
Δεν νομίζω ότι είναι κατάλληλο να μιλάμε για συμπτώσεις, ούτε να σκεφτόμαστε ότι οι κλάσεις είναι σαν διαφορετικά προγράμματα . Όλες οι κλάσεις ανήκουν στο ίδιο πρόγραμμα και τα ονόματα (ειδικά στις κλάσεις, ιδιότητες, λειτουργίες) δεν τα διαλέγουμε τυχαία αλλά πρέπει να δείχνουν τη σημασία τους.
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: KosTzag στις 12 Μαΐου 2022, 07:04:11 ΜΜ
Καλησπέρα σε όλους! Θα ήθελα να κάνω μια ερώτηση: στο Β2 πάντα, το 6 θα το δίνατε ως σωστό ή ως λάθος;
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: George Eco στις 13 Μαΐου 2022, 12:16:28 ΠΜ
Παράθεση από: KosTzag στις 12 Μαΐου 2022, 07:04:11 ΜΜΚαλησπέρα σε όλους! Θα ήθελα να κάνω μια ερώτηση: στο Β2 πάντα, το 6 θα το δίνατε ως σωστό ή ως λάθος;
Είναι ξεκάθαρα λάθος, επειδή έχει και της Α.
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: gthal στις 13 Μαΐου 2022, 03:15:28 ΠΜ
Παναγιώτη στηρίζεις καλά αυτά που λες, ωστόσο η διαίσθησή μου ακόμα διαφωνεί.
Θα κάνω μια τελευταία απόπειρα να εξηγήσω λεπτομερώς αυτά που καταλαβαίνω και αν βγάλουμε άκρη, βγάλαμε.

Ας αρχίσω με το παράδειγμα του πολυμορφισμού της πρόσθεσης. Αυτό το παράδειγμα δείχνει μια διαφορετική περίπτωση πολυμορφισμού, κατά την οποία μέσα στην ίδια κλάση (ή σε υποκλάσεις της) μπορώ να ορίσω πολλαπλές φορές την ίδια μέθοδο , με διαφορετικά ορίσματα σε κάθε ορισμό της (άρα και διαφορετική «υπογραφή»/signature), ώστε αυτή η μέθοδος να λειτουργεί διαφορετικά σε κάθε περίπτωση, ανάλογα με τα ορίσματά της. Έτσι κι αλλιώς δε συζητάμε για κάτι τέτοιο στο θέμα της ΟΕΦΕ.

Παράθεση από: pgrontas στις 12 Μαΐου 2022, 01:41:49 ΜΜΕπιπλέον στην άσκηση Ε.2 δέχεται ότι ο πολυμορφισμός είναι η δυνατότητα αντικειμένων να διαθέτουν μεθόδους με ίδιο όνομα αλλά διαφορετική υλοποίηση (δική μου σημείωση: οποιονδήποτε αντικειμένων).
Η σημείωση «οποιωνδήποτε αντικειμένων» που προσθέτεις, νομίζω δεν ευσταθεί και μάλλον ευθύνεται για τις παρανοήσεις.
Έστω η κλάση πουλί με μέθοδο πετάει() και η κλάση παίκτης (έστω του ράγκμπυ) με μεθόδους πιάνει(), κλοτσάει(), πετάει(), εννοείται τη μπάλα. Εδώ οι κλάσεις είναι ασυσχέτιστες, οι δύο λειτουργίες που υλοποιούνται με τις μεθόδους πετάει() είναι εντελώς διαφορετικές (δεν έχει νόημα καν η σύγκρισή τους), δεν συσχετίζονται με κανέναν τρόπο, καμία δεν κάνει override την άλλη, και το κοινό τους όνομα είναι όντως σύμπτωση (με την έννοια ότι δεν υπάρχει καμία σκοπιμότητα να έχουν το ίδιο όνομα, απλά τυχαίνει). Θα μπορούσα να μετονομάσω την πρώτη σε ίπταται() ή τη δεύτερη σε ρίχνει() χωρίς να αλλάξει τίποτα στη σχεδίασή μου (ενώ ταυτόχρονα τηρώ και την αρχή πως τα ονόματα παραπέμπουν στην σημασία των μεθόδων και δεν επιλέχτηκαν τυχαία). Ομοίως στην υποθετική ερώτηση του akouts θα μπορούσε η μέθοδος Γ πχ να ονομάζει τη μέθοδο ΛαμβάνειΠαραγγελία() χωρίς πρόβλημα (αν φαίνεται αδόκιμο το μεθ2() που πρότεινα πριν) , πράγμα που δεν θα μπορούσε όμως να γίνει στην περίπτωση που η υπερκλάση Α ορίζει την ΔέχεταιΠαραγγελία() .

Για να δούμε το ερώτημα του akouts σε ένα πιο ρεαλιστικό πλαίσιο, ας δούμε τις δύο υλοποιήσεις στην επισυναπτόμενη εικόνα (αν είναι καλές ή κακές δεν το συζητάμε). Στην 1η υλοποίηση, η ΤαξινομημένηΛίστα επανακαθορίζει την εισαγωγή() προφανώς γιατί θέλει να εισαγάγει το στοιχείο με ταξινομημένο τρόπο. Εδώ είναι φανερό ότι η εισαγωγή() της Ταξινομημένης Λίστας κάνει override την εισαγωγή() της Λίστας (άρα αποτελεί πολυμορφισμό αυτής).
Στη δεύτερη υλοποίηση, η υπερκλάση δεν ορίζει την εισαγωγή(), την οποία ορίζει η κάθε υποκλάση για λογαριασμό της. Εδώ, η εισαγωγή() της Ταξινομημένης Λίστας ποια μέθοδο κάνει override; (οπότε ποιανής αποτελεί πολυμορφισμό; ) Και γιατί να μην την ονομάσει παρεμβολή(), εφόσον θα παρεμβάλλει το στοιχείο στη σωστή του θέση και επιπλέον τα αντικείμενα της κλάσης Λίστα (άρα και της ΤαξινομημένηΛίστα) σε αυτή την υλοποίηση δεν υποχρεούνται να έχουν μέθοδο εισαγωγή() ;

Πολυμορφισμός.png
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: KosTzag στις 13 Μαΐου 2022, 08:35:59 ΠΜ
Παράθεση από: George Eco στις 13 Μαΐου 2022, 12:16:28 ΠΜΕίναι ξεκάθαρα λάθος, επειδή έχει και της Α.

Συμφωνώ ότι σαν πρώτη σκέψη είναι λάθος.

Αλλά έχω την εξής δεύτερη σκέψη:
Το ότι δεν αναγράφονται οι ιδιότητες της κλάσης Α στην κλάση Β δεν σημαίνει ότι δεν είναι ιδιότητες της κλάσης Β (προφανώς δεν αναγράφονται στην κλάση Β γιατί κληρονομούνται).
Μήπως θα έπρεπε η πρόταση να είναι «Ένα αντικείμενο της κλάσης Β θα έχει μόνο τις ιδιότητες και τις μεθόδους που αναγράφονται στην κλάση Β»;

Εξάλλου αν δεχτούμε την 8η πρόταση ως σωστή, γιατί η 6η να είναι λάθος;
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: pgrontas στις 13 Μαΐου 2022, 12:40:35 ΜΜ
Γιώργο,

έχεις δίκιο ότι το παράδειγμα πολυμορφισμού με πρόσθεση είναι διαφορετικό είδος πολυμορφισμού (μεν), αλλά είναι πολυμορφισμός (δε).
Με την λογική σου λοιπόν ΔΕΝ απαιτείται η πρόσθεση αλφαριθμητικών να ονομάζεται προσθεση, αλλά θα μπορούσε να ονομάζεται συνένωση. Ναι αλλά τότε ο προγραμματιστής όμως δεν θα μπορούσε να εκμεταλλεύεται το χαρακτηριστικό του πολυμορφισμού με αποτέλεσμα ο κώδικας να είναι πιο σύνθετος καθώς θα έπρεπε να σκέφτεται κάθε φορά τι προσθέτει. Δηλαδή, πολυμορφικά θα μπορούσε να πει Πρόσθεση(χ1,χ2) χωρίς να τον νοιάζει τι είναι τα χ1, χ2. Μη πολυμορφικά θα έπρεπε να σκεφτεί τι τύπο έχουν τα χ1, χ2 ώστε να χρησιμοποιήσει την κατάλληλη μέθοδο.

Ο προγραμματιστής επιλέγει. Όμως οι επιλογές έχουν συνέπειες. Έτσι, αν κάποιος ονομάσει με το ίδιο όνομα πετάει() δύο άσχετες μεθόδους (ενώ για τη μία εννοεί ίπταται() ενώ για την άλλη ρίχνει()), θα μπορεί να τις καλέσει πολυμορφικά αλλά το πρόγραμμα πιθανώς να μη βγάζει νόημα και έτσι να δημιουργηθούν bugs.
Γι' αυτό σου έγγραψα (και επιμένω) ότι όταν επιλέγουμε κάποιο όνομα πρέπει να είμαστε συνειδητοποιημένοι γιατί αυτό έχει συνέπειες.


Στο παράδειγμα σου με τη λίστα η μία Εισαγωγή πολυμορφίζει την άλλη.
Δες στον παρακάτω κώδικα (μη υπαρκτής αλλά pythonοειδούς γλώσσας προγραμματισμού) τι πλεονέκτημα έχει αυτό:
Κώδικας [Επιλογή]
Α=νέα ΜηΤαξινομένηΛιστα()
Β=νέα ΤαξινομημένηΛιστα()
Για χ σε [Α,Β]
   Για υ σε [9,8,7,6,5]
      χ.Εισαγωγη(υ)

Στη μία περίπτωση θα κληθεί η ταξινομημένη εισαγωγή στην άλλη η μη ταξινομημένη. Ο προγραμματιστής δεν χρειάζεται να βάλει if, δεν χρειάζεται να κάνει διπλή δουλειά. Η 'μαγεία' του πολυμορφισμού απλοποιεί έτσι κατά πολύ τον κώδικα.
Θα μπορούσες να το ονομάσεις παρεμβολή, αλλά τότε θα έχανες την ευκολία.

Κατά τη γνώμη μου το λάθος της διαίσθησής σου είναι ότι νομίζεις ότι υποχρεωτικά πρέπει να χρησιμοποιηθεί πολυμορφισμός μέσω κληρονομικότητας επειδή υπάρχει σχέση κλάσης-υποκλάσης. Όμως αυτό δεν ισχύει κατ' ανάγκη. Έτσι ενώ στην ερώτηση του akouts (συμφωνούμε ότι) δεν υπάρχει πολυμορφισμός μέσω κληρονομικότητας (αφού δεν ορίζουμε τη μέθοδο στην υπερκλάση), εσύ αποκλείεις να υπάρχει άλλου είδους πολυμορφισμός ενώ εγώ δέχομαι ότι μπορεί να υπάρχει. Θεωρώ ότι αυτό όχι μόνο δεν απαγορεύεται ούτε από την πραγματικότητα ούτε από τη θεωρία του βιβλίου αλλά υλοποιεί τόσο το πνεύμα όσο και το γράμμα του πολυμορφισμού.
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: evry στις 14 Μαΐου 2022, 11:27:45 ΠΜ
Παράθεση από: KosTzag στις 13 Μαΐου 2022, 08:35:59 ΠΜΣυμφωνώ ότι σαν πρώτη σκέψη είναι λάθος.

Αλλά έχω την εξής δεύτερη σκέψη:
Το ότι δεν αναγράφονται οι ιδιότητες της κλάσης Α στην κλάση Β δεν σημαίνει ότι δεν είναι ιδιότητες της κλάσης Β (προφανώς δεν αναγράφονται στην κλάση Β γιατί κληρονομούνται).
Μήπως θα έπρεπε η πρόταση να είναι «Ένα αντικείμενο της κλάσης Β θα έχει μόνο τις ιδιότητες και τις μεθόδους που αναγράφονται στην κλάση Β»;

Εξάλλου αν δεχτούμε την 8η πρόταση ως σωστή, γιατί η 6η να είναι λάθος;
Πολύ σωστή παρατήρηση. Το συγκεκριμένο ΣΛ είναι απαράδεκτο, αφού η Β κληρονομεί από την Α και προφανώς θα έχει και όλα όσα έχει η Α. Αν μιλάγαμε για Private και Protected ίσως να είχε κάποιο νόημα αλλά και πάλι ελέγχεται.
Ήθελε άλλη διατύπωση.
Το έσωσαν με την λέξη μόνο, ώστε όλοι να καταλάβουν τι εννοούν αλλά και πάλι δεν είναι σωστό.

Για άλλη μια φορά με τις αλχημείες αυτού του μαθήματος έχουμε φτάσει να μιλάμε για ένα νέο είδους αντικειμενοστρεφούς προγραμματισμού αυτόν που λέει το σχολικό βιβλίο.
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: gthal στις 15 Μαΐου 2022, 02:14:38 ΜΜ
Παναγιώτη, μελέτησα πολύ καλά το μήνυμά σου, ευχαριστώ για τη λεπτομέρειά του. Είναι όλα πολύ "to the point"!
Ακριβώς όπως το λες, εγώ δε μπορώ να αποσυνδέσω το συγκεκριμένο είδος πολυμορφισμού από την κληρονομική σχέση!
Παράθεση από: pgrontas στις 13 Μαΐου 2022, 12:40:35 ΜΜΣτο παράδειγμα σου με τη λίστα η μία Εισαγωγή πολυμορφίζει την άλλη.
Δες στον παρακάτω κώδικα (μη υπαρκτής αλλά pythonοειδούς γλώσσας προγραμματισμού) τι πλεονέκτημα έχει αυτό:
Από το παράδειγμά σου κατάλαβα αμέσως δύο πράγματα.
Η λίστα των δύο Λιστών που φτιάχνεις (παρακάτω τη λέω "μεγάλη" λίστα) θα ήταν αποδεκτή στην python, νομίζω χάρη στην χαλαρότητά της με τους τύπους.
Η Java δεν θα άφηνε να φτιάξουμε μια τέτοια λίστα, με αντικείμενα διαφορετικού τύπου. Θα μας "ανάγκαζε" λοιπόν να δούμε τις δύο λίστες μας (ταξινομημένη και αταξινόμητη) ως υποκλάσεις ενός κοινού τους προγόνου (το οποίο κάνει και πολύ νόημα, μιας και οι Λίστες μας δεν είναι άσχετα πράγματα αλλά έχουν ειδοποιούς ομοιότητες). Ο κοινός αυτός πρόγονος θα όριζε πως κάθε μέλος του θα διαθέτει μια μέθοδο εισαγωγή (την οποία κάθε μέλος μπορεί να πολυμορφίσει αν θέλει) και για αυτό και μόνο το λόγο θα μπορούσε να κληθεί η εισαγωγή σε κάθε αντικείμενο της "μεγάλης" μας λίστας. Αν δεν ορίσουμε έναν κοινό τους πρόγονο με αυτό το χαρακτηριστικό, και ο άμεσος κοινός τους πρόγονος θεωρηθεί το Object (δηλαδή προστεθούν οι δύο λίστες στην "μεγάλη" λίστα ως Objects), δεν θα είναι δυνατή η κλήση στην εισαγωγή, παρότι την διαθέτουν και οι δύο, γιατί δεν είναι ορατή αν τα βλέπουμε ως απλά Objects.
Ανέτρεξα τελικά στη βιβλιογραφία  :laugh:
Πώς ορίζεται τελικά ο πολυμορφισμός;; Πρέπει να σου πω ότι τα πρώτα 7-8 άρθρα που διάβασα έλεγαν αυτό που λέω εγώ (είναι πάντα μια προγονική μέθοδος η οποία υπερκαλύπτεται) κι ετοιμαζόμουν να σου πω ότι κάνεις λάθος. Αυτά τα άρθρα είχαν αναφορές σε java, c++, c# και 1-2 άλλες γλώσσες που δεν θυμάμαι τώρα και έχασα τα tabs. Τελικά αναζήτησα συγκεκριμένα για τον πολυμορφισμό στην python και βρήκα όντως άρθρο που αναφέρει και την περίπτωση που λες κι εσύ. Σωστά και τα δύο λοιπόν! Αναλόγως σε ποια "σχολή" είσαι.
Δεν θα αποφύγω να πω όμως δυο λόγια υπέρ της "αυστηρής" σχολής  :angel:
Έχω βλαστημήσει τη java άπειρες φορές που δε με άφηνε να κάνω αυτό που διαισθητικά ήθελα! Τελικά την ευγνωμονώ γιατί με ανάγκασε να καταλάβω καλύτερα τι κάνω. Και τελικά πάντα υπήρχε ένας τρόπος να το κάνω. Πιο σωστός και πιο δομημένος. Όπως ακριβώς βλαστημούσα τον δομημένο προγραμματισμό όταν τον πρωτοδιδάχτηκα, μαθημένος-αυτοδίδακτος στην "ελευθερία" της BASIC και της GOTO. Κάποια στιγμή αντιλήφθηκα τη μαγεία του και πόσο νόημα έχει να υποχρεωθείς να μείνεις στη δομή. Και πάντα υπήρχε ο τρόπος να γίνει αυτό που ήθελα. Και σωστότερα!
Από την άλλη, η python μου έχει λύσει προβλήματα "γρήγορα και βρώμικα" (δόξα τω Θεώ), πολλές φορές μάλιστα χωρίς να καταλαβαίνω ακριβώς τι κάνω, και δε με νοιάζει γιατί δεν σκοπεύω να επανέλθω. Με νοιάζει που δούλεψε χωρίς να με ταλαιπωρήσει. Δε μπορώ όμως να διανοηθώ πώς θα μπορούσα να βρω άκρη στον ίδιο τον δικό μου κώδικα αν έγραφα ένα μεγάλο πρόγραμμα και συνέχιζα να εκμεταλλεύομαι τις ελευθερίες που παρέχει. (γιαυτό και έχω δεύτερες σκέψεις αν είναι καλή γλώσσα για τον αρχάριο που δομεί τη γνώση του σε όλα αυτά- κλείνει η παρένθεση)
Θέλω να καταλήξω στο ότι υπάρχει καλή και "λιγότερο καλή" αντικειμενοστραφής σχεδίαση. Μια καλή σχεδίαση προκύπτει από καλή κατανόηση των σχέσεων των κλάσεών μας, των αλληλεξαρτήσεων και φυσικά των συνεργασιών τους. Διαφορετικά μπορεί να καταλήξει το πρόγραμμά μας να είναι ένας σωρός από κλάσεις και αντικείμενα σκόρπια και "ξέμπαρκα" που με κάποιον τρόπο προσπαθούν να συνεργαστούν μεταξύ τους.
Η 1η υλοποίηση στο σχήμα που είχα στείλει είναι καλύτερη από τη 2η και ακόμα καλύτερη από κάποια 3η στην οποία δεν θα είχαμε καν κοινό πρόγονο στα δύο είδη Λιστών μας. Ο 1ος προγραμματιστής έχει καταλάβει καλύτερα από τους άλλους δύο (και έχει αξιοποιήσει) τις σχέσεις και την ειδοποιό ομοιότητα των αντικειμένων του. Έχει καταλάβει πως υπάρχει αιτίαση για τις κοινές μεθόδους και τα ονόματά τους (και δεν τα αντιμετώπισε ως "συμπτώσεις", που επιμένω να το λέω για να γίνει κατανοητό τι εννοώ). Ο κώδικας του 1ου, θα είναι πολύ πιο εύκολος στο να αλλαχθεί, να διορθωθεί και να επεκταθεί χωρίς να προκύψουν bugs, σε αντίθεση με των άλλων δύο, που σε κάθε αλλαγή θα τρέμει το φυλλοκάρδι τους, μην τυχόν ξεχάσουν να ενημερώσουν κατάλληλα και τις άλλες υποκλάσεις.
Δε θα μπορούσα να συμφωνώ περισσότερο με αυτό που λες εδώ, γιαυτό και λέω όσα λέω
Παράθεση από: pgrontas στις 13 Μαΐου 2022, 12:40:35 ΜΜΟ προγραμματιστής επιλέγει. Όμως οι επιλογές έχουν συνέπειες. Έτσι, αν κάποιος ονομάσει με το ίδιο όνομα πετάει() δύο άσχετες μεθόδους (ενώ για τη μία εννοεί ίπταται() ενώ για την άλλη ρίχνει()), θα μπορεί να τις καλέσει πολυμορφικά αλλά το πρόγραμμα πιθανώς να μη βγάζει νόημα και έτσι να δημιουργηθούν bugs.
Γι' αυτό σου έγγραψα (και επιμένω) ότι όταν επιλέγουμε κάποιο όνομα πρέπει να είμαστε συνειδητοποιημένοι γιατί αυτό έχει συνέπειες.
Λέμε το ίδιο. Ο προγραμματιστής που δεν καταλαβαίνει ότι οι δύο μέθοδοι πετάει() έχουν το ίδιο όνομα από σύμπτωση και όχι γιατί υπάρχει κάποια αιτίαση για αυτό (ακόμα κι αν επιλέγει αυτή τη σύμπτωση για ευκολία και να μη θυμάται πολλά ονόματα μεθόδων) ίσως να έχει πρόβλημα αργότερα! Αν μάλιστα θεωρεί κιόλας ότι η μία πολυμορφίζει την άλλη επειδή απλά και μόνο έχουν το ίδιο όνομα, βρίσκεται σε μεγάλη πλάνη. Δεν του λέω να αλλάξει όνομα αλλά να καταλαβαίνει τι σημαίνει το ένα και τι το άλλο και να αντιλαμβάνεται την ειδοποιό διαφορά τους. Αυτές οι δύο δε μπορεί να συσχετιστούν και υπάρχει αιτία για αυτό (και όπως έχεις καταλάβει, για μένα είναι η μη κοινή "καταγωγή" τους)
Ομοίως, εκείνος που δεν καταλαβαίνει ότι οι δύο μέθοδοι εισαγωγή() δεν έχουν ίδιο όνομα από τύχη (ή απλά από επιλογή για την ευκολία) αλλά έχουν ειδοποιό ομοιότητα, ώστε να την αποδώσει στην υπερκλάση, επίσης κάτι χάνει από την ουσία.
Το ίδιο και εκείνος που επιλέγει να μην πει τη μέθοδο συνένωση() για να την κρατήσει σε αντιστοιχία με την πρόσθεση(), δε θα πρέπει να του διαφύγει το γεγονός ότι όλα τα αντικείμενα που θέλει να "προσθέσει" ανήκουν σε μια ευρύτερη οικογένεια, των "προσθέσιμων", και χάρη σ' αυτό το γεγονός μπορεί να ενοποιήσει τις μεθόδους που τα "προσθέτουν", παραλλάσσοντας φυσικά την καθεμιά. Αν δε συνειδητοποιήσει δηλαδή πως η επιλογή του δεν αφορά στιγμιαία/τοπικά μόνο τη μέθοδό του και το όνομά της αλλά αφορά τη Δομή ολόκληρου του συστήματός του, νομίζω ότι κι αυτός θα συναντήσει προβλήματα στη συνέχεια.
Αυτά τα λίγα :)
Τη χάρηκα τη συζήτηση.
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: bagelis στις 15 Μαΐου 2022, 06:10:44 ΜΜ
 Απολαυστική η κουβέντα σας, σε συζητήσεις με ανθρώπους που ξέρουν τον αντικειμενοστραφή καλύτερα από εμένα άκουσα τις ίδιες απόψεις, το πιο καθαρό και δομημένο είναι ότι όντως ο πολυμορφισμός προϋποθέτει κληρονομικότητα,
 στο παράδειγμα με τις λίστες
Κώδικας [Επιλογή]
Α=νέα ΜηΤαξινομένηΛιστα()
Β=νέα ΤαξινομημένηΛιστα()
Για χ σε [Α,Β]
   Για υ σε [9,8,7,6,5]
      χ.Εισαγωγη(υ)
Θεωρητικά πιο σωστό είναι:
Α = νέα Λίστα() οπότε εδώ μέσα αν θέλεις βάζεις μόνο μη ταξινομημένες λίστες
Β = νέα Λίστα() οπότε εδώ μέσα αν θέλεις βάζεις μόνο ταξινομημένες λίστες
και μετά ομοίως....
Θα είχε ο γονέας μια αφηρημένη εισαγωγή και το σύστημα κάθε φορά θα επέλεγε ανάλογα τι είναι το αντικείμενο το συγκεκριμένο, ποιά εισαγωγή θα παίζει.


Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: isle στις 19 Μαΐου 2022, 02:53:17 ΜΜ
Γεια σας.
Θα ήθελα να ρωτήσω αν και πού μπορούμε να βρούμε τις λυσεις γι τα θέματα ΟΕΦΕ 2022.
Ευχαριστώ
Τίτλος: Απ: Θέματα ΟΕΦΕ 2022
Αποστολή από: Νίκος Αδαμόπουλος στις 20 Μαΐου 2022, 05:05:53 ΜΜ
Παράθεση από: pgrontas στις 11 Μαΐου 2022, 07:46:09 ΜΜΜπορούμε να έχουμε πολυμορφισμό χωρίς κληρονομικότητα.
Πχ. με interfaces όπως στη Java αλλά και με overloading όπως κάνει πχ. η Python στους τελεστές.

H C++ έχει πολυμορφισμό ακόμα και σε επίπεδο απλών functions, δηλαδή χωρίς κατ' ανάγκη να γίνεται λόγος για κλάσεις, κληρονομικότητες κλπ. Π.χ. μπορούμε να έχουμε με το ίδιο όνομα:

int megalyteros(int a, int b);
int megalyteros(int a, int b, int c);
double megalyteros(double a, double b);

κλπ, στο ίδιο πρόγραμμα.

Γενικά συμφωνώ με τον pgrontas...