Algorithmen und Datenstrukturen Wintersemester 2008/ Übung Abgabe bis , 10:00 Uhr

Ähnliche Dokumente
PIWIN 1 Übung Blatt 5

Algorithmen und Datenstrukturen

3. Konzepte der objektorientierten Programmierung

Institut fu r Informatik

Algorithmen und Datenstrukturen 07

Kapitel 6. Vererbung

Kapitel 6. Vererbung

Kapitel 6. Vererbung

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Repetitorium Informatik (Java)

3 Objektorientierte Konzepte in Java

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

5. Abstrakte Klassen

Java: Vererbung. Teil 3: super()

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Java Schulung (Java 2 Java Development Kit 5 / 6)

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

1 Polymorphie (Vielgestaltigkeit)

Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny

Java für Computerlinguisten

Objektorientierte Programmierung

Fakultät Angewandte Informatik Programmierung verteilter Systeme Übungen zur Vorlesung Informatik II, Blatt 6

Software Engineering Klassendiagramme Einführung

3 Objektorientierte Konzepte in Java

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Java Einführung Methoden in Klassen

Programmieren in Java

Graphische Benutzungsoberflächen

Vorkurs C++ Programmierung

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 15. Oktober 2005 Dr. Alfons Huhn, Timotheus Preisinger

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf

Aufgabe 1. »Programmieren«, WS 2006/2007. Nino Simunic M.A.

Objektorientierte Programmierung. Kapitel 12: Interfaces

4. AuD Tafelübung T-C3

Große Übung Praktische Informatik 1

Vorlesung Programmieren. Unified Modeling Language (UML) Unified Modeling Language (UML) Unified Modeling Language (UML)

Vorlesung Programmieren

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Prinzipien Objektorientierter Programmierung

Objektorientierte Programmierung

Innere Klassen in Java

13. Tutorium zu Programmieren

Java - Programmierung - Objektorientierte Programmierung 1

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

5. Tutorium zu Programmieren

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Von der UML nach C++

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Lösungen zu Übung 3 Objektorientierte Modellierung - Statisches Modell

Typumwandlungen bei Referenztypen

Probeklausur: Programmierung WS04/05

5.6 Vererbung. Vererbung

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

2.4.3 Polymorphie (Wiederholung von Alp2)

Teilprüfung Software- und Internettechnologie Programmierkurs 1 Wintersemester 2005/2006

Programmierkurs Java

Objektorientierung: Klassen und Objekte

Programmentwicklung I für Hörer anderer Fachrichtungen -Wintersemester 2003/04- Abschlussklausur

UML Klassendiagramm. Igor Karlinskiy, Mikhail Gavrish

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Vererbung & Schnittstellen in C#

Lösungen zu Übung 3 Objektorientierte Modellierung - Statisches Modell

Klassenbeziehungen & Vererbung

Test-Driven Design: Ein einfaches Beispiel

Abschnitt 9: Schnittstellen: Interfaces

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

5.4 Klassen und Objekte

Informatik I Eprog HS10

Java-Programmierung. Remote Method Invocation - RMI

1. Von der Idee zur Software 2. Funktionen und Datenstrukturen Lehrbuch: Organisation des Quellcodes 4. Werte- und Referenzsemantik

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

5.5.8 Öffentliche und private Eigenschaften

Primitive Datentypen

Java Einführung Abstrakte Klassen und Interfaces

Aufgabenblatt Nr. 5 Generizität und TicTacToe

WhiteStarUML Tutorial

Übungsblatt 3: Algorithmen in Java & Grammatiken

1. Grundlegende Konzepte in Java (6 Punkte)

Modellierung einer Android-App. 2. Mai 2013

Einführung in die Programmierung für Wirtschaftsinformatik

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Vorlesung Objektorientierte Programmierung Probeklausur

Interaktionen zwischen Objekten durch Senden von Nachrichten und Reagieren auf empfangene Nachrichten

Javakurs 2013 Objektorientierung

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Programmieren - Vererbung & Polymorphie

AKTUEL ZU JAVA 8 PROGRAMMIEREN IN JAVA. 7. Auflage. Im Internet: Alle Beispielprogramme und Lösungen

U08 Entwurfsmuster (II)

Kapitel 2. Java: Der Einstieg. 2.1 Grundlegendes zu Java Historisches Eigenschaften von Java

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2008/2009

Ereignisbehandlung 21

GetName(), GetName(), GetGeschlecht() und AelterWerden().

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Programmierprojekt Aufgabe 1

Transkript:

4. Übung Abgabe bis 17.11.2008, 10:00 Uhr Aufgabe 4.1: Sichtbarkeit und Referenzen 20 Punkte Geben Sie ihre Antworten als Sichtbarkeit.pdf ab. a) Betrachten Sie folgenden Code: 1 public class Vis { 26 public static void main( 2 public static int f(int x) { 27 String[] args) { 3 int y = x * x - 1; 28 int a = 1; 4 // *** 1 *** 29 double b = 2; 5 return 4 * y; 30 // *** 6 *** 6 } 31 int c = f(a); 7 32 int d = f(b); 8 public static int f(double x) { 33 System.out.println(c + d); 9 double y = x * x - 1; 34 int e = g(3); 10 int k = (int) y; 35 System.out.println(e); 11 // *** 2 *** 36 // *** 7 *** 12 return f(k); 37 } 13 } 38 } 14 15 public static int g(int n) { 16 // *** 3 *** 17 int sum = 0; 18 for (int i = 1; i <= n; i++) { 19 int sqr = i * i; 20 sum += sqr; 21 // *** 4 *** 22 } 23 // *** 5 *** 24 return sum; 25 } Simulieren Sie den Aufruf des obigen Programms in einem Schreibtischlauf. In welcher Reihenfolge werden die mit // *** x *** markierten Stellen erreicht (Mehrfachausführung möglich)? Geben Sie in einer Tabelle an, welche Variablen beim Erreichen dieser Stellen sichtbar sind und welchen Typ und Wert diese haben. Die Tabelle sollte folgendermaßen aussehen (die ersten zwei Zeilen sind bereits eingetragen, die Variable args können Sie ignorieren): Position sichtbare Variablen *** 6 *** a = 1 (int), b = 2 (double) *** 1 *** x = 1 (int), y = 0 (int)...... - 1 -

b) Betrachten Sie nun folgenden Code: 1 class Punkt { 2 public int x, y; 3 4 Punkt(int a, int b) { 5 x = a; 6 y = b; 7 } 8 9 public String tostring() { 10 return "(" + x + "," 11 + y + ")"; 12 } 13 } 12 public class Ref { 13 public static Punkt add(punkt a, 14 Punkt b) 15 { 16 return new Punkt(a.x + b.x, 17 a.y + b.y); 18 } 19 20 public static void main( 21 String[] args) 22 { 23 Punkt p,q,r; 24 p = new Punkt(1, 2); 25 // *** 1 *** 26 q = new Punkt(3, 4); 27 // *** 2 *** 28 r = add(p,q); 29 // *** 3 *** 30 p = new Punkt(5, 6); 31 // *** 4 *** 32 r = add(p, q); 33 // *** 5 *** 34 p = r; 35 // *** 6 *** 36 r = q; 37 // *** 7 *** 38 System.out.println(p); 39 System.out.println(q); 40 System.out.println(r); 41 } 42 } Beim Ausführen des obigen Codes werden insgesamt fünf Objektinstanzen vom Typ Punkt erzeugt. Geben Sie für jede der mit //*** x *** markierten Stellen an, welche Objektinstanzen dort bekannt sind, welche Werte sie besitzen und auf welche Objektinstanzen die Referenzen p, q und r zeigen. Verwenden Sie dazu eine Tabelle der folgenden Art (Die ersten beiden Zeilen sind wieder vorgegeben): Position p q r Objekt1 Objekt2 Objekt3 Objekt4 Objekt5 *** 1 *** Objekt1 null null (1,2) undef undef undef undef *** 2 *** Objekt1 Objekt2 null (1,2) (3,4) undef undef undef........................... c) Welche Objektinstanzen sind am Ende der main-methode von b) nicht mehr referenziert? d) Wie lautet die Ausgabe der drei println-anweisungen in dn Zeilen 38 bis 40? - 2 -

Aufgabe 4.2: Klassenhierarchien Begriffsklärung 5 Punkte Erklären Sie kurz die folgenden Begriffe: Kapselungsprinzip, Oberklasse, Unterklasse, Vererbung, Überschreiben von Methoden (method overriding), Überladen von Methoden (method overloading), Abstrakte Klasse, Polymorphe Variable, Statischer Typ, Dynamischer Typ. Geben Sie Ihre Antworten als Begriffe.pdf ab. Aufgabe 4.3: UML Unfallmanagementsystem FRIEND 15 Punkte UML-Diagramme können bei der Analyse komplexer Systeme helfen. Im folgenden werden Sie aus der unpräzisen textuellen Beschreibung, die sich ein lokaler Politiker ausgedacht hat, ein Anwendungsfalldiagramm und ein Klassendiagramm für das Unfallmanagementsystem FRIEND erstellen. Geben Sie Ihre Diagramme in UML.pdf ab. Das Unfallmanagementsystem FRIEND soll es Außenbeamten ermöglichen, mittels eines drahtlosen Rechners mit ihrem Dienstleiter zu interagieren. Der Dienstleiter kann den augenblicklichen Stand aller Ressourcen wie Polizeiautos oder Löschzüge auf einem Bildschirm visualisieren und eine freie Ressource entsenden, indem er von seiner Workstation aus einen Befehl erteilt. Also z.b.: Der Außenbeamte aktiviert das Terminal, um dem Dienstleiter einen neue Notfall- Meldung zu übermitteln. Der Dienstleiter prüft die übermittelten Informationen und eröffnet einen neuen Vorfall im System, wo er die Notfallmeldung ablegt und einen ersten Ereignisbericht schreibt. Dann teilt er dem Vorfall zusätzliche Betriebsmittel zu, schickt also z.b. weitere Einheiten zum Unfallort... a) Identifizieren Sie die zwei Akteure und drei Anwendungsfälle für FRIEND im obigen Szenario und stellen Sie diese als UML-Anwendungsdiagramm grafisch dar. b) Auf Nachfragen erhalten Sie vom Kunden die folgenden Informationen: Ja, der Außenbeamte und der Dienstleiter sind freilich beide Polizeibeamte. Jeder hat einen Namen und eine Dienstellen-Nummer... Also der Außenbeamte muss angeben können, was passiert ist und wo es passiert ist... Einen Polizeibeamten ohne genaue Diensbezeichnung gibt es bei uns nicht... Erstellen Sie ein UML-Klassendiagramm für die vier Klassen, die an dem beschriebenen Szenario teilnehmen. Verwenden Sie abstrakte Klassen, Vererbung, Aggregation und Assoziation wo es sinnvoll ist. Für weitere Informationen zu FRIEND, UML und Objektorientierter Softwaretechnik empfehlen wir Ihnen das gleichnamige Buch von Prof. Bernd Brügge (ISBN-13: 978-3-8273-7261-1). Aufgabe 4.4: Vererbung Vierecke 20 Punkte In dieser Aufgabe soll Vererbung an einem einfachen, geometrischen Beispiel demonstriert werden, und zwar an einer Vererbungshierarchie zwischen Viereck, Parallelogramm, Trapez, Rechteck und Quadrat. Gegeben ist dazu eine einfache Klasse Vec2D zur Darstellung von 2D-Koordinaten mit Komponenten x und y. Außerdem ist die Klasse Quadrangle gegeben, mit der ein allgemeines Viereck aus vier Eckpunkten angelegt werden kann. Quadrangle benutzt die vier Eckpunkte als Attribute und hat Methoden zum Zeichnen (draw()) und zum Berechnen seines Flächeninhalts (getarea()). - 3 -

Abbildung 1: Definition der Vierecke, die Sie implementieren werden. Desweiteren können Sie die Klasse QuadrangleTest herunterladen, mit der Sie ein Viereck erzeugen, seinen Flächeninhalt berechnen und das Viereck in einem Fenster zeichnen können. a) Leiten Sie von Quadrangle zwei spezialisierte Klassen Trapezoid (gleichschenkliches Trapez) und Parallelogram ab. Der Einfachheit halber seien die Basisseiten parallel zur x-achse (siehe Abbildung). Das Trapez soll als Attribute p, d1, d2 und h besitzen, das Parallelogramm p, d, h und alpha (in Grad). Die Konstruktoren sollen eben diese Werte entgegennehmen, also z.b.: public class Trapezoid extends Quadrangle { Vec2D p; double d1, d2, h; } Trapezoid(Vec2D p, double d1, double d2, double h) { super(...);... }... b) Die Methode getarea() von Quadrangle ist sehr allgemein und daher nicht sehr effizient. Überschreiben Sie daher in beiden neuen Klassen die Methode getarea() mit einer effizienten, spezialisierten Variante. Der Flächeninhalt beim Trapez ist h(d 1 + d 2 )/2, beim Parallelogram hd. c) Leiten Sie nun analog zu a) eine neue Klasse Rectangle ab und überschreiben Sie wieder getarea(). Sie können dabei von Trapezoid oder Parallelogramm ableiten, s.a. http://de.wikipedia.org/wiki/wer_wird_millionär? d) Leiten Sie nun analog zu a) und c) die Klasse Square ab. Geben Sie die Dateien Trapezoid.java, Parallelogram.java, Rectangle.java und Square.java im EST ab. - 4 -

Zusatzaufgabe 4.5: Interface für die Kommandozeile In dieser Aufgabe sollen Sie ein Interface entwickeln, welches es ermöglicht, Objekte für die in Aufgabe 4.4 entwickelten geometrischen Klassen zu erzeugen. Dazu finden Sie auf der Übungswebseite ein Beispielprogramm, welches das Einlesen und Zeichen der Objekte am Beispiel der Klasse Rectangle übernimmt. Vervollständigen Sie die gegebene main-methode für alle geometrischen Objekte aus der Aufgabe 4.4. Nehmen Sie dazu an, dass Ihnen die Werte auf der Kommandozeile in folgender Reihenfolge übergeben werden: Rectangle <p.x> <p.y> <d> <h> Square <p.x> <p.y> <d> Quadrangle <a.x> <a.y> <b.x> <b.y> <c.x> <c.y> <d.x> <d.y> Parallelogram <p.x> <p.y> <d> <h> <alpha> Trapezoid <p.x> <p.y> <d1> <d2> <h> Zwei Beispieldateien mit Ein- und Ausgabe finden Sie auf der Übungswebseite. Sie können (nach dem Kompilieren) ihr Programm testen, indem Sie das Interface folgendermaßen mit dem Befehl java CommandLineInterface < input > meinoutput ausführen. Mit dem Programm diff können Sie Ihre Ausgabe mit der vorgegebenen Ausgabe vergleichen. Geben Sie die Datei CommandLineInterface.java über EST ab. - 5-60 Punkte