Programmierstil



  • Hallo,

    hätte mal ein paar Fragen zu schönerem Programmierstil!!!!

    Ich ein kleines Beispiel damit ihr versteht was ich für Antworten suche.

    Beispiel:
    Verwendung einer Label-Komponente die auf einer Form angezeigt wird aus einem Thread

    // Thread Code  unschön
    frmMain->Caption = "Hallo"; // frmMain wird durch Header bekannt gemacht
    
    // Thread Code  schöner
    setXYZ("Hallo"); //Funktion setXYZ() steht in *.cpp von frmMain
    
    // Thread Code  eventuell noch schöner
    LabelX->Caption = "Hallo"; // LabelX ist Pointer der an Thread übergeben wird
    

    Hier zu meinen Fragen:

    - welcher Stil ist in meinem Beispiel am wircklich am schönsten?

    - in welcher Art ist es am schönsten ein TIniFile Objekt zu halten, damit an es überall im Code verwenden kann. global Variable oder ????

    - Wo ist die initialisierung von Threads, Objecten die überall verfügbar sein sollen wie das für IniDatei ect. sinvoll. FormCreate oder wo anders.
    Und wo im Code ist das delete dieser sinvoll in FormClose oder ???

    - Wie macht es sinn das Programm zu schließen wenn in FormCreate ein Fehler abgefangen wird. Close() geht an dieser Stelle nicht, macht es über exit() sinn.

    Ich hoffe auf sinnvolle Antworten,

    Danke im voraus.



  • // Thread Code unschön
    frmMain->Caption = "Hallo"; // frmMain wird durch Header bekannt gemacht
    

    1. ist am einfachsten
    2. man sieht gleich was passiert.

    - in welcher Art ist es am schönsten ein TIniFile Objekt zu halten, damit an es überall im Code verwenden kann. global Variable oder ????

    möglichst nie global



  • IcemanX schrieb:

    - in welcher Art ist es am schönsten ein TIniFile Objekt zu halten, damit an es überall im Code verwenden kann. global Variable oder ????

    Du könntest dir dafür ein Singleton schreiben.



  • - in welcher Art ist es am schönsten ein TIniFile Objekt zu halten, damit an es überall im Code verwenden kann. global Variable oder ????

    Als Member der Klasse deines Formulars

    - Wo ist die initialisierung von Threads, Objecten die überall verfügbar sein sollen wie das für IniDatei ect. sinvoll. FormCreate oder wo anders.

    Im Konstruktor

    Und wo im Code ist das delete dieser sinvoll in FormClose oder ???

    Im Destruktor

    Oder als globale Variable.



  • hehejo schrieb:

    IcemanX schrieb:

    - in welcher Art ist es am schönsten ein TIniFile Objekt zu halten, damit an es überall im Code verwenden kann. global Variable oder ????

    Du könntest dir dafür ein Singleton schreiben.

    Singleton ??? noch nie davon gehört, klingt aber interessant.
    Bitte um mehr!



  • BigNeal schrieb:

    // Thread Code unschön
    frmMain->Caption = "Hallo"; // frmMain wird durch Header bekannt gemacht
    

    1. ist am einfachsten
    2. man sieht gleich was passiert.

    - in welcher Art ist es am schönsten ein TIniFile Objekt zu halten, damit an es überall im Code verwenden kann. global Variable oder ????

    möglichst nie global

    Mach sein das dies am einfachsten ist, es ist aber trotzdem unschön von Threads direkt aus Forms zuzugreifen deshalb bitte ich ja um bessere Lösungsansätze



  • Äh, zum Thema aus Threads auf VCL-Kompos zugreifen, empfehle ich jedem mal den langen kommentar dens in jeder Thread-Unit die erstellt wird mit der IDE gibt mal genau zu lesen!

    Ausserdem bremst sowas den Thread aus. Es empfielt sich spätestens hier eine MVC oder Doc/View - Struktur der Applikation.



  • IcemanX schrieb:

    Mach sein das dies am einfachsten ist, es ist aber trotzdem unschön von Threads direkt aus Forms zuzugreifen deshalb bitte ich ja um bessere Lösungsansätze

    wo ist der unterschied wenn man zuerst einen Pointer darauf erstellt und dan in den schreibt? ergebnis ist das selbe.
    aber bei Formzugriffen aus einem Thread Synchronize (oder ähnliches) nicht vergessen.

    mfg
    BigNeal



  • junix schrieb:

    Äh, zum Thema aus Threads auf VCL-Kompos zugreifen, empfehle ich jedem mal den langen kommentar dens in jeder Thread-Unit die erstellt wird mit der IDE gibt mal genau zu lesen!

    Ausserdem bremst sowas den Thread aus. Es empfielt sich spätestens hier eine MVC oder Doc/View - Struktur der Applikation.

    Entschuligung, aber das ist eins der dümmsten Kommentare die ich seit langen gehört habe.

    Wenn der Thread zu bestimmten Zeiten unterschiedliche Labels in einer Form updaten soll, ist das sher unpraktikabel. Ausserdem wieder unschön, da wieder der Header der Form eingebunden werden muss und somit der Code wieder zu Abhängig wird und dadurch auch nicht mehr sehr gut in andere Projekte portierbar ist. Aber vielleicht haben deine Thread's alle nicht mehr als 20 Zeilen Code, da mag es ja noch sinnvoll sein.

    Und was ist mit MVC oder Doc/View gemeint???



  • BigNeal schrieb:

    IcemanX schrieb:

    Mach sein das dies am einfachsten ist, es ist aber trotzdem unschön von Threads direkt aus Forms zuzugreifen deshalb bitte ich ja um bessere Lösungsansätze

    wo ist der unterschied wenn man zuerst einen Pointer darauf erstellt und dan in den schreibt? ergebnis ist das selbe.
    aber bei Formzugriffen aus einem Thread Synchronize (oder ähnliches) nicht vergessen.

    mfg
    BigNeal

    Unterschied ist die Portierbarkeit in ander Projekte oder auch Modulisierung.

    Danke wegen dem Tip mit Synchronize, mache es aber lieber über "CriticalSection" ist bei sensiblen Code besser.



  • IceManX:
    Zitate bitte auf das Notwendigste beschränken. Danke!



  • sorry @Jansen



  • Hallo keiner mehr einen guten Beitrag, hatte um mehr gehofft.

    Das Ergebnis wäre bestimmt auch sehr gut für den FAQ Bereich geeignet.



  • IcemanX schrieb:

    junix schrieb:

    Äh, zum Thema aus Threads auf VCL-Kompos zugreifen, empfehle ich jedem mal den langen kommentar dens in jeder Thread-Unit die erstellt wird mit der IDE gibt mal genau zu lesen!

    Ausserdem bremst sowas den Thread aus. Es empfielt sich spätestens hier eine MVC oder Doc/View - Struktur der Applikation.

    Entschuligung, aber das ist eins der dümmsten Kommentare die ich seit langen gehört habe.

    Etwas anmassend, findest du nicht? Vor Allem, vor dem Hintergrund dieser Frage hier:

    IcemanX schrieb:

    Und was ist mit MVC oder Doc/View gemeint???

    IcemanX schrieb:

    Wenn der Thread zu bestimmten Zeiten unterschiedliche Labels in einer Form updaten soll, ist das sher unpraktikabel.

    Das einzig Unpraktikable an der Geschichte ist das Push-Prinzip das du hier unbedingt durchdrücken willst. Wieso soll sich das Label nicht neuzeichnen wenns auch nötig ist, das es neu gezeichnet wird?

    IcemanX schrieb:

    Ausserdem wieder unschön, da wieder der Header der Form eingebunden werden muss und somit der Code wieder zu Abhängig wird und dadurch auch nicht mehr sehr gut in andere Projekte portierbar ist.

    Welcher Code ist nichtmehr portierbar?

    IcemanX schrieb:

    Aber vielleicht haben deine Thread's alle nicht mehr als 20 Zeilen Code, da mag es ja noch sinnvoll sein.

    Nein, aber ich designe meine Applikationen im voraus und nicht erst wärhend der Codierung...



  • @junix

    Hallo, darf mal mal fragen wo du Programmieren erlehrnt hast. Schon mal von Software Architektur gehört. Möchte dir ja nicht zu nahe treten, aber wieso kommen von dir meist nur dumme Kommentare, nicht nur in diesem Beitrag, habe ich auch bei anderen Beiträgen öft gelesen. Das "A und O" von jedem Programmierer sollten sichere, übersichtliche und auch portable Codes sein.
    Egal ob für Daheim oder den Beruf. Wenn dich dieses Thema nicht interessiert dann ist das deine Sache, aber ich denke es gibt einige Leute die gerne mehr über saubere Programmierung erfahren möchten. Würde ja selber gerne einen schönen Artikel darüber ins Forum stellen, aber bei mir hier herscht momentan auch eine extreme unstimmigkeit zu diesem Thema, diskutiere seit ca. 3 Wochen mit einigen Kollegen (alles Diplom Info. oder auch Master of Science) darüber.
    Da dies aber ein sehr unstrittenes Thema ist wollten wir mal Beiträge von so viel wie möglich leuten sammeln.



  • da es dir so um portierbarkeit geht (was windows betrifft), solltest du generell auf vcl-objekte verzichten und direkt in winapi programmieren und nur schnittstellen dazu bereitstellen, ansonsten ist es mit portierbarkeit schnell dahin.

    fuer anzeige-fragen eignen sich callback-funktion meiner meinung nach ganz gut.

    objekte, die ueberall verfuegbar sein sollen, sollten immer im konstruktor erzeugt werden und niemal ins FormCreate, gleiches gilt fuer die freigabe im destruktor statt FormDestroy oder noch schlimmer in FormClose!

    p.s. ein titel in irgendetwas sagt noch lange nichts darüber aus, wie gut jemand programmieren kann! hochschulen vermitteln im allgemeinen ein eher sehr veraltetes wissen... ich kenne genug informatiker die nur ihren titel tragen und kein ordentliches programm auf die reihe kriegen. ich bekomme jedesmal kopfschmerzen, wenn ich mir deren quellcode ansehe.



  • Zum einen kann ich junix Ansatz zur Lösung nur unterstützen. Diese Vorgehensweise mag am Anfang etwas komplexer und aufwändiger sein, allerdings bewahrt es einen vor genau solchen konzeptionellen Schwächen, wie Du sie hier beschreibst.

    Zum anderen halte ich den BCB für das falsche Werkzeug um 'portablen' Code zu schreiben.



  • Joe_M. schrieb:

    Zum anderen halte ich den BCB für das falsche Werkzeug um 'portablen' Code zu schreiben.

    Hier geht es weniger um den BCB, meine Beispiele die ich ganz am Anfang gepostet habe beziehen sich zwar darauf, aber es geht eigentlich mehr um die Software Architektur, wenn man diese in z.B. richtig BCB anfängt, könnte man mit 1-2 Handgriffen den Code auch in einem MFC Project verwenden vorausgesetzt man hat C++ verwendet und nimmt die VCL nur für Oberfläche.



  • Dann solltest Du auf jeden Fall mal einen Blick auf junix Homepage werfen. Das Doc/View-Konzept, dass er dort darstellt, trennt den funktionellen Code strikt von der Oberfläche.



  • Joe_M. schrieb:

    Dann solltest Du auf jeden Fall mal einen Blick auf junix Homepage werfen. Das Doc/View-Konzept, dass er dort darstellt, trennt den funktionellen Code strikt von der Oberfläche.

    Habs mir gerade angesehen, das ist doch mal ein netter Ansatz...

    Wieso junix nicht gleich selbst darauf verweist!!!!

    So, mal sehen ob noch mehr Leute so gute Ansätze posten.

    Danke Joe_M.



  • IcemanX schrieb:

    Wieso junix nicht gleich selbst darauf verweist!!!!

    lol, einfach nur lolig..

    das hat er in seinem ersten Beitrag gemacht, welcher du als

    das ist eins der dümmsten Kommentare die ich seit langen gehört habe

    verurteilt hast.

    Und was ist mit MVC oder Doc/View gemeint???

    Zuerst leute beleidigen und dan nachfragen und nicht mal ww.google.de bedienen können

    mfg
    BigNeal

    PS: finde das gehört nicht in den BCB, da es ja allgemein diskutiert wird


Anmelden zum Antworten