Probeklausur. Einführung in die objektorientierte Programmierung mit Java WS Alexander Bazo 4. Januar 2016

Ähnliche Dokumente
Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);

Repetitorium Informatik (Java)

Einstieg in die Informatik mit Java

Java Einführung Abstrakte Klassen und Interfaces

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

Einführung in die Programmierung

3 Objektorientierte Konzepte in Java

Computeranwendung und Programmierung (CuP)

Klausur zur Einführung in die objektorientierte Programmierung mit Java

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

Kapitel 6. Vererbung

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

Klausur zur Einführung in die objektorientierte Programmierung mit Java

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

Kapitel 6. Vererbung

3 Objektorientierte Konzepte in Java

Kapitel 6. Vererbung

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

JAVA - Methoden

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003

Theorie zu Übung 8 Implementierung in Java

Musterlösungen zur Klausur Informatik 3

Vorlesung Objektorientierte Programmierung Probeklausur

Einführung in die Informatik

Einführung in die Programmierung Vorlesungsprüfung

Java für Computerlinguisten

Objektorientierte Programmierung. Kapitel 12: Interfaces

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

3. Konzepte der objektorientierten Programmierung

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

SS Björn Berezowski B.Sc. Marco Münch B.Sc. Michael Roth B.Sc. Repetitorium PG 1. Übungsblatt. 1 Übung - Probeklausur SS 2010 Typ Prof.

Objektorientierte Programmierung

Objektorientierte Programmierung

Java Einführung Methoden in Klassen

Programmieren in Java

Algorithmen und Datenstrukturen

Assoziation und Aggregation

Testklausur 2 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

Java: Vererbung. Teil 3: super()

Einführung in die Programmierung für Wirtschaftsinformatik

PIWIN 1 Übung Blatt 5

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

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

5.4 Klassen und Objekte

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus

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

Handbuch für die Erweiterbarkeit

1. Grundlegende Konzepte in Java (6 Punkte)

Übersicht. Vorstellung des OO-Paradigmas

Vererbung. Martin Wirsing. Ziele. Vererbung

5.5.8 Öffentliche und private Eigenschaften

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

Informationsverarbeitung im Bauwesen

Klassen mit Instanzmethoden

Einführung in die Java- Programmierung

Informatik II Musterlösung

Javakurs für Anfänger

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

Java Kurs für Anfänger Einheit 5 Methoden

Java I Vorlesung Vererbung und Sichtbarkeit

Grundlagen Programmierung

Klausur Softwaretechnologie WS 2014/15

Institut fu r Informatik

Wiederholung zur Vorlesung Programmieren

Programmiervorkurs WS 2013/2014. Instanzmethoden. Termin 6

Tutoraufgabe 1 (Überladen von Methoden):

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

Javakurs für Anfänger

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

Programmieren in Java

5. Abstrakte Klassen

Nachholklausur (6 ECTS) Einführung in die Informatik: Programmierung und Software-Entwicklung. Nachname... Vorname... Matrikelnummer... Studienfach...

2.2 Prozesse in Java

Repetitorium Informatik (Java)

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Universität Augsburg, Institut für Informatik Sommersemester 2003 Prof. Dr. Bernhard Bauer 18. Oktober 2003 Stefan Fischer, Dr.

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Ein erstes Java-Programm

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Einführung Methoden. Kapitel 6

Datenbankanwendungsprogrammierung Crashkurs Java

Übungsblatt 3: Algorithmen in Java & Grammatiken

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

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

Informatik II Prüfungsvorbereitungskurs

Erreichbarkeit von Klassenelementen. Daten verstecken und kapseln

Programmierkurs Java

Geordnete Binärbäume

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Teil 1: Grundeigenschaften von Rechnern und Software

Einstieg in die Informatik mit Java

Abschnitt 9: Schnittstellen: Interfaces

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

II.1.1. Erste Schritte - 1 -

Transkript:

Probeklausur Einführung in die objektorientierte Programmierung mit Java WS1415 - Alexander Bazo 4. Januar 2016 Diese Probeklausur soll Ihnen als Hilfestellung zur Klausurvorbereitung dienen. Die Lösungen zu den Aufgaben werden wir in der Vorlesung besprechen. Viele Aufgabenstellungen aus vergangenen Klausuren finden Sie auf der Seite der SIM (http://www.uni-regensburg.de/universitaet/sim/klausuren/index.html). Nutzen Sie die Möglichkeit zur Simulation der Klausursituation: Bearbeiten Sie die Aufgabenstellung nur innerhalb der vorgegebenen 60 Minuten und nur in der Übungssitzung. Beantworten Sie die Fragen auf dem Angabenblatt und nutzen Sie gegebenenfalls auch die Rückseiten. Nutzen Sie keine Hilfsmittel (Smartphone, Laptop, Bücher, Folien,...). In der Klausur ist nur ein Stift (kein Bleistift) erlaubt. Sollten Sie ein Wörterbuch benutzen wollen/müssen, sprechen Sie dies vor der Klausur mit dem Dozenten ab. Täuschungsversuche werden - in der richtigen Klausur - durch entsprechende Maßnahmen bestraft. Bei Fragen oder Unklarheiten zur Aufgabenstellung wenden Sie sich an die Aufsichtspersonen/Tutoren. Beantworten Sie die Fragen so präzise und kurz wie möglich und geben Sie keine mehrdeutigen (oder mehrere) Lösungen ab. Zur Beantwortung der Programmieraufgaben ist die Sprache Java zu verwenden. Gehen Sie davon aus, dass alle Aufgaben im Rahmen der bekannten GraphicsApp- Umgebung gelöst werden. Wählen Sie sinnvolle Bezeichner und Namen und achten Sie auf korrekte Sichtbarkeit und Syntax. Sie haben 60 Minuten zur Bearbeitung der Klausur Zeit und können 60 Punkte erreichen. Die Punkteangaben bei den Aufgaben dienen auch dazu, Ihnen bei der Zeiteinteilung zu helfen. Achtung: Die eigentliche Klausur wird ähnlich aufgebaut sein. Der Umfang der einzelnen Blöcke und die Form der Fragen in dieser Probleklausur sind allerdings kein Gewähr für die endgültige Form. 1

Theorie und Codequalität 1 Vererbung (3 Punkte) Beschreiben Sie kurz die beiden Begriffe Subklasse (Kindklasse) und Interface. 2 Codierung und Qualität (5 Punkte) Beschreiben Sie kurz die beiden Begriffe Decomposition und Top-Down und erläutern Sie deren Zusammenhang. Nennen Sie zwei Aspekte guter Codequalität und erläutern Sie kurz, warum diese für die Generierung hochwertigen Programmcodes relevant sind. 2

3 Datenstrukturen (5 Punkte) Beschreiben Sie kurz und präzise - an einem Beispiel - einen sinnvollen Verwendungszweck für die HashMap-Klasse. Sie entwickeln ein System zur Verwaltung von Warenbeständen. Warum eignet sich eine ArrayList besser zu Erfassung der einzelnen Produkte als ein Array? 3

Code verstehen und verbessern 4 Codeverständnis (5 Punkte) Folgende Methode sei gegeben: 1 private void dostuff ( Image image ) { 2 int [][] pixels = image. getpixelarray (); 3 for ( int row = 0; row < pixels. length ; row ++) { 4 for ( int col = 0; col < pixels [0]. length ; col ++) { 5 Color color = new Color ( pixels [ row ][ col ]); 6 int value = ( color. getred () + color. getgreen () + color. getblue ()) / 3; 7 color = new Color ( value, value, value ); 8 pixels [ row ][ col ] = color. toint (); 9 } 10 } 11 image. setpixelarray ( pixels ); 12 } Beschreiben Sie kurz und präzise, was die Methode konkret macht. Gehen Sie davon aus, das der gegebene Code fehlerfrei ist. 4

5 Funktionen, Parameter und Variablen (7 Punkte) Gegeben sei folgender Code: 1 public class ExampleClass { 2 private static final int VALUE_ A = 42; 3 private int value_ b = 1337; 4 5 public ExampleClass ( int value_ b ) { 6 println ( VALUE_A ); 7 println ( this. value_b ); 8 this. value_b = value_b ; 9 } 10 11 public void functiona () { 12 int value_ b = VALUE_ A ; 13 println ( VALUE_A ); 14 println ( value_b ); 15 functionb ( this. value_b ); 16 println ( VALUE_A ); 17 println ( value_b ); 18 } 19 20 private static void functionb ( int value_ b ) { 21 value_ b = VALUE_ A + value_ b ; 22 println ( value_b ); 23 } 24 25 public static void run () { 26 ExampleClass exampleclass = new ExampleClass ( -42) ; 27 exampleclass. functiona (); 28 } 29 } Welche Ausgabe wird beim Aufruf der Methode run generiert? Gehen Sie davon aus, das der gegebene Code fehlerfrei ist. 5

6 Fehler finden (5 Punkte) Finden und beschreiben Sie kurz die Bugs, syntaktischen Fehler und Konventionsverstöße in dem folgenden Code-Beispiel. Markieren Sie die fehlerhafte Stellen im Code und notieren Sie Ihre Antworten jeweils unter Angabe der Zeilennummer mit einer kurzen Beschreibung des Fehlers bzw. des Verstoßes. 1 2 import java. util. ArrayList ; 3 4 public class ErrorClass { 5 public static final int afixedvalue = 42; 6 private ArrayList < String > somestrings ; 7 8 public ErrorClass ( String astring ) { 9 somestrings. add ( astring ); 10 } 11 12 public void dosomething () { 13 int [] numbers = new int [ 10]; 14 for ( int i = 0; i <= numbers. length ; i ++) { 15 numbers ( i) = afixedvalue ; 16 } 17 18 println (" done ") 19 } 20 } 6

Code implementieren 7 Studenten, Dozenten und die Mensa (14 Punkte) Modellieren Sie eine Reihen von Klassen, die das Bezahlen in einer Mensa abbilden. Kunden (Customer) können Speisen (Food) kaufen, wenn Sie über ausreichend Geld (Balance) verfügen. Für jede Speise gibt es einen regulären sowie zwei reduzierte Preise für Dozenten (Lecturer) und Studenten (Student). Bauen Sie Ihre Lösung auf der gegebenen Klasse Person sowie dem Interface Customer auf. 1 public class Person { 2 protected String name ; 3 protected String id; 4 5 public Person ( String name, String id) { 6 this. name = name ; 7 this.id = id; 8 } 9 10 public String getname () { 11 return name ; 12 } 13 14 public String getid () { 15 return id; 16 } 17 } 1 2 public interface Customer { 3 public boolean payfor ( Food Food ); 4 } Lösen Sie folgenden Aufgabenstellung: Implementieren Sie die abstrakte Klasse Food. Diese verfügt über drei - ebenfalls abstrakte - Methoden getregularprice, getlecturerprice und getstudentprice die jeweils einen Wert vom Typen double zurückgeben und keine Parameter benötigen. Entwerfen Sie danach die Klasse MensaCustomer, die von Person erbt und das Interface Customer implementiert. Die Klasse verfügen über eine Instanzvariable vom Typ double in der das Guthaben der jeweiligen Person gespeichert wird. Im Konstruktor der Klasse wird ein initiales Guthaben als Parameter übergeben und gesetzt. Implementieren Sie das Bezahlverfahren in der vererbbaren Methode pay(double cost). 7

Dabei gilt: Verfügt die Person über genügen Geld um den - als Parameter übergebenen - Preis zu bezahlen, wird das Guthaben reduziert. Die Methode gibt den Wahrheitswert true zurück. Im anderen Fall wird nur false zurückgegeben. Diese Methode wird in der, vom Interface vorgeschriebenen Methode payfor mit dem regulären Preis (aus Food) aufgerufen. Legen Sie danach die Klassen Student und Lecturer an. Beide Klassen erben von MensaCustomer. Implementieren Sie für beide neuen Klassen das korrekte Bezahlverfahren durch sinnvolles Nutzen der geerbten Methoden. Implementieren Sie hier die notwendigen Klassen (Food, MensaCustomer, Student und Lecturer): 8

8 Kreise und Überschneidung (8 Punkte) Schreiben Sie eine öffentliche Funktion docollide die zwei Parameter vom Typ Circle übergeben bekommt und feststellt, ob sich diese Kreise überschneiden. Das Ergebnis wird als Wahrheitswert zurück gegeben. Für die Implementierung müssen Sie die vorgegeben Klasse Circle verwenden. Sie müssen nur die Funktion schreiben und benötigen keine umschließende Klasse. 1 public class Circle { 2 private double xpos ; 3 private double ypos ; 4 private double radius ; 5 6 public Circle ( double centerx, double centery, double radius ) { 7 this. xpos = centerx ; 8 this. ypos = centery ; 9 this. radius = radius ; 10 } 11 public double getx () { 12 return xpos ; 13 } 14 public double gety () { 15 return ypos ; 16 } 17 public double getradius () { 18 return radius ; 19 } 20 } Hinweis: Für die Berechnung der Distanz zwischen zwei Punkten innerhalb des Koordinatensystems können Sie den Satz des Pythagoras verwenden. Dieser Satz beschreibt die Seitenverhältnisse innerhalb eines rechtwinkligen Dreiecks: a 2 + b 2 = c 2. Folgende Grafik verdeutlicht die Zusammenhänge: 9

Implementieren Sie hier die Lösung zu Aufgabe 8. Sie dürfen die Methoden sqrt(double a) und pow(double a, double b) der Klasse Math aus dem Paket java.lang nutzen. 10

9 Wortähnlichkeit (8 Punkte) Ergänzen Sie die gegebene Funktion getwordsimilarity. Diese berechnet ein Ähnlichkeitsmaß zwischen zwei gegebenen Wörtern in Form eines Prozentwerts (double). Es gilt: Die Wörter werden zeichenweise überprüft, d.h. der erste Buchstabe des einen Worts wird mit dem ersten Buchstaben des zweiten Worts überprüft, usw.). Bei unterschiedlicher Länge werden nur so viele Stellen überprüft, wie im kürzeren Wort vorhanden sind. Aus den gezählten, übereinstimmenden Stellen wird eine prozentuale Ähnlichkeit bestimmt. Dazu wird die Anzahl der Buchstaben im längeren Wort berücksichtigt. Ein paar Beispiele: Haus und Maus stimmen zu 75% überein. Käsetheke und Außenbordmotor stimmen zu 7% überein. Schule und Universität stimmen zu 0% überein. Hinweis: Ein Zeichen an einer bestimmten Stellen innerhalb eines Strings können Sie mit der Methode public char getcharat(int index) der String-Klasse auslesen. public double getwordsimilarity ( String word1, String word2 ) { } 11