Αντικειμενοστρεφής προγραμματισμός στη C: Διαφορά μεταξύ των αναθεωρήσεων

Περιεχόμενο που διαγράφηκε Περιεχόμενο που προστέθηκε
Perge (συζήτηση | συνεισφορές)
μΧωρίς σύνοψη επεξεργασίας
Γραμμή 48:
 
==Κληρονομικότητα==
Κληρονομικότητα στον αντικειμενοστραφήαντικειμενοστρεφή προγραμματισμό αναφέρεται στη δυνατότητα επαναχρησιμοποίησης κώδικα από ήδη υπάρχοντα αντικείμενα, στη δημιουργία νέων αντικειμένων τα οποία μοιράζονται ιδιότητες με ήδη υπάρχοντα ή και τα δύο ανάλογα τη γλώσσα προγραμματισμού. Ένα αντικείμενο αντικείμενο αποτελεί ένα στιγμιότυπο μιας κλάσης, οι κλάσεις μπορούν να κληρονομούν από άλλες κλάσεις τόσο τα γνωρίσματα όσο και της μεθόδους. Η κύρια κλάση ονομάζεται βάση (base class), ενώ οι κλάσεις οι οποίες κληρονομούν από αυτή ονομάζονται παραγόμενες (derived). Η "base class" επιτρέπει τη δημιουργία μίας γενικής διεπαφής που παρέχει πιο εξειδικευμένες λειτουργίες με τη χρήση εικονικών μεθόδων (virtual functions)<ref name="virtualFunction">[http://en.wikipedia.org/wiki/Virtual_function Virtual Functions]</ref>.
===Από τη C++ στη C===
Γραμμή 94:
</source>
Η χρήση δεικτών σε συναρτήσεις γίνεται ώστε να επιτευχθεί η ενθυλάκωση, η σύνδεση δηλαδή των δεδομένων με τις μεθόδους. Οι αντικειμενοστραφήςαντικειμενοστρεφείς γλώσσες προγραμματισμού παρέχουν τη δυνατότητα άμεσης πρόσβασης των δεδομένων μέσα από τις μεθόδους της κλάσης με τη χρήση του δείκτη "this". Καθώς ο δείκτης αυτός δεν υπάρχει στη γλώσσα C θα πρέπει με κάποιον τρόπο οι μέθοδοι να γνωρίζουν από ποιο αντικείμενο να αντλήσουν και να τροποποιήσουν τα δεδομένα. Για να γίνει αυτό θα πρέπει να υπάρχει μια αναφορά στο αντικείμενο το οποίο θα τροποποιήσουν, η οποία δίνεται σαν όρισμα.
 
===Κληρονομικότητα C===
Γραμμή 120:
 
====Η κλάση "Class"====
Θέλουμε να κατασκευάσουμε την κλάση "Point" με τέτοιο τρόπο ώστε η κλάση "Circle" να μπορεί να κληρονομήσει απ ο αυτή. Κάθε κλάση στον αντικειμενοστραφήαντικειμενοστρεφή προγραμματισμό έχει κάποια κοινά χαρακτηριστικά με τις υπόλοιπες κλάσεις (κάθε κλάση έχει ένα κατασκευαστή), για να διατηρήσουμε μία συνοχή με τις αντικειμενοστραφήςαντικειμενοστρεφείς γλώσσες θα πρέπει να παρέχουμε μία παρόμοια διεπαφή. Καθώς το να παρέχουμε ένα γενικό τρόπο κατασκευής και δημιουργίας αντικειμένων προσθέτει αρκετά προβλήματα, κάνει τον κώδικα επιρρεπή σε λάθη και περιορίζει τις δυνατότητες θα πρέπει το κάθε αντικείμενο να γνωρίζει τη πόρους χρειάζεται καθώς και πώς να τους ελευθερώσει. Έτσι μπορούμε να χρησιμοποιούμε τη γενική συνάρτηση "new()" η οποία θα αναλαμβάνει να δημιουργεί τα αντικείμενα και η συνάρτηση "delete()" η οποία θα καταστρέφει το αντικείμενο.
<source lang="C">
struct Class {
Γραμμή 224:
Στη C τα πρότυπα (templates), μπορούν να προσομοιωθούν με την χρήση των μακροεντολών (macros) που προσφέρει ο [[προεπεξεργαστής]] (preprocessor). Έτσι, την «αντιληπτική» ικανότητα των προτύπων να αρχικοποιούνται και να συμπεριφέρονται αναλόγως με τον τύπο δεδομένων την προσομοιώνει η C με την χρήση των μακροεντολών, όπου παράγεται κώδικας με την διαχείριση και αντικατάσταση κειμένου που γράφεται στις μακροεντολές κατά το χρόνο μεταγλώτισσης.
Μία από τις πιο έντονες χρήσεις της προσομοίωσης των templates απαντάται στον κώδικα του [[Πυρήνας Linux|πυρήνα του Linux]], όπου έχουν υλοποιηθεί δομές όπως η λίστα, η ούρα κτλ., και μπορεί να βρεθεί στην βιβλιοθήκη sys/sys/queue.h<ref name="queue">[http://fxr.watson.org/fxr/source/sys/queue.h ]</ref>.
 
Αντιγράφοντας από τον προαναφερθέντα κώδικα μπορεί κανείς να παρατηρήσει τη διαχείριση της αντικατάστασης κειμένου για την παραγωγή κώδικα με σκοπό την δημιουργία ενός στοιχείου της λίστας καθώς και της κεφαλής της λίστας: