Ab wann setzt ihr eigene Klassen ein?
-
qwerty123 schrieb:
Tut mal nicht alle so, als wenn man ohne Klassen und Design-Pattern keine Programme mehr schreiben kann.
ja, aber dann in einer anderen Sprache. C++ ist dafür designed, mit Klassen benutzt zu werden. Haskell nicht, C nicht. Dewegen benutze Haskell und C wenn du keine Klassen benutzen willst. Dann kannste auch Programme ohne Klassen schreiben.
-
otze schrieb:
C++ ist dafür designed, mit Klassen benutzt zu werden.
Was genau hast du am Wort "multi-paradigm" nicht verstanden?
-
multi-paradigm schrieb:
otze schrieb:
C++ ist dafür designed, mit Klassen benutzt zu werden.
Was genau hast du am Wort "multi-paradigm" nicht verstanden?
Rgistrier dich, dann reden wir weiter.
//edit naja, will ich mal nicht so sein. auch wenn du nur unreg troll bist.
multi-paradigm heißt nicht: "du kannst rein funktional programmieren" sondern "Teile deines Programmes können funktional sein". Es heißt nicht: "Du brauchst niemals objektorientiert programmieren". Exceptions und Speicherwaltung zusammen ergeben halt den Fall, dass du RAII verwenden _musst_. Da hast du keine Wahlfreiheit des Paradigmas mehr, weil die Sprache dich dazu zwingt, den destructor zum aufräumen zu verwenden.
-
qweasdyxc schrieb:
@Klassenmachen
Beschäftige Dich intensiv damit, erfahre die Vorteile durch eigene Erfahrungen oder lass es einfach und bleib bei Deinem C-Gefrickel. Die ganze Diskussion ist nutzlos.Genau das.
@Klassenmachen: Entweder du liest dir nochmals genau die Argumente dieses Threads durch und versuchst sie gründlich zu verstehen (alleine Kapselung, RAII und weniger Code rechtfertigen das Feature). Und benutze die Sprache C++ eine Weile und bilde dir dann eine Meinung -- vieles erscheint von aussen anders. Oder du lehnst Klassen kategorisch ab, aber dann frage ich mich, wozu du diesen Thread erstellt hast.
Und schau die Antworten als gutgemeinte Ratschläge und nicht Bekehrungen oder Anfeindungen an. Es kann uns eigentlich egal sein, ob du Klassen benutzt oder nicht, d.h. wir müssen dich nicht davon überzeugen. Wir liefern gerne Argumente, aber wenn du ihnen nicht glaubst, ohne sie genauer angeschaut zu haben, dann kann man wohl nichts machen. Aber ewig weiterzudiskutieren bringt nichts; die wichtigen Argumente wurden alle genannt.
-
otze schrieb:
qwerty123 schrieb:
Tut mal nicht alle so, als wenn man ohne Klassen und Design-Pattern keine Programme mehr schreiben kann.
ja, aber dann in einer anderen Sprache. C++ ist dafür designed, mit Klassen benutzt zu werden. Haskell nicht, C nicht. Dewegen benutze Haskell und C wenn du keine Klassen benutzen willst. Dann kannste auch Programme ohne Klassen schreiben.
Was für ein Unsinn, C++ ist eben gerade deswegen so vielfältig, weil man eben es so einsetzen kann wie man möchte. Stoustrup meint sogar C mit Klassen darum kann man machen. Oder auch ganz ohne Klassen, nur mit STL und Namensräumen.
Wenn jemand nicht für jeden Scheiß eine Klasse bauen muss, dann ist das doch völlig ok. Und ja ich setze auch goto ein wenn es Sinn macht und habe auch schon C Code in Klassen gepackt und und und
Leider fehlt mir noch ein Begriff für die Entwickler, die nur noch in Klassen, OOP und DesignPattern denken können. Ein SourceCode mit viel generalisiertem Zeug ist genauso übel wie eine Datenbank in der 5.Normalform, wo man keinen Zusammenhang mehr erkennen kann.
Jeder sollte C++ so einsetzen, wie ihm am besten passt, schließlich ist ein eine Multi-Paradigmen-Sprache und so wird sie auch eingesetzt. Wenn einige Bastelfreunde hier C++ nur in die eine Richtung einsetzen, so müssen doch nicht alle Entwickler so engstirnig sein.
-
MultiKulti schrieb:
Oder auch ganz ohne Klassen, nur mit STL und Namensräumen.
Ah, und die STL verwendet keine Klassen?
MultiKulti schrieb:
Jeder sollte C++ so einsetzen, wie ihm am besten passt, schließlich ist ein eine Multi-Paradigmen-Sprache und so wird sie auch eingesetzt. Wenn einige Bastelfreunde hier C++ nur in die eine Richtung einsetzen, so müssen doch nicht alle Entwickler so engstirnig sein.
Nur weil es möglich ist, auf Klassen zu verzichten, ist das noch lange nicht sinnvoll. Ich kenne kein einziges grösseres C++-Projekt, das keine Klassen verwendet. Vielleicht kommt es ohne Vererbung und Laufzeitpolymorphie aus, aber nicht Klassen an sich.
Nur so nebenbei: Generische und funktionale Programmierparadigmen bauen in C++ ebenso auf Klassen auf wie objektorientierte. Im ersten Fall hast du Klassentemplates, im zweiten Funktoren.
-
Wenn jemand nicht für jeden Scheiß eine Klasse bauen muss, dann ist das doch völlig ok
Es geht aber nicht um jeden Scheiss.
Oder auch ganz ohne Klassen, nur mit STL und Namensräumen.
Und schon haben wir Klassen.
Leider fehlt mir noch ein Begriff für die Entwickler, die nur noch in Klassen, OOP und DesignPattern denken können.
Ich kenne viele Begriffe fuer Leute wie dich. Klassen gibt es in vielen Programmiersprachen, sie dient als Beschreibung von Objekten mit gemeinsamer Struktur. In der Mathematik nennt sich das Menge. Jetzt die Preisfrage: Stell dir die Mathematik ohne Mengen vor. Fuer mich undenkbar. In Haskell hast du instance of typeclass, in Scheme/Lisp sinds Closure, in C struct + function (explizites this quasi), ...
Jeder sollte C++ so einsetzen, wie ihm am besten passt
Das ist zu subjektiv. Die Loesung sollte dem Problem gerecht werden und nicht dem Entwickler. Meisst passen Klassen recht gut.
-
MultiKulti schrieb:
Wenn jemand nicht für jeden Scheiß eine Klasse bauen muss, dann ist das doch völlig ok. Und ja ich setze auch goto ein wenn es Sinn macht und habe auch schon C Code in Klassen gepackt und und und
Dazu müsste man jetzt Beispiele sehen, damit man weiss wo für dich die Grenze ist.
Ich kenne viele Leute die ähnlich argumentieren, deren Code man nur mehr als totale Katastrophe ansehen kann.
Andere wieder haben etwas was ich als guten Mittelweg bezeichnen würde gefunden.Die meisten Programmierer die ich kenne schreiben aber zu wenig eigene Klassen und zu wenig eigene Funktionen.
Kommt mir manchmal so vor als ob die drauf warten dass man ihnen sagt sie sollen irgendwo ne Unterfunktion verwenden, oder ne eigene Klasse schreiben. So nach dem Motto "im Auftrag steht nix davon drin dass ich hier eigene Klassen schreiben muss". WTF?
Oder als ob sie zu faul wären sich nen Namen für die neue Klasse zu überlegen, die zwei neuen Files anzulegen und die ganzen anderen schrecklich aufwendigen Tätigkeiten die dazugehören wenn man neue Klassen definiert.
"Ich hab ja eh schon Klasse X, das pack ich einfach da dazu."
Oder auch die "das ist praktische" Leute. "Das wäre doch viel praktischer wenn Klasse X auch gleich noch Y mit macht." OMFG.
Ich muss weinen wenn ich nur dran denke.Bzw. mir kommt manchmal auch vor dass viele Programmierer das als "ah, OK, kann man auch machen wenn man will" sehen (das = eigene Klassen und Funktionen definieren).
Die gehen her und klicken im Studio was zusammen, und füllen dann die vom Studio erzeugten Funktionen aus. Als ob sie ein Formular ausfüllen. Ich versteh's einfach nicht----
Ich gebe zu, das ist vielleicht etwas überspitzt formuliert/übertrieben. Aber nicht sehr, und das ist das traurige dabei.
-
Es würde mich nicht wundern, wenn die ganzen unterschiedlich-namigen, unregistrierten Kritikerbeiträge in Tat und Wahrheit von ein und der selben Person kommen, das Geschriebene ist ja immer gleich selbstwidersprüchlich, stur und unbegründet...
-
Watchdog1337 schrieb:
Es würde mich nicht wundern, wenn die ganzen unterschiedlich-namigen, unregistrierten Kritikerbeiträge in Tat und Wahrheit von ein und der selben Person kommen, das Geschriebene ist ja immer gleich selbstwidersprüchlich, stur und unbegründet...
Alles sdf.
-
hustbaer schrieb:
Die meisten Programmierer die ich kenne schreiben aber zu wenig eigene Klassen und zu wenig eigene Funktionen.
Kommt mir manchmal so vor als ob die drauf warten dass man ihnen sagt sie sollen irgendwo ne Unterfunktion verwenden, oder ne eigene Klasse schreiben. So nach dem Motto "im Auftrag steht nix davon drin dass ich hier eigene Klassen schreiben muss". WTF?Ich kann das leider bestätigen. Verallgemeinerung ist nicht so unbedingt jedermanns Stärke.
Auch einfach Funktionalität in eine Klasse packen, weil es praktisch ist, deutet schon auf eine falsche Denkweise hin. Man sollte beim Entwickeln die Problemstellung analysieren und in Funktionalitäten aufteilen. Diese Funktionalitäten werden dann häufig in Klassen implementiert. Dabei hat eine Klasse eine definierte Aufgabe und nicht zwei oder mehr.
Um auf die ursprüngliche Frage einzugehen könnte ich mir vorstellen, dass man ein Spielfeld von Tetris als Objekt modelliert. Auch ein Spielstein definiert man als Objekt.
Ich verstehe aber, dass der Übergang von prozeduraler zur objektorientierten Denkweise nicht so von heute auf morgen geht. Ich hatte damals, als ich von C nach C++ umgestiegen bin, auch eine Zeit gebraucht, wo ich mir gerade die Frage gestellt hatte, wozu man Klassen braucht. Jetzt sind sie aber nicht umständlich sondern im Gegenteil ein äußerst hilfreiches Mittel, um Programme sauber zu strukturieren. Und dabei ergibt sich das, dass ich bei praktisch jedem Programm, welches von "hello world" hinaus geht, irgendeine Klasse habe. Und zwar weil es bequem ist und eben nicht umständlich.
-
Nexus schrieb:
MultiKulti schrieb:
Oder auch ganz ohne Klassen, nur mit STL und Namensräumen.
Ah, und die STL verwendet keine Klassen?
Erst lesen dann schreiben, es ging nicht darum fremde Klassen nicht zu nutzen, sondern darum keine eigenen Klassen zu schreiben. Steht sogar in der Überschrift.
Nexus schrieb:
MultiKulti schrieb:
Jeder sollte C++ so einsetzen, wie ihm am besten passt, schließlich ist ein eine Multi-Paradigmen-Sprache und so wird sie auch eingesetzt. Wenn einige Bastelfreunde hier C++ nur in die eine Richtung einsetzen, so müssen doch nicht alle Entwickler so engstirnig sein.
Nur weil es möglich ist, auf Klassen zu verzichten, ist das noch lange nicht sinnvoll. Ich kenne kein einziges grösseres C++-Projekt, das keine Klassen verwendet.
Der Threadhersteller schreibt eigene Ein-Mann-Projekte, das sind also nie größere Sachen.
-
tntnet schrieb:
Ich verstehe aber, dass der Übergang von prozeduraler zur objektorientierten Denkweise nicht so von heute auf morgen geht. Ich hatte damals, als ich von C nach C++ umgestiegen bin, auch eine Zeit gebraucht, wo ich mir gerade die Frage gestellt hatte, wozu man Klassen braucht.
Wenn ich nicht erkenne, wozu ich eine Sache brauche, dann setze ich sie auch nicht ein. Ich fange doch nicht an, mir Anwendungsszenarien auszudenken, nur um jetzt meine Projekte mit Klassen zu programmieren, nur weil es "in" ist so zu entwickeln. Das kommt mir hier so vor, wie im Shoppingkanal wo man einen unbedingt davon überzeugen will, dass mein Messer auch Kotflügen schneiden muss.
tntnet schrieb:
Jetzt sind sie aber nicht umständlich sondern im Gegenteil ein äußerst hilfreiches Mittel, um Programme sauber zu strukturieren. Und dabei ergibt sich das, dass ich bei praktisch jedem Programm, welches von "hello world" hinaus geht, irgendeine Klasse habe. Und zwar weil es bequem ist und eben nicht umständlich.
Ich sehe in einer Klasse immer mehr Code als eigentlich nötig, und viele Klassen die ich hier sehe, mögen sehr effektiv sein, aber der Code ließt sich schrecklich. Allein der ganze Quatsch mit Operantenüberladungen und die ganzen Konstruktoren etc. Was ich mir da alles für unnötige Gedanken machen muss.
Also kann man hier zusammenfassen, dass Leute eigene Klassen schreiben, um ihre Programme anders(besser schreiben ich mal nicht) zu strukturieren und höher zu abstrahieren(weg von der direkten Lösung). Den ganzen Kram mit RAII lasse ich mal weg, da ich solche Probleme, genau wie Speicherlecks, nie lange im Programm habe. Das sind die Fehler, die man am schnellsten und als erstes findet.
-
Hoer' einfach auf zu, erfahrenden Entwicklern zu sagen, dass du es als Bastler besser weist. Es spielt keine Rolle, wie du die Welt siehst, wenn du blind bist. Hoer' einfach auf zu trollen.
-
Klassenmachen schrieb:
tntnet schrieb:
Ich verstehe aber, dass der Übergang von prozeduraler zur objektorientierten Denkweise nicht so von heute auf morgen geht. Ich hatte damals, als ich von C nach C++ umgestiegen bin, auch eine Zeit gebraucht, wo ich mir gerade die Frage gestellt hatte, wozu man Klassen braucht.
Wenn ich nicht erkenne, wozu ich eine Sache brauche, dann setze ich sie auch nicht ein. Ich fange doch nicht an, mir Anwendungsszenarien auszudenken, nur um jetzt meine Projekte mit Klassen zu programmieren, nur weil es "in" ist so zu entwickeln. Das kommt mir hier so vor, wie im Shoppingkanal wo man einen unbedingt davon überzeugen will, dass mein Messer auch Kotflügen schneiden muss.
tntnet schrieb:
Jetzt sind sie aber nicht umständlich sondern im Gegenteil ein äußerst hilfreiches Mittel, um Programme sauber zu strukturieren. Und dabei ergibt sich das, dass ich bei praktisch jedem Programm, welches von "hello world" hinaus geht, irgendeine Klasse habe. Und zwar weil es bequem ist und eben nicht umständlich.
Ich sehe in einer Klasse immer mehr Code als eigentlich nötig, und viele Klassen die ich hier sehe, mögen sehr effektiv sein, aber der Code ließt sich schrecklich. Allein der ganze Quatsch mit Operantenüberladungen und die ganzen Konstruktoren etc. Was ich mir da alles für unnötige Gedanken machen muss.
Also kann man hier zusammenfassen, dass Leute eigene Klassen schreiben, um ihre Programme anders(besser schreiben ich mal nicht) zu strukturieren und höher zu abstrahieren(weg von der direkten Lösung). Den ganzen Kram mit RAII lasse ich mal weg, da ich solche Probleme, genau wie Speicherlecks, nie lange im Programm habe. Das sind die Fehler, die man am schnellsten und als erstes findet.
mal zuerst safequoten.
der code liest sich vielleicht schrecklich weil du keine ahnung hast wie man ihn liest, da du nicht mit so einer art von code gewöhnt bist. für c++-entwickler liest sich c-code schrecklich, ist der selbe effekt nur auf die andere seite. kann man daraus jetzt ein argument für oder gegen eine sprache machen? natürlich nicht.
bei operatorüberladung und bei konstruktoren muss man sich eigentlich weniger gedanken machen als beim äquivalent in c. ein objekt in c++ ist immer konstruiert. und die operatorüberladung schafft eine einheitliche syntax für die operation von allen objekten. also kann man - wenn man sich in einer neuen c++-bibliothek einliest - mit hoher wahrscheinlichkeit zwei dinge miteinander addieren wenn man "
a + b
" schreibt. beim äquivalent in c muss man die entsprechende funktion, die das übernimmt, erst aus der bibliothek raussuchen und dann noch darauf achten wie die elemente angesprochen werden (z.b.glMultMatrix
).thema fehlerbehandlung:
ist es also besser in c nach jeder anweisung einer bibliothek mit einer entsprechenden funktion zu prüfen, ob alles gut verlief (z.b. in winapi mitGetLastError()
)? oder ist es besser dass alles einfach automatisch von RAII und einem ein wenig durchdachten ablauf übernommen wird?ps: dass du "höher zu abstrahieren" mit "weg von der direkten Lösung" gleichsetzt sagt schonmal direkt aus, wie wenig ahnung du hast.
-
da ist ja der Freitag-Nachmittag-Quotentroll wieder...
-
Klassenmachen schrieb:
Wenn ich nicht erkenne, wozu ich eine Sache brauche, dann setze ich sie auch nicht ein. Ich fange doch nicht an, mir Anwendungsszenarien auszudenken, nur um jetzt meine Projekte mit Klassen zu programmieren, nur weil es "in" ist so zu entwickeln.
OOP ist nicht "in", es ist das gängigste und bewährteste Paradigma um Komplexität in Software in den Griff zu bekommen, seit langer Zeit. Du versperrst Dich einfach nur gegenüber einer anderen Denkweise, weil Du faul bist und arbeits- bzw. lernwillen aufbringen müsstest. Und insbesondere weil Du einsehen müsstest, dass Deine Vorgehens- und Denkweise ihre Grenzen hat.
Klassenmachen schrieb:
Ich sehe in einer Klasse immer mehr Code als eigentlich nötig, und viele Klassen die ich hier sehe, mögen sehr effektiv sein, aber der Code ließt sich schrecklich. Allein der ganze Quatsch mit Operantenüberladungen und die ganzen Konstruktoren etc. Was ich mir da alles für unnötige Gedanken machen muss.
Du bist auch nur Laie, von Beruf Handwerker und hast niemals eine Software aufgezogen die diese Bezeichnung auch verdient. Wenn es für Deine Zwecke ausreicht, sagt niemand etwas dagegen, wenn Du so weiter machst. Sobald Du aber die Arbeitsweise von uns allen in Frage stellst, was im übrigen hochgradig anmaßend und arrogant ist gegenüber Menschen vom Fach, musst Du mit Widerstand rechnen und bessere Argumente liefern.
Klassenmachen schrieb:
Also kann man hier zusammenfassen, dass Leute eigene Klassen schreiben, um ihre Programme anders(besser schreiben ich mal nicht) zu strukturieren und höher zu abstrahieren(weg von der direkten Lösung). Den ganzen Kram mit RAII lasse ich mal weg, da ich solche Probleme, genau wie Speicherlecks, nie lange im Programm habe. Das sind die Fehler, die man am schnellsten und als erstes findet.
Abstraktion ist das wesentliche und wichtigste Mittel der Informatik und Softwareentwicklung. Und nochmal: Du hast keine Probleme mit Speicherlecks weil Du Hobby-Programmierer bist und nur Miniprogramme schreibst.
Du kannst nun weitertrollen so lange Du willst. Hier versuchen Dir Leute die diesen Mist studiert und jahrelang in der Praxis angewandt haben begreiflich zu machen, dass es gegenüber Deiner Vorgensweise erhebliche Vorteile bietet, OOP einzusetzen. Der Weg zu sauberem, objektorientierten Code ist steinig, langwierig und von einigen fehlgeschlagenen Projekten gepflastert. Es zahlt sich aber irgendwann aus, sobald man es verstanden hat. Zum Verstehen gehört leider mehr dazu, als nur zu wissen wie man eine Klasse vererbt. Erfahrung ist es! Du siehst momentan nur Mehraufwand ohne Nutzen. Bei Deiner Engstirnigkeit würde ich auch nicht mit einer Besserung innerhalb der nächsten zwei bis drei Jahre rechnen.
-
Wenn ich soviel Zeit brauche um den Umgang mit Klassen zu lernen, kann ich die Zeit auch besser machen und einfach meine Programme weiter C-Like schreiben. Das ist einfach und hat sich bei mir bewährt.
Wie große Softwareprojekte funktionieren interessiert mich eigentlich nicht, da ich nie große Softwareprojekte machen werde. Ihr könnt mich auch als Handwerker diskreditieren bis euch euer Titel aus dem Arsch kommt, aber das ändert nix an der Sache, dass Klassen anscheinend nicht für jeden etwas Wertvolles bedeuten.
Ach ja, und wenn man gar nicht mehr weiter weiß, wird dann der berühmte Troll-Spruch in die Runde geworfen.
Also entweder bin ich dumm oder ein Troll, weil ich keinen Sinn für mich in eigenen Klassen sehe. Da hätte ich mir die Frage auch sparen können.
Danke an die, die ernsthaft versucht haben mir die Vorteile der Programmierung mit eigenen Klassen näher zu bringen.
-
Klassenmachen schrieb:
Danke an die, die ernsthaft versucht haben mir die Vorteile der Programmierung mit eigenen Klassen näher zu bringen.
Ist im Nachhinein etwas schade, dass wir dich nicht von den Vorteilen überzeugen konnten -- Features wie RAII sind simpel genug, um sie in ein paar Stunden perfekt zu verstehen und anwenden zu können, im Gegenzug dazu können sie dir tagelange Arbeit sparen. Ich würde nicht einfach behaupten, ich bräuchte sie nicht. Du kamst leider mit einer etwas voreingenommenen Einstellung hier hin, ich verstehe nicht ganz wieso du die Frage überhaupt gestellt hast.
Die Diskussion hier führt zu nichts mehr als gegenseitigen Anschuldigungen. Ich würde dir raten, die genannten Argumente nochmals in Ruhe anzuschauen und dann selbstständig eine endgültige Entscheidung zu treffen, ohne dich durch negative Posts beeinflussen zu lassen.
-
Kommt mir manchmal so vor als ob die drauf warten dass man ihnen sagt sie sollen irgendwo ne Unterfunktion verwenden, oder ne eigene Klasse schreiben. So nach dem Motto "im Auftrag steht nix davon drin dass ich hier eigene Klassen schreiben muss". WTF?
Das ist ein Scherz, oder? Das kann ich irgendwie nicht wirklich glauben.