migf1 Δημοσ. 3 Οκτωβρίου 2012 Δημοσ. 3 Οκτωβρίου 2012 Φυσικά και υποστηρίζει, απλά όχι με τον τρόπο που έχουμε συνηθίσει. Τα έχουμε ξαναπεί: ο πρώτος C++ compiler έκανε "compile" σε C, επομένως είναι προφανές πως μπορείς να κάνεις OOP στη C. Απλά δε θα είναι όμορφο. Η C++ αρχικά γράφτηκε εξολοκλήρου στον C pre-processor. Ούτε αυτό όμως, ούτε το bold σημαίνει πως η C υποστηρίζει OOP. Για παραδειγμα, υπάρχει καμιά στάνταρ βιβλιοθήκη της γλώσσας που να παρέχει εξειδικευμένο ορισμό ή/και διαχείριση κλάσεων; αντικειμένων; κληρονομικότητας; Παρέχεται από τη C κάποιος τελεστής, δομή, σύνταξη, κλπ που να διευκολύνει το OOP; Εξ' 'οσων γνωρίζω, η απάντηση είναι σε όλα όχι. Οπότε είναι προφανές πως η γλώσσα δεν υποστηρίζει OOP. To "υποστηρίζω" και ως λέξη και ως ερμηνεία είναι διαφορετική π.χ. τόσο από το "υλοποιώ" όσο και από το "μπορώ".
nilosgr Δημοσ. 3 Οκτωβρίου 2012 Δημοσ. 3 Οκτωβρίου 2012 Ειχα ρωτησει προπερυσι (οταν εημουν 1ο ετος) εναν καθηγητη μου, εαν η C "υποστιριζει" OOP και μου απαντησε επιλεξη: - Οι περισσοτεροι θα σου πουν οχι, με την αποψη οτι ναι με μπορυμε να θεωρησουμε την κλαση ως struct και τη μεθοδο ως funtcion pointer, αλλα το προβλημα ειναι με την κληρονομικοτητα. Εγω ομως θα σου πω ναι και η για να με πιστεψεις διαβασε αυτο. 1
defacer Δημοσ. 3 Οκτωβρίου 2012 Δημοσ. 3 Οκτωβρίου 2012 Μπράβο στον καθηγητή σου είναι το μόνο που έχω να πω (ο καθηγητής που είχε διδάξει C στο δικό μου τμήμα απλά δεν ήξερε που παν τα 4, προς υπεράσπισή του ο άνθρωπος ήταν μαθηματικός αλλά αυτό δεν αλλάζει το ότι είχε την αρμοδιότητα να διδάσκει C άρα και την ηθική υποχρέωση να το κάνει σωστά ή καθόλου). Το PDF φαίνεται πολύ ενδιαφέρον, θα το διαβάσω σίγουρα με την ησυχία μου κάποια στιγμή. migf1 διαφωνούμε, nothing to see here, move along.
migf1 Δημοσ. 3 Οκτωβρίου 2012 Δημοσ. 3 Οκτωβρίου 2012 Το link που δίνεις φίλε nilosgr είναι κλασικό και το έχω υποδείξει κι εγώ πάμπολλες΄πολλές φορές σε συζητήσεις που αμφισβητούν ότι μπορει κανείς να υλοποιήσει OOP με C. Επίσης μπορείς να δεις την open-source GObject που είναι OOP βιβλιοθήκη υλοποιημένη εξολοκλήρου σε C (όπως και πολλές άλλες). Προσωπικά έχω φτάξει κι εγώ oop interfaces αποκλειστικά γραμμένα σε C. Τίποτα από όλα αυτά όμως δεν συνεπάγεται πως η C υποστηρίζει εγγενώς OOP... όταν λέμε υποστηρίζει εννοούμε να παρέχει διευκολύνσεις για το συγκεκριμένο programming paradigm.
Timonkaipumpa Δημοσ. 3 Οκτωβρίου 2012 Δημοσ. 3 Οκτωβρίου 2012 πάμε πάλι, η C++ απλά είναι υπερσύνολο της C, όταν γράφω C/C++ σημαίνει C++ Main με κομμάτια C , όπως malloc, καμιά φορά συναρτήσεις απλά δεν ξέρω κάποιον τρόπο στην C++ που να μας γλυτώνει από τα άπειρα Get/Set functions, υπάρχει κάτι αντίστοιχο όπως έχει η C# τα get/set ? Να πω και εγώ ότι δεν ισχύει αυτό. +1 σε ό,τι είπαν τα παιδιά πιο πριν. άσε την Objective-C, άμα ήθελα framework θα πήγαινα C# xmm, κρίμα που δεν έχει... Έχει frameworks η Objective-C. Μία χαρά frameworks έχει (εκτός και εάν εννοείς ότι η Objective C είναι framework, που είναι εντελώς λάθος, μα εντελώς!). @others Για την ιστορία... και σε assembly μπορείς να κάνεις OOP. Βασικά, OOP μπορείς να κάνεις με οποιαδήποτε γλώσσα σου δίνει άμεση πρόσβαση σε H/W (ή C like πρόσβαση). Τα προβλήματα που θα έχεις όμως (τα μεγαλύτερα), όχι από θέμα επίλυσης αλλά από θέμα διαχείρισης, είναι: - Message mapping - Name maggling Μεγάλοι πόνοι στα οπίσθια εάν τα κάνεις manually. Πόσο μάλλον δε όταν για το 1το υπάρχουν και δύο διαφορετικές "σχολές", με την μία να έχει κυριαρχίσει σχεδόν.
nilosgr Δημοσ. 3 Οκτωβρίου 2012 Δημοσ. 3 Οκτωβρίου 2012 Βασικά, OOP μπορείς να κάνεις με οποιαδήποτε γλώσσα σου δίνει άμεση πρόσβαση σε H/W (ή C like πρόσβαση). Στο computer organization design του Patterson λεει πως υλοποιιειται το ΟΟΡ σε asseembly και νομιζω εχει και παραδειγματα σε MIPS
Timonkaipumpa Δημοσ. 3 Οκτωβρίου 2012 Δημοσ. 3 Οκτωβρίου 2012 Δες και αυτό. http://www.uvm.edu/~ejeldrid/resources/mipsoob.pdf
migf1 Δημοσ. 3 Οκτωβρίου 2012 Δημοσ. 3 Οκτωβρίου 2012 Εγώ δεν έχω καταλάβει ακόμα, υπάρχει κάποιος γνωστός ή άγνωστος, σημαντικός ή όχι, που να υποστηρίζει πως η γλώσσα C υποστηρίζει OOP; (πόσο μάλλον η assembly)... @timon: +1 ... για δοκιμάστε για παράδειγμα να υλοποιήσετε multiple inheritance σε C Όχι πως δεν γίνεται, αλλά πως γίνεται (συνήθως με πολλά vtables για επίλυση διενέξεων) σίγουρα πάντως ΔΕΝ υποστηρίζεται από τη γλώσσα. EDIT: Ξέχασα, αν ψάχνετε για OOP C libraries, δειτε και την COS
defacer Δημοσ. 3 Οκτωβρίου 2012 Δημοσ. 3 Οκτωβρίου 2012 @migf1: Φαντάζομαι πως το πρόβλημα εδώ είναι θέμα ορισμού. Αν θεωρήσεις πως OOP είναι το να γράφεις class και virtual τότε όχι, δεν υποστηρίζει OOP η C. Αν όμως θεωρήσεις ότι OOP είναι το να έχεις "πακέτα δεδομένων και συμπεριφοράς" τότε ναι, μια χαρά υποστηρίζει OOP. Και αυτός είναι ο λόγος που πιστεύω ότι είμαστε εδώ κάποιοι που το πιστεύουμε αυτό, και κάποιοι που δεν το πιστεύουμε, και αν δε συμφωνήσουμε στον ορισμό μέχρι να πεθάνουμε ακόμα εδώ θα είμαστε και θα διαφωνούμε. Ο ορισμός της Wikipedia για τον OOP (emphasis mine): Object-oriented programming (OOP) is a programming paradigm using "objects" – usually instances of a class – consisting of data fields and methods together with their interactions – to design applications and computer programs. Programming techniques may include features such as data abstraction, encapsulation, messaging, modularity, polymorphism, and inheritance. Εν συντομία λοιπόν: Αυτό: >class Foo { public: int bar; void Frob(); } δεν είναι "πιο OOP" από αυτό: >struct Foo { int bar; }; void Foo_Frob(Foo* this); Τον OOP δεν τον κάνουν τα ράσα (η σύνταξη), τον κάνει η λογική με την οποία κινείσαι. Τα ράσα βοηθάνε βέβαια, αλλά ο OOP είναι μια λογική και ως τέτοια μπορεί να υλοποιηθεί και σε assembly αν θέλεις. Τέλος είναι νομίζω προφανές από το quote που έκανα ότι OOP μπορείς να έχεις χωρίς καν να έχεις classes, πόσο μάλλον inheritance και πόσο μάλλον multiple inheritance. Επομένως δεν ξέρω τι ακριβώς σημαίνει το τελευταίο σου σχόλιο. 1
migf1 Δημοσ. 3 Οκτωβρίου 2012 Δημοσ. 3 Οκτωβρίου 2012 Οπότε λοιπόν (αφού είναι και προφανές) στο εξής όταν με ρωτάνε για γλώσσες που υποστηρίζουν το oop paradigm λέω να τους προτείνω και την C (ίσως και 1η 1η στη λίστα). EDIT: Κάντε κι ένα edit στην σχετική παράγραφο της Wikipedia να την προσθέσετε, είναι κρίμα να μην αναφέρεται καν στις oop γλώσσες.
defacer Δημοσ. 3 Οκτωβρίου 2012 Δημοσ. 3 Οκτωβρίου 2012 Να τους την προτείνεις αν το κρίνεις σκόπιμο. Βέβαια αν τη βάλεις πρώτη μπορεί και να σε κοιτάξουν περίεργα, αλλά τι ξέρουν; Κατά τα άλλα αν έχεις κάποια απάντηση άξια σχολιασμού εδώ είμαστε. Προσωπικά έχω χορτάσει στο παρελθόν από "did not" / "did too".
migf1 Δημοσ. 3 Οκτωβρίου 2012 Δημοσ. 3 Οκτωβρίου 2012 Να τους την προτείνεις αν το κρίνεις σκόπιμο. Βέβαια αν τη βάλεις πρώτη μπορεί και να σε κοιτάξουν περίεργα, αλλά τι ξέρουν; Γιατι να με κοιτάξουν περίεργα; Αφού υποστηρίζει το OOP paradigm η C, δεν το υποστηρίζει; Κατά τα άλλα αν έχεις κάποια απάντηση άξια σχολιασμού εδώ είμαστε. Προσωπικά έχω χορτάσει στο παρελθόν από "did not" / "did too". Εγώ να δεις, δεν έχω απλά χορτάσει, έχω βαρεθεί μέχρι αηδίας. Όσο και να προσπαθείς να μας πείσεις πως η νύχτα είναι μέρα και το αντίθετο, η πραγματικότητα είναι πως η μέρα είναι μέρα και η νύχτα είναι νύχτα. Το αν είναι άξια σχολιασμού ή όχι από σένα η όποια μου απάντηση, ερώτηση ή/και ποστ ποσώς με ενδιαφέρει. Το να νομίσουν όμως νεο-εισερχόμενοι στον χώρο διαβάζοντάς σε πως η C υποστηρίζει εγγενώς OOP μπορεί να αποδειχτεί ακόμα και τραγικό για την μετέπειτα καριέρα τους (π.χ. να γελάει ο κόσμος μαζί τους επί χρόνια). Όσο για τον ορισμό της Wikipedia πάνω στον οποίον υποτίθεται πάτησες, αλλά ως συνήθως ξέσκισες, σου εχω ένα ωραιότατο link: http://c2.com/cgi/wi...efinitionsForOo Εδώ και 10ετίες παλεύουν όλοι οι αρμόδιοι της πληροφορικής να συμφωνήσουν σε έναν ορισμό και δεν μπορούν, κι έρχεσαι εσύ με επιχείρημα (νηπιαγωγείου) τον ορισμό της Wikipedia να μας πεις πως η C υποστηρίζει εγγενώς OOP επειδή η Wikipedia γράφει "may". Εϊναι δηλαδή για γέλια και για κλάματα η περίπτωσή σου.
defacer Δημοσ. 3 Οκτωβρίου 2012 Δημοσ. 3 Οκτωβρίου 2012 Δύο πράγματα έχω να πω: 1. O καθένας κρίνεται από τις πράξεις του. 2. Πρωτού κάνω καν quote τη Wikipedia σαν επιχείρημα νηπιαγωγείου (αλήθεια γιατί έπεσες στο επίπεδό μου με το "αντεπιχείρημα" επίσης από τη Wikipedia?), στην πρώτη πρώτη γραμμή της απάντησής μου, έγραψα αυτό: @migf1: Φαντάζομαι πως το πρόβλημα εδώ είναι θέμα ορισμού. Και για φαντάσου, στην πρώτη πρώτη γραμμή του link με το οποίο με βάζεις στη θέση μου, καθώς και στην φλογερή αλλά κατόπιν εορτής απάντησή σου, λέει ξεκάθαρα πως Many different definitions for ObjectOriented exist; this page catalogs those which carry some weight in the programming (both industry and academic) community. Unfortunately, NobodyAgreesOnWhatOoIs, a fact used by some to try and discredit OO. Περαστικά.
Directx Δημοσ. 3 Οκτωβρίου 2012 Δημοσ. 3 Οκτωβρίου 2012 Έχω γράψει "OO(P) κώδικα" (ή πιο αντικειμενικά κάτι που προσπαθούσε να του μοιάσει εφαρμόζοντας κάποιους από τους κανόνες του) σε C και το διασκέδασα αρκετά (η χρήση C ήταν υποχρεωτική για το συγκεκριμένο λογισμικό) αλλά ως εκεί. Το ίδιο πρόγραμμα σε C++ θα γραφόταν σαφέστατα πολύ πιο όμορφα από ότι σε αυτή την C-PROCEDURAL-OOP μορφή (διότι δεν μπορείς να ξεφύγεις ποτέ από το γεγονός ότι η C είναι PROCEDURAL γλώσσα). Και εκεί είναι νομίζω το ζήτημα, γίνεται να γράψεις με κανόνες OOP σε C; Ναι.. αλλά καθώς η γλώσσα C δεν έχει σχεδιαστεί για αυτή την μορφή προγραμματισμού, η ανάπτυξη OOP γίνεται τελικά πολύ πιο άνετα (όμορφα, εύκολα κλπ) σε άλλες OOP friendly γλώσσες όπως πχ. C++. Έκαστος λοιπόν στο είδος του. Τουλάχιστον έτσι το βλέπω εγώ (και όχι δεν πρόκειται να "μαλώσω" για αυτό το θέμα ). 1
migf1 Δημοσ. 3 Οκτωβρίου 2012 Δημοσ. 3 Οκτωβρίου 2012 ... στην πρώτη πρώτη γραμμή της απάντησής μου, έγραψα αυτό: @migf1: Φαντάζομαι πως το πρόβλημα εδώ είναι θέμα ορισμού. ... Το πρόβλημα δεν είναι ούτε οι ορισμοί ούτε τίποτα. Tο πρόβλημα είναι πως προκειμένου να μη πλήξεις τον εγωισμό σου έχεις φτάσει στο σημείο να υποστηρίζεις επί πολλά ποστ (προφανώς με επιχειρήματα-αρλούμπες) πως η C είναι oop paradigm γλώσσα. ΥΓ. Τα δικά μου ευτυχώς είναι όντως περαστικά, τα δικά σου όμως τα κόβω για πολύ μόνιμα. Έχω γράψει "OOP κώδικα" (ή πιο αντικειμενικά κάτι που προσπαθούσε να του μοιάσει) σε C και το διασκέδασα αρκετά (η χρήση C ήταν υποχρεωτική για το συγκεκριμένο λογισμικό) αλλά ως εκεί. Το ίδιο πρόγραμμα σε C++ θα γραφόταν σαφέστατα πολύ πιο όμορφα από ότι σε αυτή την C-PROCEDURAL-OOP μορφή. Και εκεί είναι νομίζω το ζήτημα, γίνεται να γράψεις με κανόνες OOP σε C; Ναι.. αλλά καθώς η γλώσσα C δεν έχει σχεδιαστεί για αυτή την μορφή προγραμματισμού, η ανάπτυξη OOP γίνεται πολύ πιο όμορφα (& εύκολα) σε άλλες OOP friendly γλώσσες όπως πχ. C++. Τουλάχιστον έτσι το βλέπω εγώ (και όχι δεν πρόκειται να "μαλώσω" για αυτό το θέμα ). Αυτό ακριβώς (το bold) σημαίνουν οι φράσεις "δεν υποστηρίζει εγγενώς oop"... "δεν υποστηρίζει το oop paradigm" κλπ. Το ξέρουν και οι πέτρες (μόνο ο defacer φαίνεται όχι μόνο να μη το ξέρει, αλλά να θέλει να μας το επιβάλλει κιόλας).
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα