Laden...

Funktionen zusammenfassen in Interface

Erstellt von key-board vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.265 Views
K
key-board Themenstarter:in
33 Beiträge seit 2013
vor 8 Jahren
Funktionen zusammenfassen in Interface

Hallo

zur Programmstruktur:
Habe mir mehrere Klassen definiert, welche Funktionen beinhalten
z.B. eine Klasse Speicher mit der Funktion Laden (ich tue etwas rein), Entladen (ich entnehme etwas) und SOC (ich bekomme den aktuellen Ladezustand)
und eine Klasse PSKW(Pumpspeicherkraftwerk) mit der Funktion Hochpumpen und ablassen, die mir jeweils eine elektrische Leistung zurück geben.

Natürlich hat ein solches PSKW 2 Wasserbecken welche im weitesten Sinne als Speicher betrachtet werden können.

In der Form1 Klasse Funktion sind die ganzen Klassen instanziert. Zuerst hatte ich es so dass ich die Klassen von Form1 habe erben lassen um in der Form1 geschriebene Funktionen wie int PSKW_getSOC() welche mir den Speicherinhalt meinetwegen der instannzierten Speicherklasse Oberbecken zurückgibt nutzen zu können

Speicher Oberbecken = new Speicher();
PSKW pskw = new PSKW();
int PSKW_getSOC() 
{
  return(Oberbecken.SOC;
}

class Speicher : Form1

Beim Programmieren gab es keine Fehlermeldungen aber beim Ausführen hatte ich immer StackOverflow, wass durch Speicher : Form1 ausgelöst wurde.

ist dass was ich vor habe mit interface zu lösen oder ist das garnicht machbar?

mein Ansatz ist


interface Ispeicher
     {
         bool charge(int value);
         bool discharge(int value);
         int soc();
         

     }

class Speicher : Ispeicher
{...}
class PSKW : Ispeicher
{...}



aber irgendwie komme ich nicht darauf wie ich pskw dazu bringe auf die Oberbecken instanz von Speicher zuzugreifen:( es ist zum verzweifeln

ist mein Ansatz grundsätzlich richtig, ich setze ihn nur falsch um oder völliger blödsinn? Denn wenn Blödsinn dann brauch ich da auch nicht weiter grübeln.

Wenn es an der Umsetzung hapert kann mir da einer auf die Sprünge helfen?

C
180 Beiträge seit 2011
vor 8 Jahren

Hallo,
also ich hab nich wirklich verstanden was du vorhast oder was dein Ziel ist ... aber es sieht für mich so aus, das du in deiner PSKW Klasse die 2 Speicher Objekte Definieren müsstest.
Dann definierst du in der PSKW klasse eben die Methoden die du brauchst

189 Beiträge seit 2014
vor 8 Jahren

Hallo key-board,

könntest du bitte dein Anliegen nochmal etwas strukturierter Darstellen - ich seh auch nicht ganz durch was du nun wirlick willst.

Noch ein paar Anmerkungen allgemeiner Art:

Es ist gut, dass du dich schon mal entschieden hast nicht von Form1 abzuleiten -> Da das ja deine ganz "normalen" Objekte zu sein scheinen (die primär nix mit dem GUI zu tun ham), wird das extrem unsauberer Mist.
Würdest du mit WPF und MVVM arbeiten, wärst du da schonmal "gezwungen" wesentlich besseren Code zu schreiben.
Aber auch so sollte gelten (was ja auch mit WinForms geht): Mindestens die Trennung von GUI <-> Logik und Daten. Idealerweise [Artikel] Drei-Schichten-Architektur verwenden.
Dein Programm sollte genauso ohne größeren Aufwand z.B. auch in der Konsole laufen können.
Und dein Code-Stil könnte auch eine kleine Aufhübschung gebrauchen. 😉
Das Mixen von Deutsch und Englisch ist schonmal recht unschön.

Ich möchte dich damit nicht gängeln, aber das sind so Sachen, die einem (mindestens später, z.B. bei späteren Code-Änderungen) die Arbeit sehr erleichtern.

VG Ezio

K
key-board Themenstarter:in
33 Beiträge seit 2013
vor 8 Jahren

Hallo

Ich versuche es zu strukturieren

Ziel der Software: das ganze wird eine Energiesimulation, welche in "echtzeit" (ich weiß dass der begriff hier nicht richtig ist weiß aber nicht wies besser benannt wird) auf Benutzereingaben sowie Messwerten (vom Arduino gemessen und an programm gesendet) reagiert. Wie eine art "Computerspiel" soll der Benutzer für eine stabile Energieversorgung sorgen.

Aufbau:

Ich habe mir die verschiedenen Energieanlagen jeweils als eigene Klasse definiert, sodass ich wenn ich meinetwegen 2 PV Anlagen im Netz hab nicht 2 mal den Code hinklatschen muss sondern einfach 2 mal instanzieren mit unterschiedlichem Namen. (Arbeit sparen und Codeänderung nur an einer stelle)

Jetzt will ich dass eine Klasse (z.B.PSKW) auf eine andere Klasse (z.B.Speicher) zugriff hat um in dem Fall das Ober und das Unterbecken abzubilden.

Das Mainprogramm ruft Zyklisch (Timer Tick) alle Instanzen aller Klassen auf die jeweils einen RUN() member haben welcher die Berechnung auslöst.
Zuerst die der Energieanlagen und sammelt alle Leistungen, Füllstände und sonstige Informationen.
Danach werden Weitere Instanzen aufgerufen der Classe Knotenpunkt.
Diese errechnen die Leistungsflüsse in den Kabeln zwischen den Knotenpunkten.

Ich brauche also die Möglichkeit in den Klassen andere Klassen aufzurufen und die Daten alle in der Main zu sammeln.

Jetzt beim Schreiben kahm mir ein neuer Lösungsansatz aber den Probier ich erst aus^^ is wie beim Publikumsjoker. Da sollte man vorher auch nicht sagen was man denkt^^

W
955 Beiträge seit 2010
vor 8 Jahren

Hallo,

* ich würde zwei Objekte der Klasse Speicher machen
* eine zweite Klasse Pumpspeicherwerk mit einem Objekt
* dieses Pumpspeicherwerk hat die beiden Speicher als Properties "SpeicherOben", "SpeicherUnten"
* und kann beim Hochpumpen Wasser aus SpeicherUnten unter Energieaufwand in SpeicherOben transportieren und vice versa.