• Keine Ergebnisse gefunden

Klausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java im Wintersemester 2015/16

N/A
N/A
Protected

Academic year: 2021

Aktie "Klausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java im Wintersemester 2015/16"

Copied!
12
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Allgemeine Hinweise

1. Die Bearbeitungszeit beträgt 60 Minuten. Sie können 50 Punkte erreichen.

2. Verwenden Sie für das Lösen der Aufgaben die Programmiersprache Java. Alle gegebenen Code-Fragmente sind ebenfalls in Java verfasst. Halten Sie sich an die bekannten Regeln zur Codequalität.

3. Schreiben Sie Ihren Namen, Vornamen, Studiengang und Ihre Matrikelnum- mer leserlich unten auf jedes Angabenblatt bevor Sie mit der Bearbeitung beginnen! Blätter ohne diese Angaben werden nicht gewertet. Wenn Sie die Rückseite eines Blattes verwenden, notieren Sie dies bitte auf der Vorderseite.

Kennzeichnen Sie eindeutig, zu welcher Aufgabe eine Lösung gehört.

4. Benutzen Sie keine Bleistifte, keine rotschreibenden Stifte und kein TippEx (oder ähnliche Produkte).

5. Die Klausur ist als Closed Book-Klausur angelegt. Sie dürfen keine mitgebrach- ten Quellen oder Notizen zur Bearbeitung der Aufgaben verwenden. Techni- sche Hilfsmittel sind ebenfalls nicht erlaubt.

6. Wenden Sie sich bei Unklarheiten in den Aufgabenstellungen immer an die Klausuraufsicht (Hand heben). Hinweise und Hilfestellungen werden dann, falls erforderlich, offiziell für den gesamten Hörsaal durchgegeben. Aussagen unter vier Augen sind ohne Gewähr.

7. Geben Sie keine mehrdeutigen (oder mehrere) Lösungen an. In solchen Fällen wird stets die Lösung mit der geringeren Punktzahl gewertet. Eine richtige und eine falsche Lösung zu einer Aufgabe ergeben also null Punkte. Das gilt auch für die Multiple Choice-Fragen. Kreuzen Sie bei einer Frage zwei richtige und zwei falschen Möglichkeiten an, ergibt das in der Summe null Punkte.

(2)

Teil 1: Theorie

1) Arrays (2 Punkte)

Kreuzen Sie alle korrekten Aussagen an, die für Arrays in Java zutreffen.

2 Arrays haben eine feste Länge, die nach Initialisierung nicht mehr verändert werden kann

2 Arrays haben einen festen Datentyp, der für alle enthaltenen Elemente gilt 2 Die Länge eines Arrays ist über die Methode.size()abrufbar

2 Auf das erste Element eines Arrays wird mit dem Index[1]zugegriffen

2) Datentypen (2 Punkte)

Welche der folgenden Datentypen werden in Java nicht als primitive Datentypen abgebildet?

2 int 2 String 2 ArrayList 2 boolean

3) Debugging (4 Punkte)

Beschreiben Sie kurz den Unterschied zwischen einem Syntaxfehler und einemBug.

(3)

4) Strings (2 Punkte)

Kreuzen Sie alle korrekten Aussagen an, die für Strings und Characters in Java zu- treffen.

2 Einzelne Zeichen können in Java über den primitiven Datentypen char abge- bildet

2 Die inhaltliche Übereinstimmung zweier Strings kann in Java eindeutig über den Operator== geprüft werden

2 Ein String wird intern als Array auschar-Werten dargestellt

2 In einer Variable vom Typenchar können nur die Werte vona bisz und 0 bis 9gespeichert werden

Seite 3 von 12

Name, Studiengang & Matrikelnummer:

(4)

Teil 2: Codeverständnis

5) Codeanalyse (5 Punkte)

Geben ist die Methode doStuff(String s1). Beschreiben Sie kurz den Aufbau der Methode und nennen Sie anschließend den wahrscheinlichen Einsatzzweck. Gehen Sie davon aus, dass der gegebene Code korrekt ist.

1 p u b l i c b o o l e a n d o S t u f f (S t r i n g s1 ) {

2 S t r i n g[] w o r d s = {" time ", " p e r s o n ", " year ", " way ", " day "};

3 for(int i = 0; i < w o r d s . l e n g t h ; i ++) {

4 if( w o r d s [ i ]. e q u a l s ( s1 ) ) {

5 r e t u r n true;

6 }

7 }

8 r e t u r n f a l s e;

9 }

(5)

6) Fehler finden (5 Punkte)

Finden Sie die Konventionsverstöße, Syntaxfehler und Bugs in der folgenden Metho- de. Markieren Sie die fehlerhaften Stellen im Code und beschreiben Sie den jeweili- gen Fehler kurz unter Angabe der Zeilennummer. Schlecht gewählte Bezeichner für Methoden und Variablen sowie fehlerhafte Einrückungen zählen nicht als Fehler. Im Code sind fünf Fehler zu finden.

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

2 p r i v a t e char T A R G E T _ C H A R ;

3 p r i v a t e char r e p l a c e m e n t C h a r ;

4

5 p u b l i c C h a r R e p l a c e r (char t a r g e t C h a r ; char r e p l a c e m e n t C h a r ) {

6 this. T A R G E T _ C H A R = t a r g e t C h a r ;

7 r e p l a c e m e n t C h a r = r e p l a c e m e n t C h a r ;

8 }

9

10 p u b l i c S t r i n g r e p l a c e C h a r (S t r i n g s t r i n g ) {

11 S t r i n g r e s u l t = " ";

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

13 char c = s t r i n g . c h a r A t ( i ) ;

14 if( c = T A R G E T _ C H A R ) {

15 r e s u l t += r e p l a c e m e n t C h a r ;

16 } else {

17 r e s u l t += c ;

18 }

19 }

20 r e t u r n r e s u l t ;

21 }

22 }

Seite 5 von 12

Name, Studiengang & Matrikelnummer:

(6)

Teil 3: Code implementieren

7) Email (15 Punkte)

Gegeben ist die Klasse Email sowie das Interface Attachment. Email beschreibt ei- ne Nachricht in einemMail-Client. Das Interface Attachmentwird von allen Klassen implementiert, die Dateien repräsentieren, die als Anhang einer Email beigefügt werden können.

Achten Sie beim Erstellen von Subklassen auf Sichtbarkeitsbereiche und Eigenschaf- ten der Superklasse. Fügen Sie alle nötigen Komponenten hinzu und implementieren Sie, falls nicht explizit anders angegeben, komplette Klassen. Gehen Sie davon aus, dass der gegebene Code korrekt ist.

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

2 p r i v a t e S t r i n g s e n d e r ;

3 p r i v a t e S t r i n g r e c i p i e n t ;

4 p r i v a t e S t r i n g s u b j e c t ;

5 p r i v a t e S t r i n g body ;

6

7 p u b l i c E m a i l (S t r i n g sender , S t r i n g r e c i p i e n t , S t r i n g subject , S t r i n g body ) {

8 this. s e n d e r = s e n d e r ;

9 this. r e c i p i e n t = r e c i p i e n t ;

10 this. s u b j e c t = s u b j e c t ;

11 this. body = body ;

12 }

13

14 p u b l i c void send () {

15 if(! i s E m p t y () ) {

16 // Hier wird die Mail v e r s e n d e t

17 }

18 }

19 // ...

20 }

1 p u b l i c i n t e r f a c e A t t a c h m e n t {

2

3 // M a x i m a l e D a t e i g r ö ß e des A n h a n g s in K i l o b y t e s

4 p u b l i c s t a t i c f i n a l long M A X _ F I L E _ S I Z E = 1 0 2 4 ;

5

6 // Gibt die D a t e i g r ö ß e des A n h a n g s in K i l o b y t e s zur ü ck

7 p u b l i c long g e t F i l e S i z e () ;

8

9 }

(7)

7a)Fügen Sie eine zusätzliche, öffentliche MethodeisEmptyzur KlasseEmailhinzu.

Diese gibt denboolean-Werttruezurück, wennbeideString-Variablensubjectund bodyeinen leeren String enthalten. Sie müssen nicht die komplette Klasse abschrei- ben, es reicht, wenn Sie nur die neue Methode notieren.

7b) Entwerfen Sie eine neue Klasse MailWithAttachment, die von Email erbt und über eine zusätzliche, private Instanzvariable vom Typ Attachment verfügt. Ergän- zen Sie eine öffentliche Methode ohne Rückgabewert, über die der Wert der Variable geändert werden kann. Die Methode bekommt den neuen Wert der Variable als Pa- rameter übergeben. Wählen Sie einen passenden Namen für die neue Methode.

7c)Überschreiben Sie inMailWithAttachment die geerbte Methodesend. Prüfen Sie in der Methode zuerst, ob der Anhang der Mail die erlaubte Dateigröße, die durch die Konstante im Interface Attachment angegeben wird, nicht überschreitet. Nur dann soll die geerbte Version dersend-Methode aufgerufen werden. Übersteigt der Anhang das erlaubte Limit, wird die Methode direkt beendet.

Seite 7 von 12

Name, Studiengang & Matrikelnummer:

(8)
(9)

8) Fahrtenbuch (15 Punkte)

Gegeben sind die Klasse LogbookEntry und Logbook. Diese Klassen sind Teil eines elektronischen Fahrtenbuchs, mit dem Autofahrer berufliche und private Fahrten dokumentieren können. Ein Fahrtenbuch besteht dabei aus mehreren Einträgen, die die Distanz (Kilometer) und die Benzinkosten (Euro) der jeweiligen Fahrt abbilden.

Zusätzlich wird für jeden Eintrag festgehalten, ob es sich um eine private oder beruf- liche Fahrt handelt. In dieser Aufgabe müsse Sie drei Methoden derLogbook-Klasse implementieren, deren Signaturen bereits vorgegeben sind. Achten Sie auf die erklä- renden Kommentare im vorgegebenen Code. Gehen Sie davon aus, dass der gege- bene Code korrekt ist.

Hinweis:Sie müssen nicht die komplette Klasse abschreiben, es reicht, wenn Sie nur die zu vervollständigenden Methoden notieren.

1 p u b l i c c l a s s L o g b o o k E n t r y {

2 // G e f a h r e n e D i s t a n z in K i l o m e t e r n

3 p r i v a t e d o u b l e d i s t a n c e ;

4 // B e n z i n k o s t e n f ü r d i e s e S t r e c k e

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

6 // Gibt an , ob es sich um eine p r i v a t e F a h r t h a n d e l t

7 p r i v a t e b o o l e a n i s P r i v a t e ;

8

9 p u b l i c L o g b o o k E n t r y (d o u b l e distance , d o u b l e costs , b o o l e a n i s P r i v a t e ) {

10 this. d i s t a n c e = d i s t a n c e ;

11 this. c o s t s = c o s t s ;

12 this. i s P r i v a t e = i s P r i v a t e ;

13 }

14

15 p u b l i c d o u b l e g e t D i s t a n c e () {

16 r e t u r n d i s t a n c e ;

17 }

18

19 p u b l i c d o u b l e g e t C o s t s () {

20 r e t u r n c o s t s ;

21 }

22

23 p u b l i c b o o l e a n i s P r i v a t e () {

24 r e t u r n i s P r i v a t e ;

25 }

26 }

Seite 9 von 12

Name, Studiengang & Matrikelnummer:

(10)

1 i m p o r t java . util .A r r a y L i s t;

2

3 p u b l i c c l a s s L o g b o o k {

4 // L i s t e a l l e r F a h r t e n

5 p r i v a t e A r r a y L i s t< L o g b o o k E n t r y > l o g b o o k ;

6 // A k t u e l l e r T a c h o s t a n d in K i l o m e t e r n

7 p r i v a t e d o u b l e m i l e a g e ;

8 // D u r c h s c h n i t t l i c h e r B e n z i n v e r b r a u c h ( L i t e r pro 100 km )

9 p r i v a t e d o u b l e a v e r a g e C o n s u m e ;

10

11 p u b l i c L o g b o o k (d o u b l e mileage , d o u b l e a v e r a g e C o n s u m e ) {

12 this. m i l e a g e = m i l e a g e ;

13 this. a v e r a g e C o n s u m e = a v e r a g e C o n s u m e ;

14 l o g b o o k = new A r r a y L i s t< L o g b o o k E n t r y >() ;

15 }

16

17 /* *

18 * F ü gt e i n e n n e u e n E i n t r a g zum L o g b u c h h i n z u

19 * @ p a r a m d i s t a n c e S t r e c k e in K i l o m e t e r n

20 * @ p a r a m c u r r e n t F u l e P r i c e B e n z i n p r e i s ( Euro / L i t e r )

21 * @ p a r a m w a s P r i v a t e T r i p Wahr , wenn F a h r t p r i v a t e war

22 */

23 p u b l i c void a d d L o g (d o u b l e distance , d o u b l e c u r r e n t F u l e P r i c e , b o o l e a n w a s P r i v a t e T r i p ) {

24 // ...

25 }

26

27 /* *

28 * Gibt die G e s a m t d i s t a n z a l l e r b e r u f l i c h e n F a h r e n zur ü ck

29 * @ r e t u r n B e r e c h n e t e D i s t a n z in K i l o m e t e r n

30 */

31 p u b l i c d o u b l e g e t T r a v e l l e d D i s t a n c e F o r N o n P r i v a t e T r i p s () {

32 // ...

33 }

34

35 /* *

36 * Gibt die G e s a m t d i s t a n z a l l e r p r i v a t e r F a h r e n zur ü ck

37 * @ r e t u r n B e r e c h n e t e D i s t a n z in K i l o m e t e r n

38 */

39 p u b l i c d o u b l e g e t T r a v e l l e d D i s t a n c e F o r P r i v a t e T r i p s () {

40 // ...

41 }

42

43 }

(11)

8a)Vervollständigen Sie die MethodaddLoginLogbook. In dieser Methode wird ein neuer Eintrag zum Logbuch hinzugefügt. Nutzen Sie dazu die als Parameter über- gebenen Werte. Zur Berechnung der Benzinkosten wird auch der Wert benötigt, der in der InstanzvariableaverageConsume gespeichert ist. Zusätzlich zum Erstellen des neuen Eintrags soll auch der Tachostand im Fahrtenbuch angepasst werden.

Hinweis: Um den Benzinverbrauch zu berechnen, multiplizieren Sie die gefahre- ne Strecke mit dem durchschnittlichen Verbrauch pro einem Kilometer. Die tat- sächlichen Kosten ergeben sich dann aus dem Produkt von Benzinverbrauch und aktuellem Benzinpreis.

Seite 11 von 12

Name, Studiengang & Matrikelnummer:

(12)

8b)Vervollständigen Sie die Methoden getTravelledDistanceForNonPrivateTrips undgetTravelledDistanceForPrivateTripsinLogbook. Diese Methoden geben die Gesamtdistanz aller beruflicher bzw. privater Fahrten zurück. Wenden Sie in dieser Aufgabe das Prinzip der Dekomposition an und lagern Sie Teilaufgaben wiederver- wendbar in zusätzliche Methoden aus.

Referenzen

ÄHNLICHE DOKUMENTE

Ein Problem ist algorithmisch lösbar, wenn ein Algorithmus existiert der für beliebige Eingaben die korrekte Ausgabe in endlicher Zeit liefert, vorausgesetzt man gibt dem Algorithmus

■ Eine Klasse enthält einen speziellen Repräsentanten, ein spezielles Objekt, ein Schablonenobjekt (Prototyp) für ihre Objekte. ■ Ein Objekt wird aus einer Klasse

Sie k¨onnen in dieser Aufgabe auf die folgende statische Methode der Klasse FacebookHelper zur¨uckgreifen, die den Namen eines Nutzers als Parameter erwartet und eine Liste der

Gegeben ist die Klasse WayPoint. Diese Klasse beschreibt einen Punkt auf einer zwei- dimensionalen Karte anhand einer x- und y-Koordinate. Die Methode bekommt einen Parameter vom

Geben sind die abstrakte Basisklasse Item sowie das Enum Type. Entwerfen Sie mit diesen Vorgaben weitere Klassen um ein Programm zur Verwaltung von Filmen zu entwerfen. Item stellt

Innerhalb des Spiels wird das Gitter durch ein mehrdimensionales int-Array abge- bildet. Jede Zeile ist durch ein separates Array abgebildet, in dem jedes Element für eine

Hinweise: Mit der Methode indexOf(char c) der String-Klasse lässt sich überprüfen, ob ein Zeichen c in einem String vorkommt oder nicht. Die Methoden wird auf der

8b) Erstellen Sie eine Klasse AdTrack, die von AudioTrack erbt und zusätzlich über private Instanzvariablen für den Namen des jeweiligen Kunden sowie die vereinbar- ten Werbekosten