Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programmierung Prof.docx
Скачиваний:
4
Добавлен:
29.08.2019
Размер:
96.63 Кб
Скачать

Programmierung Prof. Dr.-Ing. Nobert Fuhr

Gudrun Fischer Sascha Kriewel

programmierung@is.informatik.uni-duisburg.de

Übungsblatt Nr. 6 Anmeldung zur Klausur!

Um an der Klausur teilzunehmen, müssen sich Studierende der angewandten Informatik in der Zeit vom 24.11. bis zum 03.12. beim Prüfungsamt an­melden. Das Prüfungsamt ist nur vormittags geöffnet.

Für jeden Buchstaben (Nachname) gibt es jedoch nur einen einzigen Tag, an dem man sich anmelden kann!

Bitte informiere dich über den Aushang an Tür LG015 und/oder über das Fach­schaftsforum Informatik, an welchem Tag dein Buchstabe vorgesehen ist!

Studierende anderer Fachrichtungen melden sich, soweit in ihrer Studienordnung nicht anders vorgesehen, per E-Mail direkt bei uns an: programmierung@is.informatik.uni-duisburg .de

Bitte Vorname, Nachname, Studienfach und Matrikelnummer angeben!

Generelle Hinweise

Bitte lies dir den Zettel (d.h. alle Aufgaben) schon vor der Übung gründlich durch! Versuche schon vor der Übung, die Aufgaben zu lösen, oder überlege dir wenigstens Lösungswege und/oder konkrete Fragen, die du stellen kannst!

Aufgabe 11 kann größtenteils ohne Rechner gelöst werden, man braucht den Rechner nur zum Ausprobieren (bitte das Programm aus dem Netz herunter­laden). Bei Aufgabe 12 kann man sich schon vorher überlegen, welche Instanz­variablen die Klassen haben müssen, welche Datentypen diese Variablen haben müssen, usw. Aufgabe 13 ist zum Weiterdenken.

In der Übung werden wir davon ausgehen, dass du mindestens die Aufgaben 11 und 12 (so weit wie dir möglich) vorbereitet hast!

Aufgaben

Aufgabe 11: Vererbung und Polymorphie

Gegeben sei der folgende Java-Code:

Listing 1: FahrzeugTest.Java

1

class

Fahrzeug extends Object

{

2

Fahrzeug() {

3

System . out . println ("

Ich„kann„fahren.");

4

}

5

}

6

class

Auto extends Fahrzeug {

7

Auto () {

8

System . out . println ("

Ich„habe„vier„äRder . " ) ;

9

}

10

}

11

class

SUV extends Auto {

12

SUV() {

13

System . out . println ("

Ich„bin„ein„nutzloser„" +

14

" Benzinfresser . " );

15

}

16

}

17

public

class FahrzeugTest {

18

19

public static void main ( S tring [ ] args ) {

20

21

SUV suv = new

SUV() ;

22

23

if (suv instanceof Fahrzeug)

24

System

. out . println(

25

" Dies „

ist „ein„Fahrzeug . " );

26

if (suv instanceof Auto)

27

System

. out . println(

28

" Dies „

ist „ein„Auto . " ) ;

29

if (suv instanceof SUV)

30

System

. out . println(

31

" Dies „

ist„ein„SUV. " ) ;

32

}

33

}

  1. Überlege dir zuerst, ohne das Programm auszuprobieren: Was wird dieses Programm ausgeben? Warum?

  2. Teste das Programm nun. Entspricht das Ergebnis dem, was du erwartet hast?

Aufgabe 12: Das Konzept Auto und dessen Spezialisierung Pickup

Modelliere die folgenden Konzepte, indem du sie in den Klassen Auto, Pickup und AutoTest verwirklichst. Eigenschaften von Objekten dieser Klassen sollen ausschließlich beim Erzeugen gesetzt und ggf. durch Methoden verändert werden können.

Auto: Ein Auto soll ein Kennzeichen, einen Kilometerstand und eine Anzahl Sitzplätze haben. Wenn nicht anders angegeben, so soll das Kennzeichen eines Auto-Objektes standardmäßig „DU-DAI 0815" lauten, es sollen aber natürlich auch Autos mit anderen Kennzeichen erzeugt werden können. Ein neu erzeugtes Auto hat grundsätzlich noch keine Kilometer gefahren. Wenn nicht anders angegeben, so hat ein Auto 5 Sitzplätze. Es sollen jedoch auch zweisitzige Autos erzeugt werden können. Zu guter Letzt hat ein Auto außerdem eine Antenne, die ausgefahren oder eingefahren sein kann. Die Klasse soll mindestens folgende Methoden besitzen:

  • public String getKennzeichen(): liefert das Kennzeichen zurück

  • public int getKilometerstand(): liefert den aktuellen Kilome­terstand zurück

  • public void fahre(int x): schreibt eine Meldung an die Stan­dardausgabe, dass das Auto x Kilometer fährt, und setzt dann den Kilometerstand entsprechend weiter

  • public void antenneEinfahren(): schreibt eine Meldung an die Standardausgabe, dass die Antenne eingefahren wird, und setzt den Status der Antenne

  • public void antenneAusfahren(): schreibt eine Meldung an die Standardausgabe, dass die Antenne ausgefahren wird, und setzt den Status der Antenne

  • public boolean istAntenneDraussen(): liefert genau dann true, wenn die Antenne ausgefahren ist

  • protected void vorDemWaschen(): bereitet das Auto auf den Auf­enthalt in der Waschstraße vor - konkret bedeutet das bei einem Auto, dass die Antenne eingefahren wird

  • public void waschen(): bereitet das Auto für eine Wagenwäsche vor und schreibt dann eine Meldung an die Standardausgabe, dass der Wagen gewaschen wird

  • public int getSitzplaetze(): liefert die Anzahl Sitzplätze zu­rück

  • public boolean equals(Object o): ergibt genau dann true, wenn das Objekt o ebenfalls ein Auto ist, und wenn die beiden Kenn­zeichen gleich sind

  • public String toString(): gibt eine passende String- Repräsentation des Autos zurück

Pickup: Ein Pickup ist für unsere Zwecke eine spezielle Art von Auto. Anders als sonstige Autos hat es auf jeden Fall nur 2 Sitzplätze. Dafür hat es zusätzlich eine offene Ladefläche mit einem beim Erzeugen bestimmbaren Fassungsvermögen f. Die Ladefläche ist beim Erzeugen des Pickups zu­nächst leer und kann maximal mit f Dingen beladen werden. Die Klasse soll mindestens folgende Methoden besitzen:

  • public boolean beladen(int x): falls auf der Ladefläche noch ge­nügend Platz ist, wird der Inhalt der Ladefläche um x Dinge er­höht, eine passende Meldung an die Standardausgabe geschrieben, und true zurückgegeben, andernfalls false

  • public void entladen(int x): falls auf der Ladefläche mindestens x Dinge vorhanden sind, wird der Inhalt der Ladefläche um x Dinge erniedrigt, eine passende Meldung geschrieben, und true zurückge­geben, andernfalls false

  • protected void vorDemWaschen(): bei einem Pickup soll vor dem Waschen nicht die Antenne eingefahren werden, sondern stattdessen die Ladefläche geleert werden

  • public int getLadung(): liefert die Anzahl Dinge, die derzeit auf der Ladefläche liegen, zurück, ohne den Ladezustand zu verändern

  • public String toString(): gibt eine passende String- Repräsentation des Pickups zurück

AutoTest: Diese Klasse ist ausschließlich zum Testen der Klassen Auto und Pickup da. Sie soll vom Java-Interpreter ausgeführt werden können. Defi­niere also eine passende main-Methode, in der mehrere verschiedene Autos und Pickups erzeugt werden. Dort sollte u.a. Folgendes geschehen:

  • Lass dir die Kennzeichen und sonstigen Zustände der erzeugten Ob­jekte ausgeben.

  • Lass die Autos und Pickups fahren, waschen und teste sie unterein­ander auf Gleichheit.

  • Teste die Beladelogik der Pickups.

Hinweis: Der Modifikator protected bewirkt bei Methoden und Variablen, dass diese nur innerhalb der betreffenden Klasse und aller Klassen, die von ihr erben, sichtbar sind. Der Modifikator private dagegen bewirkt eine Sichtbarkeit nur innerhalb der betreffenden Klasse. Der Modifikator public bewirkt eine allgemeine Sichtbarkeit.

Aufgabe 13: Erweitern eines Konzeptes um verwandte Klassen

Auf Blatt 3 wurde die Klasse Buch erstellt, die ein Buch in einer Bibliothek modelliert. Den Quellcode für die Klasse Buch kannst du dir bei Bedarf aus dem Web herunterladen (siehe Musterlösung Blatt 3). Nun soll es in dieser Bibliothek außerdem auch Zeitschriften geben. Zeitschriften haben einen Titel, eine ISSN (statt ISBN!) und außerdem noch eine Ausgabennummer. Zwei Zeitschriften sind gleich, wenn die ISSN gleich ist. Zeitschriften sollen keine Bücher sein, und Bücher keine Zeitschriften.

  1. Welche Funktionalitäten und Eigenschaften sind nur bei Zeitschrift vor­handen, welche nur bei Buch, und welche haben beide Konzepte gemeinsam?

  2. Welche Klassen brauchst du mindestens, um die oben beschriebenen Bedin­gungen umzusetzen? Beachte insbesondere, dass Zeitschriften keine Bücher sein sollen, und Bücher keine Zeitschriften. Das bedeutet unter anderem, dass der Ausdruck zeitschrift1 instanceof Buch den Wert false haben soll, wenn die Variable zeitschrift1 vom Typ Zeitschrift ist.

  3. Welche Funktionalitäten und Eigenschaften kannst du aus der Klasse Buch in die anderen Klassen verschieben?

  4. Was fehlt dann noch in Buch und den anderen Klassen?

  5. Implementiere dein Konzept und teste es.

Hinweis: Diese Aufgabe solltest du alleine lösen können. Versuche, der Reihe nach alle Fragen in den einzelnen Teilaufgaben zu beantworten. Implementiere danach die Klassen, die du entworfen hast.

Programmierung

Prof. Dr.-Ing. Nobert Fuhr

Seite 1 von 4

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]