{ Software-Engineering II } Aufgaben zur Vorlesung zum Thema Objektorientierung Frage 1: Vererbung (1 Punkt) Wie wird in Java eine Vererbungsbeziehung zwischen zwei Klassen notiert? a) b) c) d) class class class class BADozent: public BADozent extends BADozent: realize BADozent -> extends BAPerson BAPerson BAPerson BAPerson { { { { … … … … } } } } Frage 2: Packages (1 Punkt) Wozu besitzen objektorientierte Programmiersprachen packages bzw. namespaces? a) b) c) d) Internationalisierung der Software Strukturierung des Programmcodes Vermeidung von redundantem Programmcode Sichtbarkeitseinschränkung Frage 3: Access Modifiers (2 Punkte) Angenommen, Sie verwenden bei der Java-Entwicklung in Ihren eigenen Klassen weder packages noch access modifiers. Welche (expliziten) access modifiers könnten Sie bei Ihren Methoden und Attributen angeben, ohne dass es Auswirkungen auf das Funktionieren der von Ihnen geschriebenen Klassen haben könnte? a) b) c) d) public protected private static Frage 4: Speicherung von Objekten (1 Punkt) Wie werden in Java Objekte und primitive Datentypen gespeichert? a) Primitive Datentypen werden auf dem Stack gespeichert. Objekte werden im Heap abgelegt. Die Adresse der Elemente im Heap wird jedoch vom Stack referenziert. b) Primitive Datentypen und Objekte werden auf dem Stack abgelegt. Auf dem Heap wird jedoch die Adresse des Objektes, welches auf dem Stack liegt, referenziert. c) Der Stack dient der Speicherung der Klasseninstanzen. Primitive Datentypen liegen auf dem Heap. Statische Variablen werden hingegen im Static Heap abgelegt. Timo Holzherr TIT09AIK @ WS 2011 { Software-Engineering II } Frage 5: Speicherverwaltung bei Methodenaufrufen (3=2+1 Punkte) I. Welche der folgenden Datentypen haben die Übergabe einer Referenz auf den Inhalt der Variable zur Folge? II. Welche dieser Datentypen können aufgrund ihrer Eigenschaften tatsächlich bei der Übergabe an eine andere Methode maßgeblich verändert werden? Betrachten Sie dazu bei Klassen die Methoden, die sie zur Verfügung stellen. a) b) c) d) int int[] java.lang.Integer java.util.Vector Frage 6: Exceptions (2 Punkte) Betrachten Sie folgendes Code-Fragment: public class SomethingWrong { public void whatsWrong( boolean nice ) { if( !nice ) { throw new String( "I am not nice" ); } throw new String( "I am nice" ); System.out.println( "Everything went fine." ); } } Finden und beschreiben Sie die Fehler, die sich im Programmcode versteckt haben. Hinweis: Um das Programm lauffähig zu machen, müssten Sie 4 Stellen im Code ändern. Frage 7: Abstrakte Klassen / Interfaces (2 Punkte) Welche Eigenschaften besitzen abstrakte Klassen, die auf Interfaces nicht zutreffen? a) Mehrere dieser Entitäten können gleichzeitig eine Vererbungsbasis bilden b) Instanzattribute können definiert werden c) Sie können nicht instanziert werden d) Die Implementierung von Methoden kann einer Subklasse aufgezwungen werden e) Es ist möglich, Methoden zu implementieren Timo Holzherr TIT09AIK @ WS 2011 { Software-Engineering II } Frage 8: Generische Programmierung (3=2+1 Punkte) I) Schreiben Sie folgendes Programm um, sodass es die Vorzüge der generischen Programmierung nutzt. Markieren Sie Ihre Änderungen. (Erhalten Sie die Struktur des Programms!) II)Welchen Vorteil erhält man, wenn keine expliziten Typecasts mehr notwendig sind? import java.util.Vector; public class Maths { public Vector getNumbers() { Vector numbers = new Vector(); numbers.addElement( new Integer( 1 ) ); numbers.addElement( new Float( 1.1F ) ); return numbers; } public float sumUp( Vector numbers ) { float sum = 0F; for( int i = 0; i < numbers.size(); i++ ) { Number n = (Number) numbers.elementAt(i); sum += n.floatValue(); } return sum; } public void calculate() { Vector numbers = this.getNumbers(); System.out.println( "Sum: " + this.sumUp( numbers ) ); } } Frage 9: Polymorphismus bei Generics (3 Punkte) Welche der folgenden Klassen-Tupel stehen in einer Vererbungsrelation? Mit Vector und Stack sind hier die Klassen der Java API im Package java.util.* gemeint. a) ( b) ( c) ( d) ( e) ( f) ( Vector<?>, Stack<Integer> ) Vector<? extends Number>, Stack<Integer> ) Vector<? extends Integer>, Stack<Number> ) Vector<Integer>, Vector<Object> ) Vector<Integer>, Stack<Integer> ) Vector<Integer>, Vector<Number> ) Timo Holzherr TIT09AIK @ WS 2011 { Software-Engineering II } Hinweise zur Benotung: Bei den Multiple-Choice Fragen sind Mehrfach-Antworten möglich. Es müssen nicht zwingend so viele Antworten richtig sein, wie die Frage/Aufgabe Punkte vergibt. Haben Sie bei einer Multiple-Choice Aufgabe ausschließlich alle richtigen Antworten angekreuzt, erhalten Sie die volle Punktzahl für die Aufgabe. Für zu viele oder zu wenige Antworten bekommen Sie PunkteAbzug, jedoch können je Aufgabe keine negativen Punktzahlen erreicht werden. 50% der Punkte sind nötig für das Bestehen des Aufgabeblattes. Im Fall dieses Aufgabenblattes benötigen Sie beispielsweise mindestens 9 Punkte zum Bestehen. Für jedes bestandene Aufgabenblatt werden Ihnen Punkte zusätzlich zur praktischen Aufgabe, die am Ende der Vorlesung stattfindet, angerechnet. Die Gewichtung der Punkte der praktischen Arbeit, die am Ende der Vorlesung von Ihnen durchgeführt wird, und der Punkte der Aufgabenblätter ist 70:30. Für die Bearbeitung der Aufgaben erhalten Sie eine gewisse Zeit in der Vorlesung. Der Rest des Blattes ist bis zur nächsten Vorlesung zu bearbeiten. Bitte geben Sie Ihre Lösung persönlich in Papierform zu Beginn der jeweils nächsten Vorlesung ab. Bitte stets Ihren Namen und Ihre Matrikel-Nummer auf den Lösungsblättern vermerken. Timo Holzherr TIT09AIK @ WS 2011