Prof. Dr. Andreas Fink Institut für Informatik Fakultät für Wirtschafts- und Sozialwissenschaften Helmut-Schmidt-Universität / Universität der Bundeswehr Hamburg BEISPIELKLAUSUR Softwareentwicklung: Objektorientierte Programmierung mit C# Bachelor-Studiengang BWL Bearbeitungszeit: 60 Minuten Erlaubte Hilfsmittel: keine Nachname :... Vorname :... Matrikelnummer :... Aufgabe Erreichte Punktzahl Maximalpunktzahl 1 18 2 5 3 15 4 22 Summe: 60 Note: Hinweise: Schreiben Sie bei Bedarf stichpunktartig, aber bitte deutlich! Verwenden Sie für Ihre Antworten bei Bedarf auch die Rückseiten der Aufgabenblätter! Achten Sie bei der Programmentwicklung auch auf Übersichtlichkeit!
Aufgabe 1: Objektorientierte Softwareentwicklung (5 + 4 + 5 + 4 = 18 Punkte) a) Was versteht man im Zusammenhang der objektorientierten Softwareentwicklung unter einer Klasse und einem Objekt? Geben Sie jeweils prägnante Definitionen an und veranschaulichen Sie die Antwort außerdem knapp anhand eines Beispiels aus dem Anwendungsbereich Logistik! b) Erläutern Sie anhand von zwei wesentlichen Software-Qualitätsfaktoren Vorteile der objektorientierten Softwareentwicklung im Zusammenhang mit der Verwendung von Klassen! 2 / 10
c) Erläutern Sie den Unterschied zwischen Wert-Typen und Referenz-Typen! Beschreiben Sie dabei insbesondere auch entsprechende Auswirkungen bei der Parameterübergabe beim Aufruf von Methoden! (Es bietet sich an, hierzu auch Beispiele heranzuziehen.) d) Was versteht man unter einer abstrakten Klasse und was ist eine abstrakte Methode? Geben Sie jeweils auch ein Beispiel an! 3 / 10
Aufgabe 2: Analyse von C#-Programm-Ausschnitten (3 + 2 = 5 Punkte) Analysieren Sie die folgenden (voneinander unabhängigen) Ausschnitte von C#-Programmen! a) Welche Werte haben die Variablen u0, u1, v1 und v2 am Ende des folgenden Quelltexts? (Hinweis: int ist ein Wert-Typ, ein Array ist ein Referenz-Typ.) int u0 = 1; int u1 = 2; int[] v1 = new int[2] { 3, 4 }; int[] v2 = new int[2] { 5, 6 }; u0 = u1; u1 = 0; v2 = v1; v2[0] = 7; v1[1] = 8; b) Identifizieren und korrigieren Sie mögliche Fehler in dem folgenden Programmausschnitt! (Sie können davon ausgehen, dass using System; an geeigneter Stelle vorangestellt ist. Korrekt identifizierte Fehler werden in der Bewertung mit fälschlich angestrichenen Stellen verrechnet.) int s = 2.2; string first = "Sandra"; string 2nd = "Meiser"; Console.WriteLine{ "Hallo" + first }; for( int v=0; v<10; ) ++v; int m=0; repeat m = m + 1; until ( m == 10 ); 4 / 10
Aufgabe 3: Implementierung von Algorithmen in C# Ergänzen Sie die folgende C#-Methode public static bool BinaereSuche( int a, int[] z ) { // Beginn Ihres Quellcodes (15 Punkte) // Ende Ihres Quellcodes } in der Weise, dass mittels binärer Suche effizient ermittelt wird, ob die ganze Zahl a in dem aufsteigend sortierten Array z aus ganzen Zahlen enthalten ist. Hinweise: Zuerst wird a mit einem mittleren Vergleichselement des Arrays verglichen (bei gerader Elementanzahl ist mittleren gemäß entweder Auf- oder Abrunden interpretierbar). Ist a kleiner als das Vergleichselement, kann a nur in der vorderen Hälfte stecken (falls überhaupt vorhanden); analog kann a ggf. nur in der hinteren Hälfte stecken, falls es größer ist als das Vergleichselement. Jede ggf. weiterhin zu untersuchende Hälfte wird mit der gleichen Strategie behandelt. Spätestens wenn der Suchbereich auf ein Element beschränkt ist, ist die Suche abgeschlossen. Die Anzahl der Elemente des Arrays z lässt sich mit der Eigenschaft z.length bestimmen. 5 / 10
[Fortsetzung der Lösung zu Aufgabe 3] 6 / 10
Aufgabe 4: Objektorientierte Programmierung in C# (17 + 5 = 22 Punkte) a) Gegenstand der objektorientierten Programmierung soll eine Bank sein. Zu erfassen und zu verwalten sind zunächst Konten und Kunden. Dabei sind für einen Kunden der Name sowie die Telefonnummer von Interesse. Ein Konto sei charakterisiert durch die Kontonummer, den aktuellen Kontostand sowie den Kunden, dem das Konto zugeordnet ist. Entwickeln Sie für die beschriebene Ausgangssituation ein Klassenmodell mit den Klassen Kunde, Konto und Verwaltung. Letztere soll die Main-Methode enthalten. Führen Sie für die Klassen Kunde und Konto sinnvolle Konstruktoren ein und gestalten Sie den Zugriff auf die als protected deklarierten Felder mittels Eigenschaften. Instanziieren Sie in der Main-Methode ein Objekt eines Kunden Bob (Telefonnummer 040/100200) und ein Konto-Objekt (Nr. 1001) dieses Kunden mit einem Kontostand von 100. Skizzieren Sie das hierfür zu erwartende Speicherlayout hinsichtlich der erzeugten Variablen und Objekte. b) Gehen Sie davon aus, dass ein Sparplankonto ein Spezialfall des in Teilaufgabe a) betrachteten Kontos ist. Leiten Sie durch Vererbung eine entsprechende Klasse Sparplankonto von der Klasse Konto ab und ergänzen Sie ein weiteres Feld, in dem die planmäßigen Einzahlungen für die zwölf Monate eines Jahres als Array abgebildet sind. (Darüber hinaus sind keine weiteren Elemente zu deklarieren.) 7 / 10
[Fortsetzung der Lösung zu Aufgabe 4] 8 / 10
[Bei Bedarf Fortsetzung der Lösung zu Aufgabe 4] 9 / 10
[Zusatzblatt] 10 / 10