Θεωρία, Ερωτήσεις Ανάπτυξης, Quiz & Ασκήσεις
Σύμφωνα με την αντικειμενοστραφή θεωρία ανάπτυξης εφαρμογών, η προσέγγιση κάθε προβλήματος πρέπει να γίνεται με φυσική ερμηνεία και να μη στηρίζεται σε πολύπλοκα τεχνικά.
Η αντίληψη ότι η επίλυση ενός προβλήματος επιτυγχάνεται με τη σύνθεση ικανοτήτων (ο τρόπος υλοποίησης των οποίων μας είναι άγνωστος) που διαθέτουν διαφορετικές ανεξάρτητες οντότητες, οι οποίες αλληλεπιδρούν για τον σκοπό αυτό, βρίσκεται στην καρδιά του αντικειμενοστραφούς προγραμματισμού.
Στηρίζεται στο γεγονός ότι για να μπορέσει κάποιος να κατανοήσει άγνωστες σε αυτόν έννοιες, θα πρέπει να καθοδηγηθεί μέσω της προσομοίωσης των άγνωστων αυτών εννοιών, αντιστοιχίζοντας αυτές σε πρακτικές γνώσεις και εικόνες από το περιβάλλον του, τις οποίες γνωρίζει και μπορεί πολύ εύκολα να κατανοήσει.
Ο αντικειμενοστραφής προγραμματισμός (object-oriented programming) ή αντικειμενοστραφής σχεδίαση είναι μια μεθοδολογία ανάπτυξης εφαρμογών η οποία στηρίζεται σε αυτόνομες προγραμματιστικές οντότητες με δική τους ταυτότητα και συμπεριφορά.
Οι οντότητες αυτές καλούνται αντικείμενα και αντιστοιχούν σε φυσικές οντότητες ή έννοιες του φυσικού μας κόσμου. Δομούνται με βάση:
Σε μια εφαρμογή, ένα αντικείμενο είναι ο ομαδοποιημένος συνδυασμός δεδομένων και κώδικα, τα οποία έχουμε τη δυνατότητα να χειριστούμε.
Τα δεδομένα αποτελούν τα χαρακτηριστικά ενός αντικειμένου και αναφέρονται ως ιδιότητες. Οι ενέργειες καθορίζουν τη συμπεριφορά του. Οι ενέργειες στον αντικειμενοστραφή προγραμματισμό αναφέρονται και ως μέθοδοι.
Για την επίλυση ενός προβλήματος με βάση τον αντικειμενοστραφή προγραμματισμό πρέπει να καταγράψουμε:
Ένα αντικειμενοστραφές πρόγραμμα δομείται ως ένα δίκτυο συνεργαζόμενων οντοτήτων που είναι τα αντικείμενα. Κάθε αντικείμενο έχει ένα συγκεκριμένο ρόλο στην εφαρμογή και παρέχει μια υπηρεσία ή εκτελεί μια ενέργεια (μέθοδο) που χρησιμοποιείται από άλλα μέλη του δικτύου, δηλαδή από άλλα αντικείμενα, για την υλοποίηση της συνεργασίας που θα επιλύσει το πρόβλημα.
Σε μια αντικειμενοστραφή εφαρμογή κάθε αντικείμενο αποτελεί ξεχωριστή οντότητα και περιέχει ενσωματωμένες τις ιδιότητες (δεδομένα) και τους κανόνες συμπεριφοράς του (μεθόδους). Η δυνατότητα ενός αντικειμένου να συνδυάζει εσωτερικά τα δεδομένα και τις μεθόδους χειρισμού του καλείται ενθυλάκωση (encapsulation).
Ο γενικός τύπος ενός αντικειμένου καλείται κλάση (class) και καθορίζει τις αρχικές ιδιότητες και τη συμπεριφορά κάθε αντικειμένου που προέρχεται από αυτή. Μια κλάση αποτελεί ένα αφαιρετικό (abstract) στοιχείο (τύπο) και μπορεί να παράγει ένα απεριόριστο πλήθος δομικά ίδιων αντικειμένων.
Η δυνατότητα δημιουργίας ιεραρχιών αντικειμένων καλείται κληρονομικότητα (inheritance). Με βάση την κληρονομικότητα, μια κλάση μπορεί να περιγραφεί γενικά και στη συνέχεια μέσω αυτής της κλάσης να οριστούν υποκλάσεις αντικειμένων.
Η κλάση απόγονος (υποκλάση) κληρονομεί και μπορεί να χρησιμοποιήσει όλα τα δεδομένα (ιδιότητες) και τις μεθόδους που περιέχει η κλάση πρόγονος.
Μια κλάση Α μπορεί να είναι έγκυρη υποκλάση της Β όταν ισχύει ο κανόνας «το Α είναι ένα (is_a) B».
Πολυμορφισμός (polymorphism) είναι μια ιδιότητα του αντικειμενοστραφούς προγραμματισμού με την οποία μια λειτουργία μπορεί να υλοποιείται με πολλούς διαφορετικούς τρόπους. Ο πολυμορφισμός μας επιτρέπει να επαναπροσδιορίσουμε τον τρόπο με τον οποίο λειτουργούν κάποια πράγματα, είτε αλλάζοντας τον τρόπο λειτουργίας τους είτε αλλάζοντας τα εργαλεία τα οποία χρησιμοποιούνται για την επίτευξη του στόχου.
Σύμφωνα με την αντικειμενοστραφή θεωρία ανάπτυξης εφαρμογών, η προσέγγιση κάθε προβλήματος πρέπει να γίνεται με φυσική ερμηνεία και να μη στηρίζεται σε πολύπλοκα τεχνικά.
Η αντίληψη ότι η επίλυση ενός προβλήματος επιτυγχάνεται με τη σύνθεση ικανοτήτων που διαθέτουν διαφορετικές ανεξάρτητες οντότητες, οι οποίες αλληλεπιδρούν για τον σκοπό αυτό, βρίσκεται στην καρδιά του αντικειμενοστραφούς προγραμματισμού.
Στηρίζεται στο γεγονός ότι για να κατανοήσουμε άγνωστες έννοιες, θα πρέπει να καθοδηγηθούμε μέσω της προσομοίωσης των άγνωστων εννοιών, αντιστοιχίζοντάς τες σε πρακτικές γνώσεις και εικόνες από το περιβάλλον μας.
Αντικειμενοστραφής προγραμματισμός: Είναι μια μεθοδολογία ανάπτυξης εφαρμογών η οποία στηρίζεται σε αυτόνομες προγραμματιστικές οντότητες με δική τους ταυτότητα και συμπεριφορά.
Αντικείμενα (objects): Οι οντότητες αυτές αντιστοιχούν σε φυσικές οντότητες ή έννοιες του φυσικού μας κόσμου. Δομούνται με βάση δεδομένα (ιδιότητες) που προσδιορίζουν την υπόστασή τους και ενέργειες (κανόνες συμπεριφοράς / μέθοδοι) που εφαρμόζονται πάνω στα δεδομένα. Ένα αντικείμενο είναι ο ομαδοποιημένος συνδυασμός δεδομένων και κώδικα.
Ιδιότητες (properties): Τα δεδομένα αποτελούν τα χαρακτηριστικά ενός αντικειμένου και αναφέρονται ως ιδιότητες. Οι ενέργειες καθορίζουν τη συμπεριφορά του και αναφέρονται ως μέθοδοι.
Ένα αντικειμενοστραφές πρόγραμμα δομείται ως ένα δίκτυο συνεργαζόμενων οντοτήτων που είναι τα αντικείμενα.
Κάθε αντικείμενο έχει ένα συγκεκριμένο ρόλο στην εφαρμογή και παρέχει μια υπηρεσία ή εκτελεί μια ενέργεια (μέθοδο) που χρησιμοποιείται από άλλα μέλη του δικτύου, δηλαδή από άλλα αντικείμενα, για την υλοποίηση της συνεργασίας που θα επιλύσει το πρόβλημα.
Σε μια αντικειμενοστραφή εφαρμογή κάθε αντικείμενο αποτελεί ξεχωριστή οντότητα και περιέχει ενσωματωμένες τις ιδιότητες (δεδομένα) και τους κανόνες συμπεριφοράς του (μεθόδους).
Η δυνατότητα ενός αντικειμένου να συνδυάζει εσωτερικά τα δεδομένα και τις μεθόδους χειρισμού του καλείται ενθυλάκωση (encapsulation).
Την ενθυλάκωση μπορούμε να την παρομοιάσουμε σαν ένα κέλυφος που υπάρχει γύρω από κάθε αντικείμενο και διαχωρίζει τον εσωτερικό από τον εξωτερικό του κόσμο.
Ο γενικός τύπος ενός αντικειμένου καλείται κλάση (class) και καθορίζει τις αρχικές ιδιότητες και τη συμπεριφορά κάθε αντικειμένου που προέρχεται από αυτή.
Μια κλάση αποτελεί ένα αφαιρετικό (abstract) στοιχείο (τύπο) και μπορεί να παράγει ένα απεριόριστο πλήθος δομικά ίδιων αντικειμένων.
Η δυνατότητα δημιουργίας ιεραρχιών αντικειμένων καλείται κληρονομικότητα (inheritance). Με βάση την κληρονομικότητα, μια κλάση μπορεί να περιγραφεί γενικά και στη συνέχεια μέσω αυτής της κλάσης να οριστούν υποκλάσεις αντικειμένων.
Η κλάση απόγονος (υποκλάση) κληρονομεί και μπορεί να χρησιμοποιήσει όλα τα δεδομένα (ιδιότητες) και τις μεθόδους που περιέχει η κλάση πρόγονος.
Μια κλάση Α μπορεί να είναι έγκυρη υποκλάση της Β όταν ισχύει ο κανόνας «το Α είναι ένα (is_a) B».
Παραδείγματα:
Πολυμορφισμός (polymorphism) είναι μια ιδιότητα του αντικειμενοστραφούς προγραμματισμού με την οποία μια λειτουργία μπορεί να υλοποιείται με πολλούς διαφορετικούς τρόπους.
Ο πολυμορφισμός μας επιτρέπει να επαναπροσδιορίσουμε τον τρόπο με τον οποίο λειτουργούν κάποια πράγματα, είτε αλλάζοντας τον τρόπο λειτουργίας τους είτε αλλάζοντας τα εργαλεία τα οποία χρησιμοποιούνται για την επίτευξη του στόχου.
1. Σύμφωνα με τον αντικειμενοστραφή προγραμματισμό, η επίλυση ενός προβλήματος επιτυγχάνεται με:
2. Τι αποτελούν τα δεδομένα ενός αντικειμένου;
3. Οι ενέργειες που εφαρμόζονται πάνω στα δεδομένα ενός αντικειμένου ονομάζονται:
4. Ένα αντικειμενοστραφές πρόγραμμα δομείται ως:
5. Η ενθυλάκωση (encapsulation) είναι:
6. Η κλάση (class) είναι:
7. Στην κληρονομικότητα, η υποκλάση (απόγονος):
8. Ποιος κανόνας πρέπει να ισχύει για να είναι μια κλάση Α έγκυρη υποκλάση της Β;
9. Ο πολυμορφισμός (polymorphism) επιτρέπει:
10. Ποιο από τα παρακάτω ΔΕΝ είναι βασικό συστατικό για την επίλυση προβλήματος με αντικειμενοστραφή προγραμματισμό;
Σε ένα σύστημα διαχείρισης βιβλιοθήκης, να αναγνωρίσεις τα αντικείμενα, τις ιδιότητες και τις μεθόδους που θα χρειαστούν.
Αντικείμενα: Βιβλίο, Μέλος (δανειζόμενος), Βιβλιοθηκάριος
Ιδιότητες Βιβλίου: Τίτλος, Συγγραφέας, ISBN, Έτος έκδοσης, Διαθεσιμότητα
Μέθοδοι Βιβλίου: Δανεισμός(), Επιστροφή(), Αναζήτηση()
Ιδιότητες Μέλους: Όνομα, Επίθετο, Αριθμός μέλους, Λίστα δανεισμένων βιβλίων
Μέθοδοι Μέλους: Δανείσου_Βιβλίο(), Επίστρεψε_Βιβλίο()
Να δοθούν 3 παραδείγματα όπου η κλάση είναι το «σχέδιο» και το αντικείμενο είναι η «υλοποίηση».
Παράδειγμα 1: Κλάση: Αυτοκίνητο → Αντικείμενα: το Toyota μου, το Ford του γείτονα, το BMW του πατέρα μου
Παράδειγμα 2: Κλάση: Μαθητής → Αντικείμενα: ο Γιάννης, η Μαρία, ο Κώστας
Παράδειγμα 3: Κλάση: Σκύλος → Αντικείμενα: ο Ρεξ, η Λούσυ, ο Μαξ
Να δοθούν 2 παραδείγματα ενθυλάκωσης από την καθημερινή ζωή (όχι υπολογιστικά).
Παράδειγμα 1 — Τηλεχειριστήριο: Ο χρήστης πατάει ένα κουμπί (μέθοδος) χωρίς να γνωρίζει τα εσωτερικά κυκλώματα (δεδομένα). Τα δεδομένα και οι μέθοδοι είναι «ενθυλακωμένα» μέσα στο τηλεχειριστήριο.
Παράδειγμα 2 — Αυτοκίνητο: Ο οδηγός πατάει το γκάζι (μέθοδος) χωρίς να γνωρίζει πώς λειτουργεί ο κινητήρας εσωτερικής καύσης (δεδομένα/μηχανισμοί). Τα εσωτερικά συστήματα είναι κρυμμένα (ενθυλακωμένα).
Να ελεγχθεί αν οι παρακάτω προτάσεις ικανοποιούν τον κανόνα is_a και μπορούν να ορίσουν υποκλάσεις:
α) ✅ ΝΑΙ — Το τετράγωνο είναι ειδική περίπτωση ορθογωνίου (όλες οι πλευρές ίσες). Τετράγωνο is_a Ορθογώνιο.
β) ❌ ΟΧΙ — Το τρίγωνο δεν είναι κύκλος. Δεν ισχύει ο κανόνας is_a.
γ) ✅ ΝΑΙ — Ο καθηγητής είναι ένας άνθρωπος. Καθηγητής is_a Άνθρωπος.
δ) ✅ ΝΑΙ — Το ποδήλατο είναι μέσο μεταφοράς. Ποδήλατο is_a Μέσο_μεταφοράς.
Να δοθούν 2 παραδείγματα πολυμορφισμού από την καθημερινή ζωή (ίδιος στόχος, διαφορετικός τρόπος).
Παράδειγμα 1 — Πληρωμή: Ο στόχος είναι να πληρώσουμε για ένα προϊόν. Μπορούμε να πληρώσουμε με μετρητά, με κάρτα, ή με κινητό. Ίδιος στόχος, διαφορετικός τρόπος.
Παράδειγμα 2 — Μετακίνηση: Ο στόχος είναι να πάμε από το Α στο Β. Μπορούμε να πάμε με αυτοκίνητο, με λεωφορείο, με ποδήλατο, ή περπατώντας. Ίδιος στόχος, διαφορετικός τρόπος.
Να σχεδιαστεί μια ιεραρχία κλάσεων για τα ζώα με βάση τον κανόνα is_a. Να ξεκινήσει από μια γενική κλάση «Ζώο» και να δημιουργηθούν τουλάχιστον 2 επίπεδα υποκλάσεων.
Ζώο
├── Θηλαστικό
│ ├── Σκύλος
│ ├── Γάτα
│ └── Άνθρωπος
├── Πουλί
│ ├── Αητός
│ └── Κοτόπουλο
└── Ψάρι
├── Καρχαρίας
└── Πέστροφα
Κάθε υποκλάση κληρονομεί ιδιότητες από την πάνω κλάση και προσθέτει δικές της (π.χ. το Πουλί κληρονομεί από το Ζώο και προσθέτει «φτερά», «πτήση»).
Σε ένα ηλεκτρονικό κατάστημα (e-shop), να αναγνωρίσεις τα αντικείμενα, τις ιδιότητες και τις μεθόδους τους.
Αντικείμενα: Προϊόν, Πελάτης, Καλάθι, Παραγγελία
Προϊόν: Ιδιότητες: Όνομα, Τιμή, Κατηγορία, Απόθεμα. Μέθοδοι: Προσθήκη_στο_καλάθι(), Εμφάνιση_λεπτομερειών()
Πελάτης: Ιδιότητες: Όνομα, Email, Διεύθυνση, Τηλέφωνο. Μέθοδοι: Σύνδεση(), Αποσύνδεση(), Ολοκλήρωση_αγοράς()
Καλάθι: Ιδιότητες: Λίστα_προϊόντων, Συνολικό_ποσό. Μέθοδοι: Προσθήκη(), Αφαίρεση(), Υπολογισμός_συνόλου()
Παραγγελία: Ιδιότητες: Αριθμός_παραγγελίας, Ημερομηνία, Κατάσταση. Μέθοδοι: Αποστολή(), Ακύρωση()
Να σχεδιαστεί ιεραρχία κλάσεων για τα μέσα μεταφοράς με βάση τον κανόνα is_a. Να περιλαμβάνει τουλάχιστον 3 επιπέδα βάθους.
Μέσο_Μεταφοράς
├── Χερσαίο
│ ├── Αυτοκίνητο
│ │ ├── Ηλεκτρικό
│ │ └── Βενζίνης
│ └── Μοτοσυκλέτα
├── Θαλάσσιο
│ ├── Πλοίο
│ └── Βάρκα
└── Εναέριο
├── Αεροπλάνο
└── Ελικόπτερο
Κάθε επίπεδο προσθέτει πιο εξειδικευμένες ιδιότητες. Π.χ. το Ηλεκτρικό αυτοκίνητο κληρονομεί από το Αυτοκίνητο, που κληρονομεί από το Χερσαίο, που κληρονομεί από το Μέσο_Μεταφοράς.