Τα αντικείμενα είναι πολύ μεγάλο θέμα και δεν είναι εύκολο να εξηγήσει κανείς σε μερικές γραμμές τί κάνουν. Σίγουρα δεν είναι θέμα προτίμησης ή μόδας, αλλά η βάση της σχεδίασης των περισσότερων εφαρμογών τα τελευταία 10-15 χρόνια, ενώ εμφανίστηκαν πριν από τουλάχιστον 20 χρόνια. Ο λόγος που τα χρησιμοποιούμε είναι για να απλοποιήσουμε τις εφαρμογές και να κάνουμε ευκολότερη τη συντήρηση τους. Αυτό δεν σημαίνει ότι μία κακογραμμένη εφαρμογή θα είναι πιο εύκολη στη συντήρηση. Σημαίνει ότι μία σωστά σχεδιασμένη εφαρμογη θα είναι πολύ ευκολότερο να τροποποιηθεί σε σχέση με άλλες μορφές σχεδίασης.
Το σημαντικότερο που πρέπει να έχεις υπόψη είναι ότι τα αντικείμενα περιέχουν δεδομένα αλλά κυρίως συμπεριφορά. Δεν είναι απλά structures ή μεταβλητές. Σε συνδυασμό με τη χρήση inheritance αυτό βοηθάει στην σημαντική απλοποίηση του κώδικα. Σκέψου για παράδειγμα ότι έχεις ένα χαρτοφυλάκιο με μετοχές, ομόλογα, παράγωγα και δεν συμμαζεύτεται και θέλεις να υπολογίσεις την συνολική αξία του. Η αξία του κάθε προϊόντος υπολογίζεται με διαφορετικό τρόπο. Οι μετοχές έχουν μία τρέχουσα τιμή η οποία προέρχεται από το χρηματιστήριο, η αξία των ομολόγων υπολογίζεται βάση της ημερομηνίας λήξης τους και το αν έχουν πληρωθεί κουπόνια. Για τα δομημένα ομόλογα, άσε μην τα . Χρησιμοποιώντας αντικείμενα, μπορείς να πεις ότι έχεις διαφορετικούς τύπους προϊόντων οι οποίοι βασίζοντασε ένα βασικό τύπο τον BaseProduct ο οποίος ορίζει τη συνάρτηση GetPrice. Ο κάθε τύπος προϊόντος μετά αντικαθιστά την GetPrice με τη δική του έκδοση η οποία υπολογίζει την αξία βάση τρέχουσας τιμής, ημερομηνίας λήξης, θέσης των άστρων ή τιμής του πετρελαίου. Για να υπολογίσεις τη συνολική αξία, καλείς κάθε αντικέιμενο στο χαρτοφυλάκιο και του ζητάς να σου επιστρέψει την αξία του και τα προσθέτεις. Όταν προσθέσεις ένα νέο προϊόν, ο κώδικας σου δεν θα αλλάξει γιατί δεν θα καταλάβει καν τη διαφορά. Όπως πριν έβλεπε αντικείμενα τύπου BaseProduct, θα συνεχίσει να βλέπει αντικείμενα BaseProduct.
Αν δεν είχες αντικείμενα, θα έπρεπε σε ένα loop να ελέγχεις τον τύπο κάθε αντικειμένου και αντίστοιχα να υπολογίσεις εσύ την αξία. Κάθε φορά που θα πρόσθετες ένα προϊόν θα έπρεπε να αλλάξεις τον κώδικα σου για να προσθέσεις τον τρόπο υπολογισμού για το καινούριο αντικείμενο. Για φαντάσου να το κάνεις αυτό για χρηματιστηριακά προϊόντα! Ξέρεις πόσο εύκολο είναι να υπολογίσεις την αξία ενός ομολόγου? Ενός δομημένου ομολόγου?
Άλλο πολύ σημαντικό χαρακτηριστικό των αντικειμένων είναι ότι κρύβουν τις λεπτομέρειες της υλοποίησης τους. Στον κώδικα υπολογισμού της αξίας του χαρτοφυλακίου δεν σε ενδιαφέρει ότι τα ομόλογα έχουν ημερομηνία λήξης, ή ότι τα παράγωγα βασίζονται σε άλλα προϊόντα. Απλά αθροίζεις τιμές. Αν προστεθεί άλλο ένα πεδίο στα παράγωγα το οποίο επηρεάζει τον υπολογισμό της άξίας, ο κώδικας σου θα συνεχίσει να δουλεύει χωρίς αλλαγή. Αν είχες ένα σύνολο από structures ή πίνακες θα έπρεπε να αλλάξεις τον κώδικα σου.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos