Hallo zusammen,
ich lese schon seit einiger Zeit in diesem Forum mit und konnte mir dank eurer Beiträge schon sehr viel selbst beibringen. Dafür schon einmal ein Danke!
Ich habe vor einiger Zeit nun meinen Horizont von VBA/Excel auf VB.NET erweitert. Mein erstes und derzeitiges Hauptprojekt soll ein Preis-Kalkulationsprogramm werden.
Das Programm an sich steht auch schon seit einiger Zeit (nicht ganz fertig, aber benutzbar ), allerdings ohne wirkliche OOP.
Das führt mittlerweile aber leider bei Erweiterungen/ Veränderungen des Programms zu immer mehr Krücken und Verwirrung, weil ich den Überblick verliere.
Damit kommen wir zum Problem und hoffentlich auch der Lösung: Einarbeitung in die OOP.
Zunächst einmal zum Verständnis die Idee / das Konzept hinter dem Projekt:
Ist-Stand ohne OOP: Man gibt alle Parameter an, die das Produkt haben soll und muss auch die Fertigungsart (Maschinen) auswählen. Das Ergebnis sind dann u.a. die Herstellkosten.
Im "Main"-Form sind teilweise sehr lange Funktionen / Subs, welche mit "If / Then bzw. "Select Case" die Eigenschaften etc. der angegebenen Fertigungsart und Maschine auslesen und die Produktionskosten daraufhin ermitteln.
Problem: Die Anwender kennen nicht unbedingt die beste Fertigungsart, da diese sich teilweise nur in kleinen Details unterscheiden.
Wunsch: Man gibt alle Parameter an und das Programm ermittelt die funktionierende(n) bzw. die günstigste Fertigungsart.
Vereinfachtes Beispiel (die Sinnhaftigkeit sei mal dahingestellt):
Ich möchte einen Würfel herstellen.
Die Produktionskette ist natürlich in der Realität noch wesentlich länger und tiefer, aber die folgenden Schritte würden dann ja äquivalent aufgebaut werden.
Für die Zukunft wäre auch noch ein Wunsch, gewisse Entscheidungen vom Benutzer "überschreiben" zu lassen. So wie ich das bisher verstanden habe kann man dafür in abgeleiteten Klassen "Override" nutzen. Oder doch lieber ein einfaches "If Then Else"?
Ich könnte mit meinem Wissensstand jetzt die Basisklasse "Würfel" erstellen, welche u.a. die Eigenschaften "Anzahl Seiten", "Farbe", "Material" und "Größe" beinhaltet.
Aus dieser Klasse würde ich dann mit einem Konstruktor "Public Sub New(Parameter)", anhand der Eingaben im Main-Form, ein neues Objekt erstellen. So weit so gut.
Was ist nun der sinnvollste Weg, die Einschränkungen der Fertigungsarten abzufragen und am Ende die "funktionierende(n)" Fertigungsart(en) zu ermitteln?
Ich hoffe ihr versteht was ich meine und könnt mir ein paar Denkanstöße geben
Gruß Erik
ich lese schon seit einiger Zeit in diesem Forum mit und konnte mir dank eurer Beiträge schon sehr viel selbst beibringen. Dafür schon einmal ein Danke!
Ich habe vor einiger Zeit nun meinen Horizont von VBA/Excel auf VB.NET erweitert. Mein erstes und derzeitiges Hauptprojekt soll ein Preis-Kalkulationsprogramm werden.
Das Programm an sich steht auch schon seit einiger Zeit (nicht ganz fertig, aber benutzbar ), allerdings ohne wirkliche OOP.
Das führt mittlerweile aber leider bei Erweiterungen/ Veränderungen des Programms zu immer mehr Krücken und Verwirrung, weil ich den Überblick verliere.
Damit kommen wir zum Problem und hoffentlich auch der Lösung: Einarbeitung in die OOP.
Zunächst einmal zum Verständnis die Idee / das Konzept hinter dem Projekt:
Ist-Stand ohne OOP: Man gibt alle Parameter an, die das Produkt haben soll und muss auch die Fertigungsart (Maschinen) auswählen. Das Ergebnis sind dann u.a. die Herstellkosten.
Im "Main"-Form sind teilweise sehr lange Funktionen / Subs, welche mit "If / Then bzw. "Select Case" die Eigenschaften etc. der angegebenen Fertigungsart und Maschine auslesen und die Produktionskosten daraufhin ermitteln.
Problem: Die Anwender kennen nicht unbedingt die beste Fertigungsart, da diese sich teilweise nur in kleinen Details unterscheiden.
Wunsch: Man gibt alle Parameter an und das Programm ermittelt die funktionierende(n) bzw. die günstigste Fertigungsart.
Vereinfachtes Beispiel (die Sinnhaftigkeit sei mal dahingestellt):
Ich möchte einen Würfel herstellen.
- Eigenschaften: 6 Seiten, weiß, Kunststoff, Größe S
- Fertigungsart1: Kann bis 6 Seiten, kann weiß, kann Kunststoff & Holz, bis Größe S
- Fertigungsart2: Kann bis 20 Seiten, kann weiß, kann nur Holz, bis Größe L
- Fertigungsart3: Kann bis 8 Seiten, kann alle Farben, kann nur Kunststoff, bis Größe M
- Fertigungsart1 und Fertigungsart3 würden in Frage kommen
- Fertigungsart2 funktioniert aufgrund des Materials nicht.
Die Produktionskette ist natürlich in der Realität noch wesentlich länger und tiefer, aber die folgenden Schritte würden dann ja äquivalent aufgebaut werden.
Für die Zukunft wäre auch noch ein Wunsch, gewisse Entscheidungen vom Benutzer "überschreiben" zu lassen. So wie ich das bisher verstanden habe kann man dafür in abgeleiteten Klassen "Override" nutzen. Oder doch lieber ein einfaches "If Then Else"?
Ich könnte mit meinem Wissensstand jetzt die Basisklasse "Würfel" erstellen, welche u.a. die Eigenschaften "Anzahl Seiten", "Farbe", "Material" und "Größe" beinhaltet.
Aus dieser Klasse würde ich dann mit einem Konstruktor "Public Sub New(Parameter)", anhand der Eingaben im Main-Form, ein neues Objekt erstellen. So weit so gut.
Was ist nun der sinnvollste Weg, die Einschränkungen der Fertigungsarten abzufragen und am Ende die "funktionierende(n)" Fertigungsart(en) zu ermitteln?
- Methoden in der Klasse "Würfel" erstellen, welche dann mit "If Then" oder "Select Case" versuchen die einzelnen Kriterien abzuarbeiten? So habe ich es momentan ja schon in meinem Programm, nur eben ohne die Klasse, sondern mit Public Variablen.
Das ist aber, wie erwähnt, mittlerweile relativ unübersichtlich geworden. - (Abgeleitete) Klassen für jede Fertigungsart erstellen, die mit den Werten aus dem erstellen Objekt gefüttert werden und dann am Ende z.B. eine eigene Property "Funktioniert" mit "True" oder "False" füllen?
- Eine ganz andere Vorgehensweise?
Ich hoffe ihr versteht was ich meine und könnt mir ein paar Denkanstöße geben
Gruß Erik