2 oder 200 Methoden?



  • ........ schrieb:

    std::map

    Genau mit Straßenwalze Nüsse knacken! 🙄 👍



  • @pumuckel: Naja sobald sich eine Eigenschaft ändert, muss das die Klasse registrieren und Arbeiten ausführen. Ich kann den User nicht nur Variablen ändern lassen. Bei jeder Änderung geschieht im Hintergrund etwas.

    @SlicerWinder: Je nach Änderung prüfe ich auf Gültigkeit und führe verschiedene Arbeiten ja nach Variable aus. Ich könnte höchstens den Funktionsfumpf erstellen, was aber das kleinste Problem ist.



  • Ich würde eher zu vielen kleinen Funktionen tendieren. Ich denke, oft kann es sein, dass man nur etwas ändern will. Du sagst auch, du willst auf Gültigkeit prüfen. Wie zeigst du ungültige Werte an? Per Exception? Was willst du tun, wenn plötzlich 10 Attribute geändert werden und Parameter 3 und 7 ungültig sind?

    Aber um mal realistisch zu bleiben: Von wievielen Attributen sprechen wir hier überhaupt? 100 sind definitiv zu viele.



  • Wir sprechen über Style-Angaben in meiner selbstgeschriebenen GUI. Also sowas wie Position( left, top ), width/height, verschiedene Farbangaben, Aussehensveränderungen( Kanten, Ecken, Farbverläufe, ... ) Alles in allem vielleicht 30 Variablen. Ich hab jetzt Setter und Getter geschrieben. Manches hab ich extra noch einmal zusammengefasst, da es oft vorkommt, das man zum Beispiel Höhe und Breite ändern will( element.setWH( int newWidth, int newHeight ) ) oder nur eines von Beiden( setWidth( int newWidth ), setHeight( int newHeight ) ).
    Bei allen drei Befehlen muss ich auf Gültigkeit prüfen und die Bilder für das Element neu zeichnen.
    Das mache ich automatisiert, damit der User nicht nach jeder Änderung, die er irgendwo in den Code schreibt, einen Befehl schreiben muss, um das Element zu aktualisieren.

    Zu der Exeption:
    Ziemlich viele der Befehle geben bool zurück. Falls ein Fehler auftritt( false wird zurückgeben ), wird eine Errornummer in der Klasse gespeichert( int getLastError() ).

    Somit hat die Klasse insgesamt 92 Methoden, die Hauptsächlich das Erscheinungsbild des Elementes ändern und auslesen( Implementation 1500 Zeilen reiner Code ). Andere Methoden zeigen das Element noch an, führen Eventhandler aus oder verarbeiten Events für das Element.

    MfG. Christoph



  • Schau dir doch mal an, wie das in anderen GUI-Toolkits gemacht wird. Z.B. mit den Farben. Da gibt es nicht für jede Möglichkeit eine eigene Methode (z.B. setWindowBackground(Color c)), sondern eine Klasse Palette, in der man über enums an die Werte gelangt. Dein GUI-Element bietet dann getter und setter für ein ganzes Palette-Objekt.
    Oder Position und Größe: nicht zig Integer nehmen, die du einzeln setzen kannst, sondern z.B. eine Klasse Point, welches die Position des Elements darstellt, und einmal Size, für die Größe. So machst du aus 6 Methoden 2.

    Überleg dir möglichst bald, welche Eigenschaften du zu eigenen Klassen zusammenfassen kannst, damit du nicht zig Methoden anbieten musst, um die einzelnen Werte + irgendwelche Verbindungen (z.B. height, width, height+width) anbieten musst.



  • Ziemlich viele der Befehle geben bool zurück. Falls ein Fehler auftritt( false wird zurückgeben ), wird eine Errornummer in der Klasse gespeichert( int getLastError() ).

    wow. bin ich froh, dass ich damit nicht arbeiten muss.



  • da ist eine map aber wirklich besser, zumal du deine oberfläche dann auch
    einfach per datei laden kannst (bin auch bei einer gui)

    std::map<std::string, void *> vars; // void * nur als beispiel
    
    void RegisterVar(std::string name, void *var)
    {
        vars[name] = var;
    }
    void SetIntVar(std::string name, int data)
    {
        *(int *)vars[name] = data; // c-cast nur als beispiel
    }
    

    man kann sich da sehr schöne typsicehre templates bauen, mit wenig overhead.

    damit hast du nur eine handvoll getter und setter 🙂



  • vim schrieb:

    SideWinder schrieb:

    ChristophLu schrieb:

    ok danke!
    naja das mit den 100 war übertrieben, sollte aber nur den Sinn wiederspiegeln und die Situation deutlicher machen 😉

    Und damit du jetzt nicht ewig schreibst benutze bitte eine IDE die dir das generiert!

    MfG SideWinder

    Wie geht das mit vim? 😕

    Einfach mit dem Makrorekorder. Mit @q starte ich den Rekorder und erzeuge den ersten getter und setter. Mit @ beende ich ihn und mt @q führe ich das Makro bei der nächsten Variablen aus. Mit 99@q wird das Makro auch 99 mal ausgeführt. Man muss bei Aufnehmen ein wenig aufpassen, dass man es generisch macht, aber mit etwas Übung und Kenntnis der richtigen Tastaturkommandos geht das.

    Wenn das häufiger gemacht wird, kann man sich auch ein vim-Skript schreiben.



  • tntnet schrieb:

    ...

    in einer echten IDE schreibt man folgendes:

    gs Typ Variablenname
    

    und es wird eine Variable + Getter + Setter erzeugt. Ohne, dass du jemals etwas "recorden" musst. Makros recorden ist nämlich sowas von 90er.

    MfG SideWinder



  • Also ich hab auch ein eigenes GUI gebaut, das is noch nicht ganz fertig, und ich hab bei mit alles zu Konfigurationsstructs zusammengeschlossen, für jedes gibts bei mir 1x get und 1x set und die Enthalten alles was zusammengehört. Damit kommen bei mir maximal 6 Structs zusammen. Eventuell wäre soetwas ja eine gute Lösung für dich. Gültigkeitsprüfungen amche ich ejdoch nicht, das wäre sehr Aufwendig und im Moment gehe ich davon aus das der Nutzer sie richtig konfiguriert.



  • SideWinder schrieb:

    tntnet schrieb:

    ...

    in einer echten IDE schreibt man folgendes:

    gs Typ Variablenname
    

    und es wird eine Variable + Getter + Setter erzeugt. Ohne, dass du jemals etwas "recorden" musst. Makros recorden ist nämlich sowas von 90er.

    MfG SideWinder

    kann der msvc sowas auch?^^ das addon, auf dessen name ich gerade nicht komme, kanns auf jeden fall - aber kanns der msvc auch von haus aus vll schon?

    bb



  • Das weiß ich nicht, gibt es da soetwas wie "Insert Snippets" oder kommt das auch aus den Addons die ich installiert habe?

    MfG SideWinder



  • SideWinder schrieb:

    tntnet schrieb:

    ...

    in einer echten IDE schreibt man folgendes:

    gs Typ Variablenname
    

    und es wird eine Variable + Getter + Setter erzeugt. Ohne, dass du jemals etwas "recorden" musst. Makros recorden ist nämlich sowas von 90er.

    MfG SideWinder

    Was in den 90ern gemacht wurde, ist heute nicht zwangsweise obsolet.

    Es gibt übrigens auch Plugins für den vim, die automatisch snippets einfügen. Ich habe neulich von so einem gehört, war aber bisher zu bequem, das auszuprobieren. Ich finde den Makrorecorder halt sehr praktisch, um eine Änderung mehrfach durchzuführen. Ich verwende ihn täglich mehrfach.

    Vim ist sicher nicht einfach zu bedienen. Er ist sogar extrem schwer zu bedienen. Aber ich habe das halt gelernt und will nichts anderes mehr. Das ist so eine Macht der Gewohnheit. Und wenn man mit vim gut umgehen kann, kann man sehr schnell seine Ideen in Code umsetzen.

    Ich halte die Bedeutung von IDEs für überbewertet. Man kann sehr gut auch mit einem Editor (muss nicht vi oder vim sein) und ein Makefile wie in alten Zeiten noch heute leistungsfähig sein und gute Programme schreiben. Der Vorteil ist sogar, dass man sich mehr Gedanken über seine Struktur machen muss, da man sich sonst schnell verliert, wenn man keinen Klassenbrowser und automatische Vervollständigung und so was hat.

    Das schönste an der Sache ist, dass man die Wahl hat. Ich bevorzuge halt die Technik aus der Steinzeit. Und das sind noch nicht mal die 90er. Vi und make kommen sogar aus den 70ern 😉 .



  • SideWinder schrieb:

    Das weiß ich nicht, gibt es da soetwas wie "Insert Snippets" oder kommt das auch aus den Addons die ich installiert habe?

    MfG SideWinder

    OK - gibt nen Code Snippets Manager - mal gucken, ob ich mir das später mal ein wenig angucke^^
    ty ;o)

    bb



  • Also VS erstellt ja einen Unterordner "Code Snippets". Allerdings gibt es da lediglich als Unterordner: "Visual Basic" ,"Visual C#" und "XML". 😉

    Obwohl ich mir schwer vorstellen kann, dass es das nicht auch für VC++ gibt.. Hat ja ansich nicht viel mit der Sprache zu tun.. Ist ja eigentlich ein relativ "blödes" Hilfsmittel, das nur ein wenig Textersetzung macht.



  • drakon schrieb:

    Also VS erstellt ja einen Unterordner "Code Snippets". Allerdings gibt es da lediglich als Unterordner: "Visual Basic" ,"Visual C#" und "XML". 😉

    Obwohl ich mir schwer vorstellen kann, dass es das nicht auch für VC++ gibt.. Hat ja ansich nicht viel mit der Sprache zu tun.. Ist ja eigentlich ein relativ "blödes" Hilfsmittel, das nur ein wenig Textersetzung macht.

    jopp - ich hatte aber gestern nix gefunden, womit ich auf die schnelle was bauen könnte - lag allerdings auch ein wenig an meiner faulheit 😉


Anmelden zum Antworten