Ab wann setzt ihr eigene Klassen ein?


  • Mod

    µ 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?


  • Mod

    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 ala

    CString 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?



  • Klassenmachen schrieb:

    Es hat nie jemand ein kleines C-Programm geschrieben, was keine Speicher oder Ressourcenfehler hat? Jetzt bin ich allerdings überrascht.

    Ich hab kurze Zeit in C programmiert, und danach lange in C-Style C++ Programme geschrieben. Die hatten auch keine (mir bekannten oder sich irgendwo manifestierenden) Resource-Leaks. Schön zu lesen oder gut wartbar würde ich die aber nicht nennen. Und einige Corner-Cases hab' ich dabei vermutlich auch oft übersehen.

    Heute verwende ich halbwegs modernes C++, schön mit vielen eigenen Klassen und RAII, und bin damit viel produktiver. Und vor allem ist das Schreiben solcher Programme SO viel entspannter...

    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.

    Wenn du solche Sachen zigfach in einem Programm machst, dann nervt es einfach den selben langweiligen Cleanup-Code an zig Stellen zu wiederholen.
    Vor allem wenn man es richtig machen möchte.
    Ich hab' bisher kaum Programme gesehen die auf RAII verzichten und alle Corner-Cases abgedeckt haben.
    Nur weil du den Fehler nicht siehst, und weil er bei deinen Tests nicht aufgetreten ist, heisst das nicht, dass er nicht da ist.

    Sind das wirklich die Kernargumente für Klassen?

    Es ist das Kernargument für RAII. Für Klassen spricht auch viel, sogar wenn man RAII nicht verwenden kann. In Java war lange Zeit kein vernünftiges RAII möglich (die Zeit vor try-with-resources) - trotzdem wurden da Klassen verwenden. Stichwort Kapselung.
    Wirst du aber auch nicht verstehen wenn du noch nie ein grösseres Projekt gemacht hast. Und ist bei einem 1000 Zeilen Programm auch nicht wirklich so wichtig. Bei einem 500.000 Zeilen Programm sieht die Welt aber anders aus. Und wenn man's einmal gewöhnt ist, macht man es halt immer. Weil's nicht wirklich mehr Arbeit ist, und die so entstehenden Programme meist auch viel besser zu lesen sind.

    Ich muss zugeben dass ich mir ein Lächeln nicht verkneifen kann.

    Ich muss zugeben dass ich dich für einen überheblichen und ignoranten Klotz halte.

    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?

    Kleine Programme interessieren niemanden.

    Wie gesagt es geht hier immer um kleine Hobbyprogramme

    Siehe oben: die interessieren niemanden. Ausser vielleicht dich.

    Also bis auf ein, zwei Leute kam hier bis jetzt nur gedanklicher Durchfall, wie kann so etwas Geld damit verdienen?

    Ich muss es nochmal wiederholen: kleine Programme interessieren niemanden.

    Wieso nimmst du dann an, dass Leute die ihr Geld damit verdienen grosse Programme zu schreiben besonders viel Sinnvolles darüber zu sagen haben, wie jemand der ihre Art zu arbeiten grundsätzlich ablehnt kleine Programme schreiben kann oder nicht kann?

    BTW: zeig mal eines der grösseren deiner kleinen Programme. Dann können wir ja mal gucken wie viele Fehler wir darin finden.


  • Mod

    hustbaer schrieb:

    Glaubst du mir dass ich hier Programme mit Funktionen mit > 1000 Zeilen habe?

    Naja, das ist nicht das extremste, von dem ich gehört habe (main() mit 18000 Zeilen). Aber erschreckend.

    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)?

    Ok, jetzt scherzt du aber. Welcher Programmierer ist dumm genug, DRY so dermaßen zu verletzen? Das hätte allerhöchstens ein Anfänger getan!

    Glaubst du mir dass ich hier Programme habe wo an > 50 Stellen die selben 2-3 Zeilen wiederholt werden

    Ja, das glaube ich.

    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.

    Den Funktionsnamen könnte man leicht durch __func__ ersetzen (wobei __func__ seit C++11 kein Makro ist, sondern ein char const -Array).
    Eine zusammenfassende Funktion ist (soweit ich sehe) problematisch, weil dann der Funktionsname nicht mehr stimmt, außer man übergibt __func__ als Argument. Die Lösung ist ein Makro, das wiederum ist aber möglicherweise ein wenig unschön...



  • hustbaer schrieb:

    Ich muss es nochmal wiederholen: kleine Programme interessieren niemanden.

    Es geht aber in meiner Frage um mich und die kleinen Programme. Es soll in meinem eigenen Thread nicht um meine Fragen und Bedürfnisse gehen, dann macht doch der ganze Thread keinen Sinn? Solche Aussagen, wie die deinen, sind doch grotesk.

    Für das Protokoll: Ich habe nie bezweifelt, dass Klassen, RAII, etc. für größere Projekte sinnvoll sind.

    Ich denke der Thread kann geschlossen werden, da ich nie mit mehreren Ressourcen gleichzeitig zu tun haben werde und auch meine Programme werden nie über tausende von Zeilen gehen.

    Fazit: Klassen machen für mich keinerlei Sinn.



  • Nein, auch das ist kein Scherz, und den Code hat auch nicht ein Anfänger geschrieben. Sad but true.

    Den Funktionsnamen könnte man leicht durch __func__ ersetzen (wobei __func__ seit C++11 kein Makro ist, sondern ein char const -Array).
    Eine zusammenfassende Funktion ist (soweit ich sehe) problematisch, weil dann der Funktionsname nicht mehr stimmt, außer man übergibt __func__ als Argument. Die Lösung ist ein Makro, das wiederum ist aber möglicherweise ein wenig unschön...

    Wenn ich z.B. 3 Message-Typen habe, INFO, WARNING und ERROR, und die immer in einem bestimmten Format ausgegeben werden sollen, dann erwarte ich mir 3 Logging-Funktionen für diese 3 Message-Typen.
    Wenn ich den Funktionsnamen mit loggen will, dann erwarte ich mir dass __FUNCTION__ oder ähnliches verwendet wird.
    Idealerweise lässt man sich das über ein Makro automatisch mit einsetzen. Aber ich würde nichtmal was sagen wenn überall ErrorLoggingFunction(errorCode, "Blah error in " __FUNCTION__); wiederholt wird. DAS wäre nicht das Problem. Das vorgeschriebene Logging-Format zigfach zu wiederholen und dann noch Funktionsnamen direkt in den String-Literal reinzukopieren - DAS ist das Problem.

    Welcher Programmierer ist dumm genug, DRY so dermaßen zu verletzen?

    Sowas entsteht (unter Anderem) dann, wenn Leute Angst vor Refactoring haben. Und Angst vor Refactoring entsteht (unter Anderem) dann, wenn das Testen sehr aufwändig ist. Ich denke dass genau das bei den konkreten Fällen mit denen ich arbeiten muss ein wichtiger Faktor war.

    Und das Testen ist (unter Anderem) dann aufwendig, wenn Leute nicht wissen wie man Software gut testbar macht. Oder nicht darauf achten. Oder der Meinung sind sie könnten "keine Zeit mit sowas verschwenden". Nach dem Motto "ich muss das nicht gut testen können, es muss bloss funktionieren". Was natürlich komplett irre ist, aber was soll man machen.

    ----

    Dass gute Testbarkeit bei der Art von Anwendungen die wir machen nicht immer trivial zu erreichen ist, ist eine andere Sache. Aber das ist nicht nur bei unseren Programmen so. Gibt genügend Firmen die es was das angeht ähnlich schlimm haben oder sogar noch schlimmer. Und einige davon bekommen es auch gebacken. SO schwer ist es dann nämlich in den meisten Fällen auch wieder nicht.



  • Klassenmachen schrieb:

    hustbaer schrieb:

    Ich muss es nochmal wiederholen: kleine Programme interessieren niemanden.

    Es geht aber in meiner Frage um mich und die kleinen Programme. Es soll in meinem eigenen Thread nicht um meine Fragen und Bedürfnisse gehen, dann macht doch der ganze Thread keinen Sinn? Solche Aussagen, wie die deinen, sind doch grotesk.

    Ich wollte dir damit klar machen, dass es keinen Sinn hat hier mit "echten" Programmierern zu diskutieren, wenn du dich für "echte" Programme gar nicht interessierst. Bzw. dafür wie man da arbeitet. Weil sich die "echten" Programmierer nämlich nicht für deine kleinen Mini-Programme interessieren. Wie soll daraus eine sinnvolle Diskussion entstehen, wenn es keine Überschneidung der Interessensgebiete gibt?

    Davon abgesehen...

    Programmier wie du willst. Ist deine Sache. Über deine Mini-Programme wirst du dabei aber vermutlich nicht hinauskommen. Wenn dir das egal ist, ist das natürlich OK.



  • Oh entschuldigen Sie vielmals eure Hoheit.

    Ja, ich bin nur ein kleiner Hobby...Ups, jetzt hätte ich beinahe Programmierer geschrieben...Es tut mir sehr Leid, dass ich die wahren Programmierer eine, für mich wichtige, Frage gestellt habe. Als FreizeitCodeInDieTextdateiMacher habe ich gar kein Interesse größere Programme zu schrieben, zumal ich noch einen Beruf, eine Familie und ein Haus(wo immer was zu machen ist) habe und daher mir sowieso die Zeit fehlt.

    Da wir hier im Haus mehrere Macs haben, könnte ich mir ja auch mal Objective-C anschauen, aber da wäre ja auch nur der Vorteil der Klassen, oder doch noch mehr?(Warum erschleicht sich bei mir das Gefühl, dass ich diese Frage lieber nicht hätte stellen sollen?^^).



  • Klassenmachen schrieb:

    ... (Warum erschleicht sich bei mir das Gefühl, dass ich diese Frage lieber nicht hätte stellen sollen?^^).

    Ganz einfach weil Du es nicht wirklich wissen willst. Schau Dir mal Deine erste Antwort in diesem Thread an:

    Klassenmachen schrieb:

    ... Aber das muss ich nicht gleich in eine Klasse packen und dann erst ein Objekt davon instanzieren. Jedenfalls hatte ich noch nicht da Bedürfnis dieses zu tun, da es Mehrarbeit bedeutet ohne mir einen Mehrwert zu bringen. Die Programme laufen wunderbar und erweitern konnte ich sie auch gut.

    Du bist mit 'C' glücklich und das ist ja auch gut so. Ich dagegen habe 'C++' schätzen gelernt eben wegen der hier schon genannten Vorteile. Beide Methoden haben wohl ihre Existensberechtigung und sie schließen sich auch nicht gegenseitig aus.

    Natürlich gibt es auch 'Experten' die 'Hello World!' mittels (generischem) Template implementieren. Es könnte ja vorkommen dass man diesen Text irgendwann mal per EMail an Mutti senden möchte. Aber davon war in diesem Thread noch nicht die Rede.

    - osdt



  • hi, ich habe vorher mal ein bisskerl mit turbopascal kleinere Programm geschrieben, die eigentlich nur mathe benutzt haben, z.b. pi berechnen oder calculatoren fuer spiele.
    mit c habe ich 0 erfahrung und lerne grade c++, und allein wenn ich mir die codebeispiele auf der 1. seite angucke versteh ich nicht, warum man ueberhaupt mit c arbeiten sollte.
    IMO gibts nur assembler oder [hier neuste sprache einfuegen], denn alles andere ist imo quatsch.
    Natuerlich sollte die abstrahierte sprache (hier halt c++) frei von kinderkrankheiten sein und vorteile gegenueber anderen bieten.
    Sofern dies gegeben ist, ist aeltere Sprachen lernen hoechstens ein Einstiegspunkt fuer Anfaenger, aber selbst die werden schnell genug das neuste lernen wollen.

    Heute gibt's auch nur noch Latein und Hochdeutsch.
    Jeder der nicht koelnische Gedichte aus dem 17. Jahrhundert interpretieren will(oder gar schreiben), dem reicht das auch.

    Und will man ein koelnisch geschriebenes Gedicht wieder auf seinen Inhalt ueberpruefen(reverse engineering) bietet sich das lernen von koelsch an.
    will man dies nicht, nicht...

    Aber die argumentation NUR koelsch zu lernen, weil man damit auch Gedichte schreiben kann ist... 😕

    Und genau das Versucht der TE (und auch ein paar andere) zu begruenden.

    wischt euch weiter den Arsch mit Papyrus ab, ich bleib bei meinem Klopapier 🙂



  • @Klassenmachen
    Warum fühlst du dich angegriffen?
    Ich hab das "echt" doch extra unter "" gesetzt.
    Du hast doch selbst schon geschrieben dass du keine ernst zu nehmenden Programme schreibst. Daraus folgt dass du kein ernst zu nehmender Programmierer bist. Oder ist das nur OK wenn du es schreibst, aber nicht wenn ich es schreibe?
    lol

    Achja, nochwas.

    Klassenmachen schrieb:

    Es geht aber in meiner Frage um mich und die kleinen Programme.

    Dann hättest du das von Anfang an dazuschreiben sollen.
    Hast du aber nicht.
    Reg dich also nicht auf wenn deine ursprüngliche Frage beantwortet wurde, auch wenn es nicht das war was du wissen wolltest.


Anmelden zum Antworten