• Keine Ergebnisse gefunden

2 Codierung und Qualität (5 Punkte)

N/A
N/A
Protected

Academic year: 2021

Aktie "2 Codierung und Qualität (5 Punkte)"

Copied!
11
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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 zurSimulationder Klausursituation:

• Bearbeiten Sie die Aufgabenstellung nur innerhalb der vorgegebenen 60 Minu- ten und nur in der Übungssitzung.

• Beantworten Sie die Fragen auf dem Angabenblatt und nutzen Sie gegebenen- falls 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 be- nutzen wollen/müssen, sprechen Sie dies vorder 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 Aufga- ben 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.

(2)

Theorie und Codequalität 1 Vererbung (3 Punkte)

Beschreiben Sie kurz die beiden BegriffeSubklasse(Kindklasse) undInterface.

2 Codierung und Qualität (5 Punkte)

Beschreiben Sie kurz die beiden BegriffeDecompositionundTop-Downund erläu- tern Sie deren Zusammenhang.

Nennen Siezwei Aspekte guter Codequalität und erläutern Sie kurz, warum diese für die Generierung hochwertigen Programmcodes relevant sind.

2

(3)

3 Datenstrukturen (5 Punkte)

Beschreiben Sie kurz und präzise - an einem Beispiel - einen sinnvollen Verwen- dungszweck für dieHashMap-Klasse.

Sie entwickeln ein System zur Verwaltung von Warenbeständen. Warum eignet sich eineArrayListbesser zu Erfassung der einzelnen Produkte als einArray?

(4)

Code verstehen und verbessern 4 Codeverständnis (5 Punkte)

Folgende Methode sei gegeben:

1 p r i v a t e void d o S t u f f ( I m a g e i m a g e) {

2 int[][] p i x e l s = i m a g e. g e t P i x e l A r r a y () ;

3 for(int row = 0; row < p i x e l s. l e n g t h ; row ++) {

4 for(int col = 0; col < p i x e l s[0]. l e n g t h ; col ++)

{

5 C o l o r c o l o r = new C o l o r (p i x e l s[ row ][

col ]) ;

6 int v a l u e = (c o l o r. g e t R e d () + c o l o r.

g e t G r e e n () + c o l o r. g e t B l u e () ) / 3;

7 c o l o r = new C o l o r ( value , value , v a l u e ) ;

8 p i x e l s[ row ][ col ] = c o l o r. t o I n t () ;

9 }

10 }

11 i m a g e. s e t P i x e l A r r a y (p i x e l s) ;

12 }

Beschreiben Sie kurz und präzise, was die Methode konkret macht. Gehen Sie davon aus, das der gegebene Code fehlerfrei ist.

4

(5)

5 Funktionen, Parameter und Variablen (7 Punkte)

Gegeben sei folgender Code:

1 p u b l i c c l a s s E x a m p l e C l a s s {

2 p r i v a t e s t a t i c f i n a l int V A L U E _ A = 42;

3 p r i v a t e int v a l u e _ b = 1 3 3 7 ;

4

5 p u b l i c E x a m p l e C l a s s (int v a l u e _ b ) {

6 p r i n t l n( V A L U E _ A ) ;

7 p r i n t l n(this. v a l u e _ b ) ;

8 this. v a l u e _ b = v a l u e _ b ;

9 }

10

11 p u b l i c void f u n c t i o n A () {

12 int v a l u e _ b = V A L U E _ A ;

13 p r i n t l n( V A L U E _ A ) ;

14 p r i n t l n( v a l u e _ b ) ;

15 f u n c t i o n B (this. v a l u e _ b ) ;

16 p r i n t l n( V A L U E _ A ) ;

17 p r i n t l n( v a l u e _ b ) ;

18 }

19

20 p r i v a t e s t a t i c void f u n c t i o n B (int v a l u e _ b ) {

21 v a l u e _ b = V A L U E _ A + v a l u e _ b ;

22 p r i n t l n( v a l u e _ b ) ;

23 }

24

25 p u b l i c s t a t i c void run () {

26 E x a m p l e C l a s s e x a m p l e C l a s s = new E x a m p l e C l a s s ( -42) ;

27 e x a m p l e C l a s s . f u n c t i o n A () ;

28 }

29 }

Welche Ausgabe wird beim Aufruf der Methoderungeneriert? Gehen Sie davon aus, das der gegebene Code fehlerfrei ist.

(6)

6 Fehler finden (5 Punkte)

Finden und beschreiben Sie kurz die Bugs, syntaktischen Fehler und Konventions- verstöß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 i m p o r t java . util .A r r a y L i s t;

3

4 p u b l i c c l a s s E r r o r C l a s s {

5 p u b l i c s t a t i c f i n a l int a F i x e d V a l u e = 42;

6 p r i v a t e A r r a y L i s t<String> s o m e S t r i n g s ;

7

8 p u b l i c E r r o r C l a s s (S t r i n g a S t r i n g ) {

9 s o m e S t r i n g s . add ( a S t r i n g ) ;

10 }

11

12 p u b l i c void d o S o m e t h i n g () {

13 int[] n u m b e r s = new int[ 1 0 ] ;

14 for(int i = 0; i <= n u m b e r s . l e n g t h ; i ++) {

15 n u m b e r s ( i ) = a F i x e d V a l u e ;

16 }

17

18 p r i n t l n(" done ")

19 }

20 }

6

(7)

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 KlassePerson sowie dem InterfaceCustomerauf.

1 p u b l i c c l a s s P e r s o n {

2 p r o t e c t e d S t r i n g name ;

3 p r o t e c t e d S t r i n g id ;

4

5 p u b l i c P e r s o n (S t r i n g name , S t r i n g id ) {

6 this. name = name ;

7 this. id = id ;

8 }

9

10 p u b l i c S t r i n g g e t N a m e () {

11 r e t u r n name ;

12 }

13

14 p u b l i c S t r i n g g e t I d () {

15 r e t u r n id ;

16 }

17 }

1

2 p u b l i c i n t e r f a c e C u s t o m e r {

3 p u b l i c b o o l e a n p a y F o r ( Food Food ) ;

4 }

Lösen Sie folgenden Aufgabenstellung:

Implementieren Sie die abstrakte KlasseFood. Diese verfügt über drei - ebenfalls ab- strakte - MethodengetRegularPrice, getLecturerPrice und getStudentPrice die jeweils einen Wert vom Typendouble zurückgeben und keine Parameter benötigen.

Entwerfen Sie danach die KlasseMensaCustomer, die von Personerbt und das Inter- faceCustomerimplementiert. Die Klasse verfügen über eine Instanzvariable vom Typ doublein der das Guthaben der jeweiligen Person gespeichert wird. Im Konstruktor der Klasse wird ein initiales Guthaben als Parameter übergeben und gesetzt. Imple- mentieren Sie das Bezahlverfahren in der vererbbaren Methodepay(double cost).

(8)

Dabei gilt: Verfügt die Person über genügen Geld um den - als Parameter über- gebenen - 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 payFormit dem re- gulären Preis (ausFood) aufgerufen.

Legen Sie danach die Klassen Student und Lecturer an. Beide Klassen erben von MensaCustomer. Implementieren Sie für beide neuen Klassen das korrekte Bezahl- verfahren durch sinnvolles Nutzen der geerbten Methoden.

Implementieren Sie hier die notwendigen Klassen (Food, MensaCustomer, Student undLecturer):

8

(9)

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 KlasseCircle verwenden. Sie müssen nur die Funktion schrei- ben und benötigen keine umschließende Klasse.

1 p u b l i c c l a s s C i r c l e {

2 p r i v a t e d o u b l e xPos ;

3 p r i v a t e d o u b l e yPos ;

4 p r i v a t e d o u b l e r a d i u s ;

5

6 p u b l i c C i r c l e (d o u b l e centerX , d o u b l e centerY , d o u b l e r a d i u s ) {

7 this. xPos = c e n t e r X ;

8 this. yPos = c e n t e r Y ;

9 this. r a d i u s = r a d i u s ;

10 }

11 p u b l i c d o u b l e getX () {

12 r e t u r n xPos ;

13 }

14 p u b l i c d o u b l e getY () {

15 r e t u r n yPos ;

16 }

17 p u b l i c d o u b l e g e t R a d i u s () {

18 r e t u r n r a d i u s ;

19 }

20 }

Hinweis: Für die Berechnung der Distanz zwischen zwei Punkten innerhalb des Koordinatensystems können Sie denSatz des Pythagoras verwenden. Dieser Satz be- schreibt die Seitenverhältnisse innerhalb eines rechtwinkligen Dreiecks:

a2+b2 =c2. Folgende Grafik verdeutlicht die Zusammenhänge:

(10)

Implementieren Sie hier die Lösung zu Aufgabe 8. Sie dürfen die Methodensqrt(double a)undpow(double a, double b)der KlasseMathaus dem Paketjava.langnutzen.

10

(11)

9 Wortähnlichkeit (8 Punkte)

Ergänzen Sie die gegebene Funktion getWordSimilarity. Diese berechnet ein Ähn- lichkeitsmaß 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 imkürzeren Wort vorhanden sind. Aus den gezählten, übereinstimmenden Stellen wird eine pro- zentuale Ähnlichkeit bestimmt. Dazu wird die Anzahl der Buchstaben im längeren Wort berücksichtigt. Ein paar Beispiele:

• HausundMausstimmen zu 75%überein.

• Käsethekeund Außenbordmotorstimmen zu 7%überein.

• SchuleundUniversitätstimmen zu 0%überein.

Hinweis: Ein Zeichen an einer bestimmten Stellen innerhalb eines Strings können Sie mit der Methode public char getCharAt(int index) derString-Klasse ausle- sen.

p u b l i c d o u b l e g e t W o r d S i m i l a r i t y (S t r i n g word1 , S t r i n g w o r d 2 ) {

}

Referenzen

ÄHNLICHE DOKUMENTE

Der rabattierte Preis wird Ihnen an der Kasse angezeigt | Die Euro-Preise gelten in der Bundesrepublik Deutschland | Preise freibleibend, Stand 1.1.2022 | Es gelten unsere

AUSWAHL ZWISCHEN KONF CREATIVE UND KONF CLASSIC KONF CREATIVE: BEREITET 6 «PUNKT 6» GOTTESDIENSTE VOR.. KONF CLASSIC-THEMEN: MEINE KIRCHGEMEINDE, SCHÖPFUNG, JESUS,

Das Angebot gilt nur für Titel, die grundsätzlich zur Einführung geeignet sind | Diese Titel erhalten Sie nur zum angegebenen Preis Diese Titel liefern wir zum angegebenen Preis

Kein Prüfpreis möglich | Unverbindliche Preisempfehlung | Die Euro-Preise gelten in der Bundesrepublik Deutschland | Preise freibleibend, Stand 1.1.2021 | Es gelten unsere

Guthaben einlösen: Wenn der Kunde Guthaben besitzt dann wird im „Checkout“ ein Eingabefeld angezeigt, mit dem er sein Guthaben einsetzen kann.. Negative Werte sind hier

Versuche für jeden dieser Punkte die Eigenschaft zu finden, die eine Zahl haben muss, damit das Verfahren an diesem Punkt endet.. (Diese Diagramme sollten entsprechend

Fremd-.

Sie ist insoweit begründet, als sie zur Abweisung des negativen Feststellungsantrags (Antrag 1.)) führt. Sie führt, weil der Senat bei diesem Teilergebnis auch über den Antrag 2.)