Designfrage
-
Hi zusammen, ich hab mal ne kleine Designfrage, weil es mir irgendwie vorkommt, als wäre das alles Mist wie ich das geplant hab. Also angenommen ich habe ein System wo man (der Einfachheit halber) Bälle verwalten kann. Dazu gibt es ja verschiedene Arten von Bällen Handbälle Fussbälle etc. So jetzt soll man im System einen Neuen Ball anlegen können. z.B. ein Handball der Marke XYZ Größe ...
Jetzt habe ich mir gedacht ich mache eine abstrakte Klasse Ball von der leite ich dann die verschiedenen sorten von Bällen ab also Handball etc. und wenn jetzt ein neuer Ball angelegt wird erzeuge ich ein neues Objekt von der Klasse Handball.
Jetzt ist halt zum ersten mal die Frage ist das sinnvoll wie ich das vorhab oder einfach scheiße? Wenn es sinnvoll ist, wo verwalte ich welche Informationen und wie? Ist es sinvoll alle Infos in Bälle zu verwalten oder in den Unterklassen oder im Objekt selbst.
Ich glaub ich steh heut grad aufm schlauch.Danke
-
macht imho nur sinn, wenn sich die Eigenschaften der Ballarten voneinander
unterscheiden. Ansonsten wuerde ich einfach die Art des Balles in der Klasse ueber ein enum definieren.
-
Hm gut das wir darüber gesprochen haben. Und dann das Objekt erzeugen und ihm einfach als Property die Art geben? Oder wie löse ich dann das?
-
ach ich sag doch ich steh heute aufm schlauch! Setze ich dann einfach im Konstruktor!
Oder?
-
ich arbeite zur Zeit an einer Temperaturschrank-Steuerung, die verschiedene Schränke steuern sollte.
dazu habe ich eine abstrakte Klasse TSchrank implementiert, die alle nötigen Sachen die jeder Schrank hat bereitstellt, bzw abstrakte Funktionen, die bei jedem Schrank implementiert werden müssen.
Dann hab ich eben die Klasse jeweils für jeden Typ abgeleitet.
Da nun mehrer Schränke gleichzeitig gesteuert werden, kann ich einen Array der abstrakten Klasse definieren, in der ich die jeweiligen Typen ablege, und muss mich dann später nicht mehr darum kümmern, welche Typ es dann wirklich ist.
Funktioniert bei mir ganz gut, und wenn ein weiterer Schrank hinzukommt ist es nur minimaler Aufwand ihn mit aufzunehmen
-
Tequilla schrieb:
...
Dann hab ich eben die Klasse jeweils für jeden Typ abgeleitet.Also im Prinzip genau wie ich das vorhab oder?
Tequilla schrieb:
...
Da nun mehrer Schränke gleichzeitig gesteuert werden, kann ich einen Array der abstrakten Klasse definieren, in der ich die jeweiligen Typen ablege, und muss mich dann später nicht mehr darum kümmern, welche Typ es dann wirklich ist.
...Kannst du mir das etwas genauer erläutern? Versteh ich nicht wirklich.
-
Ich hoffe das kleine Beispiel macht es deutlich
abstract public class TSchrank { protected string Name; public TSchrank( string name ) { this.name = name; } abstract public double GetTemperatur(); } public class Horstmann { public Horstmann( string name ) : base( name ) { // spezielle Sachen die eben dieser Schrank macht } public override double GetTemperatur() { // hole die Temperatur } } public class Heraeus { public Heraeus( string name ) : base( name ) { // spezielle Sachen die eben dieser Schrank macht } public override double GetTemperatur() { // hole die Temperatur } } main() { TSchrank[] tschrank = new TSchrank[2]; tschrank[0] = Hortsmann( "Sepp" ); tschrank[1] = Heraeus( "Max" ); foreach( TSchrank ts in tschrank ) { double temp = ts.GetTemperatur(); } }
-
WOW cool! Erst mal vielen Dank für die Bemühungen, find ich super nett!
das hat es wirklich verständlicher gemacht aber eine Frage habe ich.
Das hier verstehe ich nicht:TSchrank[] tschrank = new TSchrank[2];
woher kommt [2] bzw was soll das bewirken?
-
Ohhhh, da merkt man denn c++ programmierer
vergiss die "2"
richtig wäre
TSchrank[] tschrank = new TSchrank[] { new Hortsmann( "Sepp" ), new Heraeus( "Max" );
-
jetzt hab SOGAR ich das verstanden! Einfach in ein Schrankarray! Wie du schon zu begin geschrieben hast!
Jetzt versteh ich auch den ersten Beitrag
-
Tequilla schrieb:
Ohhhh, da merkt man denn c++ programmierer
Macht nichts! Wir C-Sahrpler sind sehr tolerant
-
abbes schrieb:
Tequilla schrieb:
Ohhhh, da merkt man denn c++ programmierer
Macht nichts! Wir C-Sahrpler sind sehr tolerant
Das trauige ist ja, das ich c++ seit ewig nicht mehr programmiert habe
-
Wenn wir gard schon mal hier sind, also die Objekte sollen nachher quasi hinter kleinen Grafiken stecken. Jetzt die Frage wenn der User so ne neue Grafik erstellen will, schreib ich dann die Werte erst mal in ne kleine DB und wenn er es dann auf die Zeichenfläche legt erzeuge ich dynamisch zur Laufzeit das Objekt oder?
Weil wenn ich beim erstellen immer Objekte erstelle und die dann versuche über die Dauer des Programms hinaus zu speichern bzw. bei Neustart gleich wieder alle erstelle, dann hab ich ja irgendwann milliarden Objekte rumfahren die ich eigentlich gar nicht brauche oder?
-
Wenn eine DB vorhanden ist würd ich sagen warum nicht. Du könntest es aber auch in ein XML abspeichern und dann eben die benötigten Knoten einlesen.
Wobei meiner Meinung nach dann eben die Lösung mit der DB wahrscheinlich die einfachere und eleganter Lösung sein wird.
-
hm neee die Idee mit dem XML finde ich gar nicht so schlecht! Eher sogar gut! Zumindest mal um dann die Verknüpfungen der Grafiken zu den Objekten zu speichern. Sprich Datei speichern => Verknüpfungen in XML schreiben.
Die einzelnen Daten zu Objekten in XML zu speichern bedeutet für mich zwar mehr Programmieraufwand, ist aber in meinen Augen die schönere Lösung. Ich mein wenn ich sag ich brauch nen SQL Server dann krieg ich den auch. Also die DB wäre eigentlich nicht das Problem aber die XML - Idee finde ich Klasse. Man merkt einfach dass ich noch nicht solange in der "moderenen Programmierwelt" zu besuch bin
-
Also ich hab das jetzt mal mit XML probiert und das klappt saugut! Das werde ich auf jeden Fall weiterführen! Vielen Dank für die Idee, so komme ich perfekt um die DB rum.
Was meinst du / ihr jeden Tester in ein eigenes XML, dann können mehrere User ohne Probleme tester von einem Rechner auf den anderen portieren oder lieber alle Tester in ein XML um nicht soviele Dateien zu bekommen und vielleicht andere Vorteile die ich grad nicht seh.
Welche Vorteile seht ihr bei welcher Variante?