Aufbau eines Programms

  • VB.NET
  • .NET (FX) 4.0

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Radinator.

    Aufbau eines Programms

    Moin Forum,

    ich weiß nicht genau, wie ich ein Program aufbauen soll. Folge Problemstellung:

    Mit einer Mathebibliothek müssen große Messdaten berechnet werden. Ich habe festgestellt, dass die einzelnen Berechnungen mit der Bibliothek (die wir leider verwenden müssen) oft ins stocken geraten, wenn parallel gerechnet wird, habe ich mir überlegt eine State-Maschine zu entwickeln (hoffe es ist der Richtige Ausdruck :) :(

    Anfangsstatus ist Aus. Wechsel in Status Leerlauf, wenn der User Start drückt.
    Wenn du im Leerlauf bist und ein neuer Datensatz kommt, berechne Teil A, danach Teil B und schließlich Teil C. Dann geh in den Leerlauf zurück.
    Hast du genug Ergebnisse A, B und C gesammelt berechnet Mittelwerte von A, B, und C und berechnet Teil D. Speicher alles. Dann wieder Leerlauf.
    Da sind dann noch ein paar mehr 'States'.
    Nun die Frage:
    Wo Bau ist die State Maschine auf. In dem Hauptformular, in dem der User alles Steuern kann und wo die entsprechenden Informationen angezeigt werden oder erstelle ich lieber eine eigene Klasse, die Befehle entgegennimmt und die Infos ans Fenster übergibt?

    Vielen Dank schon mal vorweg
    VG
    Tukuan
    Das was du hier hast, kann man als State Maschine bezeichnen. Da aber sowas meistens (IMHO jedenfalls) alles in einer einzelnen Funktion abläuft bzw in einem abgegrenzten Berich (geschlossenes System), kannst du das ganze in VB mit Module oder in C# mit static class machen.

    Dazu einfach einen Funktion erstellen, welche 3 weiter aufruft, die jeweils Teil A, Teil B und Teil C berechnen. Das Ergebnis an eine vierte Funktion übergeben (diese macht dir dann den Mittelwert). Schließlich (an eine fünfte funktion übergeben und) abspeichern.
    Dabei kannst du in deiner GUI beim Klicken auf Start einen timer laufen lassen, welche die erste immer wieder aufruft

    Parallelisieren kannst du hier eigenlich nur das Ermitteln der Teilergebnisse A, B und C
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Tja, so einfach ist das ermitteln von Teil A usw. halt nicht. Sollte nur als kleine Veranschauung dienen, was ich benötige.
    Es sind komplexere Berechnungen, die in Classen laufen, die dann ihrerseits hunderte ergebnisse Inhalten. Es nicht nicht nur einfach Funktionen. Es ist schon ein wenig komplizierter.
    Dann wirst du uns wohl mehr erklären müssen. wir können dir nur Lösungen anhand deiner Beschreibung geben.

    Aber im Grunde genommen ist deine Frage doch beantwortet, oder?

    Tukuan schrieb:

    Wo Bau ist die State Maschine auf. In dem Hauptformular, in dem der User alles Steuern kann und wo die entsprechenden Informationen angezeigt werden oder erstelle ich lieber eine eigene Klasse, die Befehle entgegennimmt und die Infos ans Fenster übergibt?

    Radinator schrieb:

    Das was du hier hast, kann man als State Maschine bezeichnen. Da aber sowas meistens (IMHO jedenfalls) alles in einer einzelnen Funktion abläuft bzw in einem abgegrenzten Berich (geschlossenes System), kannst du das ganze in VB mit Module oder in C# mit static class machen.

    Und diese wird dann von dem Formular aufgerufen.
    Es ist generell davon abzuraten Programmlogik direkt in der Form zu verwirklichen, einfach der Übersicht halber.
    @Tukuan Etwa so ein Ablauf:
    Lagere alle Deine Teile in separate Klassen aus. Separiere die Algorithmen so, dass sie in sich komplett sind und nur (Roh-) Daten empfangen und (fertige) Daten bereitstellen.
    Wenn ein Schritt beginnen soll, muss eine übergeordnete Klasse Daten in die Instanz übertragen und den Start auslösen.
    Wenn der Schritt fertig ist, sendet die Instanz an die übergeordnete Klasse ein entsprechendes Event.
    Wenn Du die Berechnung in Threads packst, wird die GUI nicht belastet, muss aber aufpassen, dass kein Unsinn aufgerufen werden kann.
    Feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Tukuan schrieb:

    möglichst via Threads arbeiten.
    Aber bitte nicht auf tausende Threads/Tasks warten ;D
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell