# Einführung in die Software Entwicklung Klausur



## lalahoho (27. Okt 2011)

Hallo Leute, Ich habe Morgen eine Klausur. und in der Klausur kommt drei dieser Aufgaben auf jeden Fall. Könnt ihr mir helfen. Ich kann selber halbwegs machen, aber nicht 100 prozentig richtig. 

Aufgabe1  (12 Punkte)
Eine Werkstatt, die sich auf Reifenwechsel spezialisiert hat, beuaftragt Sie ein Programm zu schreiben. Sie erhalten folgende Beschreibung von der Werkstatt:

Eine Werkstatt hat eine bestimmte Öffnungszeit, die über einen Öffnungszeitpunkt und einen Schließzeitpunkt definiert wird. Zum einen kann die Werkstatt neue Werkzeuge kaufen, z.B falls alte Werkzeuge kaputt sind, zum anderen werden Reifenwechsel bei übergebenen Autos durchgeführt, wofür man einen bestimmten Geldbetrag erhält (abhängig vom Auto). Das ausgegebene und eingenommene Geld wird dem internen Vermögen angerechnet.
Jede Werkstatt hat Werkzeuge, wovon jedes Werkzeug einen bestimmten Anschaffungspreis hat. Für unsere Werkstatt sind nur Wagenheber und Schlagschrauber interessant. Ein Wagenheber hat eine bestimmte Maximalhöhe und kann eine eingebbare Meterzahl gehoben bzw. gesenkt werden. Ein Schlagschrauber hat eine bestimmte Leistung in Watt, sowie die Möglichkeit übergebene Reifen auf und zuzudrehen. 
Die Werkstatt hat von jedem Werkzeug immer mindestens ein Exemplar. Wenn die Werkstatt pleitegeht, dann wird die Werkstatt mit samt ihren Werkzeugen zerstört. 
Neben den Werkzeugen hat eine Werkstatt noch eine Reihe von Ersatzreifen. Ein Reifen kenn nur seinen geeigneten Reifendruck. Vier solche Reifen hängen an einem Auto. Vom Auto ist lediglich die Marke von Interesse.
Ein Auto kann entweder auf einem Wagenheber stehen oder nicht. Genauso kann ein Wagenheber entweder unbesetzt sein oder genau ein Auto darauf stehen. Autos können in ihrem Leben in verschiedenen Werkstätten sein.

Erstellen Sie aus der Beschreibung ein UML-Klassendiagramm.



Aufgabe 2 (5 Punkte)
Gegeben sei das folgende Hauptprogramm (links), welches mit einem enum Essen arbeitet. Die 4 Elemente von Essen sind rechts definiert


(hier ist was links im Tabelle stand)

```
Public static void main(String[] args) {
  for (Essen e : Essen.values()){
    if  (e.groesser(50)){
      System.out.println(e.getBeispiel());
    }
 }
```
(was rechts im Tabelle stand)

Brot („Schwarzbrot“, 1),
Gemuese („Erbsen“, 10),
Fleisch („Huhn“, 20),
Suess („Kuchen“, 100);

Lässt man das Programm laufen, erscheint der Text
				Beispiel: Kuchen
Auf der Konsole.

a)	(1 Punkte) Geben Sie den Enum Kopf an.
b)	(3 Punkte) Geben Sie den restlichen Code des Enum an.
c)	(1 Punkte) Wie wäre die Ausgabe, wenn man die if-Anweisung im Hauptprogramm ersetzen würde durch:
if (!e.groesser(15))



Aufgabe6
(5 Punkte)
Betrachten Sie den folgenden Code, in dem mehrere nebenläufige Threads parallel ablaufen:

```
public class MyThread extends Thread{
	private double zahl;
	private static double staticZahl;

	public MyThread(double zahl){
	   this.zahl = zahl;
	}
	
	
	public void run(){
	  while (staticZahl >= 0) {
	    staticZahl = zahl;
/*		try {
		  sleep(1000);
		} catch (InterruptedException e) {
		  e.printStackTrace();
		}
/*
		System.out.println(staticZahl);
	    }
	}
	

	public static void main(String[] args) {
	  MyThread.staticZahl = 2;
	  MyThread thread1 = new MyThread(-1.5);
	  MyThread thread2 = new MyThread(0.5);
	  MyThread thread3 = new MyThread(1);

	  thread1.start();
	  thread2.start();
	  thread3.start();
	}
```


a)	(1 Punkte) Handelt es sich um ein deterministisches Programm? Begründen Sie ihre Wahl!
b)	(2 Punkte) Geben Sie die minimale und die maximale Anzahl an ausgeführten println-Befehlen an und begründen Sie ihre Wahl.
c)	(1 Punkte) Geben Sie eine Ausgabe der ersten 10 Zeilen des  Programms auf der Kommandozeile an.
d)	(1 Punkte) Was würde passieren wenn man den auskommentierten Block wieder mit ins Programm einzieht?




Afgabe7
(7 Punkte)
Schauen Sie sich die folgende Methode an:

```
public double methode (boolean a, boolean b, boolean c, boolean d)  {
   int x;
   if (a) {
      x = 4;
   } else {
     if (b) {
        x = 1;
     }
     else {
        x = -1;
     }
     if (c || d) {
	x = -9*x;
     }
   }
   return Math.sqrt(x);
}
```
a)	(3 Punkte) Zeichnen Sie einen Kontrollflussgraphen der Methode
b)	(1 Punkte) Geben Sie einen minimalen Testsatz an, damit C0 erfüllt ist.
c)	(1 Punkte) Geben Sie einen minimalen Testsatz an, damit C1 erfüllt ist.
d)	(2 Punkte) Schreiben Sie eine JUnit Testmethode, in der ihre C1 Testfälle überprüft werden. Schlägt ihr Test fehl? Begründung!



Aufgabe8
(10 Punkte)
Bei der Tour de France gibt es eine Bergwertung und eine Sprintwertung. Überfährt ein Fahrer eine Berg- bzw. Sprintwertungslinie, so wird sein persönlicher Berg- bzw. Sprint- Punktestand aktualisiert. Die Tabellen der beiden Wertungen sollen in einem solchen Fall ebenfalls (sofort) aktualisiert werden. 

a)	(1 Punkte) Um welches Design Pattern handelt es sich? Begründen Sie ihre Wahl!
b)	(1 Punkte) Welche Varianten des Patterns gibt es? Erklärung!
c)	(3 Punkte) Erstellen Sie ein UML Diagramm des Patterns spezialisiert auf die obere Beschreibung. 
d)	(3 Punkte) Implementieren Sie eine der beiden Wertungstabelle. Die Tabelle soll intern als Map < Person, Integer > repräsentiert sein.




Es wäre mir eine grosse Hilfe, wenn jemand da helfen könnte. Danke alle.


----------



## tfa (27. Okt 2011)

Wo ist denn jetzt dein konkretes Problem?  
Außerdem solltest du 
	
	
	
	





```
-Tags verwenden, sonst kann man den Quelltext nicht vernünftig lesen.
```


----------



## Gast2 (27. Okt 2011)

Sein Problem ist, dass er jemand mit langeweile sucht, der ihm die Aufgaben heute noch kostenfrei löst. 

:toll: So ne Klausur kommt auch immer wieder überraschend!


----------



## lalahoho (27. Okt 2011)

Sorry, auf Quellcode format habe ich nicht geachtet. Mein Problem ist 6 und 8. Die kann ich überhaupt nicht. Die anderen einigermassen. Wär schön wenn jemand die beiden für mich posten könnten.


----------



## nillehammer (31. Okt 2011)

> Aufgabe8
> (10 Punkte)
> Bei der Tour de France gibt es eine Bergwertung und eine Sprintwertung. Überfährt ein Fahrer eine Berg- bzw. Sprintwertungslinie, so wird sein persönlicher Berg- bzw. Sprint- Punktestand aktualisiert. Die Tabellen der beiden Wertungen sollen in einem solchen Fall ebenfalls (sofort) aktualisiert werden.
> 
> ...


Hier ist die Fähigkeit der Abstraktion von einer konkreten Beschreibung auf ein allgemeines Verfahren gefragt. Schaut man sich die Frage genau an, so ist von Ereignissen (Events) die Rede, auf die von interessierter Stelle (dem Listener) reagiert werden soll. Welches Pattern nimmt man, um auf eintretende Ereignisse zu reagieren?


----------

