Aufgabenblatt 10: Vererbung

Aufgabe 10.1: Flugzeuge

Im Rahmen einer Softwareentwicklung für die einheitliche Verwaltung von Flugzeugen wurde die Klasse Flugzeug entwickelt. Die Klasse ist auszugsweise angegeben:

public class Flugzeug {
  private String hersteller; // Herstellername
  private int maxSpeed; // Max. Geschwindigkeit
  private String serienNr; // Seriennummer
  private int anzahlFluegel = 1; // Anzahl Flügelpaare

  public Flugzeug(String hersteller, int maxSpeed, int anzahlFluegel) {
    this.hersteller = hersteller;
    this.maxSpeed = maxSpeed;
    this.anzahlFluegel = anzahlFluegel;
  }

  public String getSerienNr(){
    return serienNr;
  }

  protected void setSerienNr(String serienNr){
    this.serienNr = serienNr;
  }

  public int getMaxSpeed(){
    return maxSpeed;
  }

  public boolean getLooping() {
    return false;
  }

  // weitere Methoden
}

Schreiben Sie ausgehend von dieser Klasse eine Klasse Verkehrsflugzeug sowie eine Klasse Doppeldecker. Diese sollen folgende Spezifikation erfüllen:

Klasse Verkehrsflugzeug

  • Ein Verkehrsflugzeug ist ein Flugzeug, das genau ein Flügelpaar sowie eine zusätzliche Variable für die Anzahl der Passagiere hat.
  • Ein Verkehrsflugzeug fliegt keine Loopings. Stellen Sie deshalb sicher, dass die Methode getLooping immer false zurückgibt, auch in eventuellen Unterklassen von `Verkehrsflugzeug.
  • Schreiben Sie einen Konstruktor, mit dem ein Verkehrsflugzeug-Objekt erzeugt werden kann. Dazu müssen der Hersteller (String), die maximale Geschwindigkeit (int), die Seriennummer (String) und die Anzahl Passagiere (`int) angegeben werden.
  • Die Klasse Verkehrsflugzeug hat die Methoden getAnzahlPassagiere und setAnzahlPassagiere zum Abfragen und Setzen der Anzahl der Passagiere.

Klasse Doppeldecker

  • Ein Doppeldecker ist ein Flugzeug, das genau zwei Flügelpaare hat.
  • Weiter ist ein Doppeldecker akrobatiktauglich, d.h. man kann damit Loopings fliegen. Für einen Looping muss der Doppeldecker eine Mindestgeschwindigkeit von 320 km/h erreichen. Definieren Sie dafür eine Konstante LOOPINGSPEED. Die Methode getLooping soll true zurückgeben, falls die zulässige max. Geschwindigkeit (maxSpeed) grösser LOOPINGSPEED ist.
  • Die Klasse Doppeldecker hat eine Variable offenesCockpit vom Typ boolean. Sie gibt an, ob der Doppeldecker ein offenes oder geschlossenes Cockpit hat. Nachdem offenesCockpit gesetzt worden ist, darf sie nicht mehr verändert werden.
  • Schreiben Sie eine Methode isOffenesCockpit, die den Wert von offenesCockpit zurückgibt.
  • Schreiben Sie zwei Konstruktoren, mit denen ein Doppeldecker-Objekt initialisiert werden kann.
    • Der 1. Konstruktor hat folgende Parameter: Hersteller (String), maximale Geschwindigkeit (int), die Seriennummer (String) und einen boolean offenesCockpit, der angibt, ob der Doppeldecker ein offenes oder geschlossenes Cockpit hat
    • Der 2. Konstruktor hat folgende Parameter: Hersteller (String), maximale Geschwindigkeit (int), die Seriennummer (int). In diesem Fall ist der Wert für offenesCockpit immer true.
  • Die Klasse Doppeldecker soll nicht erweiterbar sein.

Hinweise:

  • Um zu verhindern, dass eine Methode in einer Kindklasse neu definiert werden kann, können Sie das Schlüsselwort final nutzen, z.B. public final void methode() { /* ... */ }.
  • Um zu verhindern, dass von einer Klasse überhaupt geerbt werden kann, können Sie diese als final kennzeichnen, z.B. public final class Klasse { /* ... */ }.
  • In einer vorherigen Version der Aufgabe kam das Schlüsselwort abstract vor. Dies wurde geändert.

(Diese Aufgabe stammt von https://home.zhaw.ch/~rea/ine2_fs10/Musteraufgaben_OOP.pdf)

Aufgabe 10.2: Palindrome erkennen

Ein Palindrom ist ein Wort oder ein Satz, das vorwärts und rückwärts gleich gelesen werden kann. Beispiele sind Rentner, Reliefpfeiler oder Nie Knabe, nie, grub Nero neben Orenburg eine Bank ein1.

Schreiben Sie eine Klasse, welche in der Lage ist zu erkennen, ob ein einzelnes Wort ein Palindrom ist. Dabei sollen Klein- und Großschreibung keine Rolle spielen.

Ihr Algorithmus muss dabei rekursiv implementiert sein!

Optionale Erweiterung: Idealerweise könnten Sie auch Nicht-Buchstaben überspringen und so die Prüfung ganzer Sätze ermöglichen.

Hinweise:

  • Die Klasse String besitzt zwei Methoden toUpperCase() und toLowerCase(), welche eine Zeichenkette komplett in Groß- oder Kleinbuchstaben umwandelt.
  • Mit folgender Methode können Sie prüfen, ob ein einzelnes char c ein Buchstabe ist: boolean Character.isLetter(c)