Generelle Frage zum Programmdesign

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Generelle Frage zum Programmdesign

    Hallo!

    Ich hab mal eine Frage zu einem Programm das ich demnächst erstellen muss.

    Also das Programm an sich zu erstellen ist nicht das Problem, mir geht es jetzt um die Architektur des Programms.

    Es geht um eine Messwerterfassung, die man im Automatikmodus und im Handbetrieb laufen lassen kann. Nun stellt sich mir die Frage, da beide Modi im Prinzip auf die gleichen Subs und Funktionen zugreifen (für den Automatikmodus gibt es noch ein paar mehr), ob ich es so machen kann, das ich eine Sub für jeden Modus erstelle, und von dort aus die anderen Subs/Funktionen aufrufe?

    Oder gibt es etwas besseres, bzw. wie macht man sowas am geschicktesten?
    MesswerteErfassung ist Datenverarbeitung. Hier ist ungefähr aufgelistet, was in Anschlag zu bringen ist: Datenverarbeitungs-Vorraussetzungen

    Also bevor du über diverse Modi nachdenkst: erstell erstmal ein Datenmodell.
    Dann programmier mw. den händischen Modus aus.
    Dann programmier den automatischen Modus aus - dabei werden vmtl. viele Dinge doppelt vorkommen (redundant).
    Die redundanten Elemente müssen ausgelagert werden aus den Modi, sodass beide Modi sich derselben Elemente (die nun ja nur noch einmal vorkommen) bedienen.
    Fürs Auslagern gibts enorm viele Ansätze, das kommt auf den konkreten Fall an - hat gar kein Sinn, da jetzt so voll abstrakt drüber zu schwadronieren.

    Parmaster schrieb:

    das Datenmodell erstellt
    glaub ich nicht.
    Zeig mal Bildle vom Dataset.

    Parmaster schrieb:

    Andere Tipps?
    Ähm - den gegebenen Link hast du schon zur Kenntnis genommen?
    Weil der enthält Tippse, die dich locker ein halbes Jahr beschäftigen können.
    Und nichts davon ist entbehrlich.

    Parmaster schrieb:

    Andere Tipps?
    Ohne Dich auf ein DataSet festzulegen:
    Du hast genau einen Ablauf mit zwei Einstiegsarten. Beschreibe also die Messwerterfassung als solche, ohne Dich darum zu kümmern, wie sie aufgerufen wird.
    Der eine Weg ist über einen Button: Manuelle Messung,
    der andere Weg wäre ein Timer: Regelmäßige Messung.
    Du musst dann nur noch aufpassen, dass sich die beiden nicht überschneiden.
    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!
    Moin!
    Wir programmieren immer noch in der Konsole. ;)
    Aber ich weiß was du meinst.
    Ich habe ein Klassendiagramm und ein PAP, mehr brauch ich nicht.
    Mir geht es wirklich nur darum, wie man den redundanten Code richtig auslagert.
    Aber, es ist wahrscheinlich so, wie ich es mir dachte, also einfach in die Datei ein, fertig.
    Oder macht es Sinn die Klasse in eine extra Datei und die Subs/Funktionen in eine extra Datei, und nur die Main in der Hautptdatei lassen?

    Parmaster schrieb:

    die man im Automatikmodus und im Handbetrieb laufen lassen kann.

    Parmaster schrieb:

    Wir programmieren immer noch in der Konsole.
    Tut mir leid, diese beiden Aussagen sind für mich disjunkt.
    Es gibt also nun zwei Möglichkeiten, wie wir weiter verfahren:
    1. Ihr stellt auf WinForms um und wir machen zusammen eine schnuckelige Lösung
      oder
    2. Ihr programmiert Jammercode in einer Console und lernt nix dabei.
    Im Fall 2 wirst Du auf Hilfe von mir verzichten müssen.
    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!

    Parmaster schrieb:

    Ich geb euch die E-Mail-Adresse von meinem Lehrer
    Nix.
    Du lässt Deinen Lehrer hier reinsehen, soll er hier im Forum kommunizieren.
    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!
    Zum Lernen finde ich es nicht verkehrt erst mit Konsole anzufangen und dann später auf Form / WPF einzusteigen. So kann man ohne auf "Optik" zu achten die Grundlagen legen. Um zu verstehen wie Variablen / Klassen / Vererbungen funktionieren brauche ich keine Form zu erstellen.

    Allerdings muss man den wechsel rechtzeitig durchführen, sonst müht man sich umständlich durch Konsolen befehle die mit einer WinForm und einem Radiobutton gelöst werden könnten.

    Zurück zum Problem.

    Hier würde es sich auf den ersten Blick anbieten mit Klassen zu arbeiten.
    Mit einer Klasse kannst du die benötigten Functionen und Sub "auslagern". Dabei aber immer auf die Datenkapselung achten. Was in der Klasse geschieht bleibt in der Klasse!
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    wie gesagt: alles leeres schwadronieren.
    Ein konkretes Datenmodell existiert noch nicht, oder nur ideenmäßig in seinem Kopf, und von unbestimmbarer Tauglichkeit.
    Sein erstes Problem ist also, das erstmal korrekt in konkrete Klassen zu übertragen, und Tauglich zu machen.
    Einfachster Standard wäre hier typisiertes Dataset, aber scheinbar meint er, er brauche es nicht.

    also weiter machen mit dem zweiten Schritt vor dem ersten - lasst mich mit-schwadronieren:
    Vorbemerkung: Zur Auslagerung redundanten Codes muss erstmal Code vorhanden sein.

    Dann aber bieten sich Klassen an, Module, Methoden, Properties, Events, Delegaten, Vererbung und Interfaces - also schlicht das gesamte Instrumentarium objektorientierten Programmierens.
    Ich muss, glaub ich, mal etwas klarstellen:

    1. ich lerne weder Fachinformatiker noch studiere ich Informatik
    2. ja wir sind immer noch in der Konsole, fangen aber demnächst mit WinForms an. Und um OOP zu lernen braucht man keine WinForm, da es bei uns erst mal nicht ums Design geht, sondern um die Logik
    3. wir haben erst angefangen mit OOP, d.h. wir wissen gar nicht was Events, Delegaten, Vererbung usw. sind (ich weiß es weil ich mich privat dafür interessiere)
    4. ist VB/Programmieren nicht unser Haupttätigkeitsfeld.

    Jede Frage die ich hier stelle, stelle ich für mich, weil es mich eben interessiert, war also gar keine Aufgabe aus dem Unterricht.

    Aber ich frage mich trotzdem, was jetzt so schwer daran ist, meine Frage zu beantworten? Ist es sinnvoller alle Subs/Functions, die von verschiedenen Programmstellen aus aufgerufen werden, in eine Klasse zu packen, oder nicht? Dafür eine weitere Datei anlegen oder alles in eine? Um solche Sachen ging es mir.

    Ich habe mir für das Programm ein PAP erstellt sowie ein Klassendiagramm des Hauptteils. Mehr brauche ich nicht für das kleine Programm.
    Und, wie man am anderen Thread sieht, habe ich mir auch schon Gedanken gemacht, wie man die Werte, welche am Schluss in eine CSV Datei geschrieben werden, visuell darstellen kann. Und durch diesen Thread mit dem ChartControl hab ich für mich auch schon angefangen mit WinForms.

    Das ist jetzt nicht böse gemeint, wollte damit nur drauf hinweisen das wir erst noch am Anfang sind, und viele Sachen gar nicht kennen.

    Parmaster schrieb:

    was jetzt so schwer daran ist
    Wenn Du ein Auto kaufst, sagst Du: Ich bin kein Taxifahrer, mir ist alles egal.
    Wie gesagt:
    Ein Automatikmodus in einer Konsole ist ein NoGo. Da hab ich keine Lust, Dir zu helfen. Sorry.
    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!
    Was verstehst du unter Automatikmodus?


    Das heißt doch bei uns nur so, weil das Programm nach einem festgelegten Intervall einen zufälligen Wert in eine Liste schreibt.

    Und das muss jetzt nach deiner Vorstellung unbedingt in ein WinForms Anwendung untergebracht werden? Wenn ja, warum? Was ist der Vorteil (außer das es keine Konsolenanwendung ist)? Bitte mit Begründung.
    Also ich verstehe unter Automatikmodus ein Programm welches beim Start ein Script abarbeitet (Cmdparamter, textfile,...) und sich dann ohen Userinteraktion beendet.
    Dazu reicht es in der Regel, dass man Userinterface und Programmcode voneinander trennt. Sprich: die Befehlseingabe per console bzw. per Formular bzw. per Script rufen als einzeiler nur entsprechende Routinen auf.
    Das macht immer dann Probleme wenn die Masterroutinen auf Formularfelder zurückgreifen, die es im Automatikmodus ja nicht gibt. Bei einem Consoleninterface ist das aber alles easy going :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Coldfire“ ()

    Parmaster schrieb:

    Aber ich frage mich trotzdem, was jetzt so schwer daran ist, meine Frage zu beantworten? Ist es sinnvoller alle Subs/Functions, die von verschiedenen Programmstellen aus aufgerufen werden, in eine Klasse zu packen, oder nicht? Dafür eine weitere Datei anlegen oder alles in eine? Um solche Sachen ging es mir.
    ist das so schwer, meine Antwort zu begreifen?
    Die Frage in ihrer Allgemeinheit ergibt keinen Sinn - es kommt auf den konkreten Fall an. Ohne den konkreten Fall ists leeres Schwadronieren.
    Ja, es ist sinnvoller alle Subs/Functions, die von verschiedenen Programmstellen aus aufgerufen werden, in eine Klasse zu packen. Aber vielleicht ist es auch sinnvoller, sie in ein Modul zu packen. vielleicht ist es auch sinnvoll, sie als Shared Methoden in eine Klasse zu packen.
    Und manchmal hat man für verschiedene Zwecke denselben Code, nur innen drin ein kleines Detail unterscheidet sich. Dann ist es sinnvoller, mit Delegaten zu arbeiten. oder mit Events. oder mit einer abstrakten Basisklasse. oder oder oder.

    Es ist übrigens völlig irrelevant, ob du Informatik studierst oder Hobby-Coder bist - an meiner Antwort ändert das gar nix:
    In Anbetracht der Allgemeinheit der Frage kann man nur antworten: Wende die Sprach-Mittel von VB.Net angemessen an, um redundanten Code zu vermeiden.
    Es ist schon sehr wichtig, denn richtig angewandt wird so aus einem Design-Fehler (redundanter Code) ein Design-Vorteil: wiederverwendbarer Code.

    Man kann es sogar so sehen, dass die gesamte Sprache vb.net ein einziges riesiges Instrument ist, um Code wiederverwendbar gestalten zu können.

    Parmaster schrieb:

    Was verstehst du unter Automatikmodus?
    EWin Programm, das zu gewissen Zeiten das tut, was zu tun ist, was auch immer.
    Wenn der nächste Tick in einer Stunde ist und Du mit einer Console einen Handstand machen musst, dass das Programm in einer Stunde noch läuft, ist das Verwenden einer Console in diesem Context einfach schwachsinnig.
    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!