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.
Modelliere ein Konferenzzentrum mit folgenden Konzepten:
- Information – speichert Stockwerk und Raum, prüft ob Information vollständig ist.
- Ticket – mit
nameundisVip. - 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(): gibttruezurück wenn beide Attribute nicht null sind, sonstfalse.
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 maxAttendeesprotected 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, sonstthrow new NotAllowedException("Raum ist voll", this)public int compareTo(Room other): vergleichtattendees.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)ruftsuper(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ßlichsuper.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 immerthrow 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 wenna.getTicket().isVip() || "ALLACCESS".equals(a.getTicket().getName()).
Sonstthrow new NotAllowedException("Ticket nicht gültig oder nicht vorhanden", this);
Bei Erfolgsuper.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-Schleifei = 0..numberOfFloors-1: wenni == 2 || i == 4 || i == 6→rooms.add(new LectureHall(i)), sonstrooms.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 rufer.enter(dozent)+r.enter(lolli)in einemtry { ... } catch (NotAllowedException e) { System.out.println(e.getMessage()); }.
Stolperfalle: cc.rooms.add(...) ist falsch – wir wollen r.enter(...).