studyklar
GdI 2 · Probeklausur Teil 1 · Aufgabe 6

Fahrtdauer: erst statische Methode, dann Instanzmethode

Hamburg–München, 791,6 Kilometer: Wie lange dauert die Fahrt? Dieselbe Rechnung schreiben wir zweimal, erst als statische Methode in FahrtApp, dann als Methode der Klasse Fahrt. Am Aufruf sieht man den Unterschied. Rechts stehen die Klassen des aktuellen Teils, die Zeilen zum Schritt sind hervorgehoben. Mit Weiter geht es Schritt für Schritt voran.

Die Aufgabe

Aufgabe 6

Gegeben ist eine Klasse „Fahrt“. Sie verfügt über die Attribute „startOrt“ und „zielOrt“ (beides Strings) sowie „streckenlaenge“ (Fließkommazahl). Die Klasse enthält den kanonischen Konstruktor, der alle Attribute mit Werten füllt, sowie die Methode „getStreckenlaenge“.

Weiterhin gibt es eine Klasse „FahrtApp“ mit einer main-Methode. In der main-Methode wird zunächst ein Fahrt-Objekt angelegt, z. B.:

        Fahrt fahrt = new Fahrt("Hamburg", "München", 791.6);

a) Schreiben Sie in der Klasse „FahrtApp“ eine statische Methode „berechneFahrtdauer“. Beim Aufruf dieser Methode wird ihr ein Fahrt-Objekt übergeben, sowie die Geschwindigkeit als Fließkommazahl. Sie gibt die Fahrtdauer als Fließkommazahl zurück. Die Fahrtdauer wird berechnet, indem man die Streckenlänge durch die Geschwindigkeit dividiert.

b) In der main-Methode soll die Methode „berechneFahrtdauer“ mit dem oben angelegten Fahrt-Objekt aufgerufen und in einer Variablen gespeichert werden. Schreiben Sie dies.

c) Nun soll die obige Berechnung nicht mehr durch eine statische Methode erfolgen, sondern durch eine gewöhnliche Instanzmethode der Klasse „Fahrt“. Schreiben Sie diese Methode.

d) Wie ändert sich dadurch der Aufruf der Methode aus Aufgabenteil b)?

Die Fahrtdauer ist Strecke geteilt durch Geschwindigkeit. Bei Kilometern und Kilometern pro Stunde kommt die Dauer in Stunden heraus.

Gefragt ist zweimal dieselbe Rechnung an zwei Orten. Eine statische Methode (mit static) gehört zur Klasse und bekommt alles über Parameter, auch die Fahrt. Eine Instanzmethode (ohne static) gehört zu einem Objekt, hier einer Fahrt. Sie kennt die Attribute dieses Objekts schon.

Merke: Statisch: methode(objekt, wert), das Objekt ist ein Parameter. Instanzmethode: objekt.methode(wert), das Objekt steht vor dem Punkt.
  1. a) Statische Methode berechneFahrtdauer in FahrtApp.
  2. b) Sie in main aufrufen und das Ergebnis speichern.
  3. c) Dieselbe Rechnung als Instanzmethode in Fahrt.
  4. d) Den Aufruf aus b) anpassen.

Die gegebene Klasse Fahrt

public class Fahrt {    private String startOrt;    private String zielOrt;    private double streckenlaenge; // in Kilometern     public Fahrt(String startOrt, String zielOrt, double streckenlaenge) {        this.startOrt = startOrt;        this.zielOrt = zielOrt;        this.streckenlaenge = streckenlaenge;    }     public double getStreckenlaenge() {        return streckenlaenge;    }}

Die Aufgabe beschreibt Fahrt nur in Worten. Damit wir alles ausführen können, steht sie hier ausgeschrieben. In der Klausur muss man sie nicht schreiben. Die Aufgabe nennt keine Einheit; wir nehmen an, dass 791.6 für Kilometer steht.

Wichtig für später: streckenlaenge ist private. Andere Klassen kommen nur über getStreckenlaenge() an den Wert.

Aus Vorlesung 5, Folie 12 („Probleme beim direkten Zugriff auf Attribute“): Attribute sind private; von außen liest man sie über getter-Methoden.

Der Kopf der statischen Methode

    public static double berechneFahrtdauer(Fahrt fahrt, double geschwindigkeit) {

Die Aufgabe gibt alles vor: static, Rückgabe als Fließkommazahl, also double, Name berechneFahrtdauer. Übergeben werden zwei Dinge, also zwei Parameter: ein Objekt vom Typ Fahrt und die Geschwindigkeit als double.

Aus Vorlesung 5, Folie 16 („Objekte als Methoden-Parameter: Call-by-Reference“): Ein Parameter kann den Typ einer eigenen Klasse haben; die Methode bekommt dann den Verweis auf das Objekt.
Noch 7 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Fahrt.java und FahrtApp.java

Teil a) und b)

Abbildung 1Fahrt.java und FahrtApp.java

Teil a) und b)

public class Fahrt {    private String startOrt;    private String zielOrt;    private double streckenlaenge; // in Kilometern     public Fahrt(String startOrt, String zielOrt, double streckenlaenge) {        this.startOrt = startOrt;        this.zielOrt = zielOrt;        this.streckenlaenge = streckenlaenge;    }     public double getStreckenlaenge() {        return streckenlaenge;    }}
public class FahrtApp {     public static void main(String[] args) {        Fahrt fahrt = new Fahrt("Hamburg", "München", 791.6);        double dauer = berechneFahrtdauer(fahrt, 100.0);        System.out.println(dauer);    }     public static double berechneFahrtdauer(Fahrt fahrt, double geschwindigkeit) {        return fahrt.getStreckenlaenge() / geschwindigkeit;    }}
LegendeDie gegebene Klasse Fahrt und FahrtApp.