Videos auf der Lernplattform
AFB I–IIAuf der Lernplattform der Schule können Videos hochgeladen werden. Erklärvideos für ein Unterrichtsfach sind besondere Videos: Sie heißen Tutorials und speichern zusätzlich das Fach. Die Plattform erzeugt ein Video v = new Video("Skate-Tricks", 12) und ein Tutorial t = new Tutorial("Brüche kürzen", 8, "Mathe").
Lukas hat vorher eine eigene Fassung der Unterklasse geschrieben, die javac nicht übersetzt (Material 3).
- - titel: Zeichenkette
- - minuten: Ganzzahl
- c Video(titel: Zeichenkette, minuten: Ganzzahl)
- + getTitel(): Zeichenkette
- + getMinuten(): Ganzzahl
- + beschreibung(): Zeichenkette
- - fach: Zeichenkette
- c Tutorial(titel: Zeichenkette, minuten: Ganzzahl, fach: Zeichenkette)
- + getFach(): Zeichenkette
- + beschreibung(): Zeichenkette
public class Video {
private String titel;
private int minuten;
public Video(String titel, int minuten) {
this.titel = titel;
this.minuten = minuten;
}
public String getTitel() {
return titel;
}
public int getMinuten() {
return minuten;
}
public String beschreibung() {
return titel + " (" + minuten + " min)";
}
}
public class Tutorial extends Video {
private String fach;
public Tutorial(String titel, int minuten, String fach) {
super(titel, minuten);
this.fach = fach;
}
public String getFach() {
return fach;
}
@Override
public String beschreibung() {
return fach + ": " + super.beschreibung();
}
}
public Tutorial(String titel, int minuten, String fach) {
this.fach = fach;
super(titel, minuten);
}
public String kurz() {
return titel;
}
javac meldet zwei Fehler.- Ordne jede Methode, die ein
Tutorial-Objekt aufrufen kann, einer der Gruppen „geerbt“, „neu“ oder „überschrieben“ zu. - Bestimme die Ergebnisse von
v.beschreibung(),t.beschreibung(),t.getMinuten()undv.getFach(). - Erläutere die beiden Fehler in Lukas’ Fassung (Material 3) und wie man sie vermeidet.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
super.beschreibung() ruft die Fassung der Oberklasse auf. Hat ein Video ein Fach?Hinweis zu Aufgabe c)
private-Attribut zugreifen – auch eine Unterklasse?Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
Geerbt: getTitel(), getMinuten(). Neu: getFach(). Überschrieben: beschreibung() – gleiche Signatur wie in Video, gekennzeichnet mit @Override.
Erwartungshorizont zu Aufgabe b)
v.beschreibung() → "Skate-Tricks (12 min)" (Fassung von Video).
t.beschreibung() → "Mathe: Brüche kürzen (8 min)": Die überschriebene Fassung von Tutorial läuft und setzt das Fach vor das Ergebnis von super.beschreibung().
t.getMinuten() → 8 (geerbt).
v.getFach() wird nicht übersetzt: cannot find symbol. Die Oberklasse kennt die Methoden ihrer Unterklassen nicht – vererbt wird nur von oben nach unten.
Erwartungshorizont zu Aufgabe c)
Fehler 1: super(titel, minuten); muss die erste Anweisung im Konstruktor sein (call to super must be first statement in constructor). Erst wird der Video-Teil des Objekts eingerichtet, dann der Tutorial-Teil. Lösung: die beiden Zeilen tauschen.
Fehler 2: titel ist in Video private. Auch die Unterklasse darf nicht direkt darauf zugreifen (titel has private access in Video). Lösung: den geerbten Getter benutzen, return getTitel();.
Livestream vom Schulkonzert
AFB II–IIIDie Plattform aus Aufgabe 1 soll auch Livestreams zeigen, z. B. vom Schulkonzert. Ein Livestream hat wie jedes Video einen Titel und eine geplante Länge in Minuten. Zusätzlich zählt er die Zuschauerinnen und Zuschauer (Start bei 0) und weiß, ob er gerade live ist (zu Beginn: ja). Er kann beendet werden. Die Beschreibung lautet während der Sendung z. B. LIVE: Schulkonzert – 3 schauen zu, danach Aufzeichnung: Schulkonzert (90 min).
Ein Mitschüler schlägt außerdem vor, eine Klasse Kanal (z. B. der Kanal der Theater-AG mit all seinen Videos) als class Kanal extends Video anzulegen, „weil ein Kanal ja auch einen Titel hat“.
- Entwirf die Klassenkarte der Klasse
Livestreamund zeichne ihre Beziehung zuVideoein. Nimm nur auf, was neu oder überschrieben ist. - Implementiere die Klasse
Livestreamso, dass die Beschreibungen genau wie im Text aussehen. - Nimm Stellung zum Vorschlag
class Kanal extends Video.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
super(…) in der ersten Zeile. Für den Titel brauchst du den Getter. Die „Aufzeichnung“-Beschreibung kann super.beschreibung() nutzen.Hinweis zu Aufgabe c)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
- …
- - zuschauer: Ganzzahl
- - live: Wahrheitswert
- c Livestream(titel: Zeichenkette, minuten: Ganzzahl)
- + zuschauerKommt()
- + beenden()
- + getZuschauer(): Ganzzahl
- + beschreibung(): Zeichenkette
Methodennamen dürfen abweichen. Titel und Minuten stehen nicht noch einmal in der Karte, weil sie geerbt werden; beschreibung() steht dort, weil sie überschrieben wird.
Erwartungshorizont zu Aufgabe b)
public class Livestream extends Video {
private int zuschauer;
private boolean live;
public Livestream(String titel, int minuten) {
super(titel, minuten);
zuschauer = 0;
live = true;
}
public void zuschauerKommt() {
zuschauer = zuschauer + 1;
}
public void beenden() {
live = false;
}
public int getZuschauer() {
return zuschauer;
}
@Override
public String beschreibung() {
if (live) {
return "LIVE: " + getTitel() + " – " + zuschauer + " schauen zu";
}
return "Aufzeichnung: " + super.beschreibung();
}
}
Test: new Livestream("Schulkonzert", 90), dreimal zuschauerKommt() → LIVE: Schulkonzert – 3 schauen zu; nach beenden() → Aufzeichnung: Schulkonzert (90 min).
Erwartungshorizont zu Aufgabe c)
Prüfung: Vererbung passt nur, wenn die Unterklasse eine besondere Art der Oberklasse ist. „Ein Kanal ist ein Video“ ist falsch: Ein Kanal enthält viele Videos. Mit extends erbte der Kanal getMinuten() und beschreibung() – eine Länge in Minuten hat ein Kanal aber gar nicht. Dass beide einen Titel haben, reicht für Vererbung nicht.
Position: Der Vorschlag ist abzulehnen. Besser ist eine eigene Klasse Kanal mit einem Namen und einer ArrayList<Video>; zwischen Kanal und Video besteht eine „hat“-Beziehung (Assoziation). Jede begründete Position, die den „ist ein“-Test anwendet, ist vollständig.
