C# OOP: Getränkeautomat?

1 Antwort

Sinnvoll wäre es sicherlich, erst einmal ein Klassendiagramm anzulegen, um einen ersten Überblick zu erhalten, was denn so benötigt wird. Auch ein Use-Case-Diagramm für die erste Beschreibung des Systems bietet sich an. So lassen sich Stakeholder (wie die Automatennutzer und Automatenbesitzer) ermitteln.

Wie erstelle ich beispielsweise die Funktion Rückgabegeld

Eine Methode setzt sich im Kopf aus Modifikatoren (public, private, static, u.ä.), einem Rückgabetyp, einem Namen und einer Parameterliste zusammen.

<modifier> <return-type> <method-name>(<parameters>)
{
}

// example:
public int GetSum(int numberOne, int numberTwo)
{
  return numberOne + numberTwo;
}

Überlege dir erst, was deine Methode macht, was sie dafür für Eingaben von außen braucht (Parameter) und was sie zurückgibt (Rückgabetyp).

Als Name würde sich übrigens GibRückgabegeld besser eignen. So ist sofort deutlich, dass es sich um eine Methode handelt und es ist klar, was sie macht (sie gibt das Geld zurück).

(...) und wie rufe ich diese sinnvoll in der Main auf?

Nun, spiel doch das Szenario eines Nutzers einmal Schritt für Schritt nach. Er wählt ein Getränk und steckt sein Geld dafür ein. Dann wartet er einmal auf die Dose und im Anschluss noch auf das Rückgabegeld.

nutzer.waehleDose(automat, dosenmarke, geld)
nutzer.nimmDose(automat.gibDose())
nutzer.nimmGeld(automat.gibRueckgabegeld())

Das ist eine Möglichkeit der Ablauffolge. Man kann das auch anders formulieren. Zum Beispiel so:

nutzer.nimmDose(automat.gibDose(dosenmarke, geld))
nutzer.nimmGeld(automat.gibRueckgabegeld())
Oder die Klasse "Coin" für die Geldeinheit... welche Methoden braucht denn die Klasse?

Zuerst einmal würde ich klären, welche Eigenschaften sie überhaupt hält. Wenn du beispielsweise nur einen numerischen Betrag speicherst, könnte man die Klasse direkt weglassen und ein Werttyp (float / double / decimal) würde vollkommen ausreichen.

Aber vielleicht soll es noch andere Eigenschaften geben, wie den Münztyp (1€, 2€, ...) anhand dessen später geschaut werden kann, ob die Münze in den Automat passt.

Solche Eigenschaften sollten über eine Schnittstelle von außen änderbar sein. In C# verwendet man dafür allerdings Properties.

Beispiel:

class Person
{
  public string Name { get; set; }
}

// Main:
var person = new Person();
person.Name = "Thomas";
Console.WriteLine(person.Name); // Thomas

Ob deine Klasse Coin eine Methode besitzt bzw. braucht, ist deine Designentscheidung. Du musst dafür wissen, ob sie aktiv irgendwelche Aktionen ausführt oder nicht. Wenn es keine solchen gibt, merkt sie sich halt nur Daten (Wert, u.ä.), was auch völlig okay ist.


kl4vd14 
Beitragsersteller
 02.11.2022, 16:37

danke! du bisch der beste!

0