Αντικειμενοστραφής Προγραμματισμός

Εισαγωγή στον Αντικειμενοστραφή Προγραμματισμό

Ο Αντικειμενοστραφής Προγραμματισμός (Object-Oriented Programming - OOP) είναι ένα μοντέλο προγραμματισμού που βασίζεται στην έννοια των αντικειμένων. Τα αντικείμενα είναι οντότητες που περιέχουν δεδομένα (ιδιότητες) και συμπεριφορά (μέθοδοι).

Ο Αντικειμενοστραφής Προγραμματισμός βοηθά στη δημιουργία κώδικα που είναι:

  • Δομημένος: Ο κώδικας οργανώνεται σε κλάσεις και αντικείμενα.
  • Επαναχρησιμοποιήσιμος: Οι κλάσεις μπορούν να χρησιμοποιηθούν ξανά σε διαφορετικά μέρη του προγράμματος.
  • Συντηρήσιμος: Ο κώδικας είναι ευκολότερος στη συντήρηση και στην επέκταση.
  • Κλιμακώσιμος: Ο κώδικας μπορεί εύκολα να επεκταθεί για να καλύψει νέες απαιτήσεις.

Οι βασικές αρχές του Αντικειμενοστραφούς Προγραμματισμού είναι:

  1. Ενθυλάκωση (Encapsulation)
  2. Αφαιρετικότητα (Abstraction)
  3. Κληρονομικότητα (Inheritance)
  4. Πολυμορφισμός (Polymorphism)

Αντικείμενο

Ορισμός

Το αντικείμενο είναι μια οντότητα που περιέχει δεδομένα (ιδιότητες) και συμπεριφορά (μέθοδοι). Τα αντικείμενα είναι τα βασικά δομικά στοιχεία του Αντικειμενοστραφούς Προγραμματισμού.

Χαρακτηριστικά

  • Κάθε αντικείμενο είναι μια στιγμιότυπο (instance) μιας κλάσης.
  • Τα αντικείμενα έχουν κατάσταση (state), η οποία ορίζεται από τις ιδιότητές τους.
  • Τα αντικείμενα έχουν συμπεριφορά (behavior), η οποία ορίζεται από τις μεθόδους τους.
  • Τα αντικείμενα αλληλεπιδρούν μεταξύ τους μέσω των μεθόδων τους.

Παραδείγματα Αντικειμένων

  • Αυτοκίνητο: Ιδιότητες (χρώμα, μοντέλο, ταχύτητα), Μέθοδοι (επιτάχυνση, φρέναρμα, στρίψιμο).
  • Μαθητής: Ιδιότητες (όνομα, ηλικία, βαθμός), Μέθοδοι (διαβάζω, γράφω, εξετάζομαι).
  • Λογαριασμός Τράπεζας: Ιδιότητες (αριθμός λογαριασμού, υπόλοιπο), Μέθοδοι (κατάθεση, ανάληψη, μεταφορά).
Αντικείμενο: Αυτοκίνητο
Ιδιότητες: Χρώμα, Μοντέλο
Μέθοδοι: Επιτάχυνση, Φρέναρμα
Αντικείμενο: Μαθητής
Ιδιότητες: Όνομα, Ηλικία
Μέθοδοι: Διαβάζω, Γράφω
Αντικείμενο: Λογαριασμός
Ιδιότητες: Αριθμός, Υπόλοιπο
Μέθοδοι: Κατάθεση, Ανάληψη

Κλάση

Ορισμός

Η κλάση είναι ένα πρότυπο (template) από το οποίο δημιουργούνται αντικείμενα. Ορίζει τις ιδιότητες και τις μεθόδους που θα έχουν τα αντικείμενα που δημιουργούνται από αυτήν.

Χαρακτηριστικά

  • Οι κλάσεις είναι τα "καλούπια" από τα οποία δημιουργούνται τα αντικείμενα.
  • Μια κλάση μπορεί να περιέχει ιδιότητες (attributes) και μεθόδους (methods).
  • Οι κλάσεις μπορούν να κληρονομούν ιδιότητες και μεθόδους από άλλες κλάσεις.
  • Οι κλάσεις μπορούν να είναι αφηρημένες (abstract) ή συγκεκριμένες (concrete).

Παραδείγματα Κλάσεων

  • Κλάση Αυτοκίνητο: Ορίζει ιδιότητες όπως χρώμα, μοντέλο, ταχύτητα και μεθόδους όπως επιτάχυνση, φρέναρμα.
  • Κλάση Μαθητής: Ορίζει ιδιότητες όπως όνομα, ηλικία, βαθμός και μεθόδους όπως διαβάζω, γράφω.
  • Κλάση Λογαριασμός Τράπεζας: Ορίζει ιδιότητες όπως αριθμός λογαριασμού, υπόλοιπο και μεθόδους όπως κατάθεση, ανάληψη.

Παράδειγμα: Η κλάση Αυτοκίνητο μπορεί να έχει τις ακόλουθες ιδιότητες και μεθόδους:

  • Ιδιότητες: χρώμα, μοντέλο, ταχύτητα, έτος κατασκευής.
  • Μέθοδοι: επιτάχυνση(), φρέναρμα(), στρίψιμο(), σταμάτημα().

Ιδιότητες και Μέθοδοι

Ιδιότητες (Attributes)

Οι ιδιότητες είναι τα δεδομένα που περιγράφουν την κατάσταση ενός αντικειμένου. Κάθε αντικείμενο έχει ένα σύνολο ιδιοτήτων που ορίζουν τις χαρακτηριστικές του τιμές.

  • Παράδειγμα: Για ένα αντικείμενο Αυτοκίνητο, οι ιδιότητες μπορούν να είναι: χρώμα, μοντέλο, ταχύτητα.
  • Παράδειγμα: Για ένα αντικείμενο Μαθητής, οι ιδιότητες μπορούν να είναι: όνομα, ηλικία, βαθμός.

Μέθοδοι (Methods)

Οι μέθοδοι είναι συναρτήσεις που ορίζουν τη συμπεριφορά ενός αντικειμένου. Κάθε αντικείμενο μπορεί να εκτελεί μεθόδους για να αλληλεπιδράσει με άλλα αντικείμενα ή να τροποποιήσει την κατάστασή του.

  • Παράδειγμα: Για ένα αντικείμενο Αυτοκίνητο, οι μέθοδοι μπορούν να είναι: επιτάχυνση(), φρέναρμα(), στρίψιμο().
  • Παράδειγμα: Για ένα αντικείμενο Μαθητής, οι μέθοδοι μπορούν να είναι: διαβάζω(), γράφω(), εξετάζομαι().

Παράδειγμα: Ένα αντικείμενο Λογαριασμός Τράπεζας μπορεί να έχει:

  • Ιδιότητες: αριθμός λογαριασμού, υπόλοιπο, όνομα κατόχου.
  • Μέθοδοι: κατάθεση(ποσό), ανάληψη(ποσό), μεταφορά(ποσό, λογαριασμός προορισμού).

Κληρονομικότητα

Ορισμός

Η κληρονομικότητα είναι ένας μηχανισμός μέσω του οποίου μια κλάση (υποκλάση) μπορεί να κληρονομήσει ιδιότητες και μεθόδους από μια άλλη κλάση (υπερκλάση). Αυτό επιτρέπει την επαναχρησιμοποίηση κώδικα και τη δημιουργία ιεραρχιών κλάσεων.

Χαρακτηριστικά

  • Η υποκλάση κληρονομεί όλες τις ιδιότητες και μεθόδους της υπερκλάσης.
  • Η υποκλάση μπορεί να προσθέτει νέες ιδιότητες και μεθόδους.
  • Η υποκλάση μπορεί να υπερκαλύπτει (override) μεθόδους της υπερκλάσης.
  • Η κληρονομικότητα υποστηρίζει την αρχή "is-a" (είναι ένα).

Παραδείγματα Κληρονομικότητας

  • Υπερκλάση: Όχημα → Υποκλάσεις: Αυτοκίνητο, Μοτοσικλέτα, Ποδήλατο.
  • Υπερκλάση: Ζώο → Υποκλάσεις: Σκύλος, Γάτα, Πουλί.
  • Υπερκλάση: Σχήμα → Υποκλάσεις: Κύκλος, Τετράγωνο, Τρίγωνο.
Υπερκλάση: Όχημα
Υποκλάση: Αυτοκίνητο
Υποκλάση: Μοτοσικλέτα
Υποκλάση: Ποδήλατο

Αφαιρετικότητα

Ορισμός

Η αφαιρετικότητα είναι η διαδικασία της απόκρυψης των λεπτομερειών υλοποίησης και της εμφάνισης μόνο των απαραίτητων χαρακτηριστικών ενός αντικειμένου ή μιας κλάσης. Αυτό βοηθά στη μείωση της πολυπλοκότητας και στη βελτίωση της κατανόησης του συστήματος.

Χαρακτηριστικά

  • Αποκρύπτει τις λεπτομέρειες υλοποίησης.
  • Εμφανίζει μόνο τα απαραίτητα χαρακτηριστικά.
  • Βοηθά στη δημιουργία πιο απλών και κατανοητών μοντέλων.
  • Επιτρέπει στους προγραμματιστές να εστιάζουν στα υψηλότερου επιπέδου χαρακτηριστικά.

Παραδείγματα Αφαιρετικότητας

  • Αυτοκίνητο: Ο οδηγός δεν χρειάζεται να γνωρίζει πώς λειτουργεί ο κινητήρας, αλλά μόνο πώς να χρησιμοποιήσει το τιμόνι και τα πεντάλ.
  • Λογαριασμός Τράπεζας: Ο χρήστης δεν χρειάζεται να γνωρίζει πώς αποθηκεύονται τα δεδομένα, αλλά μόνο πώς να κάνει κατάθεση ή ανάληψη.
  • Σύστημα Αρχείων: Ο χρήστης δεν χρειάζεται να γνωρίζει πώς αποθηκεύονται τα αρχεία στο δίσκο, αλλά μόνο πώς να ανοίξει ή να αποθηκεύσει ένα αρχείο.

Ενθυλάκωση

Ορισμός

Η ενθυλάκωση είναι ο μηχανισμός μέσω του οποίου τα δεδομένα (ιδιότητες) και οι μέθοδοι που χειρίζονται αυτά τα δεδομένα συσκευάζονται μαζί σε μια κλάση. Αυτό προστατεύει τα δεδομένα από εξωτερικές παρεμβάσεις και διασφαλίζει ότι οι μεταβολές γίνονται μέσω ελεγχόμενων μεθόδων.

Χαρακτηριστικά

  • Τα δεδομένα κρύβονται από τον εξωτερικό κόσμο.
  • Οι ιδιότητες είναι ιδιωτικές (private) και προσπελαύνονται μέσω δημόσιων (public) μεθόδων.
  • Διασφαλίζει την ακεραιότητα των δεδομένων.
  • Βοηθά στη δημιουργία πιο ασφαλούς και συντηρήσιμου κώδικα.

Παραδείγματα Ενθυλάκωσης

  • Λογαριασμός Τράπεζας: Το υπόλοιπο του λογαριασμού είναι ιδιωτικό και μπορεί να τροποποιηθεί μόνο μέσω των μεθόδων κατάθεση() και ανάληψη().
  • Αυτοκίνητο: Η ταχύτητα του αυτοκινήτου είναι ιδιωτική και μπορεί να τροποποιηθεί μόνο μέσω των μεθόδων επιτάχυνση() και φρέναρμα().
  • Μαθητής: Ο βαθμός του μαθητή είναι ιδιωτικός και μπορεί να τροποποιηθεί μόνο μέσω της μεθόδου ενημέρωσηΒαθμού().

Παράδειγμα: Σε μια κλάση Λογαριασμός Τράπεζας, το υπόλοιπο είναι ιδιωτικό και προσπελαύνεται μέσω των μεθόδων κατάθεση() και ανάληψη().

Πολυμορφισμός

Ορισμός

Ο πολυμορφισμός είναι η ικανότητα ενός αντικειμένου να παίρνει πολλές μορφές. Αυτό επιτρέπει σε μια μέθοδο να συμπεριφέρεται διαφορετικά ανάλογα με το αντικείμενο στο οποίο καλείται.

Τύποι Πολυμορφισμού

  • Πολυμορφισμός σε χρόνο μεταγλώττισης (Compile-time Polymorphism): Επιτυγχάνεται μέσω της υπερφόρτωσης μεθόδων (method overloading).
  • Πολυμορφισμός σε χρόνο εκτέλεσης (Runtime Polymorphism): Επιτυγχάνεται μέσω της υπερκάλυψης μεθόδων (method overriding).

Χαρακτηριστικά

  • Επιτρέπει σε μια μέθοδο να έχει πολλές μορφές.
  • Βοηθά στη δημιουργία πιο ευέλικτου και επαναχρησιμοποιήσιμου κώδικα.
  • Επιτρέπει την χρήση μιας μεθόδου για διαφορετικά αντικείμενα.

Παραδείγματα Πολυμορφισμού

  • Υπερφόρτωση Μεθόδων: Μια κλάση μπορεί να έχει πολλές μεθόδους με το ίδιο όνομα αλλά διαφορετικά ορίσματα (π.χ. προσθήκη(int a, int b), προσθήκη(double a, double b)).
  • Υπερκάλυψη Μεθόδων: Μια υποκλάση μπορεί να υπερκαλύψει μια μέθοδο της υπερκλάσης για να προσφέρει ειδική συμπεριφορά (π.χ. η μέθοδος κίνηση() σε μια ιεραρχία ζώων).
Υπερκλάση: Ζώο
Μέθοδος: κίνηση()
Υποκλάση: Σκύλος
Υπερκάλυψη: κίνηση() → Τρέχω
Υποκλάση: Πουλί
Υπερκάλυψη: κίνηση() → Πετάω
Υποκλάση: Ψάρι
Υπερκάλυψη: κίνηση() → Κολυμπάω

Ασκήσεις

Άσκηση 1: Αντικείμενα και Κλάσεις

Να περιγράψετε τα αντικείμενα και τις κλάσεις που θα χρησιμοποιούσατε για να μοντελοποιήσετε ένα σύστημα βιβλιοθήκης. Συγκεκριμένα, να ορίσετε:

  1. Ποιες κλάσεις θα δημιουργούσατε;
  2. Ποιες ιδιότητες και μέθοδοι θα είχε η κάθε κλάση;
  3. Πώς θα αλληλεπιδρούσαν τα αντικείμενα μεταξύ τους;
Άσκηση 2: Κληρονομικότητα

Να σχεδιάσετε μια ιεραρχία κλάσεων για ένα σύστημα διαχείρισης ζώων σε ένα ζωολογικό κήπο. Να συμπεριλάβετε:

  1. Μια υπερκλάση Ζώο με κοινές ιδιότητες και μεθόδους.
  2. Υποκλάσεις για διαφορετικά είδη ζώων (π.χ. Σκύλος, Γάτα, Πουλί).
  3. Ιδιότητες και μέθοδοι που είναι συγκεκριμένες για κάθε υποκλάση.
Άσκηση 3: Ενθυλάκωση

Να εξηγήσετε πώς η ενθυλάκωση μπορεί να βελτιώσει την ασφάλεια και τη συντηρησιμότητα ενός συστήματος διαχείρισης λογαριασμών τραπεζών. Συγκεκριμένα, να περιγράψετε:

  1. Ποιες ιδιότητες θα ήταν ιδιωτικές (private);
  2. Ποιες μέθοδοι θα χρησιμοποιούσατε για να προσπελάσετε και να τροποποιήσετε αυτές τις ιδιότητες;
  3. Ποια είναι τα πλεονεκτήματα αυτής της προσέγγισης;
Άσκηση 4: Αφαιρετικότητα

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

  1. Ποιες κλάσεις θα δημιουργούσατε για να αναπαραστήσετε τους μαθητές, τους καθηγητές και τα μαθήματα;
  2. Ποιες ιδιότητες και μέθοδοι θα ήταν ορατές στους χρήστες του συστήματος;
  3. Ποιες λεπτομέρειες υλοποίησης θα αποκρύβατε;
Άσκηση 5: Πολυμορφισμός

Να περιγράψετε πώς ο πολυμορφισμός μπορεί να χρησιμοποιηθεί για να σχεδιάσετε ένα σύστημα διαχείρισης διαφορετικών τύπων οχημάτων (π.χ. αυτοκίνητα, μοτοσικλέτες, ποδήλατα). Συγκεκριμένα, να ορίσετε:

  1. Μια υπερκλάση Όχημα με μια μέθοδο κίνηση();
  2. Υποκλάσεις για κάθε τύπο οχήματος που υπερκαλύπτουν τη μέθοδο κίνηση();
  3. Πώς ο πολυμορφισμός επιτρέπει την χρήση της ίδιας μεθόδου για διαφορετικά οχήματα;
Άσκηση 6: Συνολική Εφαρμογή

Να σχεδιάσετε ένα σύστημα διαχείρισης ενός καταστήματος ηλεκτρονικών προϊόντων χρησιμοποιώντας τις αρχές του Αντικειμενοστραφούς Προγραμματισμού. Να περιγράψετε:

  1. Ποιες κλάσεις θα δημιουργούσατε (π.χ. Προϊόν, Πελάτης, Παραγγελία);
  2. Ποιες ιδιότητες και μέθοδοι θα είχε η κάθε κλάση;
  3. Πώς θα χρησιμοποιούσατε την κληρονομικότητα για να ορίσετε διαφορετικούς τύπους προϊόντων (π.χ. Ηλεκτρονικός Υπολογιστής, Κινητό Τηλέφωνο);
  4. Πώς θα εφαρμόζατε την ενθυλάκωση για να προστατέψετε τα δεδομένα;
  5. Πώς θα χρησιμοποιούσατε τον πολυμορφισμό για να διαχειριστείτε διαφορετικές κατηγορίες προϊόντων;