C# COMPLETE COURSE
ΕΝΟΤΗΤΑ 12 - UNDERSTANDING OBJECT ORIENTED PROGRAMMING
INTRODUCTION
Σε αυτό το δωρεάν μάθημα C# θα εξηγήσουμε θεωρητικά μόνο τι σημαίνει αντικειμενοστραφής προγραμματισμός (object oriented programming) και όλους τους βασικούς όρους που περιστοιχίζουν την λειτουργία του όπως κλάσεις (classes), αντικείμενα (objects), πεδία (fields) και μέθοδοι (methods).
WHAT OOP IS ALL ABOUT
Πριν ορίσουμε τον αντικειμενοστραφή προγραμματισμό αξίζει να σημειώσουμε ότι είναι ο πιο διαδομένος τρόπος για να δημιουργήσουμε cloud και scalable εφαρμογές αλλά και μικρότερες σε κλίμακα εφαρμογές για εσωτερική εταιρική χρήση. Η έννοια του object-oriented programming υφίσταται σε όλες τις μοντέρνες γλώσσες προγραμματισμού όπως Java, Python, Dart, JavaScript, C++ κτλ.
Η βασική οντότητα επάνω στην οποία στηρίζεται όλη η λειτουργία του αντικειμενοστραφή προγραμματισμού είναι το προγραμματιστικό αντικείμενο μέσα στο οποίο αποθηκεύουμε τα δεδομένα που αφορούν και αναφέρονται σε άτομα ή φυσικά αντικείμενα. Στην ουσία όμως για να καταλάβετε τον αντικειμενοστραφή προγραμματισμό δεν πρέπει να ξεκινήσετε από την έννοια του αντικειμένου, όπως πολλά sites κάνουν και είναι λάθος με την δική μου ταπεινή γνώμη, αλλά από την έννοια της κλάσης.
Την δομή και την απλή σύνταξη της κλάσης την γνωρίζουμε ήδη αφού κάθε πρόγραμμα που έχουμε γράψει μέχρι τώρα είναι γραμμένο μέσα σε μια κλάση. Όμως η κλάση είναι πολλά περισσότερα από το να περιέχει μόνο την main( ) μέθοδο. Ας δούμε λοιπόν τα πράγματα από την αρχή.
Σκεφτείτε λοιπόν ότι θέλουμε να περιγράψουμε προγραμματιστικά την έννοια του αυτοκινήτου - όχι ένα συγκεκριμένο αυτοκίνητο αλλά γενικά το όχημα που ονομάζεται αυτοκίνητο. Για να μπορέσουμε λοιπόν να περιγράψουμε την έννοια του αυτοκινήτου προγραμματιστικά πρέπει να χρησιμοποιήσουμε μια κλάση. Τι είναι λοιπόν μια κλάση; Η κλάση είναι ο τρόπος που περιγράφουμε προγραμματιστικά έννοιες από τον φυσικό κόσμο που ζούμε. Είναι ο τρόπος για να μπορέσουμε να φέρουμε μια έννοια από τον φυσικό κόσμο μέσα στον κώδικα μας. Για παράδειγμα η έννοια τιμολόγιο, ο εργαζόμενος, το εισιτήριο όλα αυτά τα ουσιαστικά ονόματα μπορούμε προγραμματιστικά να τα περιγράψουμε δημιουργώντας μια ή και περισσότερες κλάσεις. Οπότε μια κλάση είναι ο τρόπος να μεταφέρουμε τις έννοιες από την φυσικό κόσμο μέσα στον κώδικα. Πως όμως περιγράφουμε αυτές τις έννοιες μέσω της κλάσης?
Η κλάση λοιπόν μας επιτρέπει να χρησιμοποιήσουμε δύο έννοιες για να περιγράψουμε πλήρως μια έννοια – fields με τα οποία περιγράφουμε τα χαρακτηριστικά του αντικειμένου και methods οι οποίες περιγράφουν το τι μπορεί να κάνει το αντικείμενο.
Όπως ήδη αναφέραμε στην αρχή αυτού του δωρεάν μαθήματος C#, δεν θα δούμε κώδικα αλλά θα προσπαθήσουμε πρώτα να καταλάβουμε τις έννοιες επάνω στις οποίες στηρίζεται μια object-oriented γλώσσα προγραμματισμού. Για αυτό ακριβώς το λόγο, οτιδήποτε κώδικα ή εικόνες σας παρουσιάσω είναι για να κατανοήσετε καλύτερα την έννοια του αντικειμένου και όχι για να καταλάβετε τις εντολές. Κώδικα θα αρχίσουμε να γράφουμε από την επόμενη δωρεάν C# ενότητα.
Συνεχίζοντας λοιπόν το παράδειγμα μας με την απλή έννοια του αυτοκίνητου, επιθυμούμε να μεταφέρουμε την έννοια αυτού αυτοκίνητου μέσα στον κώδικα μας. Με άλλα λόγια να καταφέρουμε να περιγράψουμε την έννοια του αυτοκίνητου προγραμματιστικά. Σαν πρώτο βήμα λοιπόν θα πρέπει να δημιουργήσουμε μια κλάση γιατί αυτός ακριβώς είναι και ο λόγος ύπαρξής της – να περιγράφει καταστάσεις και πράγματα από τον φυσικό κόσμο.
Σαν πρώτο βήμα λοιπόν δημιουργήσαμε μια κλάση και την ονομάσαμε Car, αλλά πως μπορώ να περιγράψω την γενική έννοια του αυτοκινήτου; Όπως γνωρίζουμε, κάθε αυτοκίνητο έχει διάφορα χαρακτηριστικά όπως κυβικά, χρώμα, μοντέλο, κτλ. Κάθε ένα χαρακτηριστικό μπορούμε να το μεταφέρουμε μέσα σε μια κλάση με την μορφή μεταβλητών ή όπως αλλιώς ονομάζονται fields.
Επίσης κάθε αυτοκίνητο έχει και μερικές ιδιότητες όπως επιτάχυνση και επιβράδυνσή. Αυτές είναι οι ιδιότητες του αντικειμένου δηλαδή το τι μπορεί να κάνει το αντικείμενο. Ας θεωρήσουμε λοιπόν ότι θέλουμε να περιγράψουμε προγραμματιστικά ότι το αυτοκίνητο έχει την ικανότητα να αναπτύξει ταχύτητα όπως επίσης και να σταματήσει. Για να το πετύχουμε αυτό πρέπει να χρησιμοποιήσουμε μεθόδους. Οι μέθοδοι περιγράφουν το τι είναι ικανό να κάνει το αντικείμενο. Επαναλαμβάνω για άλλη μια φορά να μην ανησυχείτε για το συντακτικό και την λειτουργία των μεθόδων ούτε για τα πεδία γιατί θα τα δούμε όλα αναλυτικά στη πράξη από το επόμενο δωρεάν μάθημα C#.
Έχουμε φτάσει λοιπόν στο σημείο όπου έχουμε ολοκληρώσει την κλάση μας και είμαστε ικανοποιημένοι με τον τρόπο που έχουμε περιγράψει προγραμματιστικά την γενική έννοια του αυτοκίνητου. Τώρα πρέπει να περάσουμε στο δεύτερο βήμα που είναι η δημιουργία προγραμματιστικών αντικειμένων. Αλλά εδώ δημιουργείται η δεύτερη ερώτηση στο μυαλό μας – ποιος είναι υπεύθυνος για την δημιουργία αντικειμένων και πρακτικά ποιος τα δημιουργεί;
Και οι δύο ερωτήσεις έχουν μια κοινή απάντηση – η κλάση. Κάθε κλάση, από την στιγμή που έχει δημιουργηθεί, μπορεί να χρησιμοποιηθεί σαν template ή σαν το καλούπι για να δημιουργεί objects. Κάθε object που δημιουργείται περιέχει όλα τα fields και methods της κλάσης. Δίνοντας τιμές στα χαρακτηριστικά (fields) του κάθε object που έχουμε δημιουργήσει μπορούμε να ορίσουμε πως ακριβώς το θέλουμε. Το κάθε αντικείμενο βρίσκεται σε διαφορετική τοποθεσία στη μνήμη του υπολογιστή. Οπότε και τα ίδια χαρακτηριστικά να δώσουμε ενώ λογικά μπορεί να είναι δύο ίδια αντικείμενα, προγραμματιστικά όμως είναι διαφορετικά γιατί έχουν δημιουργηθεί σε διαφορετικές τοποθεσίες στην μνήμη του υπολογιστή και οι τιμές που δίνουμε στα fields του ενός δεν επηρεάζουν τις τιμές των fields του άλλου.
Μετά από αυτή τη μικρή επεξήγηση γύρω από τις κλάσεις και τα αντικείμενα, μπορούμε τώρα να επιστρέψουμε πίσω στην έννοια του object και να κατανοήσουμε απόλυτα τον ορισμού που αναφέρει ότι ένα αντικείμενο στην ουσία είναι η συλλογή στοιχείων και πληροφοριών που έχουν κάτι κοινό. Στο δικό μας παράδειγμα στοιχεία όπως model, cc, και χρώμα ομαδοποιούνται μαζί κάτω από ένα αντικείμενο είδος car. Γιατί είναι είδος car; γιατί πολύ απλά δημιουργήθηκε από την class car και από την στιγμή που δημιουργήθηκε από μια συγκεκριμένη κλάση κληρονόμησε και όλα τα fields και methods της συγκεκριμένης κλάσης. Αυτός λοιπόν είναι ο βασικός σκοπός του object-oriented programming να ομαδοποιήσει πολλά διαφορετικά στοιχεία και πληροφορίες κάτω από την έννοια του object.
SUMMARY
Πάμε να κάνουμε μια μικρή επανάληψη για όλα όσα μιλήσαμε σε αυτό το δωρεάν μάθημα C#.
Θέλουμε να περιγράψουμε προγραμματιστικά την έννοια του αυτοκινήτου. Ο τρόπος για να το κάνουμε αυτό είναι να δημιουργήσουμε μια κλάση. Μέσα στην κλάση ορίζουμε fields τα οποία είναι τα χαρακτηριστικά του αντικειμένου και methods που περιγράφουν τα actions δηλαδή τι μπορεί να κάνει το αντικείμενο. Αφού λοιπόν περιγράψουμε την έννοια του αυτοκίνητου με τα δύο αυτά στοιχεία, μπορούμε να χρησιμοποιήσουμε την κλάση σαν καλούπι για την δημιουργία προγραμματιστικών αντικειμένων είδος αυτοκίνητου. Κάθε αντικείμενο περιέχει την δική του ομάδα από fields και methods χωρίς το ένα αντικείμενο να επηρεάζει κάποιο άλλο. Από την στιγμή που δημιουργήσουμε ένα αντικείμενο πρακτικά έχουμε ομαδοποιήσει αρκετές πληροφορίες και στοιχεία κάτω από ένα όνομα – αυτό που θα δώσουμε στο αντικείμενο.
Στο επόμενο δωρεάν μάθημα C# θα δούμε αναλυτικά όλα αυτά τα βήματα.
ΕΙΣΗΓΗΤΗΣ
Μιχάλης Κασάπογλου
Ο Μιχάλης Κασάπογλου, είναι ένας από τους πιο έμπειρους τεχνικούς εκπαιδευτές στον χώρο του προγραμματισμού με πάνω από 20 χρόνια εμπειρία. Έχει εργαστεί σαν IT Operations Manager, Senior Programmer, και Training Team Leader ενώ κατέχει και αρκετές πιστοποιήσεις που καλύπτουν ένα μεγάλο φάσμα τεχνολογιών στο προγραμματισμό, σε βάσεις δεδομένων και cloud. Στον ελεύθερο του χρόνο διατηρεί ένα τεχνολογικό blog στο οποίο θα βρείτε αρκετά δωρεάν μαθήματα προγραμματισμού για αρχάριους.