OOP mit ANSI C



  • 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 tun

    genau das meine ich mit Java OOP.


  • Mod

    -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 tun

    genau 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.


  • Mod

    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 Beweis 👍

    Hier 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.



  • Also mal ganz pragmatisch betrachtet - am Ende steht ein Binärcode, den irgendein Prozessor abrattelt, egal, ob jemand Lochkarten gestanzt hat oder ein in Java geschriebener Basic- Interpreter ein Script in einer JAR- Box abarbeitet. Das sieht die Maschine ja nicht.

    OOP ist eine Abstraktionsebene, die auf Klassen, Instanzen, Polymorphie, Datenkapselung usw. beruht und primär nicht zwischen Smart- oder Doofpointern unterscheidet, da führt die Diskussion echt vorbei. 👎

    Die Eingangsfrage war, ob C OOP kann, das ist zu bejahen, wenngleich eigentlich dafür gar nicht konzipiert. Einen handhabbaren Beweis dafür liefert Lightweight C++ http://freshmeat.net/projects/lwc , das C quasi als P-Code für C++ verwendet. Wenn man einige Dinge beachtet, kann man bedienungssicher nachvollziehen, wie man in C OOP nachbasteln kann. Da hat sich mittlerweile übrigens eine kleine Community gebildet mit Projekten drumrum. 😃

    Natürlich kann man sich auch seine eigene Lib schnitzen und ein bißchen "tun wie OOP", kommt drauf an, wie hoch die eigenen Ansprüche samt Sicherheitsbewußtsein sind 🙄



  • supertux schrieb:

    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 Beweis 👍

    Hier 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? 😉

    Und welche guten Argumente wären das? Ich meine es ist doch wohl klar das C von Haus aus keine Möglichkeiten mitbringt Objektorientiert zu programmieren. Das einzige was möglich ist, wäre Objektbasierte programmierung wo man seine Structs hat und entsprechende freie Funktionen die dann damit arbeiten. So aber es gibt keine Kapselung oder Verebung. Natürlich kann man sich etwas Ähnliches zusammenbasteln was aber nur zu einem kleinen Teil funktioniert und sehr gefährlich sein kann. Bei den wirklich OO Sprachen hast du dieses Problem nicht, da sie eben alle Funktionalitäten die für die OOP nötig sind mitbringen. Da C dies aber in keiner Weise tut, ist es für mich auf keinen Fall OO. Ich denke letztendlich bringt die Diskussion die wir hier haben und schon öfters hatten nichts, da sich eh alles im Kreis dreht und wir uns nie auf etwas einigen können.



  • Nicht wirklich schrieb:

    Und welche guten Argumente wären das? Ich meine es ist doch wohl klar das C von Haus aus keine Möglichkeiten mitbringt Objektorientiert zu programmieren. Das einzige was möglich ist, wäre Objektbasierte programmierung wo man seine Structs hat und entsprechende freie Funktionen die dann damit arbeiten. So aber es gibt keine Kapselung oder Verebung. Natürlich kann man sich etwas Ähnliches zusammenbasteln was aber nur zu einem kleinen Teil funktioniert und sehr gefährlich sein kann. Bei den wirklich OO Sprachen hast du dieses Problem nicht, da sie eben alle Funktionalitäten die für die OOP nötig sind mitbringen. Da C dies aber in keiner Weise tut, ist es für mich auf keinen Fall OO. Ich denke letztendlich bringt die Diskussion die wir hier haben und schon öfters hatten nichts, da sich eh alles im Kreis dreht und wir uns nie auf etwas einigen können.

    Guckst Du hier: http://students.ceid.upatras.gr/~sxanth/lwc/Examples.html


Anmelden zum Antworten