OOP mit ANSI C
-
Du hast doch überhaut keine Ahnung wie sich ein Smartpointer in der Praxis verhält, also urteile nicht über Dinge die deinen Horizont übersteigen.
Übrigens hat ein Smartpointer wenig mit OOP zu tun, denn ein Smartpointer lässt sich in jeder Sprache implementieren die RAII unterstützt, Java tut es beispielsweise nicht (deshalb mag fricky die Smartpointer nicht) und trotzdem ist Java OOP..
-
hdf ficky schrieb:
Du hast doch überhaut keine Ahnung wie sich ein Smartpointer in der Praxis verhält, also urteile nicht über Dinge die deinen Horizont übersteigen.
Da geb ich dir recht und anscheinend hat er auch nicht viel programmier erfahrung, sonst wüsste er wie schwer solche fehler zu finden sind. Und Nein! Smartpointer verursachen sicher nicht schwerwiegendere Probleme.
hdf ficky schrieb:
Übrigens hat ein Smartpointer wenig mit OOP zu tun, denn ein Smartpointer lässt sich in jeder Sprache implementieren die RAII unterstützt, Java tut es beispielsweise nicht (deshalb mag fricky die Smartpointer nicht) und trotzdem ist Java OOP..
Doch er hat viel mit OOP zu tun, nur hat Java eben einen GC und benötigt deswegen schlicht und ergreifend das RAII konzept nicht. Ich bezog mich mit meiner Aussage: "Ohne OOP keine Smartpointer" nur auf Sprachen die ohne GC arbeiten müssen, da dort eben das RAII Konzept gebraucht wird.
-
Jeah, wieder mal ein Thread mit den zielsichersten Definitionen von OOP
-
Nicht wirklich schrieb:
...und anscheinend hat er auch nicht viel programmier erfahrung, sonst wüsste er wie schwer solche fehler zu finden sind.
mag sein, aber bisher habe ich noch jedes fehlende free() durch scharfes hingucken gefunden.
Nicht wirklich schrieb:
Und Nein! Smartpointer verursachen sicher nicht schwerwiegendere Probleme.
aber vor den wirklichen problemen mit malloc/free, nämlich dass man über den zugewiesenen bereich hinaus zugreifen kann, oder dass manche auch ganz gern vergessen, den rückgabewert von malloc() auf 0 zu prüfen, schützt einen auch kein 'smart pointer'.
Nicht wirklich schrieb:
Ich bezog mich mit meiner Aussage: "Ohne OOP keine Smartpointer" nur auf Sprachen die ohne GC arbeiten müssen, da dort eben das RAII Konzept gebraucht wird.
ach herrje, C hat auch keinen GC und kommt ohne 'RAII' (was immer das sein soll) aus. ihr stellt wirklich kuriose behauptungen auf.
-
Nicht wirklich schrieb:
So ist das so??? Wenn OO in C kein Problem wäre, erzähl mir doch mal wie man einen Smartpointer implementiert, wie man in C vererben kann oder man die Daten vernünftig kapselt.
Smartpointer gibt es in der OOP Definition nicht. Es ist ein Idiom um RAII zu benutzen (ein anderes Idiom).
Dir fehlt jede Grundlage um hier vernünftig zu diskutieren.
Kapselung, siehe FILE*
Vererbung hat nichts mit OOP zu tungenau das meine ich mit Java OOP.
-
-fricky- schrieb:
Nicht wirklich schrieb:
...und anscheinend hat er auch nicht viel programmier erfahrung, sonst wüsste er wie schwer solche fehler zu finden sind.
mag sein, aber bisher habe ich noch jedes fehlende free() durch scharfes hingucken gefunden.
Entscheidend ist, dass es fehlen konnte und du suchen musstest.
-fricky- schrieb:
Nicht wirklich schrieb:
Und Nein! Smartpointer verursachen sicher nicht schwerwiegendere Probleme.
aber vor den wirklichen problemen mit malloc/free, nämlich dass man über den zugewiesenen bereich hinaus zugreifen kann, oder dass manche auch ganz gern vergessen, den rückgabewert von malloc() auf 0 zu prüfen, schützt einen auch kein 'smart pointer'.
Und Crysis kann man damit auch nicht spielen.
-
Shade Of Mine schrieb:
Nicht wirklich schrieb:
So ist das so??? Wenn OO in C kein Problem wäre, erzähl mir doch mal wie man einen Smartpointer implementiert, wie man in C vererben kann oder man die Daten vernünftig kapselt.
Smartpointer gibt es in der OOP Definition nicht. Es ist ein Idiom um RAII zu benutzen (ein anderes Idiom).
Dir fehlt jede Grundlage um hier vernünftig zu diskutieren.
Kapselung, siehe FILE*
Vererbung hat nichts mit OOP zu tungenau das meine ich mit Java OOP.
Okay, das ist einfach albern! Vererbung hat nichts mit OOP zu tun? Das ist einer der zentralen Aspekte der Objektorientierung. Siehe: http://de.wikipedia.org/wiki/Objektorientierung#Vererbung
-
camper schrieb:
-fricky- schrieb:
Nicht wirklich schrieb:
...und anscheinend hat er auch nicht viel programmier erfahrung, sonst wüsste er wie schwer solche fehler zu finden sind.
mag sein, aber bisher habe ich noch jedes fehlende free() durch scharfes hingucken gefunden.
Entscheidend ist, dass es fehlen konnte und du suchen musstest.
Sehr richtig und genau da setzen nunmal die Smart Pointer an.
-fricky- schrieb:
Nicht wirklich schrieb:
Und Nein! Smartpointer verursachen sicher nicht schwerwiegendere Probleme.
aber vor den wirklichen problemen mit malloc/free, nämlich dass man über den zugewiesenen bereich hinaus zugreifen kann, oder dass manche auch ganz gern vergessen, den rückgabewert von malloc() auf 0 zu prüfen, schützt einen auch kein 'smart pointer'.
Und Crysis kann man damit auch nicht spielen.[/quote][/quote]
Eben. Es hat nichts mit dem RAII-Konzept zu tun ob du über irgendwas hinausschreiben kannst. Außerdem wird bei C++ wenn new keinen Speicher erfolgreich anfordern konnte, eine entsprechende Exception geworfen. Dabei bin ich mir aber nicht ganz sicher und hat wie gesagt nichts mit dem Thema zu tun
-
camper schrieb:
-fricky- schrieb:
Nicht wirklich schrieb:
...und anscheinend hat er auch nicht viel programmier erfahrung, sonst wüsste er wie schwer solche fehler zu finden sind.
mag sein, aber bisher habe ich noch jedes fehlende free() durch scharfes hingucken gefunden.
Entscheidend ist, dass es fehlen konnte und du suchen musstest.
aber ich denke, dass ein fehler aufgrund falscher anwendung von 'smart-pointern' viel schwerer zu finden ist. das sind dann fehler von der kategorie: 'sieht alles richtig aus, funzt aber nicht'.
-
Nicht wirklich schrieb:
Okay, das ist einfach albern! Vererbung hat nichts mit OOP zu tun? Das ist einer der zentralen Aspekte der Objektorientierung.
shady hat recht. vererbung ist keine bedingung für OO. nur nützliches beiwerk.
-
-fricky- schrieb:
[...]aber ich denke[...]
Denke nicht. Schau es Dir lieber mal genau an.
Ohne Vererbung keine OOP. Man kann bestenfalls objektbasiert programmieren. Das ist ein kleiner aber feiner Unterschied, der dem guten Shade aber leider nicht so recht einleuchten möchte.
-
Tachyon schrieb:
-fricky- schrieb:
[...]aber ich denke[...]
Denke nicht.
So weit würde ich nicht gehen. Das Problem in diesem Fall ist wohl eher, dass es sich nur um "Eine Redewendung, die zu hassen wäre" handelt und eben nicht um eine der Wahrheit entsprechende Tatsachenbehauptung.
-
poasting in an oop-with-c thread
edit: kann man dafür nicht ein extra forum anlegen? an diskussionstoff soll's nicht mangeln
-
hier noch 'ne meinung zu 'smart pointers': http://yosefk.com/c++fqa/heap.html#fqa-16.22
das deckt sich ungefähr mit meiner meinung.
-
Smartpointer in C++ sind ein nützliches Idiom. Aber haben an und für sich nun einmal nichts mit OOP zu tun!
Und in C ist es natürlich kein Problem alle möglichen OO Features nachzubauen. Objective-C ist zB nur ein Preprozessor für C und da geht es eher darum, die Syntax angenehmer zu machen, als fehlende Features einzubauen. Am Ende wird nämlich alles zu MOP Anweisungen, die _in_ reinem C sind runter kompiliert (wenn ich es richtig verstanden habe).
Ein weiteres Beispiel für OO in C ist GTK+ und die GLIB (http://www.lore.ua.ac.be/Publications/pdf/Hendrickx2004.pdf).
-
-fricky- schrieb:
hier noch 'ne meinung zu 'smart pointers': http://yosefk.com/c++fqa/heap.html#fqa-16.22
das deckt sich ungefähr mit meiner meinung.
Okay das ist schön
Aber eine Frage bleibt doch bist du jetzt eigentlich C, C++ oder Java/C# Programmierer/Nutzer ?
-
So nun nochmal zu deinem Link.
Die Nachteile beziehen sich auf eigens geschriebene Smart pointer Klassen und welche Fallstricke Selbige aufweisen. Nur trifft dies auf die bereits entwickelten Smart pointer nicht mehr zu. Damit sind hauptsächlich die von Boost gemeint. Sie verhalten sich wie normale Zeiger und man hat immer die Möglichkeit an den rohen Zeiger ranzukommen wenn es sein muss(kompatibilität zu anderen Libs).
-
yet another 'is C OPP' Thread.... das wird langsam langweilig, haben wir nicht schon genug solche Threads hier im Forum?
* http://www.c-plusplus.net/forum/viewtopic-var-t-is-217813-and-highlight-is-oop.html
* http://www.c-plusplus.net/forum/viewtopic-var-t-is-209590-and-highlight-is-oop.html
* http://www.c-plusplus.net/forum/viewtopic-var-t-is-187908-and-highlight-is-oop.html
* usw, mind. 40 Treffer gefunden@nicht wirklich:
Ich verstehe nicht, wieso immer manche Leute kommen, sich die Finger in den Ohren stecken und laut schreien 'lalalal, C ist nicht OOP egal wie viele gute Argumente ihr habt, lalala'. Guter BeweisHier und in den anderen Thraeds wirst du Beispiele für OOP in C finden, GTK+ ist das Paradebeispiel schlecht hin, sogar mit (für dich so hochgelobte und "notwendige" Bedingung) Vererbung von Klassen. Ich hab schon mit GTK bzw. Glib programmiert und weiß, dass es geht. Klassen zu schreiben und Vererbung zu schreiben ist nicht einfach und man kann mehr Fehler machen, als einem lieb ist, aber es ist nicht unmöglich. Leider hat C diesen syntaktischen Zucker wie C++ nicht, aber das heißt noch lange nicht, dass man in C keine OOP-Konzepte implementieren kann.
Nicht wirklich schrieb:
-fricky- schrieb:
hier noch 'ne meinung zu 'smart pointers': http://yosefk.com/c++fqa/heap.html#fqa-16.22
das deckt sich ungefähr mit meiner meinung.
Aber eine Frage bleibt doch bist du jetzt eigentlich C, C++ oder Java/C# Programmierer/Nutzer ?
sollte eigentlich klar sein, oder?
-
Nicht wirklich schrieb:
-fricky- schrieb:
hier noch 'ne meinung zu 'smart pointers': http://yosefk.com/c++fqa/heap.html#fqa-16.22
das deckt sich ungefähr mit meiner meinung.
Okay das ist schön
Aber eine Frage bleibt doch bist du jetzt eigentlich C, C++ oder Java/C# Programmierer/Nutzer ?Von dem was ich weiß: C im embedded bereich; und Java bei bedarf aufm desktop
-
Tachyon schrieb:
-fricky- schrieb:
[...]aber ich denke[...]
Denke nicht. Schau es Dir lieber mal genau an.
Ohne Vererbung keine OOP. Man kann bestenfalls objektbasiert programmieren. Das ist ein kleiner aber feiner Unterschied, der dem guten Shade aber leider nicht so recht einleuchten möchte.
Ach faengt das wieder an.
Dabei waere ich auch ueber Buchtippt fuer OOP in C dankbar.