Java Methode ind Klasse Implementieren?

ZaoDaDong  24.09.2023, 20:45

Mit anderen Worten: Du weißt überhaupt nichts vom Programmieren mit Java?

Jikaya 
Fragesteller
 24.09.2023, 21:14

Habe ich das behauptet?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Für den Anfang musst du wissen, wie sich Methoden zusammensetzen.

Sie bestehen aus einem Methodenkopf und einem Methodenkörper. Den Aufbau kann man so darstellen:

<modifiers> <generic type parameter> <return type> <method name>(<parameter list>) <throws declaration> {
  // body ...
}

Dabei sind von den Bestandteilen im Kopf nur die explizite Angabe von Rückgabetyp, Methodenname und Parameterliste (mindestens die runden Klammern) zwingend erforderlich.

Beispiel:

void doSomething() {
  /* ... */
}

Alle anderen Bestandteile sind fallabhängig. Ein generischer Typparameter muss beispielsweise nur angegeben werden, sofern man eine generische Methode schreiben möchte oder eine throws-Angabe ist erforderlich, sollte im Methodenkörper eine Exception geworfen werden, auf die bereits zur Kompilierzeit geprüft wird (checked exception). Mehr zu alldem kannst du beispielsweise im Openbook Java ist auch eine Insel nachlesen.

Hinsichtlich der Modifikatoren gibt es eine größere Vielzahl mit unterschiedlicher Wirkung (z.B. abstract, final, static, volatile oder Zugriffsmodifikatoren wie public, private, ...).

Ein paar Beispiele:

public void doSomething() {
  /* ... */
}

final void doSomethingAsWell() {
  /* ... */
}

private static void doSomethingElse() {
  /* ... */
}

Einer Methode können z.T. mehrere Modifikatoren zugeordnet werden (siehe Beispiel 3), allerdings mit (logischen) Einschränkungen. Eine Methode kann zum Beispiel nur einen Zugriffsmodifikator besitzen oder eine Kombination wie abstract mit static funktioniert nicht. Auch zum Thema Modifikatoren findest du mehr im oben verlinkten Buch.

Für deine Aufgabe ist es nun noch relevant, dass du die UML-Syntax des Diagramms verstehst. Alle Methoden werden stets im untersten Abschnitt einer Box aufgelistet. Ein Eintrag besteht hierbei aus diesen Informationen:

  • Dem Zugriffsmodifikator (+ für public, ~ für package-private, # für protected, - für private)
  • Dem Methodennamen
  • Der Parameterliste
  • Dem Rückgabetyp

Eine Besonderheit stellt der Konstruktor dar, der ebenso in dieser Liste aufgeführt wird. Er ist an dem fehlenden Rückgabetyp und seinem Namen erkennbar.

Eine Beispielimplementation einer Methode aus dem Diagramm:

class Verlademanager {
  /* ... */

  public Spur gibWartespurMitNr(int pSpurNr) {
    return wartespuren[pSpurNr];
  }
}

Die Logik, die im Methodenkörper ausgeführt werden soll, kannst du anhand des Methodennamens sowie anderer Informationen aus dem Diagramm (z.B. den Beziehungen der Klassen untereinander) ableiten.

Als ersten Schritt musst du quasi nur die Dinge aus dem UML-Diagramm abschreiben. Z.B. für Spur:

import java.util.Queue;

public class Spur {
    private double maxLaenge;

    // Aus der Beziehung zu Queue
    private Queue<Fahrzeug> schlange; 

    public Spur(double pMaxLaenge) {

    }

    public boolean istLeer() {

    }

    public Fahrzeug gibErstesFahrzeug() {

    }

    public void entferneErstesFahrzeug() {

    }

    public boolean kannAufnehmen(Fahrzeug pFahrzeug) {

    }

    public void nimmAuf(Fahrzeug pFahrzeug) {

    }

    // Aus Aufgabe c
    public double ermittleGesamtgewicht() {

    }
}

Im nächsten Schritt schreibst du dann zwischen die geschweiften Klammern den Code für die jeweilige Methode.

Hier auf gutefrage.net ist es immer sehr verpönt, wenn man den Eindruck hat, dass die Antworter einfach die Hausaufgaben von jemand anderem erledigen sollen, ohne dass man eine erkennbare Eigenleistung sieht. Von daher meine Bitte: Baue die Klassen so weit, wie du es hinkriegst und frage dann bei einem konkreten Problem noch mal. Lade deinen Code am besten irgendwo hoch, wo wir ihn uns anschauen können (am Besten auf Github oder zumindest z.B. auf pastebin.org)