OOP mit ANSI C
-
Hallo,
ist die OOP auch mit C problemlos möglich ?Wenn ja, wo kann ich dann Literatur dazu finden(Elektronische aber auch in Form eines Buches :P)?Mfg MU
-
-
Matrix User schrieb:
Hallo,
ist die OOP auch mit C problemlos möglich ?Wenn ja, wo kann ich dann Literatur dazu finden(Elektronische aber auch in Form eines Buches :P)?Mfg MU
Problemlos, nö. C unterstützt einfach keine OO Konzepte da die Sprache nie für den Gebrauch von OO konzipiert wurde. Du kannst aber bis zu einem gewissen Grad OO nachbauen. Ein hübsches Buch hierfür ist http://www.cs.rit.edu/~ats/books/ooc.pdf. Über C lernst du auf jedenfall eine Menge und das ein oder andere kann man sich auch abschauen. Wenn du aber längerfristig OO Programmieren möchtest solltest du vielleicht eine Sprache in Betracht ziehen die auch mit einem Auge auf OO konzipiert wurde.
-
Hi!
Ich möcht ja nicht meckern, aber der von dir gepostete Linkt ist ein DeadLink... Zumindest kommt bei mir ein "Not Found"
mfg bauerb
-
bauerb schrieb:
Hi!
Ich möcht ja nicht meckern, aber der von dir gepostete Linkt ist ein DeadLink... Zumindest kommt bei mir ein "Not Found"
mfg bauerb
Hinter dem *.pdf ist ein Punkt, einfach entfernen oder http://www.cs.rit.edu/~ats/books/ooc.pdf
-
TheTester schrieb:
Problemlos, nö. C unterstützt einfach keine OO Konzepte da die Sprache nie für den Gebrauch von OO konzipiert wurde. Du kannst aber bis zu einem gewissen Grad OO nachbauen.
man kann zu einem gewissen Grad Java nachbauen.
OOP selbst ist kein Problem in C.Aber ich weiss OOP == Java.
Hatten wir schon oft genugDie C Standard Library ist zu einem grossen Teil objekt orientiert, aber es ist nicht Java OOP... Deshalb zählt es nicht. Genauso wie zB die WinAPI.
-
Shade Of Mine schrieb:
TheTester schrieb:
Problemlos, nö. C unterstützt einfach keine OO Konzepte da die Sprache nie für den Gebrauch von OO konzipiert wurde. Du kannst aber bis zu einem gewissen Grad OO nachbauen.
man kann zu einem gewissen Grad Java nachbauen.
OOP selbst ist kein Problem in C.Aber ich weiss OOP == Java.
Hatten wir schon oft genugDie C Standard Library ist zu einem grossen Teil objekt orientiert, aber es ist nicht Java OOP... Deshalb zählt es nicht. Genauso wie zB die WinAPI.
Es geht mir nicht um Java, sondern den Fakt das C eben nicht mit Hinblick auf eine OO Verwendung konzipiert wurde. C nimmt mir nichts ab, für mich ist das alles andere als problemlos. Statische-, dynamische Polymorphie, Vererbung, Datenkapselung, Generics das kann man zwar alles irgendwie nachbauen aber dem steht ein ziemlicher Aufwand gegenüber sobald es richtig komplex wird. Von der Fehleranfälligkeit wollen wir da gar nicht reden, sowas muss gut durchdacht und geplant werden die Umsetzung ist eben nicht so einfach.
-
Shade Of Mine schrieb:
TheTester schrieb:
Problemlos, nö. C unterstützt einfach keine OO Konzepte da die Sprache nie für den Gebrauch von OO konzipiert wurde. Du kannst aber bis zu einem gewissen Grad OO nachbauen.
man kann zu einem gewissen Grad Java nachbauen.
OOP selbst ist kein Problem in C.Aber ich weiss OOP == Java.
Hatten wir schon oft genugDie C Standard Library ist zu einem grossen Teil objekt orientiert, aber es ist nicht Java OOP... Deshalb zählt es nicht. Genauso wie zB die WinAPI.
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.
-
Nicht wirklich schrieb:
erzähl mir doch mal wie man [in C] einen Smartpointer implementiert...
was soll das sein? wofür ist das gut?
-
-fricky- schrieb:
Nicht wirklich schrieb:
erzähl mir doch mal wie man [in C] einen Smartpointer implementiert...
was soll das sein? wofür ist das gut?
Smartpointer sind wohl eine der großen Erleichterungen für den Programmierer, die es unter andrem in C++ gibt und nur durch Objektorientierung möglich ist. Sie sorgen dafür, dass dynamisch allokierter Speicher automatisch freigegeben werden wenn sie aus dem Scope fallen.
Ansonsten: http://www.c-plusplus.net/forum/viewtopic-var-t-is-134971.html
-
habs gerade gelesen: http://en.wikipedia.org/wiki/Smart_pointer
ist also sowas wie 'ne 'garbage collection für arme' und leute, die free() gerne mal vergessen. naja,...
-
Tja, bei den vielen Sicherheitslücken und sonstigen Problemen, von denen man tagtäglich lesen kann, vergessen das ziemlich viele Leute. Aber die haben natürlich alle keine Ahnung...
-
Hab' ich heute schonmal geschrieben: Bei Funktionen mit multiple exits fängt es an, problematisch zu werden, bei jedem möglichen Ausgang an alle frees zu denken. Lässt sich aber durch diverse Techniken noch erreichen. Eklig wird's bei Exceptions, bei denen man das throw nicht zwangsläufig sieht, weil es in einer anderen Funktion versteckt sein kann, die man aufruft.
-
Tachyon schrieb:
Tja, bei den vielen Sicherheitslücken und sonstigen Problemen, von denen man tagtäglich lesen kann, vergessen das ziemlich viele Leute. Aber die haben natürlich alle keine Ahnung...
ein fehlendes 'free' ist doch meistens schnell gefunden. falsche anwendung solcher 'smart pointers' produziert bestimmt schwieriger zu lokalisierende bugs. ich hab nichts gegen echte garbage collection, aber sowas, weder halbes noch ganzes, wie diese 'smart pointers', ist doch irgendwie mist.
btw, was ich besser finden würde, wäre eine funktion, die den ganzen heap resettet, also ein manueller GC.
-
Diese schwieriger zu findenden Bugs können IMHO eigentlich nur aus Ringreferenzen resultieren, und die kann man mit echten GC-Sprachen auch erreichen.
-
LordJaxom schrieb:
Diese schwieriger zu findenden Bugs können IMHO eigentlich nur aus Ringreferenzen resultieren
oder wenn man den falschen typ wählt. in dem wiki-artikel steht:
Several types of smart pointers exist. Some work with reference counting, others assigning ownership of the object to a single pointer
die verhalten sich alle anders. um ein ziemlich simples problem, nämlich vergessene 'free()' zu beseitigen, halst man sich einen haufen anderer, potenzieller probleme auf, die viel schwieriger zu entdecken sind. das kann's doch irgendwie nicht sein.
LordJaxom schrieb:
und die kann man mit echten GC-Sprachen auch erreichen.
aber nur sehr schwer bis garnicht. moderne GCs können rausfinden, wenn zwei oder mehr objekte nur noch sich selbst referenzieren.
-
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.