Entwickler-Ecke
C# - Die Sprache - Wasserpumpe
spitzname - Do 06.05.10 00:00
Titel: Wasserpumpe
Hallo, ich habe folgendes Problem zulösen und komme zur Zeit leider nicht weiter, die beigefügte Skizze soll mit folgenden 4 Klassen realisiert werden, die Klassen können biliebig ergänzt werden.
Das Wasser Läuft aus wenn die Schranke offen ist sonst bleibt das Wasser im Becken.
Der Knopf eins macht die Schranke auf der Knopf 2, oder wieder Knopf 1 wieder zu u.s.w.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| class Pumpenbetrieb { static void Main(string[] args) {
} }ende class Pumpenbetrieb |
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| public class Knopf { public Knopf() { }
public void SetKnopf(Schranke aktSchranke) { }
void pushKnopf() { } } |
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| public class Schranke { public Schranke() { }
public void SetWasser( Wasser aktWasser ) {}
public void HochRunterSchranke( ) { }
public int Status { get { } }
} |
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| public class Wasser { public Wasser() { }
public void Auf_oder_Zu_Wasser( ) {}
public int Status { get { } }
} |
Ich habe mir erstmal überlegt, dass dieses Problem mit Delegates zulösen ist, und so habe ich angefangen, weiss aber nicht genau ob das Sinn macht.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105:
| public delegate void KnopfSchranke(Schranke aktSchranke); public delegate void SchrankeWasser(Wasser aktWasser);
class Pumpenbetrieb { static void Main(string[] args) {
Knopf k = new Knopf(); KnopfSchranke Del_Knopf1; Del_Knopf1 = k.SetSchranke; Schranke s = new Schranke Schranke(); SchrankeWasser Del_Schranke; Del_Schranke= s.SetWasser;
} }ende class Pumpenbetrieb
public class Knopf {
private Schranke _aktSchranke; public Knopf() { _aktSchranke = null; }
public void SetKnopf(Schranke aktSchranke) { this._aktSchranke = aktSchranke; }
void pushKnopf() { }
}
public class Schranke { private Wasser aktWasser; private int status = Aus();
public Schranke() { aktWasser = null; status = 0;}
public void SetWasser( Wasser aktWasser ) { this.aktWasser = aktWasser; }
public void HochRunterSchranke( ) { if (this.status == Aus()) this.status = Ein(); else { this.status = Aus(); } }
public int Status { get { return this.status; } }
public static int Ein() { return 1; }
public static int Aus() { return 0; }
} public class Wasser { int aus;
public Wasser() { aus=0;}
public void Auf_oder_Zu_Wasser( ) {}
public int Status { get { } }
} |
Würde mich über Ideen und Tipps freuen,
gruß spitzname
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
spitzname - Do 06.05.10 00:05
danke voraus
danielf - Do 06.05.10 08:17
Delegates? Ich glaub du weißt nicht was das sind. Bitte verwende die korrekten Bezeichnungen. Das ist wichtig, damit wir wissen was du meinst. Außerdem hab ich dir im letzten Posten die Vorgehensweise mit Properties gezeigt - schade dass du dies ignorierst und unnötige und hässliche Setter Methode einbaust.
Zur Problembeschreibung sagst du sehr wenig. Ich kann mir nicht vorstellen, was passiert, wenn Knopf 1 bzw. Schrank1 Offen ist. Ist das Becken dann von jetzt auf nachher leer? Den Zulauf hast du gar nicht beschrieben und wieso müssen es vier Klassen sein?
Die OOP versucht reale Dinge in Klassen abzubilden. Deshalb mach das einfache:
Das Becken besteht aus einem Volumen, Zu- und Abläufe. (Ganz konkret wahrscheinlich noch mehr Dinge wie Inhalt, Farbe, Form, Gewicht... aber das ist soweit mal uninteressant weil auf der Skizze ja auch nicht erkennbar. Dementsprechend ergibt sich folgende Klasse Becken:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:
| class Becken { public float Volumen { get; private set; }
public float Inhalt { get; private set; }
public List<Kanal> Zulaeufe { get; set; }
public List<Kanal> Ablaeufe { get; set; }
public Becken(float volumen) { Volumen = volumen; }
private void UpdateInhalt() { VerarbeiteKanal(false, Ablaufe);
VerarbeiteKanal(true, Zulaufe); }
private void VerarbeiteKanaele(bool isZulauf, List<Kanal> kanaele) { foreach(var kanal in kanaele) { if (kanal .Offen) { Inhalt += isZulauf ? kanal .Durchflussmenge : -kanal .Durchflussmenge; } } } } |
Damit wäre das Becken beschrieben ...
Ein Kanal läßt sich daraus auch schon bleiten:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| public class Kanal { public bool Offen { get; set; } public float Durchflussmenge { get; set; } } |
In Kombination Kann das dann so aussehen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| Becken becken = new Becken(100f);
becken.Ablaufe.Add(new Kanal{ Durchflussmenge = 5f; }); becken.Ablaufe.Add(new Kanal{ Durchflussmenge = 2f; });
becken.Zulaeufe.Add(new Kanal{ Durchflussmenge = 3f; });
becken.Ablaeufe[0].Offen = becken.Ablaeufe[0].Offen; |
Soviel mal zur Inspiration.
Gruß
spitzname - Do 06.05.10 17:54
Vier Klassen sind aus didaktischen Gründen nötig, da ich die Komunikation zwischen Klassen üben und somit auch verstehen wollte. Danke dir für die viele Ideen :D , ich werde mir auf jeden Fall das eine oder das andere abschauen und versuchen es umzusetzen.
gruß spitzname
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!