Programmieren II (WF2)

Aufgabenblatt 3: Exceptions

Aufgabe 3.1: Alle Exceptions behandeln

Stellen Sie sich vor, Sie wollen an einer Stelle Ihres Programms alle möglichen auftretenden Ausnahmen vom Typ Exception und RuntimeException jeweils gesondert behandeln.

  1. Welche von beiden Ausnahmen müssen Sie zuerst abfangen – die vom Typ Exception oder die vom Typ RuntimeException?
  2. In welchen Fällen könnte ein solches Vorgehen überhaupt sinnvoll sein?

Aufgabe 3.2: Adresskartei absichern

  1. Untersuchen Sie Ihre Implementierung der Adresskartei auf Situationen, in denen Exceptions auftreten könnten. Handelt es sich dabei um Checked oder Unchecked Exceptions?
  2. Wählen Sie die Exceptions aus, auf die Sie sinnvoll reagieren können. Fangen Sie diese ab und behandeln Sie sie, so dass das Programm fortgesetzt werden kann.

Aufgabe 3.3: Email-Adressen und Exceptions

Entwerfen Sie eine Klasse EmailAddress, die valide E-Mail-Adressen verwalten kann.

Eine E-Mail-Adresse erfüllt unter anderem folgende Randbedingungen1:

  • Sie enthält genau ein @-Zeichen, welches den Lokalteil und den Domänenteil voneinander trennt (Lokalteil@Domänenteil).
  • Lokalteil und Globalteil dürfen in unserem Fall nur folgende Zeichen enthalten: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.!#$%&'*+-/=?^_`{|}~
  • Lokalteil und Globalteil dürfen jeweils nicht mit einem Punkt beginnen oder enden.

Gehen Sie wie folgt vor:

  1. Die Klasse EmailAddress soll einen Konstruktor besitzen, der die Adresse als Zeichenkette übergeben bekommt. Diese ist dann nicht mehr veränderlich. Implementieren Sie den Konstruktor. Die Bestandteile sollen über die Methoden

    • String toString() (Rückgabe z.B. "test@mail.example.com")
    • String getLocalPart() (Rückgabe z.B. "test")
    • String getDomainPart() (Rückgabe z.B. "mail.example.com")
    • String[] getDomainParts() (Rückgabe z.B. { "mail", "example", "com" })

    auslesbar sein.

  2. Erstellen Sie eine eigene Exception-Klasse EmailAddressFormatException, welche durch den Konstruktor ausgelöst werden kann, wenn die oben genannten Bedingungen für eine gültige Adresse nicht erfüllt sind.

  3. Testen Sie die Klasse EmailAddress und den Ausnahmemechanismus indem Sie eine Test-Klasse EmailAddressTest erstellen. Darin erstellen Sie zunächst ein paar valide Adressen mit anschließender Ausgabe Erlaubte Adresse. Dann aber auch mehrere ungültige Adressen, deren Exceptions Sie abfangen sollten und in diesem Fall Nicht erlaubte Adresse ausgeben.

Aufgabe 3.4: Planeten

Erstellen Sie eine Aufzählung (enum Planet) aller Planeten des Sonnensystems, mit aufsteigender Entfernung von der Sonne.

Die Aufzählung soll folgende Methoden besitzen:

  • double getMasse(): Masse des Planeten
  • double getRadius(): Radius des Planeten
  • boolean largerThan(Planet p): größer als Planet p?
  • boolean heavierThan(Planet p): schwerer als Planet p?
  • boolean closerToSun(Planet p): näher an der Sonne als Planet p?
  • Planet nextPlanet(): Gibt den nächsten weiter entfernten Planeten zurück – oder `null.

Implementieren Sie zusätzlich eine Klasse, die die Aufzählung umfassend testet!

Die benötigten Daten für die Planeten finden Sie in folgender Tabelle (Erinnerung: 3.30E23 = 3.30·1023):

Planet Masse (kg) Radius (m)
Merkur 3.30E23 2,440,000
Venus 4.87E24 6,051,000
Erde 5.97E24 6,378,000
Mond 7.35E22 1,738,000
Mars 6.42E23 3,397,000
Jupiter 1.90E27 71,492,000
Saturn 5.69E26 60,268,000
Uranus 8.66E25 25,559,000
Neptun 1.03E26 24,764,000
Pluto 1.31E22 1,160,000

  1. Tatsächlich gibt es noch einige weitere Regeln: https://en.wikipedia.org/wiki/Email_address#Syntax. Mittlerweile setzt sich aber die Einsicht durch, dass nur das testweise Senden einer Email eine sichere Aussage erlaubt: https://hackernoon.com/the-100-correct-way-to-validate-email-addresses-7c4818f24643#.3hmjudhxp