Methods

Εισαγωγή

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

Κλάσεις και αντικείμενα

Μπορεί να μην σας είναι εύκολο να καταλάβετε την ιστορία με τις κλάσεις και τα αντικείμενα αλλά θα κάνω το καλύτερο για να τα εξηγήσω. Πραγματικά, οι κλάσεις και τα αντικείμενα είναι στενά συνδεδεμένα μεταξύ τους και μερικοί αρχάριοι δεν νοιάζονται για να το καταλάβουν καθαρά, οπότε και περνάνε δύσκολα όταν μελετάν την c#!

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

Οι κλάσεις και τα αντικείμενα στον κόσμο

Τα πάντα στον κόσμο μας θεωρούνται αντικείμενα. Για παράδειγμα, οι άνθρωποι είναι αντικείμενα, τα ζώα επίσης, τα ορυκτά είναι αντικείμενα, τα πάντα είναι αντικείμενα. Εύκολο, σωστά; Τι γίνεται όμως με τις κλάσεις; Στον κόσμο μας πρέπει να διαφοροποιούμε τα αντικείμενα με τα οποία εμείς ζούμε. Έτσι πρέπει να καταλάβουμε πως υπάρχουν κατατάξεις (classifications, έτσι πήραν το όνομα και την έννοια της κλάσης) για όλα αυτά τα αντικείμενα. Για παράδειγμα, εγώ είμαι αντικείμενο, ο Νίκος επίσης, η Μαρία είναι άλλο αντικείμενο γι αυτό και είμαστε όλοι από την κλάση (η τύπος) άνθρωπος. Έχω έναν σκύλο που ονομάζεται Ricky έτσι είναι αντικείμενο. Ο σκύλος του φίλου μου ονομάζεται Doby, επίσης αντικείμενο και τα δυο από την κλάση Σκύλος. Ένα τρίτο παράδειγμα. Έχω έναν υπολογιστή Pentium III. Αυτό είναι το αντικείμενο. Ο φίλος μου έχει επίσης ένα Pentium IV οπότε και ένα άλλο αντικείμενο από την κλάση Υπολογιστής. Τώρα νομίζω πιάσατε την έννοια της κλάσης και του αντικειμένου αλλά αφήστε με να σας το ξεκαθαρίσω λίγο παραπάνω. Στον κόσμο μας έχουμε μια κατάταξη για τα αντικείμενα και κάθε αντικείμενο πρέπει να είναι από κάποια κατάταξη. Έτσι, μια κλάση είναι ένας τρόπος για να περιγράψουμε μερικές ιδιότητες και λειτουργίες ή συμπεριφορές για μια ομάδα από αντικείμενα. Με άλλα λόγια, η κλάση θεωρείται ως πρότυπο για μερικά αντικείμενα. Έτσι μπορεί να φτιάξω μια κλάση που ονομάζεται «άτομο» έτσι ώστε να είναι ένα πρότυπο που να περιλαμβάνει τις ιδιότητες και τις λειτουργίες ενός ατόμου (πχ σαν ιδιότητες ηλικία, φύλλο κλπ).

Κλάσεις και αντικείμενα του υπολογιστή

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

Κλάσεις και αντικείμενα στην C#

Μια κλάση στην c# θεωρείται ως το πρωταρχικό στοιχείο για οικοδόμηση της γλώσσας. Αυτό που εννοώ είναι ότι κάθε φορά που δουλεύετε με την C# θα δημιουργείτε κλάσεις για να σχηματίζουν το πρόγραμμα. Χρησιμοποιούμε κλάσεις ως ένα πρότυπο για να βάλουμε μέσα τις ιδιότητες και τις λειτουργίες σε ένα δομικό στοιχείο (building block) για μερικά γκρουπ αντικειμένων και μετά τις χρησιμοποιούμε ως πρότυπα για να φτιάξουμε τα αντικείμενα που χρειαζόμαστε. Αλλά αρκετά με την θεωρία. Πάμε να δούμε τα πράγματα στον κώδικα.

Έστω λοιπόν πως θέλουμε να φτιάξουμε το πρότυπο για έναν άνθρωπο. Στο πρόγραμμα μας θέλουμε να μπορούμε να κρατάμε το όνομα του και την ηλικία του. Έχουμε λοιπόν:

class person { 
public int Age; public string ΗairColor; }

Για την δήλωση λοιπόν της κλάσης person γράφουμε την λέξη class, το όνομα της κλάσης και τις αγγύλες {}. Μέσα στις αγκύλες υπάρχει όλη η υλοποίηση της κλάσης. Πέραν της γνωστής δήλωσης της μεταβλητής name (string name;) παρατηρούμε και το keyword public. Μην ανησυχείτε τώρα για αυτό, θα δούμε αργότερα τον σκοπό του.

Έως τώρα λοιπόν έχουμε φτιάξει το πρότυπο. Δεν υπάρχουν ακόμα αντικείμενα. Πάμε να δούμε πως τους δίνουμε υπόσταση (Instantiate) ή δημιουργούμε μέσα από ένα παράδειγμα.

static void Main(string[] args)
        {
            Person Michael = new Person(); //δημιουργία αντικειμένου τύπου Person με το όνομα Michael
            Person Mary = new Person(); //αντίστοιχα
 
            // Ορισμός τιμών για τις ιδιότητες του Michael
            Michael.Age = 20;
            Michael.HairColor = "Brown";
 
            // Ορισμός τιμών για τις ιδιότητες της Mary
            Mary.Age = 25;
            Mary.HairColor = "Black";
 
            // εκτύπωση της ηλικίας τους
            Console.WriteLine("Michael’s age = {0}, and Mary’s age= {1}", Michael.Age, Mary.Age);
            Console.ReadLine();
        }

Έτσι αρχίζουμε την Main μέθοδο μας φτιάχνοντας 2 αντικείμενα του τύπου Person. Στην συνέχεια αρχικοποιούμε (δίνουμε αρχικές τιμές στις μεταβλητές) για τα αντικείμενα Michael και Mary. Στο τέλος εκτυπώνουμε μερικές τιμές στην κονσόλα.

Όταν δημιουργούμε το αντικείμενο Michael, ο compiler της c# δεσμεύει χώρο για τις 2 μεταβλητές της κλάσης person, για να μπορούμε να κρατήσουμε τις τιμές εκεί. Το ίδιο συμβαίνει και για το αντικείμενο Mary. Έτσι, κάθε αντικείμενο περιέχει διαφορετικά δεδομένα.