Ab wann setzt ihr eigene Klassen ein?
-
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.
-
Klassenmachen schrieb:
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.
Du gehst auch lieber zu FUß als mit dem Auto zu fahren, weil es so lange dauert, einen Führerschein zu machen, oder?
-
Hallo Klassenmachen,
Klassenmachen schrieb:
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.
Du hast selbst geschrieben, dass Du Amateur bist, kannst es also nicht besser wissen.Kleine wahre(!) Story aus der Praxis:
Wir haben in unserem Projekt praktisch keine Speicherleaks mehr seit wir Smartpointer einsetzen (das sind kleine Klassen, die den Speicher wieder aufräumen - und das ist RAII in Reinkultur).
Den letzten Speicherleak hatten wir vor ca. 3,5 Jahren. Er befand sich in einem Stück Code, welches damals bereits ca. 8 Jahre alt war. Aufgetreten ist er nur deshalb weil sich ein Prozess des Anwenders (nicht der Software!) geändert hatte und damit die Frequenz, mit der dieses Code-Segment aufgerufen wurde, drastisch erhöht hatte. Der Fehler machte sich aber erst nach ca. 10h Programmlaufzeit bemerkbar, da jeweils nur wenige Byte allokiert wurden. Wir haben mehrere Wochen danach gesucht und ich schätzte nur die Kosten der Suche auf mehrere 1000€.
Soviel zum Thema "Fehler, die man am schnellsten und als erstes findet"Gruß
Werner
-
Klassenmachen schrieb:
Ihr könnt mich auch als Handwerker diskreditieren bis euch euer Titel aus dem Arsch kommt
Du wirst diskreditiert weil Du Dich in Deiner Anmaßung gegen das Wissen und die Erfahrung aller Informatiker und Softwareentwickler hier stellst und alles in den Dreck ziehst was wir als gute und sinnvolle Entwicklerpraxis und -erfahrung verinnerlicht haben. Was bildest Du Dir eigentlich ein wer Du bist oder was Du kannst Du hohle Nuss?
-
µ schrieb:
Was bildest Du Dir eigentlich ein wer Du bist oder was Du kannst Du hohle Nuss?
Komm mal wieder runter, kein Grund so aggressiv zu werden. Wenn er dich nervt, verlass doch den Thread. Keiner zwingt dich, ihn ernst zu nehmen oder ihn zu beleidigen.
-
Klassenmachen schrieb:
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.
Hmmm interessant, poste mal Code von dir, irgendwas wo du viel mit Ressourcen hantierst also Sockets, Dateien, Speicher, etc. Denn das sind eigentlich die Fehler die man so gut wie nie findet, weil sie das Programm nicht unmittelbar zum Absturz bringen.
-
Ich habe jetzt ehrlich gesagt hier keine Lust Code zu posten, daher müsst ihr mir einfach glauben, dass ich nie lange mit Ressourcen oder Speicherfehler zu kämpfen habe. Meine Programme sind ja auch klein und übersichtlich, deswegen ja auch meine Frage ob sich Klassen für mich lohnen würden.
Hier nochmal zu dem grottenschlechten Beispiel mit dem Führerschein. Auto fahren lerne ich in ein paar Wochen. So wie ich hier gelesen haben braucht man für C++ extrem lange. Die Zeit davor schreibt man wohl unheimlich schlechten Code. Warum soll ich mir das antun, für meine Miniprogramme?
Hier wurde auch groß getönt dass ich keine Ahnung habe und dass man bei großen Projekten praktisch ohne C++ gar nicht auskommt. Nun, da frage ich mich wie der Linux-Kernel oder Gimp so lange und gut überleben können. Auch alles nur hohle Nüsse, so wie ich hier sehr nett betitelt wurde?
Wie gesagt meine Fragen beziehen sich nur auf mich, denn was interessieren mich große Projekte? Ich bin nur ein kleiner Handwerker mit Hauptschulabschluss, ein Amateur, der hier die Götter um Rat fragt und die Antworten in Frage stellt. Das ist mein gutes Recht, da ich den Sinn für mich persönlich herausfiltern muss. Und erst wenn ich keine Zweifel mehr habe, bin ich überzeugt.
-
Klassenmachen schrieb:
Ab wann setzt ihr eigene Klassen ein?
8:37 Uhr
-
Klassenmachen schrieb:
Ich habe jetzt ehrlich gesagt hier keine Lust Code zu posten, daher müsst ihr mir einfach glauben, dass ich nie lange mit Ressourcen oder Speicherfehler zu kämpfen habe.
Dann bist du wohl einfach ein göttlicher Programmierer, denn die ganzen Generationen vor dir haben das nicht geschafft.
-
Es hat nie jemand ein kleines C-Programm geschrieben, was keine Speicher oder Ressourcenfehler hat? Jetzt bin ich allerdings überrascht.
Ja ist schon schwer wenn man eine Datei öffnet, ließt und dann wieder schließt. Da brauch man unbedingt Klassen, RAII und Exceptions, ohne das geht es gar nicht gut und ich habe automatisch mit Speicher- und Ressourcenfehlern zu kämpfen. Ach ja ich vergaß, was die Massen denkt muss richtig sein.
Sind das wirklich die Kernargumente für Klassen? Ich muss zugeben dass ich mir ein Lächeln nicht verkneifen kann. Es soll also niemand in der Lage sein ohne den ganzen genannten Kram kleine Programme ohne größere Fehler zu produzieren? Den Standpunkt wollt ihr nicht im ernst beibehalten?
Ich bin mal gespannt was jetzt von der "geistigen Elite" noch so kommt. Wie gesagt es geht hier immer um kleine Hobbyprogramme, für die die nicht richtig lesen können, aber vielleicht ein Diplom haben, ob nun zu recht oder unrecht.
Also bis auf ein, zwei Leute kam hier bis jetzt nur gedanklicher Durchfall, wie kann so etwas Geld damit verdienen?
-
Kilroy was here!
-
Also erstmal, das herumhacken von µ auf deinem Beruf war etwas fehl am Platz. Wenn deine Projekte unter 100 Zeilen haben und seeehr einfach sind muss man auch keine Klasse machen, nur damit mans hat. Trotzdem macht OOP (ob jetzt in C oder C++) viel Modellierung einfacher. Dein Problem ist nunmal, dass du einfach noch nicht dran gewöhnt bist, und es deshalb vermeidest - selbst dann, wenn es eben einfacher wäre wenn man das Prinzip verstanden hat. Ich erinnere mich an den ersten Versuch einer Klasse, der so unglaublich daneben war, weil ich OOP einfach nicht verstanden habe. Das die Moduellierung einfacher wird ist natürlich gerade erst bei größeren Projekten relevant - das heißt aber trotzdem nicht dass es bei kleineren sinnlos ist.
Mal davon abgesehen, dein Ton ist auch nicht der beste, darfst dich also nicht unbedingt wundern wenn andere etwas gereizt reagieren.
Aber mal konkret: Wie groß sind deine Projekte, und was machen sie? Taschenrechner? Was schreibst du so für Sachen?
-
Jetzt bin ich allerdings überrascht.
Merkst du eigentlich, dass ich so ziemlich der einzige bin, der dir noch ernsthafte Antworten gibt? (Edit: Oben kam noch einer)
Den Standpunkt wollt ihr nicht im ernst beibehalten?
Es geht nicht um die Möglichkeit. Jeder könnte ein kleines Programm ohne Fehler schreiben. Mit RAII ist es deutlich einfacher und sicherer. Das sind Argumente, die du nicht ignorieren oder wegreden kannst. Es ging nie darum, ob man etwas tun könnte, sondern darum, sich einfach Arbeit abnehmen zu lassen. Willst du dir das Leben unnötig schwer machen?
Ach ja ich vergaß, was die Massen denkt muss richtig sein.
Und ein dahergelaufener Anfänger versteht die Programmierung besser als die Menschen, die damit bereits dutzende Jahre verbracht haben? (Dazu zähle ich offensichtlich nicht, aber einige, die hier gepostet haben)
Du hast einfach offensichtlich nicht genug Erfahrung, um OOP richtig kritisieren zu können. Du kommst immer mit dem Nullargument, dass OOP prinzipiell nicht gebraucht wird.Computer brauchen wir auch nicht, das ist doch so viel Arbeit, die Software installieren, die Elektrizität bezahlen, Antivirendatenbank aktualisieren, eine Minute am Start warten, und ab und zu friert mal der Bildschirm ein. Scheußlich!
@µ: ES tut mir Leid, das ist tatsächlich eine hohle Nuss. Nehme alles zurück.
Wenn deine Projekte unter 100 Zeilen haben
DAnn sind es keine Projekte. Kleine Projekte haben etwa einige tausend LOC.
-
Arcoth schrieb:
Wenn deine Projekte unter 100 Zeilen haben
DAnn sind es keine Projekte. Kleine Projekte haben etwa einige tausend LOC.
Mein Hello-World-Projekt:
#include <iostream> int main() { using std::cout; cout << "Hello world!"; }
-
Arcoth schrieb:
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.
Nein, das ist kein Scherz.
Glaubst du mir dass ich hier Programme mit Funktionen mit > 1000 Zeilen habe?
Glaubst du mir dass ich hier Programme mit Funktionen habe wo neue Fallunterscheidungen in Funktionen eingebaut wurden, indem ihr gesamter Code kopiert wurde, 1x in den "if" Zweig und 1x in den "else" Zweig, und das ganze 2-3 Ebenen tief (also 4-8 Kopien des selben Codes, jeweils leicht modifiziert)?
Glaubst du mir dass ich hier Programme habe wo an > 50 Stellen die selben 2-3 Zeilen wiederholt werden alaCString msg; msg.Format("ERROR: %03d Blah blab blah %s in FunktionsNameDirektReingeschriebenDamitErNachDemNächstenRefactoringNimmerStimmt.", errorCode, foo); LOG(msg);
?
(Das Format der Ausgaben ist in einem Fall vom Kunden vorgeschrieben, und diese Vorgabe wird dadurch erreicht dass es bei allen Ausgaben eben richtig dort steht. Also nicht 1x pro Message-Art (Fehler, Warning, ...) sondern 1x pro Message-Ausgabe-Stelle.)Glaubst du mir dass ich hier Programme habe wo der selbe Business-Logic Code and 2+ Stellen wiederholt ist, so dass das Programm gröber Mist baut wenn man bei Änderungen eine Stelle übersieht?