Klausur 24.04.2026 – Java OOP

Rekonstruiert aus Klausureinsicht 04.05.2026 (Steffen Merk × Alina Wagner). Aufgabe 1 mit 10 Teilaufgaben, Gesamt ca. 50 Punkte.

Aufgabenstellung · Domäne
Konferenzzentrum mit Räumen und Teilnehmern

Modelliere ein Konferenzzentrum mit folgenden Konzepten:

  • Information – speichert Stockwerk und Raum, prüft ob Information vollständig ist.
  • Ticket – mit name und isVip.
  • Attendee (Interface) – Methode getTicket().
  • Professional – implementiert Attendee. Erhält im Konstruktor nur den Namen, erzeugt selbst ein ALLACCESS-Ticket.
  • Student – implementiert Attendee. Konstruktor erhält Name + Ticket.
  • Room (abstract) – Floor, max. Teilnehmer, Liste von Attendees, statische Liste aller Räume. isFree(), enter(Attendee), compareTo(Room).
  • LectureHall – hat Speaker (Professional), MAX 20 Teilnehmer, isSpeakerPresent().
  • MeetingRoom – hat ein Subject. Eintritt nur mit VIP-Ticket oder ALLACCESS.
  • BlockedRoom – immer blockiert.
  • ConferenceCenter – Name, Liste von Räumen. Überladene Konstruktoren. Floors 2/4/6 sind Vorlesungsräume, sonst Meetingräume.
  • ExamTask – main-Methode: erzeugt Center, Studenten, Professional und ruft enter auf.

Tipp: Lies jede Aufgabe Zeile für Zeile. Ja, jede.

Aufgabe 1.1 – Information 2,75 P

Implementiere die Klasse Information mit:

  • Attributen String stockwerk, String raum.
  • Konstruktor mit beiden Parametern.
  • Methode boolean isComplete(): gibt true zurück wenn beide Attribute nicht null sind, sonst false.

Stolperfalle: else mit return false nicht vergessen.

Aufgabe 1.2 – Ticket 2 P

Klasse Ticket mit String name, boolean isVip, Konstruktor mit beiden Parametern und Getter getName() + isVip().

Aufgabe 1.3 – Professional 3 P

Professional implements Attendee:

  • String name (final)
  • Ticket ticket (final, im Konstruktor erzeugt)
  • Konstruktor mit nur String name. Der Konstruktor erzeugt das Ticket selbst: new Ticket("ALLACCESS", true).
  • Getter getTicket().

Stolperfalle Klausur: kein zweiter Parameter, das Ticket muss intern erzeugt werden.

Aufgabe 1.4 – Student 3 P

Student implements Attendee mit String name, Ticket ticket, Konstruktor mit beiden Parametern und Getter getTicket().

Aufgabe 1.5 – Room (abstract) 10,75 P

Abstrakte Klasse Room implements Comparable<Room> mit:

  • statisches Feld private static final ArrayList<Room> ROOMS = new ArrayList<>();
  • final int floor, final int maxAttendees
  • protected ArrayList<Attendee> attendees (im Konstruktor initialisiert und in ROOMS eingetragen)
  • Konstruktor: Room(int floor, int maxAttendees)
  • protected boolean isFree(): return attendees.size() < maxAttendees; (oder if/else mit return false)
  • public void enter(Attendee a) throws NotAllowedException: bei isFree → add, sonst throw new NotAllowedException("Raum ist voll", this)
  • public int compareTo(Room other): vergleicht attendees.size(), gibt -1 / 1 / 0 zurück

Stolperfallen: attendees.size() nicht vergessen, kein Room.attendees.add(...) sondern this.attendees.add(...).

Aufgabe 1.6 – LectureHall 6,75 P

LectureHall extends Room:

  • Konstante private static final int MAX_20 = 20;
  • private Professional speaker
  • Konstruktor LectureHall(int floor) ruft super(floor, MAX_20) auf.
  • private boolean isSpeakerPresent(): prüft mit null-Check, gibt true/false zurück.
  • @Override public void enter(Attendee a) throws NotAllowedException:
    Wenn Speaker schon da UND a ist ein Professional, dann Exception werfen.
    Sonst: wenn a instanceof Professional → speaker setzen.
    Schließlich super.enter(a);.

Aufgabe 1.7 – BlockedRoom 2,5 P

BlockedRoom extends Room:

  • Konstruktor BlockedRoom(int floor): super(floor, 0).
  • @Override public void enter(Attendee a) throws NotAllowedException: wirft immer throw new NotAllowedException("Raum ist blockiert", this);

Aufgabe 1.8 – MeetingRoom 5 P

MeetingRoom extends Room:

  • public final String subject
  • Konstruktor MeetingRoom(int floor, String subject): super(floor, 8), subject setzen.
  • @Override enter(Attendee a): Eintritt nur wenn a.getTicket().isVip() || "ALLACCESS".equals(a.getTicket().getName()).
    Sonst throw new NotAllowedException("Ticket nicht gültig oder nicht vorhanden", this);
    Bei Erfolg super.enter(a);.

Stolperfalle: kein name == "ALLACCESS"! Strings vergleicht man mit .equals(...).

Aufgabe 1.9 – ConferenceCenter 8 P

Klasse ConferenceCenter mit:

  • public final String name, public final ArrayList<Room> rooms.
  • Überladener Konstruktor:
    public ConferenceCenter(String name) {
        this(name, 4);   // ruft den anderen Konstruktor auf
    }
  • Voll-Konstruktor: ConferenceCenter(String name, int numberOfFloors): name setzen, rooms initialisieren, in einer for-Schleife i = 0..numberOfFloors-1: wenn i == 2 || i == 4 || i == 6rooms.add(new LectureHall(i)), sonst rooms.add(new MeetingRoom(i, "Meetingraum")).

Stolperfalle: keine Integer in die Raumliste einfügen, sondern Raum-Objekte.

Aufgabe 1.10 – ExamTask (main) 6 P

main-Methode in ExamTask:

  • Erzeuge ConferenceCenter cc = new ConferenceCenter("DHBW").
  • Erzeuge Professional dozent = new Professional("Steffen").
  • Erzeuge Student lolli = new Student("Lolli", new Ticket("VIP", true)).
  • Iteriere for (Room r : cc.rooms) und rufe r.enter(dozent) + r.enter(lolli) in einem try { ... } catch (NotAllowedException e) { System.out.println(e.getMessage()); }.

Stolperfalle: cc.rooms.add(...) ist falsch – wir wollen r.enter(...).

→ Soll-Lösung anzeigen