Beruflich Dokumente
Kultur Dokumente
Matr.- Nr.:
Name:
Vorname:
Hörsaal:
Unterschrift:
Bachelorprüfung Maschinenbau
Bachelorprüfung Wirtschaftsingenieurwesen Fachrichtungen Bauingenieurwesen und Maschinenbau
Bachelorprüfung Technik-Kommunikation 2. Hauptfach Grundlagen des Maschinenbaus
Informatik im Maschinenbau
12. März 2019
Wichtige Hinweise
Mit Ihrer Unterschrift bestätigen Sie, dass Sie sich gesundheitlich in der Lage fühlen, die Klausur anzutreten.
Bei Verstoß gegen eine dieser Regeln wird die Klausur mit „nicht bestanden“ gewertet.
Sonstiges:
Programmiersprache ist Java.
Antworten müssen begründet werden und eindeutig nachvollziehbar sein.
Benutzen Sie zur Lösung jeweils den verfügbaren Platz hinter der Aufgabenstellung.
Umlaute in Java und UML sind erlaubt.
Bleistift darf nur für Zeichnungen verwendet werden. Verwenden Sie keinen Rot- oder Grünstift und keine Tintenkiller.
A1 A2 A3 A4 A5
Pkt.: 6 Pkt.: 3 Pkt.: 7 Pkt.: 9 Pkt.: 11
A6 A7 A8 A9
Pkt.: 13 Pkt.: 12 Pkt.: 13 Pkt.: 6
∑
Pkt.: 80
Das automatische Türöffnungssystem eines Gebäudes wird von einem Nutzer bedient, von
einem Sicherheitsdienst betreut und von einer Türsteuerung gesteuert.
Der Nutzer kann einen Antrag auf eine Karte stellen, mit deren Hilfe er die Tür öffnen
lassen kann. Dabei wird der Sicherheitsdienst immer einen neuen Nutzer anlegen.
Um die Türe zu entriegeln, kann der Nutzer seine Karte vorhalten. Ist der Nutzer
autorisiert, so wird die Türsteuerung die Tür öffnen.
Darüber hinaus kann der Sicherheitsdienst eine Notschließung auslösen. Dabei wird
die Türsteuerung die Tür schließen.
A1
Pkt.: 6
Eine Steuerungsanlage eines Gebäudes besteht aus einem Touchpad und einer
Gebäudeelektronik.
Das Touchpad kann bei der Gebäudeelektronik die Gebäudedaten abrufen oder einen
Befehl übergeben, welchen der Benutzer über das Touchpad eingegeben hat.
Weiterhin benutzt das Touchpad eine Cloud, mit der es die hinterlegten Benutzerdaten
synchronisieren kann.
Darüber hinaus kann das Touchpad von der Cloud eine Unwetterwarnung empfangen. Die
entsprechende Schnittstelle wird vom Touchpad bereitgestellt.
A2
Pkt.: 3
Die Steuerung einer Klimaanlage reguliert die Temperatur in einem Gebäude auf Basis
von gemessenen Sensorwerten. Der Gesamtprozess lässt sich folgendermaßen
beschreiben:
• Der Sensor wird zunächst von der Steuerung geprüft. Falls der Sensor nicht in Ordnung
ist, führt die Steuerung eine Wartung durch. Ist diese Wartung nicht erfolgreich, so
wird eine Notabschaltung durch die Steuerung eingeleitet und der Gesamtprozess
beendet.
• Ist der Sensor in Ordnung beziehungsweise die Wartung erfolgreich, so starten zwei
gleichzeitige Prozesse:
o Der Sensor nimmt einerseits den Messwert auf und speichert diesen
anschließend.
o Andererseits regelt die Steuerung parallel die Heizeinheit. Ist die Temperatur
zu hoch wird die Heizeinheit abgeschaltet, ist sie zu niedrig wird die
Heizeinheit eingeschaltet. Andernfalls wird die Steuerung nicht aktiv.
• Nachdem die parallelen Teilprozesse beendet sind, startet der Gesamtprozess erneut
und die Steuerung beginnt mit der Überprüfung des Sensors.
1 1
Verwenden Sie nur die in der Beschreibung genannten und unterstrichenen Klassen
bzw. Interfaces. Stellen Sie die Beziehungen untereinander mit Attributnamen,
Sichtbarkeiten und Kardinalitäten dar. Achten Sie hierbei auf die Verwendung
aussagekräftiger Attributnamen. Sämtliche Attribute einer Klasse sind privat.
Ein Stromkreis ist eine spezielle Form eines Energiekreislaufs. Ein Energiekreislauf
ist abstrakt.
Ein Stromkreis benutzt eine Windkraftanlage und eine Photovoltaikanlage.
Eine Photovoltaikanlage besteht aus 1 bis 30 PvModulen.
Eine Windkraftanlage besteht aus genau einem Generator.
Generator und PvModul implementieren jeweils das Interface Spannungsprüfung.
1 1
1 1
Bei der Erstellung einer Instanz der Klasse PvModul wird eine fläche vom Typ
double übergeben und im gleichnamigen privaten Attribut, welches ebenfalls
vom gleichen Typ ist, gespeichert.
Ein PvModul speichert seine orientierung in einem privaten int-Array.
Die orientierung kann über eine öffentliche get-Methode ausgelesen und
über eine öffentliche set-Methode gesetzt werden.
1
1 1
A4
Pkt.: 9
a) Java-Wissen
variable = 13.37;
1 Initialisierung
Deklarieren Sie die öffentliche, abstrakte Methode öffnen für eine abstrakte Klasse.
Diese Methode bekommt keine Parameter übergeben und liefert keine Rückgabe.
Welche Bildschirmausgabe liefert die folgende Methode bei Übergabe der Ganzzahl 2?
1 k ergibt 4!
Welche Bildschirmausgabe liefert die folgende Methode bei Übergabe eines Arrays a,
welches die Werte [7,5,-2,9,3,4,12,16] enthält?
1 4a[a.length-6]
b) Codekorrektur
Korrigieren Sie im folgenden Abschnitt den gegebenen Quellcode. Nutzen Sie zur
Korrektur von fehlerhaften Codezeilen die darunterliegenden Korrekturzeilen (siehe
Beispiel zur ersten Codezeile, in welcher die Korrekturen fett hervorgehoben sind). Pro
Codezeile können kein, ein oder mehrere Fehler auftreten.
Die Methode kreuz berechnet das Kreuzprodukt aus zwei Vektoren im ℝ³ und gibt
anschließend den resultierenden Vektor zurück.
𝑎1 𝑏1 𝑎2 𝑏3 − 𝑎3 𝑏2
𝑎×𝑏 = 𝑎2 × 𝑏2 = 𝑎3 𝑏1 − 𝑎1 𝑏3
𝑎3 𝑏3 𝑎1 𝑏2 − 𝑎2 𝑏1
Hinweis: Berechnung des Kreuzprodukts
klas Mathehelfer{
Korrektur 1 class Mathehelfer{
2 public static void kreuz(int[] a, int[] b)
throws IllegalArgumentException{
Korrektur 2 public static int[] kreuz(int[] a, int[] b)
1
throws IllegalArgumentException{
3 if(a.length == 3 || b.length == 3){
1
Korrektur 3 if(a.length != 3 || b.length != 3){
4 System.println.out("Dimensionen prüfen.");
1
Korrektur 4 System.out.println("Dimensionen prüfen.");
5 throw new IllegalArgumentException;}
Korrektur 5 throw new IllegalArgumentException();} 1
6 int[3] vector = new int[];
Korrektur 6 int[] vector = new int[3]; 1
7 vector[0] = a[1]*b[2] - a[2]*b[1];
Korrektur 7
8 vector[1] = a[2]*b[0] - a[0]*b[2];
Korrektur 8
9 vector[2] = a[0]*b[1] - a[1]*b[0];
Korrektur 9
10 return vector
1
Korrektur 10 return vector;
11 } A5
12 } Pkt.: 11
Die Methode überprüft alle Sensoren, die an die Steuerung angeschlossen sind, mit
Hilfe der Methode prüfeSensor. Diese gibt false zurück, sollte der geprüfte
Sensor defekt sein. Übersteigt die Anzahl der defekten Sensoren die Anzahl der
intakten Sensoren, wird eine SensorException geworfen. Andernfalls gibt die
Methode eine Liste aller defekten Sensoren zurück.
if( ! prüfeSensor(sensor) ){
1 defekt.add(sensor); 1
1 } else {
intakt.add(sensor); 1
}
}
return defekt;
Die Methode prüft zuerst, ob eine Steuerung vorhanden ist. Sollte die entsprechende
Referenzvariable null referenzieren, also aktuell keine Steuerung gesetzt sein, so
wird der Wert -1000 zurückgegeben.
Andernfalls sucht die Methode unter allen Sensoren der Steuerung nach Sensoren,
deren SensorTyp der Familie „Temperatur“ zugeordnet ist. Wenn der Wert eines
solchen Sensors die Wunschtemperatur übersteigt, muss die Steuerung den
Standort des entsprechenden Sensors runterregeln. Ist der Wert zu niedrig, muss sie
ihn hochregeln. Die Rückgabe der Methode ist der Durchschnitt aller gefundenen
Werte.
int anzahl = 0;
double summe = 0;
if(sensor.getTyp().getFamilie().equals("Temperatur")) {
summe += sensor.getWert();
1
anzahl += 1;
1
steuerung.runterRegeln(sensor.getStandort());
1
} else if (sensor.getWert() < temp){ 1
steuerung.hochRegeln(sensor.getStandort());
}
A6
Pkt.: 13
}
1
public double getKorrektur() {
return korrektur; 1
boolean raumStatus;
if (außensensor.messeHelligkeit() >=
raum.getInnensensor().messeHelligkeit()) {
raum.getJalousieSteuerung().öffneJalousien(); 1
1
raumStatus = false; 1
1 } else {
raum.getJalousieSteuerung().schließeJalousien();
raumStatus = true;
lampe.setStatus(raumStatus); 1
if (lampe.getStatus() != raumStatus) {
throw new LampeKaputtException(); 1
}
A7
} Pkt.: 12
}
Der String ist somit immer mindestens 10-stellig, enthält keine Leerzeichen und alles
wird mit vorangestellten Nullen auf die entsprechende Stellenanzahl aufgefüllt.
Beispiele:
1) Gebäudenummer 30, 12 Etagen. Das Gebäude besitzt 50 Brandmelder von denen
keiner einen Brand erkennt. Folgender String wird übermittelt:
"0003012050"
2) Gebäudenummer 10523, 3 Etagen. Das Gebäude besitzt 120 Brandmelder von
denen die Brandmelder 25, 110 und 112 einen Brand erkennen. Folgender String
wird übermittelt:
"1052303120025110112"
©IMA der RWTH Aachen 12.03.2019
Matr.-Nr.: ________________________ Name: _________________________________________ 21
um aus einem übergebenen String str, in dem mit start und end angegebenen
Intervall, einen Integer auszulesen. Beachten Sie, dass Strings mit dem Index 0
anfangen und die gegebene Methode bei der Übergabe eines nicht vorhandenen
Index Integer.MIN_VALUE zurückgibt. Eine Anwendung der Methode könnte
beispielsweise folgendermaßen aussehen:
geb.setGebäudeNummer(substringToInt(0, 4, str)); 1
geb.setEtagenAnzahl(substringToInt(5, 6, str)); 1
} 1
geb.setAusgelösteBrandmelder(liste);
return geb;
Hat ein Gebäude mehr als 4 Etagen, so soll ein großer Einsatzwagen geschickt
werden. Andernfalls ist ein kleiner Einsatzwagen ausreichend.
Stellen Sie sicher, dass eine möglicherweise beim Zugriff auf ein spezifisches
Gebäude auftretende Exception nicht die Methode beendet. Jegliche
Exception sollte gefangen und, beispielsweise unter Verwendung ihrer
toString-Methode, auf der Konsole ausgegeben werden, ohne dass die
Überprüfung weiterer Gebäude gestört wird.
try {
if (geb.getAusgelösteBrandmelder().size() > 0) { 1
if (geb.getEtagenAnzahl() > 4 ) {
System.out.println(geb.getGebäudeNummer() +
": Großer Einsatzwagen!");
1 1 1 } else { 1
1 1 System.out.println(geb.getGebäudeNummer() +
": Kleiner Einsatzwagen!");
} catch(Exception e) {
System.out.prinln(e.toString()); 1
A8
Pkt.: 13
Die Klasse AufzugTest implementiert die Modultests für ausgewählte Funktionen der
Java-Klasse Aufzug. Die entsprechenden Methoden wurden anhand der
Beschreibungen in Tabelle 1 implementiert. Bearbeiten Sie die folgenden Aufgaben und
schreiben Sie die Antwort dabei jeweils auf die durchgezogene Linie.
a) Annotieren Sie die Methode setUp() so, dass diese vor jedem einzelnen Test
ausgeführt wird.
b) Annotieren Sie folgende Methoden als JUnit Testmethoden:
testTürStatus(), testEtage() und testÜberladung().
c) Vervollständigen Sie die folgenden Testmethoden anhand der Angaben in den
jeweiligen Java-Kommentaren:
testTürStatus(), testEtage() und testÜberladung().
1 @Before
public void setUp(){
1 aufzug = new Aufzug();
}
@Test
public void testTürStatus(){
// Schließe die Tür des Aufzugs.
aufzug.schließeTür(); 1
1
// Prüft, dass die Tür geschlossen ist.
assertFalse(aufzug.getTürStatus()); 1
}
1
1 @Test
public void testEtage(){
1 // Bewege den Aufzug zur Zieletage.
int zielEtage = 42;
aufzug.fahreZuEtage(zielEtage);
assertTrue(aufzug.istÜberladen()); 1
}
} 1
A9
Pkt.: 6
8