53
Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp: Gymnasium Klasse: 11 Fachliche Vorkenntnisse: Kenntnisse in der Programmiersprache JAVA so- wie im Umgang mit der Entwicklungsumgebung BlueJ und mit UML Bearbeitungsdauer: 5-7 Schulstunden Autoren: David Van de Water & Christian Baart Betreuer: Univ.-Prof. Dr.-Ing. Ulrik Schroeder Nils van den Boom Fassung: 31. März 2009 Schulerprobung: ja Schülerversion

Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

  • Upload
    ngomien

  • View
    247

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Leitprogramm Informatik:

Vererbungslehre & Polymorphiein JAVA

Schultyp: Gymnasium

Klasse: 11

Fachliche Vorkenntnisse: Kenntnisse in der Programmiersprache JAVA so-wie im Umgang mit der EntwicklungsumgebungBlueJ und mit UML

Bearbeitungsdauer: ∼ 5-7 Schulstunden

Autoren: David Van de Water &Christian Baart

Betreuer: Univ.-Prof. Dr.-Ing. Ulrik SchroederNils van den Boom

Fassung: 31. März 2009

Schulerprobung: ja

Schülerversion

Page 2: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:
Page 3: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Einleitung

Die Firma AllYouWant ist ein großer Discounter. Sie bietet ihren Kunden eine Viel-zahl von Waren an. Während die Waren im Lager liegen, müssen die Mitarbeiterin der Firma stets wissen, welche Produkte sich im Lager befinden. Leider stehtihnen derzeit noch kein Computerprogramm zur Verfügung. Um den Mitarbeiternder Firma die Arbeit zu erleichtern, wollen wir nun ein Verwaltungsprogramm fürden Bestand der im Lagerhaus gelagerten Waren entwickeln.

Anhand des vorliegenden Leitprogramms wirst du typische Vorgehensweisen derSoftware-Entwicklung kennen lernen und einüben:

• Zunächst entwickelst du ein Modell des Betriebs für das das Programmentwickelt wird.

• Dann überlegst du, wie dieses Modell in Java programmiert werden muss.

• Bei der Entwicklung gehst du schrittweise vor: Du beginnst mit einer einfa-chen Lösung, die du ausbaust.

• Um diesen Ausbau korrekt und einfach durchzuführen lernst du das Konzeptder Vererbung in Java kennen.

Dies ist das Ziel des Leitprogramms: Du lernst die Vorteile der Vererbung in Javakennen und lernst, diese zu nutzen.

3

Page 4: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Arbeitsanleitung

Ein Leitprogramm ist ein Unterrichtsheft zum selbstständigen Arbeiten. Es be-steht aus mehreren Kapiteln, die du Schritt für Schritt in deinem eigenen Lern-tempo durcharbeiten kannst. Dabei besteht jedes Kapitel aus den folgenden Ab-schnitten:

ÜbersichtIn einer ersten Übersicht wird dir beschrieben, welche Inhalte im folgenden Ka-pitel behandelt werden.

LernzieleMit den Lernzielen werden dir die Kenntnisse und Fähigkeiten genannt, welchedu nach der Bearbeitung des Kapitels erlernt haben wirst. Diese werden späterauch überprüft.

TheorieAn dieser Stelle wirst du viele neue Dinge kennen lernen.

Aufgabe 0.1Nach der Bearbeitung des theoretischen Teils, kannst du nun das erlernte Wis-sen mit Hilfe von Aufgaben anwenden und vertiefen.

Aufgabe 0.2An einigen Stellen wirst du auch Aufgaben direkt am Computer bearbeiten kön-nen.

4

Page 5: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

AdditumDas Leitprogramm ist so angelegt, dass jedes Kapitel in einer bestimmten Zeitvon allen Schülern komplett bearbeitet werden kann. Wenn du jedoch mit einemKapitel schneller fertig bist, werden Dir an dieser Stelle zusätzliche Aufgabenbereitgestellt.

LernkontrolleEine Lernkontrolle wird zum Ende eines jeden Kapitels durchgeführt. Anhandder gestellten Aufgaben kannst du herausfinden, ob du für den bevorstehendenKapiteltest ausreichend vorbereitet bist. Wenn du die Lernkontrolle bestehst,kannst du ruhigen Gewissens den Kapiteltest durchführen. Solltest du jedochnoch Probleme haben, dann wiederhole noch einmal die Stellen, die dir Proble-me bereiten...

In der Regel wirst du das Leitprogramm selbstständig bearbeiten. Bei Fragenoder Problemen kannst du dich aber gerne an deinen Lehrer wenden.

5

Page 6: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Inhaltsverzeichnis

Einleitung 4

Arbeitsanleitung 4

Inhaltsverzeichnis 5

1. Abstraktion und Modellierung 7

2. Eine erste Implementierung 12

3. Das Konzept Vererbung 17

4. Die Vererbung in Java 26

A. Musterlösungen zu Kapitel 1 38

B. Musterlösungen zu Kapitel 2 40

C. Musterlösungen zu Kapitel 3 44

D. Musterlösungen zu Kapitel 4 48

6

Page 7: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Kapitel 1.

Abstraktion und Modellierung

ÜbersichtIn diesem einführenden Kapitel werden wir beginnen, das Programm LAGER-VERWALTUNG möglichst exakt so zu beschreiben, dass es anschließend mög-lichst einfach und korrekt in Java implementiert werden kann. Dazu sehen wiruns an, aus welchen Komponenten es bestehen soll und welche Funktionendiese haben sollten.

LernzieleNach der Bearbeitung dieses Kapitels

• kannst du geeignete Modelle für Programme wie unseres entwickelt.• kennst du die Grundstruktur des Programms LAGERVERWALTUNG.

Theorie

Bei der objektorientierten Programmierung kommt es darauf an, dass der Be-reich, in dem das Programm zum Einsatz kommen soll, mit Hilfe von Klassen inseiner Funktionsweise möglichst detailgenau nachgebildet wird. Hierzu sind imGrunde zwei Vorgänge wichtig: Die Abstraktion und die Modellierung. Bei derAbstraktion beginnen wir damit, alle wichtigen und elementaren Eigenschaftendes realen Objekts von den unwichtigen zu trennen und uns auf das Wesentlichezu konzentrieren. Als Modellierung bezeichnen wir den Vorgang, zu überlegen,wie wir unser abstraktes Wissen mit Hilfe von Klassen ausdrücken können.

Wenn man sich nun eine Lagerhalle vorstellt, so verbindet man damit meistenserst einmal zwei Dinge: In erster Linie denkt man natürlich an die Lagerhalle alsGebäude. Diese könnte so oder ähnlich aussehen:

7

Page 8: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Für unseren Zweck ist es aber so, dass uns gar nicht interessiert, in welcherFarbe das Gebäude gestrichen ist, ob es ein Flach- oder Spitzdach hat und wieviele LKW-Parkplätze es dort gibt - wir wollen lediglich die Waren verwalten, diees in einem Lagerhaus gibt. Denken wir also nun einmal an das Innere einerLagerhalle:

Hier sehen wir schon eher, worauf es uns eigentlich ankommt: Um die Möglich-keit, Waren hierher zu bringen und zu lagern. Es gibt also nur einige wenigeDinge, die uns wirklich interessieren, wenn wir im Folgenden eine Klasse für dasWarenlager entwerfen. Und genau diese Konzentration auf die wichtigen Eigen-schaften nennt man Abstraktion.

Aufgabe 1.1Versuche, die Lagerhalle so weit wie möglich zu abstrahieren. Überlege, welcheEigenschaften wir wirklich benötigen: Unsere Lagerhalle soll lediglich dazu die-nen, Waren aufnehmen und verwalten zu können. Diskutiere hierzu mit deinemNachbarn: Welche Eigenschaften habt ihr beide genannt, welche Eigenschaf-ten hat nur einer von euch aufgeführt? Fragt euch dann, ob diese Eigenschaftüberhaupt benötigt wird.Ganz wichtig: Halte während der ganzen Zeit immer im Auge, welchen Zweckunser Programm später einmal erfüllen soll. Mache dir klar, dass es sehr vieleEigenschaften gibt, die für eine Lagerhalle im Allgemeinen vielleicht sehr wich-tig sein können, aber uns für unser Programm nicht interessieren!

Nach den Überlegungen aus der vorherigen Aufgabe sollte dir nun klar sein,worum es uns bei der Modellierung für unser Lagerprogramm gehen wird: DieLagerhalle soll die Möglichkeit besitzen, Waren aufzunehmen und den Bestandzu speichern. Wir wollen uns im ersten Kapitel der Einfachheit halber erst einmalauf eine Sorte Waren beschränken: auf Möbel. Wir werden uns Programm dannin den nächsten Kapiteln so erweitern, dass es schließlich in der Lage sein wird,beliebige Arten von Waren zu verwalten.

8

Page 9: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Um nun mit der Umsetzung unserer Überlegungen anfangen zu können, wollenwir erst noch einmal etwas allgemeiner auf Abstraktion und Modellierung und dieÜbertragung unserer Ideen zu Klassen eingehen und dies dann auf unser Modellanwenden. Prinzipiell lassen sich hier zwei Schritte festhalten:

1. Für jeden Gegenstand oder jeden Bereich, der im Programm dargestellt wer-den soll, sollte man jeweils eine eigene Klasse verwenden. Für uns hieße dasalso, da wir einerseits eine Lagerhalle und andererseits Möbel repräsentierenwollen, dass wir einerseits eine Klasse für das Warenlager und andererseitseine Klasse für Möbel an sich benötigen.

2. Für jede Klasse stellt man sich nun die Frage: Wie kann ich die für mein Pro-gramm relevanten Eigenschaften am besten mit Hilfe von Attributen und Me-thoden repräsentieren? Die Attribute haben den Zweck, Informationen aufzu-nehmen, während die Methoden uns Möglichkeiten geben, die Attribute aus-geben, bearbeiten und verändern zu können.

Wichtig:Bei beiden Schritten muss man immer im Hinterkopf haben, welchen Zweckunser Programm schlussendlich einmal erfüllen soll. Ansonsten verliert mansich sehr leicht in Details oder übersieht Dinge, die wirklich von Belang sind.

Beginnen wir nun also mit der Klasse für das Lager. Wie du bereits weißt, wird, umvon einer Klasse Objekte erzeugen zu können, zunächst ein Konstruktor benötigt.

Nun wollen wir festlegen, welche Attribute die neue Klasse besitzen soll: Zu-nächst brauchen wir eine Zahl, welche die maximale Aufnahmekapazität des La-gers angibt. Da wir die Kapazität immer als Stückzahlen angeben wollen, benöti-gen wir eine ganze Zahl und verwenden daher den Datentyp int. Des Weiterenbenötigen wir eine Liste, in der die Waren abgespeichert werden können: Die-se wird in unserem Programm durch ein Array repräsentiert, welches den TypMoebelstueck haben wird (diese Klasse werden wir als nächstes entwerfen;wir greifen hier lediglich schon einmal auf den Namen vor.).

Schließlich wollen wir noch die Methoden für die neue Klasse festlegen. Mit die-sen möchten wir sowohl den Zugriff auf die Attribute als auch die Bildschirmaus-gabe des Lagergutes steuern. In diesem Sinne benötigen wir für jede Warenlisteeine einfuege()-Methode. So können neue Waren in das Lager aufgenom-men werden. Für die Bildschirmausgabe der Warenlisten wollen wir eine Methodeausgeben() verwenden.

Mit dem Konstruktor, den Attributen und den Methoden sieht die Klasse Waren-lager dann wie folgt aus:

9

Page 10: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Nun ist bereits ein großer Teil unseres Programmes entworfen. Aber halt! - Daswichtigste fehlt uns noch: Dinge, die wir einlagern können! Dazu wollen wir nuneine Klasse namens Moebelstueck entwerfen. Hierzu gibt es folgende Aufgabe:

Aufgabe 1.2Überlege dir, welche Attribute eine Klasse Moebelstueck gebrauchen könnte.Denke dabei einerseits natürlich an die Eigenschaften von Möbeln, aber versu-che, die Möbel auch etwas allgemeiner (als einzulagernde Ware) zu betrachten.Stelle dir z.B. einen Stuhl und einen Tisch vor: Was verbindet die beiden, wel-che Gemeinsamkeiten haben sie, die für Möbel von Bedeutung sind?Wenn du die Aufgabe gelöst hast, schau bitte im Anhang in den Lösungen nachund vergleiche deine Klasse und unsere Lösung. Dies ist wichtig, da wir zukünf-tig unser Modell weiter verwenden wollen.

Damit wäre das erste Kapitel auch schon beinahe abgeschlossen - die Model-lierung für eine erste einfache Version unseres Programmes ist fertig! Bitte führenun die Lernfortschrittskontrolle und den Kapiteltest durch - dann kannst du auchschon bald mit dem nächsten Kapitel fortfahren und mit der Implementierung be-ginnen!

10

Page 11: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

LernkontrolleDu hast in diesem Kapitel die für unser Programm notwendigen Abstraktionendurchgeführt. Lass sie dir noch einmal durch den Kopf gehen und beantworteanschließend folgende Fragen:

Aufgabe 1:Was bezeichnen wir als Modellierung?

2 Den Quelltext für unsere Klassen zu schreiben.2 Unwichtige Eigenschaften realer Gegenstände auszusortieren.2 Abstraktes Wissen über Gegenstände mit Hilfe von Klassen auszu-

drücken.

Aufgabe 2:Worauf kommt es bei der Abstraktion ganz besonders an?

2 Möglichst viele Eigenschaften des realen Objektes zu übernehmen.2 Die relevantesten Eigenschaften eines realen Objektes zu überneh-

men.2 Bei der Auswahl der Eigenschaften den Zweck des Programms nie aus

den Augen zu verlieren.

Aufgabe 3:Angenommen, wir wollen für ein Programm eine Klasse namens Auto entwer-fen. Welche Eigenschaften hältst du hierbei für wichtig?

2 Anzahl der Türen2 Lackfarbe2 Sitzplätze2 Anzahl der Airbags2 Navigationsgerät2 Anzahl der Gänge / Automatikschaltung2 Art des zu tankenden Kraftstoffes2 Kann so nicht entschieden werden

11

Page 12: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Kapitel 2.

Eine erste Implementierung

ÜbersichtNachdem wir im letzten Kapitel überlegt haben, wie wir das Programm LAGER-VERWALTUNG am besten mit Hilfe von Klassen ausdrücken können, soll es indiesem Kapitel darum gehen, wie wir das Ganze programmiertechnisch in Javaumsetzen können.

LernzieleNach Bearbeitung dieses Kapitels,

• kannst du ein vorgegebenes UML-Modell in entsprechende Java-Klassenüberführen.

• kannst du mit Hilfe von BlueJ Objekte erzeugen und inspizieren.

Theorie

Nach dem letzten Kapitel wird es nun endlich praktisch: Wir programmieren dieerste Version unserer LAGERVERWALTUNG! Wir beginnen dazu (wie im vorheri-gen Kapitel) mit dem Warenlager bzw. der Klasse Warenlager . Hier noch einmaldas zugehörige UML-Diagramm:

12

Page 13: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Aufgabe 2.1Schau dir das Klassen-Diagramm noch einmal genau an und öffne nun dieDatei Warenlager.java im Ordner „Kapitel 2“ in BlueJ.Wie du siehst, ist die Datei noch nicht ganz vollständig! Fülle die Lückenim Quellcode sinnvoll mit Hilfe des UML-Diagramms auf! Kontrolliere deineLösung mit Hilfe der Lösungen am Ende des Kapitels.

Hast du die Aufgabe erledigt? Gut, dann probiere jetzt einmal, das Ganze zukompilieren. Wie du merkst, klappt es noch nicht... Woran das liegt? Nun, in ei-ner der Zeilen definieren wir ein Array vom Typ Moebelstueck . Da die KlasseMoebelstueck aber noch nicht vorhanden ist, beschwert sich der Compiler. Alsowollen wir uns nun der Klasse Moebelstueck zuwenden. Dazu wollen wir uns ersteinmal einen Teil des Quellcodes ansehen:

1 public class Moebelstueck2 {3 / / A t t r i b u t e4 private S t r i n g typ = " " ;5 private i n t hoehe = 0;6 private i n t b r e i t e = 0 ;7 private i n t t i e f e = 0;8

9 private i n t anzahl = 0 ;10 private double p re i s = 0 ;11

12 / / Kons t ruk to r13 public Moebelstueck ( S t r i n g typ , i n t hoehe , i n t b re i t e ,14 i n t t i e f e , i n t anzahl , double p re i s )15 {16 / / fehlendes Stueck17 }18

19 / / Methoden20 / / Zur Ausgabe am Bi ldsch i rm21 public void ausgeben ( )22 {23 System . out . p r i n t l n ( " Typ : " + typ ) ;24 System . out . p r i n t l n ( "Hoehe : " + hoehe ) ;25 System . out . p r i n t l n ( " B r e i t e : " + b r e i t e ) ;26 System . out . p r i n t l n ( " T ie fe : " + t i e f e ) ;27 System . out . p r i n t l n ( " Anzahl : " + anzahl ) ;28 System . out . p r i n t l n ( " Pre is : " + p re i s ) ;29 System . out . p r i n t l n ( " " ) ;30 }31 } / / Ende Klasse " Moebelstueck "

So weit, so einfach - oder? Wie du siehst, machen wir im Prinzip nicht sonderlichviel in dieser Klasse. Es gibt nur den Konstruktur, eine Methode und einige Attri-bute. In Zeile 16 fehlen jedoch noch einige Zeilen an Code. Doch dazu kommenwir nun in der

Aufgabe 2.2Erstelle eine neue (noch leere) Klasse Moebelstueck im gleichen Ordner wiedie zum Warenlager gehörende Datei, übertrage den Quelltext und fülle dasfehlende Code-Stück im Konstruktor aus - denke dabei an den this-Bezeichner,den wir dir in der Lösung zur ersten Aufgabe erklärt haben!

13

Page 14: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Bislang haben wir also lediglich das Warenlager als „Behälter“ für unsere Mö-bel erstellt und den Möbeln noch die entsprechenden Eigenschaften mit auf denWeg gegeben. Probiere jetzt einmal, das Projekt zu kompilieren. Klappt es? Fallsnicht: Schau noch einmal in Ruhe nach, ob du keine Semikola an den Zeilenen-den vergessen hast und ob alle geöffneten Klammern auch wieder geschlossenwurden. Das sind häufige Fehler, die nur allzu schnell beim Programmieren auf-treten! Eine große Hilfe hierbei sind die Fehlermeldungen, die der Compiler diranzeigt - meistens findest du damit recht schnell heraus, was schief gegangenist.

Aufgabe 2.3Erstelle mit Hilfe von BlueJ einige Möbel-Objekte sowie ein Warenlager-Objektund lagere die Möbel in das Lager ein. Probiere auch die ausgeben-Funktionaus!

Wenn du die Aufgabe erledigt hast und alles funktioniert, kannst du auch schonmit der Lernkontrolle und dem Kapiteltest fortfahren.

14

Page 15: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

LernkontrolleAufgabe 1:Was bewirkt der this-Bezeichner?

2 Er ermöglicht die Ausführung des Konstruktors.2 Er ermöglicht es, Variablen, die als Parameter übergeben wurden, den

gleichen Namen zu geben, wie Attributen der Klasse.2 Er ermöglicht den Zugriff auf ein bestimmtes Element eines Arrays.

Aufgabe 2:Schau dir das nachfolgender UML-Diagramm der Klasse Fenster an:

Betrachte nun den folgenden Quellcode und ergänze ihn an den unterstriche-nen Stellen - du musst lediglich Variablennamen oder Java-Befehle angeben,keine Zahlen oder ähnliches:

1 public class Fenster {2

3 private ______________ geschlossen ;4

5 private S t r i n g _____________________ ;6

7 ____________________ double hoehe ;8

9 ____________________ double b r e i t e ;10

11 public Fenster ( S t r i n g hoehe , double mater ia l , double b r e i t e ) {12 th is . geschlossen = ____________ ; / / Fenster am Anfang immer geschlossen13 th is . ma te r i a l = _________________ ;14 th is . hoehe = _________________ ;15 th is . b r e i t e = b r e i t e ;16 }17

18 public void oef fneFenster ( ) {19 i f ( ____________________ == true ) {20 geschlossen = _______________ ;21 System . out . p r i n t l n ( " Fenster geö f fne t ! " ) ;22 }23 else {24 geschlossen = _______________ ;25 System . out . p r i n t l n ( " Fenster geschlossen ! " ) ;26 }27 }28

29 public void f ens te rS ta tus ( ) {30 _______________ o f fen ;31 i f ( geschlossen == true ) {32 o f fen = " geschlossen " ;33 }34 else {35 o f fen = " geö f fne t " ;36 }37 System . out . p r i n t l n ( "Das Fenster i s t " + _______________ ) ;38 System . out . p r i n t l n ( "Es besteht aus " + _____________ ) ;39 System . out . p r i n t l n ( " Die Maße des Fensters s ind " + hoehe + " x " + b r e i t e ) ;40 }41

42 }15

Page 16: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

16

Page 17: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Kapitel 3.

Das Konzept Vererbung

ÜbersichtMit unserem Programm LAGERVERWALTUNG können nun im Lager liegendeMöbelstücke verwaltet werden. Dies ist für die Firma AllYouWant aber nicht ge-nug. Die Mitarbeiter dieser Firma möchten, dass noch weitere Waren wie zumBeispiel Kleidungsstücke verwaltet werden können. Um unseren Kunden zufrie-den zustellen, werden wir in diesem Kapitel das Programm dementsprechenderweitern. Wir werden sehen, dass wir dafür ganz neue Methoden benötigen.

LernzieleNach der Bearbeitung dieses Kapitels,

• kennst du den Begriff ’Vererbung’ als neue Methode der objektorientiertenProgrammierung

• kannst du die Vererbung bei der Modellierung anwenden und deren Vor-teile erläutern

Theorie

Die Mitarbeiter der Firma AllYouWant sagten uns, dass im Lager der Firma auchKleidungsstücke gelagert werden. Selbstverständlich soll nun auch die Waren-liste unseres Programms dieses Produkt abspeichern können. Dazu müssen wireine neue Klasse entwerfen und diese in unser bestehendes Programm einfügen.

17

Page 18: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Aufgabe 3.1Beantworte die nachfolgenden Fragen schriftlich. Nimm gegebenenfalls dasBlueJ-Projekt aus Kapitel 2 zu Hilfe.

a) Welche Attribute und Methoden sollte die Klasse Kleidungsstueck enthal-ten?

b) Nach welchen Kriterien hast du die Attribute und Methoden ausgewählt?

Vermutlich bist du in der Aufgabe 3.1 beim Entwurf der Klasse Kleidungsstueckso vorgegangen, dass du dich bei der Auswahl der Attribute und Methoden ander Klasse Moebelstueck orientiert hast. Dabei wurde deutlich, dass die Attribute’anzahl’ und ’preis’ auch in der neuen Klasse eine Rolle spielen. Ansonsten warendie Attribute der beiden Klassen unterschiedlich. Bezüglich der Methoden fiel auf,dass beide Klassen die Methode ausgeben() benötigen. Diese unterscheidensich nur insofern, als dass sie zum Teil andere Bildschirmausgaben vornehmen.

Im Großen und Ganzen konnte man also beim Entwurf der Klasse Kleidungs-stueck die meisten Teile der Klasse Moebelstueck übernehmen. Einige Attributewurden dann noch ergänzt und die Methode ausgeben() wurde an die neuenAttribute angepasst.

Würden wir nun von der Firma AllYouWant den Auftrag erhalten, dass unser Pro-gramm noch weitere Waren verwalten solle, dann würden wir uns wieder dieschon vorhandenen Klassen anschauen und einige Attribute und Methoden -wahrscheinlich durch kopieren und einfügen - in die neue Klasse übernehmen.Nach einiger Zeit würde unser Programm aus zahlreichen Klassen bestehen, dieviele gemeinsame Anteile aufweisen. Beispielsweise würden alle Klassen das At-tribut ’preis’ enthalten.

Auf den ersten Blick scheint dies nicht problematisch zu sein. Eine neue Klasseist recht leicht zu erstellen. Doch was geschieht, wenn wir an den vorhandenenKlassen etwas ändern möchten? Was geschieht zum Beispiel wenn wir bei allenKlassen, die ein Produkt repräsentieren, den Datentyp des Attributs ’preis’ vondouble auf int ändern möchten? Oder was müssten wir machen, wenn wir je-der Klasse das neue Attribut ’boolean nochImLager’ hinzufügen wollten?Mit unserer jetzigen Methode hätten wir ein großes Problem. Denn zum Ändernoder Hinzufügen eines neuen Attributs müssten wir in jeder Klasse die entspre-chende Änderung vornehmen. Wir müssten also in jeder Klasse beim Attribut’preis’ int durch double manuell ersetzen. Oder wir müssten in jeder Klassedie Anweisung ’boolean nochImLager = false’ einfügen. Dies ist zum Einen sehrmühsam, wenn man sich zum Beispiel vorstellt, dass unser Programm 50 ver-schiedene Waren verwalten könnte. Auf der anderen Seite ist dieses Vorgehenaber auch fehlerbehaftet. Stell dir vor du hättest in einer Klasse die Anweisung’boooolean nochImLager = false’ ergänzt. Aus Versehen hast du das Wort boo-lean falsch geschrieben. Weil du dies aber nicht bemerkt hast, kopierst du diesefalsche Anweisung und fügst sie in alle weiteren Klassen ein. Schon steht in jeder

18

Page 19: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Klasse eine falsche Anweisung.Unsere zunächst angewandte Methode - Attribute und Methoden aus einer vor-handenen Klasse in eine neu erstellte zu kopieren - ist für uns Programmierernicht gut geeignet. Ein neues Konzept muss her!!Glücklicherweise müssen wir uns dieses Konzept aber nicht selber ausdenken.Denn Java (und jede andere objektorientierte Programmiersprache) stellt uns ei-ne Methode zur Verfügung, die uns bei diesem Problem weiterhilft. Dieses neueKonzept heißt Vererbung.

Aufgabe 3.2Den Begriff Vererbung kennst du bereits. Beschreibe in welchen Bereichen die-ser verwendet wird und was er dort bedeutet.

In der objektorientierten Programmierung bezeichnet der Begriff Vererbung einenVorgang, bei dem eine Klasse A ihre Eigenschaften an eine andere Klasse Büberträgt. Man sagt:

• Klasse A vererbt an Klasse B.• Klasse B erbt von Klasse A.

Wir wollen uns dies nun an einem kleinen Beispiel anschauen. Anschließend wer-den wir das neue Konzept direkt in unserem Programm LAGERHAUS anwenden.

Beispiel: Person und Schüler

Wir wollen eine Klasse erstellen, die eine Person repräsentiert. Natürlich hat je-de Person einen Vornamen und einen Nachnamen. Also bekommt unsere Klas-se Person die Attribute ’String vorname;’ und ’String nachname;’. Zusätzlichverwenden wir eine Methode print(), die einfach den Vor- und Nachnamen amBildschirm ausgibt. Das Klassendiagramm sieht dann so aus:

Nun wollen wir eine Klasse Schüler entwerfen. Wir wissen, dass jeder Schülereine Person ist. Und deswegen haben auch Schüler einen Vornamen und einenNachnamen.Die neue Klasse soll also - genauso wie die Klasse Person - auch die Attribute’String vorname;’ und ’String nachname;’ enthalten. Anstatt nun einfach - wievorher - die Attribute aus der Klasse Person in die neue Klasse zu kopieren, neh-men wir uns die Vererbung zu Hilfe. Wir übertragen die Attribute ’vorname’ und’nachname’ der Klasse Person direkt an die Klasse Schüler . Zusätzlich bekommtunsere Klasse Schüler noch das Attribut ’String klasse;’, welches angibt, inwelcher Klasse der Schüler ist (zum Beispiel 9a). Bezüglich der Methoden über-nimmt die Klasse Schüler die print()-Methode der Klasse Person.

19

Page 20: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

In UML wird die Vererbung durch einen Pfeil vom Erben auf den Vererbendendargestellt. Möchten wir also in einem UML-Diagramm deutlich machen, dass dieKlasse Schüler von der Klasse Person erbt, müssen wir dies wie folgt durch einenPfeil kennzeichnen:

Das Ziel bei der Modellierung ist die Realität mit Hilfe von Klassen möglichst gutabzubilden. Was aber sagt der obige Pfeil über die Realität - also über die Be-ziehung zwischen Personen und Schülern - aus? Nun, in der Realität ist jederSchüler eine Person. Und genau dies macht der Pfeil im obigen Diagramm deut-lich: ein Schüler ist eine Person. Im Allgemeinen wird die Beziehung, die einsolcher Pfeil darstellt, IST-Beziehung genannt.Bei der Betrachtung des obigen Diagramms fällt auf, dass wir die reale Beziehungzwischen Personen und Schülern durch die Vererbung noch besser in Klassenabbilden konnten.

Aufgabe 3.3Aus welchen Attributen und Methoden besteht die Klasse Schüler?

Im obigen Beispiel überträgt (vererbt) - die Klasse Person all ihre Eigenschaf-ten an die Klasse Schueler . Eine Klasse, die ihre Attribute und Methoden an eineandere Klasse vererbt , heißt Oberklasse. Die Klasse Schueler hingegen über-nimmt (erbt) - alle Eigenschaften der Klasse Person. Eine Klasse, welche dieEigenschaften einer anderen Klasse erbt , heißt Unterklasse. Im nächsten Kas-ten werden diese beiden Definitionen nochmals festgehalten.

Oberklasse:Eine Oberklasse vererbt all ihre Attribute und Metho-den an ihre Unterklasse.

Unterklasse:Eine Unterklasse erbt alle Attribute und Methodenihrer Oberklasse.

Zurück zu unserem Programm LAGERVERWALTUNG ! Bis jetzt besteht dieses Pro-

20

Page 21: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

gramm aus der Klasse Warenlager und der Klasse Moebelstueck .

Nun stehen wir vor der Aufgabe eine neue Klasse Kleidungsstueck einzufügen.Dabei wollen wir die neue Methode der Vererbung einsetzen. Und was müssenwir dafür machen? Nun, wir müssen die Klassen, die etwas gemeinsam haben, ineine neue Struktur mit Ober- und Unterklassen bringen. Davon sind natürlich nurdie Klassen Moebelstueck und Kleidungsstueck betroffen. Die Klasse Warenla-ger brauchen wir dafür zunächst nicht betrachten.

In der Aufgabe 3.1 hast du bereits überlegt, aus welchen Attributen und Metho-den diese bestehen sollte. Dabei wurde schnell deutlich, dass bei den KlassenKleidungsstueck und Moebelstueck einige Eigenschaften übereinstimmen:

Anstatt nun die gemeinsamen Eigenschaften in jede der beiden Klassen einzelnzu schreiben, wollen wir an dieser Stelle die Vererbung gebrauchen. Wie funktio-niert dies?Im Beispiel “Person und Schüler“ sind wir von dem allgemeineren Begriff “Per-son“ zum spezielleren Begriff “Schüler“ übergegangen. In unserem jetzigen Fallmüssen wir genau umgekehrt vorgehen. Denn wir haben mit “Möbelstück“ und“Kleidungsstück“ zwei spezielle Begriffe vor uns. Und wir suchen einen allgemei-neren Begriff.Für die beiden speziellen Begriffe Möbelstück und Kleidungsstück wollen wir jeeine Unterklasse einfügen. Diese Unterklassen erben dann ihre gemeinsamenEigenschaften von einer Oberklasse. Doch wie nennen wir diese Oberklasse?Denken wir hier einmal an das Warenlager der Firma AllYouWant. In diesem sindMöbelstücke und Kleidungsstücke gleichermaßen als Waren untergebracht. Indiesem Zusammenhang erscheint es als sinnvoll die gemeinsamen Eigenschaf-ten der Klassen Moebelstueck und Kleidungsstueck in einer Oberklasse namensWare zusammenfassen.Nun müssen wir überlegen, welche genauen Eigenschaften die Klasse Ware ha-ben soll. Nach unserem Entwurf aus Aufgabe 3.1 haben die Klassen Moebels-tueck und Kleidungsstueck die Attribute ’preis’ und ’anzahl’ sowie die Methodeausgeben() gemeinsam. Schnell ist klar, dass die Klasse Ware genau dieseEigenschaften enthalten sollte.Nun sind wir mit unserem Programm LAGERVERWALTUNG schon einen großenSchritt weiter. Schauen wir uns die neuen Klassen einmal in UML-Notation an:

21

Page 22: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Im Diagramm wird durch die Pfeile deutlich, dass wir mit den verwendeten Klas-sen die Realität gut abgebildet haben. Denn jedes Möbelstück und jedes Klei-dungsstück ist eine Ware.

Aufgabe 3.4In vereinfachter Form sieht unser neues Klassendiagramm wie folgt aus:

Erweitere dieses Diagramm um zwei Klassen Schokoladentafel und Milchpa-ckung in der selben Darstellungsweise. Überlege dir wie du dabei die Vererbungsinnvoll einsetzen kannst.

Die Klassen Moebelstueck und Kleidungsstueck sind nun Unterklassen der Klas-se Ware. In der folgenden Abbildung ist dieser Zusammenhang nochmals gra-fisch dargestellt. Diejenigen Eigenschaften, die beide Klassen von der KlasseWare erben, sind speziell eingekreist.

22

Page 23: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Abschließend stellt sich nun die Frage: Welche Vorteile haben wir durch die Ver-erbung? Nun, mit Hilfe der Vererbung konnten wir Möbelstücke und Kleidungs-stücke sehr realitätsnah in einem Klassendiagramm wiedergeben. Wir überleg-ten, dass Möbelstücke und Kleidungsstücke gleichermaßen Waren sind und stell-ten diesen Zusammenhang mit den Klassen Ware, Moebelstueck und Kleidungs-stueck dar. Durch dieses Vorgehen haben wir in unserem Programm LAGERVER-WALTUNG eine bessere Wartbarkeit erreicht. Wir können nun ganz leicht eineneue Klasse einfügen, wenn das Programm eine neue Ware verwalten soll. Wirmüssen dafür nur von der Klasse Ware erben und die speziellen Eigenschaftenzusätzlich einfügen. Des Weiteren können wir in unserem Programm sehr schnellÄnderungen vornehmen. Wollen wir zum Beispiel jetzt in allen Klassen, die einProdukt repräsentieren, beim Attribut ’preis’ den Datentyp von double auf intändern, so brauchen wir dies nur in der Klasse Ware zu machen. In allen Klas-sen, die von dieser Klasse erben, wird diese Änderung direkt übernommen.Neben der besseren Wartbarkeit ist unser Programm auch weniger fehleran-fällig geworden. Wenn wir zum Beispiel in der Klasse Ware versehentlich stattausgeben() ausgbben() geschrieben haben, dann brauchen wir die Korrek-tur nur einmal in der Klasse Ware vornehmen. Weiterhin vermeiden wir mit derVererbung, dass in vielen Klassen der gleiche Quellcode steht (keine Code-Du-plizierung). Zu guter Letzt werden die Klassendiagramme mit der Vererbung vielübersichtlicher und lesbarer , weil direkt aus ihnen ersichtlich wird, welche Bezie-hungen zwischen den Klassen bestehen.

Hier sind die Vorteile der Vererbung nochmal stichwortartig zusammengefasst:

• bessere Wartbarkeit• weniger Fehlerquellen• keine Code-Duplizierung• übersichtlichere Klassendiagramme

Du hast es geschafft! Wir sind am Ende von Kapitel 3 angelangt. Wenn du diefolgende Lernkontrolle bestehst und den Kapiteltest absolviert hast, kannst dumit Kapitel 4 fortfahren. In diesem Kapitel werden wir Dir zeigen, wie Ober- undUnterklassen in Java implementiert werden. Dabei wirst du auch die Möglichkeiterhalten selber mit dem Konzept der Vererbung zu programmieren. Darüber hin-aus werden wir uns auch wieder der Klasse Warenlager widmen und überlegen,wie wir diese an die neue Struktur des Programms anpassen können.

23

Page 24: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

AdditumIn der Aufgabe 3.4 hast du das neu entworfene Klassendiagramm in vereinfach-ter Form um die beiden Waren Schokoladentafel und Milchpackung erweitert.Entweder hast du beide Klassen von der Klasse Ware erben lassen oder duhast noch eine weitere Klasse Lebensmittel eingefügt.Betrachte nun noch einmal deine Lösung der Aufgabe 3.4. Im Folgenden sollstdu dir überlegen, welche Attribute und Methoden deine neu eingefügten Klas-sen haben sollten.Wenn du Dir im Klaren darüber bist, welche Eigenschaften deine Klassen bein-halten sollen, dann stell die erweiterte Struktur des Programms in einem UML-Klassendiagramm dar. Dieses Diagramm soll alle bisher entworfenen Klassen- also Ware, Moebelstueck , Kleidungsstueck , Schokoladentafel , Milchpackungund eventuell Lebensmittel - samt Attributen und Methoden darstellen.

24

Page 25: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

LernkontrolleAufgabe 1:Was bedeutet Vererbung in der objektorientierten Programmierung?

2 eine Klasse überträgt nur ihre Attribute an eine andere Klasse2 eine Klasse erbt nur die Methoden einer anderen Klasse2 eine Klasse überträgt all ihre Eigenschaften an eine andere Klasse

Aufgabe 2:Welche der folgenden Aussagen zu Ober- und Unterklassen sind richtig? Essind mehrere Antworten möglich.

2 eine Oberklasse überträgt ihre Eigenschaften an eine Unterklasse2 eine Oberklasse erbt von ihrer Unterklasse2 Oberklassen und Unterklassen beschreiben eine IST-Beziehung

Aufgabe 3:Betrachte die Vorteile der Vererbung. Welche der folgenden Aussagen sindrichtig?

2 Klassen können mit der Vererbung so miteinander ’verknüpft’ werden,dass bei der Änderung einer Klasse andere Klassen gleich mit verän-dert werden

2 Mit Hilfe der Vererbung erstellte Programme können leicht erweitertwerden

2 Die Vererbung trägt nicht dazu bei, die Struktur eines Programms über-sichtlicher zu machen

Aufgabe 4:Betrachte die folgenden Begriffe:

Reptil, Tier, Hund, Krokodil, Säugetier, Katze, Schlange

Entwerfe mit diesen ein geeignetes Klassendiagramm in verkürzter Form ohneAttribute und Methoden.

25

Page 26: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Kapitel 4.

Die Vererbung in Java

ÜbersichtMit dem Konzept der Vererbung hat unser Programm LAGERVERWALTUNG inKapitel 3 eine ganz neue Struktur erhalten. Bisher liegt uns jedoch nur ein neu-es Klassendiagramm vor. Dies wirft einige Fragen auf: Wie können wir die Ober-und Unterklassen implementieren? Und was müssen wir mit der Klasse Wa-renlager machen - unverändert übernehmen, ein wenig anpassen oder ganzneu schreiben? Mit derartigen Fragen werden wir uns in diesem Kapitel be-schäftigen. Dabei wirst du oft die Gelegenheit erhalten selbst am Computer zuarbeiten.

LernzieleNach der Bearbeitung dieses Kapitels,

• kannst du UML-Diagramme, die mit Hilfe der Vererbung entworfen wur-den, systematisch in Java umsetzen

• weißt du, wie Eigenschaften von Ober- und Unterklassen in Java formu-liert werden

• weißt du, wie Variablen durch den Einsatz der Vererbung unterschiedlicheObjekte aufnehmen können

Theorie

Packen wir es an! Vor uns liegen eine Menge interessanter Aufgaben und wirwerden eine ganz neue Seite von Java kennen lernen. Schritt für Schritt wird nundas in Kapitel 2 erstellte Programm so erweitert, dass auch Kleidungsstücke ver-waltet werden können. Die Vererbung wird dabei eine wesentliche Rolle spielen.

26

Page 27: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Aufgabe 4.1Öffne das BlueJ-Projekt KAPITEL-2. Speichere dieses mit ’Project→Save as’unter dem Namen KAPITEL-4.

Zur Zeit besteht das Programm LAGERVERWALTUNG aus den Klassen Waren-lager und Moebelstueck . Nun wollen wir dieses so verändern, dass es der neuentworfenen Programmstruktur aus Kapitel 3 entspricht. Unser erster Schritt wirddabei die Implementierung der Klasse Ware sein. Dann werden wir die KlassenMoebelstueck , Kleidungsstueck und Warenlager in Java umsetzen. Bei jeder die-ser Klassen werden wir uns zunächst mit den Attributen, dann mit dem Konstruk-tor und schließlich mit den Methoden beschäftigen.

In unserem Klassendiagramm (siehe auf Seite 21 in Kapitel 3) haben wir eineOberklasse Ware sowie zwei Unterklassen Moebelstueck und Kleidungsstueckverwendet.Hinsichtlich der Implementierung unterscheiden sich Oberklassen und ’normale’Klassen, wie du sie von jeher kennst, überhaupt nicht. Das heißt, dass wir dieOberklasse Ware in gewohnter Weise programmieren können. Wir müssen diesenicht extra kennzeichnen. So brauchen wir nur - wie gewohnt - eine neue Klas-se anlegen und die gewünschten Attribute und Methoden sowie den Konstruktorhinzufügen.Wie wir bereits in Kapitel 3 überlegt haben, soll unsere Klasse Ware die Attribute’anzahl’ (int) und ’preis’ (double) beinhalten. Des Weiteren brauchen wir einenKonstruktor, der die Aufgabe hat, die beiden Attribute der Klasse zu initialisieren.Zudem benötigen wir noch eine Methode ausgeben(). Diese soll die vorhande-nen Attribute am Bildschirm anzeigen können.

Aufgabe 4.2Öffne das BlueJ-Projekt KAPITEL-4. Erstelle eine neue Klasse mit dem NamenWare und implementiere

a) die benötigten Attribute,b) einen geeigneten Konstruktor sowiec) die Methode ausgeben().

Wenn du fertig bist kannst du deine Klasse direkt kompilieren lassen. Für dieweitere Arbeit ist es wichtig, dass diese keine Fehler mehr enthält.

Nun kommen wir zur Klasse Moebelstueck . Nach unseren Überlegungen ausKapitel 3 soll diese Klasse zu einer Unterklasse der Klasse Ware werden. Wirstehen also jetzt vor der Aufgabe, die im Kapitel 2 entworfene Klasse Moebel-stueck so anzupassen, dass sie eine Unterklasse zur Klasse Ware ist. DieseUmwandlung werden wir nun in kleinen Schritten durchführen.

27

Page 28: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Im Gegensatz zu Oberklassen müssen Unterklassen eigens als solche kenntlichgemacht werden. Dies wird in Java mit dem Befehl extends (deutsch: erwei-tern) erreicht. Um beim Entwurf einer neuen Klasse auszudrücken, dass dieseeine Unterklasse zu einer anderen Klassen sein soll, wird in der ersten Zeile derKlassendeklaration der Befehl extends und der Name der gewünschten Ober-klasse angehängt.

Beispiel

Bisher haben wir beim Erstellen einer neuen Klasse folgende Anweisung ver-wendet:

1 public class Klasse1

So haben wir ausgedrückt, dass eine neue Klasse mit dem Namen Klasse1 an-gelegt werden soll. Wollen wir nun, dass diese eine Unterklasse zu einer KlasseKlasse2 wird, so müssen wir folgende Anweisung verwenden:

1 public class Klasse1 extends Klasse2

Um zu erreichen, dass die Klasse Moebelstueck eine Unterklasse der KlasseWare wird, benötigen wir also die folgende Programmzeile:

1 public class Moebelstueck extends Ware

Damit wird nun die Klasse Moebelstueck zu einer Unterklasse der Klasse Ware,wodurch sie alle Eigenschaften ihrer Oberklasse übernimmt.

Aufgabe 4.3Öffne in einem BlueJ-Projekt die Klasse Moebelstueck und gehe wie folgt vor:

a) füge den Befehl extends so in den Quellcode ein, dass die Klasse Moe-belstueck zu einer Unterklasse der Klasse Ware wird

b) betrachte dann die Attribute der Klasse. Welche Änderungen müssen hiervorgenommen werden?

Nachdem du die obigen Änderungen vorgenommen hast, kannst du diese Klas-se nicht mehr kompilieren. Aber keine Sorge. Im weiteren Verlauf werden wir dieKlasse so anpassen, dass sie wieder funktionstüchtig ist.

Als Nächstes wollen wir uns dem Konstruktor der Klasse Moebelstueck widmen.In Kapitel 2 haben wir diesen wie folgt implementiert:

1 public Moebelstueck ( S t r i n g typ , i n t hoehe , i n t b re i t e ,2 i n t t i e f e , i n t anzahl , double p re i s )3 {4 th is . typ = typ ;5 th is . hoehe = hoehe ;

28

Page 29: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

6 th is . b r e i t e = b r e i t e ;7 th is . t i e f e = t i e f e ;8 th is . anzahl = anzahl ;9 th is . p re i s = p r e i s ;

10 }

Da die Klasse Moebelstueck nun eine Unterklasse der Klasse Ware ist, müssenwir uns überlegen, wie sich ein Konstruktor in einer Unterklasse verhält.

Konstruktoren in Unterklassen

Eine Unterklasse erbt alle Eigenschaften ihrer Oberklasse. Dadurch erbt die Klas-se Moebelstueck auch den Konstruktor der Klasse Ware. Unter diesem Gesichts-punkt müssten wir doch eigentlich in der Klasse Moebelstueck gar keinen neuenKonstruktor mehr angeben!? Oder doch? Schauen wir uns den Konstruktor derKlasse Ware nochmal an:

1 public Ware ( i n t anzahl , double p r e i s )2 {3 th is . anzahl = anzahl ;4 th is . p re i s = p r e i s ;5 }

Mit diesem Konstruktor werden die beiden Attribute ’preis’ und ’anzahl’ initialisiert.Die Klasse Moebelstueck enthält aber auch die Attribute ’typ’, ’hoehe’, ’breite’ und’tiefe’, welche beim Programmaufruf gleichermaßen initialisiert werden müssen.Der von der Klasse Ware geerbte Konstruktor reicht dafür nicht mehr aus. Ausdiesem Grund müssen wir in der Klasse Moebelstueck den geerbten Konstruktorderart erweitern, so dass auch die zusätzlichen Attribute initialisiert werden.

Aber wie können wir von einer Unterklasse aus den Konstruktor der Oberklas-se erweitern? Dies ist nicht schwierig. Wir müssen dafür nur beim Aufruf desKonstruktors der Unterklasse direkt den Konstruktor der Oberklasse aufrufen.Dadurch werden dann die von der Oberklasse geerbten Attribute initialisiert. Dieübrigen Attribute, die erst in der Unterklasse deklariert wurden, werden dann wiegewohnt initialisiert.

Der Ausdruck “super“

Nun fehlt uns noch ein Befehl mit dem wir den Konstruktor der Oberklasse auf-rufen können. In Java steht uns dafür der Ausdruck super zur Verfügung. InsDeutsche übersetzt bedeutet dies "Ober, Über ", was darauf hinweist, dass wirauf Eigenschaften der Oberklasse zugreifen wollen.

In der folgenden Grafik ist ein Objekt der Klasse Moebelstueck abgebildet. Die-jenigen Eigenschaften, die von der Klasse Ware geerbt wurden, sind separateingekreist. Mit dem Ausdruck super kann genau auf die Attribute und Metho-den zugegriffen werden, die mit einem + markiert sind. Ein + besagt, dass dieseEigenschaften mit public deklariert wurden.

29

Page 30: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Um nun im Konstruktor der Klasse Moebelstueck den Konstruktor der Kasse Wa-re aufzurufen, müssen wir den Ausdruck super wie folgt anwenden:

1 super ( anzahl , p re i s )

Diese Anweisung bewirkt nun, dass der Konstruktor der Klasse Ware ausgeführtwird. Da dieser die beiden Parameter ’anzahl’ und ’preis’ verlangt, müssen wirdiese auch beim super(...)-Aufruf angeben.

Dementsprechend angepasst sieht der Konstruktor der Unterklasse Moebelstueckjetzt so aus.

1 public Moebelstueck ( S t r i n g typ , i n t hoehe , i n t b re i t e ,2 i n t t i e f e , i n t anzahl , double p re i s )3 {4 super ( anzahl , p re i s ) ;5 th is . typ = typ ;6 th is . hoehe = hoehe ;7 th is . b r e i t e = b r e i t e ;8 th is . t i e f e = t i e f e ;9 }

Und was geschieht nun, wenn dieser Konstruktor aufgerufen wird? Nun, zunächstwerden dem Konstruktor beim Aufruf 6 Parameter übergeben. Dann wird mit demBefehl super(anzahl, preis) der Konstruktor der Klasse Ware aufgerufen, wel-cher die geerbten Attribute ’anzahl’ und ’preis’ mit den in den Parametern ange-gebenen Werten initialisiert. Wenn der Konstruktor der Klasse Ware beendet ist,führt der Konstruktor der Klasse Moebelstueck die unter dem super-Ausdruckstehenden Anweisungen aus. Dadurch werden dann die Attribute initialisiert, dieerst in der Klasse Moebelstueck deklariert wurden.

Aufgabe 4.4Ändere nun in deinem BlueJ-Projekt den Konstruktor der Klasse Moebelstueckgenau wie oben angegeben.

30

Page 31: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Bald haben wir es geschafft. Unsere neue Klasse Moebelstueck ist nahezu fer-tig. Wir haben bis jetzt nur die Methode ausgeben() noch nicht betrachtet. InKapitel 2 wurde sie wie folgt implementiert.

1 public void ausgeben ( )2 {3 System . out . p r i n t l n ( " Möbelstück " ) ;4 System . out . p r i n t l n ( " Typ : " + typ ) ;5 System . out . p r i n t l n ( "Hoehe : " + hoehe ) ;6 System . out . p r i n t l n ( " B r e i t e : " + b r e i t e ) ;7 System . out . p r i n t l n ( " T ie fe : " + t i e f e ) ;8 System . out . p r i n t l n ( " Anzahl : " + anzahl ) ;9 System . out . p r i n t l n ( " Pre is : " + p re i s ) ;

10 System . out . p r i n t l n ( " " ) ;11 }

Genauso wie bei dem Konstruktor stellt sich auch hier die Frage, warum in derUnterklasse Moebelstueck diese Methode überhaupt noch implementiert werdenmuss. Denn auch diese Methode wird doch von der Klasse Ware geerbt. Waspassiert, wenn wir die geerbte Methode einfach übernehmen, wollen wir nun ein-mal ausprobieren.

Aufgabe 4.5Setze in deiner Klasse Moebelstueck die Methode ausgeben() in Kommentar.Dies ist mit dem Ausdruck /** ... */ möglich, wobei der Quelltext der Methode anStelle der Punkte stehen muss.Kompiliere anschließend deine Klasse und erzeuge ein Objekt vom Typ ’Moe-belstueck’. Rufe dann mit “rechte Maustaste –> inherited from Ware –> voidausgeben()“ die von der Klasse Ware geerbte Methode ausgeben() auf. Waswird am Bildschirm ausgegeben?

Wir haben nun gesehen, dass die geerbte Methode ausgeben() noch nicht diegewünschte Funktionalität hat. Es werden nur die Attribute am Bildschirm ange-zeigt, die von der Oberklasse Ware geerbt wurden. Um nun auch die übrigenAttribute anzeigen zu können, müssen wir die geerbte Methode anpassen.

Die angepasste Methode ausgeben() soll zunächst die in der Unterklasse de-klarierten Attribute ’typ’, ’hoehe’, ’breite’ und ’tiefe’ ausgeben. Dies wird wie ge-wohnt mit dem Befehl System.out.println erreicht. Anschließend wollen wirdie geerbten Attribute ’preis’ und ’anzahl’ anzeigen lassen. Dafür brauchen wirnur die geerbte Methode ausgeben() der Klasse Ware aufzurufen. Auch hierhilft uns der Ausdruck super weiter.

Um von einer Unterklasse aus eine Methode der Oberklasse aufzurufen, mussder Ausdruck super wie folgt verwendet werden:

1 super . Methodenname

Um nun von der Klasse Moebelstueck aus die geerbte Methode ausgeben()aufzurufen benötigen wir demnach folgende Anweisung:

31

Page 32: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

1 super . ausgeben ( ) ;

Nun können wir die angepasste Methode ausgeben() wie folgt implementieren.

1 public void ausgeben ( )2 {3 System . out . p r i n t l n ( " Möbelstück " ) ;4 System . out . p r i n t l n ( " Typ : " + typ ) ;5 System . out . p r i n t l n ( "Hoehe : " + hoehe ) ;6 System . out . p r i n t l n ( " B r e i t e : " + b r e i t e ) ;7 System . out . p r i n t l n ( " T ie fe : " + t i e f e ) ;8 super . ausgeben ( ) ;9 System . out . p r i n t l n ( " " ) ;

10 }

Beim Aufruf dieser Methode werden zunächst die Attribute ’typ’, ’hoehe’, ’breite’und ’tiefe’ am Bildschirm ausgegeben. Mit dem Befehl super.ausgeben() wirddann die Methode ausgeben() der Klasse Ware aufgerufen. Mit dieser werdendie Attribute ’anzahl’ und ’preis’ am Bildschirm dargestellt. Zum Abschluss derMethode wird noch eine Leerzeile angezeigt.

Aufgabe 4.6Öffne in deinem BlueJ-Projekt wieder die Klasse Moebelstueck . Entferne zu-nächst den Kommentar, der um die Methode ausgeben() herum gesetzt ist.Ändere dann die Methode ausgeben() genau wie oben angegeben. Wenn dufertig bist, kannst du deine Klasse kompilieren lassen.

Die abgeänderte Klasse Moebelstueck ist nun fertig! Sie ist jetzt eine Unterklasseder Klasse Ware.

Unser Programm LAGERVERWALTUNG besteht nun aus den Klassen Warenlager ,Ware und Moebelstueck . Nach der Bearbeitung der letzten Aufgabe konnte die-ses vollständig kompiliert werden. Aber, läuft unser Programm denn überhauptschon? Schließlich haben wir doch seit der Implementierung der Ober- und Un-terklasse an der Klasse Warenlager gar nichts geändert. Das müssen wir direkttesten.

Aufgabe 4.7Erzeuge jeweils ein Objekt der Klasse Warenlager sowie der Klasse Moebel-stueck und

a) führe im Objekt warenlager1 die Methode einfuegenMoebel(Moebel-stueck neu) aus

b) übergebe als Parameter das Objekt moebelst1c) starte im Objekt warenlager1 die Methode ausgeben()

Was wird am Bildschirm angezeigt?

32

Page 33: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Das Programm LAGERVERWALTUNG kann jetzt jegliche Art von Möbelstücken ver-walten. Nun möchten wir erreichen, dass auch Kleidungsstücke abgespeichertwerden können. Im Klassendiagramm von Kapitel 3 haben wir festgelegt, dassdie Klasse Kleidungsstueck genauso wie die soeben implementierte Klasse Moe-belstueck eine Unterklasse der Klasse Ware sein soll.

Aufgabe 4.8Erweitere das Programm LAGERVERWALTUNG.

a) Implementiere die Klasse Kleidungsstueck als Unterklasse der KlasseWare. Achte dabei besonders auf die richtige Verwendung des Befehlssuper im Konstruktor und in der Methode ausgeben(). Kompiliere dei-ne neue Klasse.

b) Können mit dem Programm jetzt Kleidungsstücke verwaltet werden?

Obwohl nun die Klasse Kleidungsstueck implementiert wurde, kann unser Pro-gramm noch keine derartigen Waren verwalten. Denn unsere Klasse Warenla-ger besitzt nur einen Array, welcher Objekte vom Typ ’Moebelstueck’ aufnehmenkann.Wie können wir dieses Problem lösen? Eine Möglichkeit wäre einen neuen Ar-ray ’private Kleidungsstueck[] bestandKleidung;’ zu verwenden. In diesem Fallmüssten wir noch eine neue Methode einfuegenKleidung(Kleidungsstueckneu) hinzufügen und die Methode ausgeben() um eine while-Schleife erwei-tern, die den neuen Array durchläuft und alle gespeicherten Kleidungsstücke amBildschirm ausgibt.Mit diesem Vorgehen könnten wir das Problem lösen. Aber es gibt eine Schwie-rigkeit. Denn was wäre, wenn wir weitere Unterklassen der Klasse Ware imple-mentieren würden? Wir müssten für jede neue Ware einen neuen Array anlegen,eine neue Einfüge-Methode hinzufügen und die Methode ausgeben() um ei-ne neue Schleife erweitern. Schnell wird deutlich, dass diese Lösung noch nichtoptimal ist. Denn zum Einen ist es unglücklich, dass bei jedem Einfügen einerneuen Klasse, die eine Ware repräsentiert, die Klasse Warenlager auch verän-dert werden muss. Und zum Anderen würde die Klasse Warenlager durch dievielen Hinzufügungen sehr unübersichtlich werden.Wir benötigen eine neue Lösung! Wir brauchen eine Klasse Warenlager , die soaufgebaut ist, dass beim Hinzufügen neuer Unterklassen der Klasse Ware keineVeränderungen mehr nötig sind. Aber geht sowas überhaupt? Das würde ja be-deuten, dass wir einen Array implementieren müssen, der alle möglichen Waren-Objekte darunter Möbel- und Kleidung-Objekte aufnehmen kann. Ein Array kannaber doch nur für einen speziellen Typ deklariert werden!?

Es ist richtig, dass ein Array immer nur für einen speziellen Typ deklariert werdenkann. Daran können wir nichts ändern. Die einzige Möglichkeit, die uns bleibt, ist,für den Array einen Typ zu finden, in dem dennoch alle verschiedenen Waren-

33

Page 34: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Objekte gespeichert werden können.

Polymorphe Variablen

Hier kommt uns die Vererbung erneut zu Hilfe. Denn dieses Konzept ermöglichtes uns tatsächlich Variablen von einem Typ zu deklarieren, die Objekte verschie-denen Typs aufnehmen können. Solche Variablen werden in der objektorientier-ten Programmierung als polymorph (deutsch: vielgestaltig) bezeichnet.Eine polymorphe Variable ist immer vom Typ einer Oberklasse. Das Besonderedabei ist, dass einer solchen Variablen all diejenigen Objekte zugewiesen wer-den können, die vom Typ einer Unterklasse des Variablentyps sind. Wir wollenuns dies einmal an den beiden Klassen Ware und Moebelstueck anschauen.

Zunächst deklarieren wir die folgenden beiden Anweisungen:

1 Ware ding ;2 Moebelstueck moeb = new Moebelstueck ( ) ;

Die Variable «ding» ist vom Typ der Klasse Ware. Und in der Variable «moeb» istein Objekt der Klasse Moebelstueck enthalten. Dieser Umstand ermöglicht unsdie folgende Zuweisung:

1 ding = moeb ;

Wir sehen, dass die Variable «ding» ein Objekt vom Typ ’Moebelstueck’ aufneh-men kann. Warum funktioniert dies? Nun, jedes Möbelstück ist eine Ware. DieVariable «ding» ist wie ein Behälter, in der die Ware Möbelstück hineingelegt wer-den kann:

Kann die Variable «ding» noch andere Objekte aufnehmen? Ja! Sie kann alleObjekte aufnehmen die vom Typ einer Unterklasse von Ware sind. So kann sienatürlich auch Objekte der Klasse Kleidungsstueck aufnehmen.

Aufgabe 4.9Überlege Dir wie für die folgenden drei Punkte der Java-Quellcode aussehenmuss:

• lege eine Variable «ding» vom Typ ’Ware’ an• erzeuge ein Objekt der Klasse Kleidungsstueck• weise der Variablen «ding» das erzeugte Kleidung-Objekt zu

Stelle anschließend die Variable «ding» und das darin enthaltene Kleidung-Objekt grafisch dar.

34

Page 35: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Polymorphe Variablen sind genau das, was wir für unsere Klasse Warenlager ge-sucht haben. Denn nun können wir einen Array vom Typ ’Ware’ anlegen, welcheralle Objekte aufnehmen kann, die vom Typ einer Unterklasse der Klasse Waresind. Dieser kann gleichermaßen Objekte vom Typ ’Moebelstueck’ sowie Objektevom Typ ’Kleidungsstueck’ aufnehmen. Ein solcher Array ist wie eine Aneinan-derreihung von Ware-Behältern, in denen sämtliche Waren hineingelegt werdenkönnen.

Die Deklaration eines solchen Arrays sieht wie folgt aus:

1 private Ware [ ] bestandWaren ;

Damit unsere Klasse Warenlager zusammen mit diesem Array funktioniert, müs-sen nun noch ein paar Schritte unternommen werden:

a) den neuen Array einfügen,b) den Zähler umbenennen,c) im Konstruktor den neuen Array initialisieren undd) in der Methode ausgeben()-Methode den neuen Array duchlaufen lassen.

Aufgabe 4.10Nimm in deinem Projekt die oben genannten Änderungen an der Klasse Waren-lager vor. Wenn du fertig bist und deine Klasse kompiliert werden kann, kannstdu dein Programm direkt testen:

a) Erzeuge ein Objekt der Klasse Warenlager ,b) erzeuge je zwei Objekte der Klassen Moebelstueck und Kleidungsstueck ,c) teste die Einfüge- und Ausgabe-Methode der Klasse Warenlager .

Unser Ziel ist erreicht. Puh! Das war ein ganzes Stück Arbeit. Aber nun haben wirdie im Kapitel 3 neu entworfene Programmstruktur gut in unser Java-ProgrammLAGERVERWALTUNG umgesetzt. Die Mitarbeiter der Firma AllYouWant werden zu-frieden sein.

Das Kapitel 4 wird nun mit einer Lernkontrolle und einem Kapiteltest abgeschlos-sen. Wenn du diese bewältigt hast, hast du dieses Leitprogramm abgeschlossen.Wir wünschen dir viel Erfolg und viel Spaß bei deiner weiteren Arbeit mit der ob-jektorientierten Programmierung.

35

Page 36: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

AdditumIm Additum des letzten Kapitels wurde das Klassendiagramm des ProgrammsLAGERHAUS um die Klassen Lebensmittel , Milchpackung und Schokoladentafelerweitert. Das vergrößerte Klassendiagramm sah danach wie folgt aus:

Implementiere nun in deinem BlueJ-Projekt KAPITEL-4 diese drei neuenKlassen.

Beachte:Falls du in deiner Lösung von Kapitel 3 die Klasse Lebensmittel nicht verwendethast, kannst du hier ruhig deine eigene Lösung implementieren.

36

Page 37: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

LernkontrolleAufgabe 1:Welche Verwendung des Befehls extends ist korrekt?

2 private int zahl = 0; extends Oberklasse;2 public class A extends B2 Extends from: public void ausgeben()

Aufgabe 2:Welche Aussagen bezüglich des Ausdrucks super sind richtig?

2 Mit dem Ausdruck super kann in einer Oberklasse der Konstruktor derUnterklasse aufgerufen werden

2 Um in einer Unterklasse eine Methode der Oberklasse aufzurufen, wirdder Ausdruck super verwendet

2 Mit dem Ausdruck super wird eine herkömmliche Klasse als eine Un-terklasse gekennzeichnet

Aufgabe 3:Worauf muss bei Konstruktoren in einer Unterklasse geachtet werden?

2 Möglicherweise muss der geerbte Konstruktor der Oberklasse erweitertwerden, damit alle Attribute initialisiert werden können

2 Unterklassen benötigen keinen Konstruktor2 In Unterklassen kann der Konstruktor der Oberklasse stets unverändert

übernommen werden

Aufgabe 4:Wann wird von einer polymorphen Variable gesprochen?

2 Wenn ein Objekt einer Oberklasse an eine Variable einer Unterklassezugewiesen wird.

2 Immer wenn ein Objekt einer Variable zugewiesen wird.2 Wenn ein Objekt einer Unterklasse an eine Variable vom Typ seiner

Oberklasse zugewiesen wird.

37

Page 38: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Anhang A.

Musterlösungen zu Kapitel 1

Aufgabe 1.1:Da wir nur die Lagereigenschaft der Halle betrachten wollen, genügt es uns imGrunde, wenn wir uns darauf beschränken, der Lagerhalle eine Kapazität sowieeine Liste mit auf den Weg zu geben, in welcher wir die Waren eintragen können,die dort gelagert werden. Alles andere interessiert uns im vorliegenden Beispielnicht - natürlich muss man bei der Abstraktion immer sehr genau darauf achten,was eigentlich gefordert wird, um nicht zu viele Details wegfallen zu lassen! Dennauch wenn es sich gerade nur nach sehr wenig anhört: Aber für unseren Zweckist diese Vorstellung von einer Lagerhalle genau richtig.

Aufgabe 1.2:Die allgemeinen Informationen für eine einzulagernde Ware sind ihr Preis sowiedie Anzahl der Einheiten, die wir davon eingelagert haben. Bei Möbeln interessie-ren uns jetzt allerdings noch speziell die Abmessungen (Länge x Höhe x Breite)sowie die „Art“ des Möbelstücks, d.h. ob es sich um einen Schrank oder Stuhletc. handelt.

Da der Preis meistens eine Kommazahl ist, haben wir hier als Datentyp doubleausgewählt. Für die Abmessungen genügt uns ein int, da wir diese der Einfach-heit halber in cm angeben wollen - damit ist es für unseren Zweck in jedem Fallgenau genug. Anzahl ist natürlich auch ein int, da wir immer ganze Elementeeinlagern wollen.

38

Page 39: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Lernkontrolle:

Aufgabe 1:Was bezeichnen wir als Modellierung?

2 Den Quelltext für unsere Klassen zu schreiben.2 Unwichtige Eigenschaften realer Gegenstände auszusortieren.4 Abstraktes Wissen über Gegenstände mit Hilfe von Klassen auszu-

drücken.

Aufgabe 2:Worauf kommt es bei der Abstraktion ganz besonders an?

2 Möglichst viele Eigenschaften des realen Objektes zu übernehmen.4 Die relevantesten Eigenschaften eines realen Objektes zu übernehmen.4 Bei der Auswahl der Eigenschaften den Zweck des Programms nie aus

den Augen zu verlieren.

Aufgabe 3:Angenommen, wir wollen für ein Programm eine Klasse namens Auto entwerfen.Welche Eigenschaften hältst du hierbei für wichtig?

2 Anzahl der Türen2 Lackfarbe2 Sitzplätze2 Anzahl der Airbags2 Navigationsgerät2 Anzahl der Gänge / Automatikschaltung2 Art des zu tankenden Kraftstoffes4 Keine der genannten Angaben

Auch wenn es sich vielleicht verwirrend anhört: Aber da wir nicht wissen, zu wel-chem Zweck die Klasse benutzt werden soll, können wir keine Aussagen darübertreffen, welche der Eigenschaften wichtig oder unwichtig für uns ist. Wenn dasProgramm beispielsweise statische Informationen über die Vorliebe bei der Farbedes Autos auswerten soll, sind alle anderen Eigenschaften für uns überflüssig.

39

Page 40: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Anhang B.

Musterlösungen zu Kapitel 2

Aufgabe 2.1:

1 /∗ ∗2 ∗ Diese Klasse s t e l l t e in Warenlager dar .3 ∗4 ∗ @author C h r i s t i a n Baart , David Van de Water5 ∗ @version 1.06 ∗ /7

8 public class Warenlager {9

10 private i n t kapaz i tae t ;11

12 private Moebelstueck [ ] bestandMoebel ;13

14 private i n t zaehlerMoebel = 0 ;15

16 public Warenlager ( i n t kapaz i tae t )17 {18 th is . kapaz i tae t = kapaz i tae t ;19 bestandMoebel = new Moebelstueck [ kapaz i tae t ] ;20 }21

22 public void einfuegenMoebel ( Moebelstueck neu )23 {24 i f ( zaehlerMoebel < kapaz i tae t )25 {26 bestandMoebel [ zaehlerMoebel ] = neu ;27 zaehlerMoebel ++;28 }29 }30

31 public void ausgeben ( )32 {33 i n t i = 0 ;34

35 System . out . p r i n t l n ( " Moebel : " ) ;36

37 while ( i < zaehlerMoebel )38 {39 bestandMoebel [ i ] . ausgeben ( ) ;40 i ++;41 }42

43 i =0;44

45 }46

47 }

Erläuterungen:

40

Page 41: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Zeile 15: In dieser Zeile definieren wir das eigentliche Herzstück unseres Lagers- das Array bestandMoebel. In diesem werden wir später unsere erstelltenMöbel-Objekte abspeichern.

Zeile 20-25: Der Konstruktor erzeugt aus unserer Klasse ein neues Objekt vomTyp Warenlager . Kennst du schon den this-Bezeichner? Mit ihm ist es mög-lich, den Parametern einer Methode die gleichen Namen zuzuweisen, wiesie eigentlich schon in der Klasse enthalten sind. So ist mit this.preisimmer das Attribut gemeint, mit preis hingegen der übergebene Parame-ter. Auf diese Weise kann der Compiler auseinanderhalten, womit welcheVariable gemeint ist und wir haben den Vorteil, uns keine neuen Namenüberlegen zu müssen.

Zeile 36-51: Die Methode ausgeben() gibt den aktuellen Inhalt des Arrays aus.

Aufgabe 2.2:Der Konstruktor sollte abschließend so aussehen:

1 public Moebelstueck ( S t r i n g typ , i n t hoehe , i n t b re i t e ,2 i n t t i e f e , i n t anzahl , double p re i s ) {3 th is . typ = typ ;4 th is . hoehe = hoehe ;5 th is . b r e i t e = b r e i t e ;6 th is . t i e f e = t i e f e ;7 th is . anzahl = anzahl ;8 th is . p re i s = p r e i s ;9 }

Aufgabe 2.3:Um in BlueJ aus geschriebenen (und fehlerfrei kompilierten) Klassen direkt neueObjekte erzeugen zu können, gehst du folgendermaßen vor (am Beispiel unseresProgramms):

1. Klicke mit der rechten Maustaste die Klasse Moebelstueck im BlueJ-Projektfensteran und wähle den ersten Eintrag new Moebelstueck(...): Damit rufst duden Konstruktor von Moebelstueck auf.

2. Gib im nun erscheinenden Fenster die Parameter ein, die du dem Konstruktorübergeben möchtest. Beachte dabei, dass der Eintrag zu «typ» in Anführungs-zeichen gesetzt werden muss, da es sich dabei um einen String handelt,und dass du beim Preis einen Punkt statt eines Kommas verwendest, wenndu Nachkommastellen eingeben möchtest. Klicke anschließend auf OK.

41

Page 42: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

3. Unten im BlueJ-Projektfenster erscheint nun das folgende Symbol [links] (oderein ähnliches, abhängig vom Namen, den du eingegeben hast):

Dies ist dein soeben erzeugtes Objekt! Wenn du es doppelt anklickst, kannstdu dir die Werte ansehen, die du den einzelnen Attributen zugewiesen hast.

4. Erzeuge nun auf gleiche Weise ein Objekt des Typs Warenlager .

5. Klicke das erzeugte Objekt mit der rechten Maustaste an und wählevoid einfuegenMoebel(Moebelstueck neu) aus. Im Fenster, das sichöffnet, gibst du den Namen deines Möbel-Objektes ein, klickst auf OK und hastes „eingelagert“.

6. Wenn du nun mit der rechten Maustaste auf das Warenlager-Objekt klickstund void ausgeben() wählst, öffnet sich ein Fenster und gibt dir den Inhaltdes Warenlagers aus.

Diese Möglichkeit ist ein sehr mächtiges Werkzeug von BlueJ, da du damit dei-ne erstellten Klassen leicht und problemlos testen kannst. Nutze es so oft wiemöglich!

42

Page 43: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Lernkontrolle:Aufgabe 1:Was bewirkt der this-Befehl?

2 Er ermöglicht die Ausführung des Konstruktors.4 Er ermöglicht Zuweisungen an die Attribute eines gerade erstellten Ob-

jektes.2 Er ermöglicht den Zugriff auf ein bestimmtes Element eines Arrays.

Aufgabe 2:

1 public class Fenster {2

3 private boolean geschlossen ;4

5 private S t r i n g ma te r i a l ;6

7 private double hoehe ;8

9 private double b r e i t e ;10

11 public Fenster ( S t r i n g hoehe , double mater ia l , double b r e i t e ) {12 th is . geschlossen = true ;13 th is . m a te r i a l = hoehe ;14 th is . hoehe = ma te r i a l ;15 th is . b r e i t e = b r e i t e ;16 }17

18 public void oef fneFenster ( ) {19 i f ( geschlossen == true ) {20 geschlossen = fa lse ;21 System . out . p r i n t l n ( " Fenster geö f fne t ! " ) ;22 }23 else {24 geschlossen = true ;25 System . out . p r i n t l n ( " Fenster geschlossen ! " ) ;26 }27 }28

29 public void f ens te rS ta tus ( ) {30 S t r i n g o f fen ;31 i f ( geschlossen == true ) {32 o f fen = " geschlossen " ;33 }34 else {35 o f fen = " geö f fne t " ;36 }37 System . out . p r i n t l n ( "Das Fenster i s t " + o f fen ) ;38 System . out . p r i n t l n ( "Es besteht aus " + ma te r i a l ) ;39 System . out . p r i n t l n ( " Die Maße des Fensters s ind " + hoehe + " x " + b r e i t e ) ;40 }41

42 }

Zugegeben: Dieser Quellcode ist wohl eher nicht so, wie man ihn normalerweiseverwenden würde. Dazu sind die Variablennamen nicht eindeutig genug.

43

Page 44: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Anhang C.

Musterlösungen zu Kapitel 3

Aufgabe 3.1 a:Ein Kleidungsstück hat einige charakteristische Merkmale. So ist jedes aus einembestimmten Material (zum Beispiel Stoff) gefertigt. Außerdem haben Kleidungs-stücke eine Farbe (zum Beispiel blau) und eine Größe (zum Beispiel 42). Darüberhinaus sollte klar sein, um welche Art von Kleidungsstück es sich handelt (zumBeispiel: Pullover).Wenn man sich die Klasse Moebelstueck anschaut, sieht man, dass diese dieAttribute ’anzahl’ und ’preis’ beinhaltet. Diese Informationen sind natürlich auchfür Kleidungsstücke wichtig. Und deswegen erhält die neue Klasse Kleidungs-stueck auch diese Attribute. Bei der weiteren Betrachtung der Klasse Moebel-stueck wird direkt klar, dass wir für die Klasse Kleidungsstueck auch eine Metho-de ausgeben() benötigen.

Die Klasse Kleidungsstueck hat dann folgende Eigenschaften:

Attribute: Methoden:art:String ausgeben();material:Stringfarbe:Stringgroeße:intanzahl:intpreis:double

Aufgabe 3.1 b:Die Auswahl der Attribute und Methoden der Klasse Kleidungstueck könnte soverlaufen sein:

• zunächst habe ich überlegt, welche Merkmale eines Kleidungsstücks wich-tig sind: Art, Material, Farbe und Größe.

• dann habe ich mir die Klasse Moebelstueck angeschaut• dabei betrachtete ich zunächst die Attribute. Es fiel mir auf, dass die Attri-

bute ’anzahl’ und ’preis’ auch für Kleidungsstücke wichtig sind• dann betrachtete ich die anderen Eigenschaften der Klasse Moebelstueck

und bemerkte, dass die Klasse Kleidungsstueck auch eine Methode ausgeben()benötigt.

Merke: Die Klassen Moebelstueck und Kleidungs-stueck haben sehr ähnliche Attribute und Methoden.

44

Page 45: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Aufgabe 3.2Bei der Vererbung wird etwas von Einem zum Anderen übertragen. Beispiele:

• Biologie: Lebewesen übertragen ihr Erbgut an ihre Nachkommen• Erbe: Kindern wird der Besitz ihrer Eltern übertragen

Aufgabe 3.3Die Klasse Schüler besteht aus folgenden Komponenten:

Attribute: Methoden:vorname:String print()nachname:Stringklasse:String

Und warum ist das so? Nun, die Klasse Schüler übernimmt alle Eigenschaftender Klasse Person. Aus diesem Grund besitzt sie die Attribute ’vorname’ und’nachname’ sowie die Methode print(). Der Pfeil im Klassendiagramm (sieheGrafik über der Aufgabenstellung) zeigt, dass das Attribut ’klasse’ zusätzlich hin-zugefügt wird.

Aufgabe 3.4Um die beiden Waren Schokoladentafel und Milchpackung in das neue Klassen-diagramm einzufügen gibt es zwei Möglichkeiten. Zum Einen können die beidenneuen Klassen direkt von der Klasse Ware abgeleitet werden. Dann sieht dasDiagramm so aus:

Die andere näher an der Realität liegende Möglichkeit ist, die Klassen Schoko-ladentafel und Milchpackung zunächst von einer Klasse Lebensmittel erben zulassen. Schließlich handelt es sich bei Schokolade und Milch um ein Lebensmit-tel. Das entsprechende Klassendiagramm sieht dann wie folgt aus:

45

Page 46: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Additum:In dem unten stehenden Klassendiagramm ist die Lösung mit der Klasse Lebens-mittel dargestellt. Wenn du deine Lösung ohne diese Klasse entworfen hast, dannsind die Attribute ’maxLagerTemperatur’ und ’verfallDatum’ jeweils in den KlassenSchokoladentafel und Milchpackung enthalten.

Möglicherweise hast du bei deiner Lösung andere Attribute in den neuen Klassenverwendet. Dies ist aber völlig in Ordnung, da die im obigen Klassendiagrammaufgeführten Attribute lediglich eine kleine Auswahl repräsentieren.

46

Page 47: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Lernkontrolle:Aufgabe 1:Was bedeutet Vererbung in der objektorientierten Programmierung?

2 eine Klasse überträgt nur ihre Attribute an eine andere Klasse2 eine Klasse erbt nur die Methoden einer anderen Klasse4 eine Klasse überträgt all ihre Eigenschaften an eine andere Klasse

Aufgabe 2:Welche der folgenden Aussagen zu Ober- und Unterklassen sind richtig? Es sindmehrere Antworten möglich.

4 eine Oberklasse überträgt ihre Eigenschaften an eine Unterklasse2 eine Oberklasse erbt von ihrer Unterklasse4 Oberklassen und Unterklassen beschreiben eine IST-Beziehung

Aufgabe 3:Betrachte die Vorteile der Vererbung. Welche der folgenden Aussagen sind rich-tig?

4 Klassen können mit der Vererbung so miteinander ’verknüpft’ werden,dass bei der Änderung einer Klasse andere Klassen gleich mit verändertwerden

4 Mit Hilfe der Vererbung erstellte Programme können leicht erweitert wer-den

2 Die Vererbung trägt nicht dazu bei, die Struktur eines Programms über-sichtlicher zu machen

Aufgabe 4:Das Klassendiagramm sieht wie folgt aus:

Der erste Schritt zur Erstellung dieses Klassendiagramms ist die Zusammenhän-ge zwischen den Begriffen zu erkennen. Zum Beispiel: ein Hund ist ein Säugetier,ein Säugetier ist ein Tier. Dann können die speziellsten Begriffe (Krokodil, Schlan-ge, Hund, Katze) als unterste Klassen verwendet werden. Anschließend könnendie Begriffe Reptil und Säugetier in das Diagramm eingefügt werden. Der allge-meinste Begriff Tier wird dann zur obersten Klasse des Klassendiagramms.

47

Page 48: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Anhang D.

Musterlösungen zu Kapitel 4

Aufgabe 4.2:Die Klasse Ware wird folgendermaßen implementiert:

1 /∗ ∗2 ∗ Die Klasse s t e l l t e ine Ware dar3 ∗4 ∗ @author C h r i s t i a n Baart , David Van de Water5 ∗ @version 1.06 ∗ /7 public class Ware8 {9 / / A t t r i b u t e

10 private i n t anzahl = 0 ;11 private double p re i s = 0 ;12

13 / / Kons t ruk to r14 public Ware ( i n t anzahl , double p r e i s )15 {16 th is . anzahl = anzahl ;17 th is . p re i s = p r e i s ;18 }19

20 / / Methoden ausgeben21 public void ausgeben ( )22 {23 System . out . p r i n t l n ( " Anzahl : " + anzahl ) ;24 System . out . p r i n t l n ( " Pre is : " + p re i s ) ;25 }26

27 } / / Ende Klasse "Ware"

Im BlueJ-Projekt KAPITEL-4-2 kannst du die Lösung auch direkt am Computerbetrachten.

Aufgabe 4.3a:Um die Klasse Moebelstueck zu einer Unterklasse der Klasse Ware zu machen,muss der Kopf der Klassendeklaration wie folgt geändert werden:

1 public class Moebelstueck extends Ware

Aufgabe 4.3b:Ursprünglich hatten wir in Kapitel 2 die Attribute ’preis’ und ’anzahl’ eingefügt. DieKlasse Moebelstueck erbt diese Attribute aber jetzt von der Klasse Ware. Des-wegen können diese nun entfernt werden.

48

Page 49: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Nach den Änderungen aus den Aufgabenteilen a) und b) sieht die Klasse Moe-belstueck wie folgt aus:

1 /∗ ∗2 ∗ Diese Klasse s t e l l t e in Moebelstueck dar .3 ∗4 ∗ @author C h r i s t i a n Baart , David Van de Water5 ∗ @version 1.06 ∗ /7 public class Moebelstueck extends Ware8 {9 / / A t t r i b u t e

10 private S t r i n g typ = " " ;11 private i n t hoehe = 0;12 private i n t b r e i t e = 0 ;13 private i n t t i e f e = 0;14

15 / / Kons t ruk to r16 public Moebelstueck ( S t r i n g typ , i n t hoehe , i n t b re i t e ,17 i n t t i e f e , i n t anzahl , double p re i s )18 {19 th is . typ = typ ;20 th is . hoehe = hoehe ;21 th is . b r e i t e = b r e i t e ;22 th is . t i e f e = t i e f e ;23 th is . anzahl = anzahl ;24 th is . p re i s = p r e i s ;25 }26

27 / / Methoden28 / / Zur Ausgabe am Bi ldsch i rm29 public void ausgeben ( )30 {31 System . out . p r i n t l n ( " Möbelstück " ) ;32 System . out . p r i n t l n ( " Typ : " + typ ) ;33 System . out . p r i n t l n ( "Hoehe : " + hoehe ) ;34 System . out . p r i n t l n ( " B r e i t e : " + b r e i t e ) ;35 System . out . p r i n t l n ( " T ie fe : " + t i e f e ) ;36 System . out . p r i n t l n ( " Anzahl : " + anzahl ) ;37 System . out . p r i n t l n ( " Pre is : " + p re i s ) ;38 System . out . p r i n t l n ( " " ) ;39 }40

41 } / / Ende Klasse " Moebelstueck "

Im BlueJ-Projekt KAPITEL-4-3 kannst du die Lösung auch direkt am Computerbetrachten.

Aufgabe 4.4:Der neue Konstruktor ist über der Aufgabe abgedruckt. Im BlueJ-Projekt KAPITEL-4-4 kannst du dessen Implementierung auch am Computer betrachten.

Aufgabe 4.5:Es fällt auf, das am Bildschirm nur die Attribute ’preis’ und ’anzahl’ ausgegebenwerden. Dies liegt daran, dass in der Methode ausgeben() der Klasse Ware dieentsprechenden Anweisungen fehlen. Wie auch beim Konstruktor muss also inder Klasse Moebelstueck die geerbte Methode ausgeben() angepasst werden,um auch die Attribute ’typ’, ’hoehe’, ’breite’ und ’tiefe’ am Bildschirm anzeigen zukönnen.Wenn du Probleme dabei hattest, um die Methode ausgeben() herum den Kom-mentar zu setzen, dann nimm das BlueJ-Projekt KAPITEL-4-5 zur Hilfe.

49

Page 50: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Aufgabe 4.6:Die angepasste Methode ausgeben() ist über der Aufgabe abgedruckt. Im BlueJ-Projekt KAPITEL-4-6 kannst du dessen Implementierung auch am Computer be-trachten.

Aufgabe 4.7:Der Test könnte beispielsweise wie folgt ausgesehen haben:

Schritt 1: Erzeuge ein Objekt der Klasse Warenlager mit Kapazität 1Schritt 2: Erzeuge ein Objekt der Klasse Moebelstueck mit

Typ = “Wohnzimmerschrank“Höhe = 200Breite = 400Tiefe = 50Anzahl = 500Preis = 299.99

Schritt 3: starte im Objekt warenlager1 die Methode einfuegenMoebel(Moebel-stueck neu) mit moebelst1

Schritt 4: starte im Objekt warenlager1 die Methode ausgeben()

Ausgabe am Bildschirm:Moebel:Typ: WohnzimmerschrankHoehe: 200Breite: 400Tiefe: 50Anzahl: 500Preis: 299.99

Die Ausgabe am Bildschirm zeigt: nach der Implementierung der Oberklasse Wa-re und deren Unterklasse Moebelstueck läuft das Programm LAGERVERWALTUNGeinwandfrei.

Aufgabe 4.8 a:Die neue Klasse Kleidungsstueck wird wie folgt implementiert:

1 /∗ ∗2 ∗ Diese Klasse s t e l l t e in Kle idungsstueck dar .3 ∗4 ∗ @author C h r i s t i a n Baart , David Van de Water5 ∗ @version 1.06 ∗ /7 public class Kleidungsstueck extends Ware8 {9 / / A t t r i b u t e

10 private S t r i n g a r t = " " ;11 private S t r i n g farbe = " " ;12 private S t r i n g ma te r i a l = " " ;13 private i n t groeße = 0;14

15 / / Kons t ruk to r

50

Page 51: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

16 public Kleidungsstueck ( S t r i n g ar t , S t r i n g farbe , S t r i n g mate r ia l ,17 i n t groeße , i n t anzahl , double p re i s )18 {19 super ( anzahl , p re i s ) ;20 th is . a r t = a r t ;21 th is . fa rbe = farbe ;22 th is . ma te r i a l = ma te r i a l ;23 th is . groeße = groeße ;24 }25

26 / / Methoden27 / / Zur Ausgabe am Bi ldsch i rm28 public void ausgeben ( )29 {30 System . out . p r i n t l n ( " K le idungsstück " ) ;31 System . out . p r i n t l n ( " A r t : " + a r t ) ;32 System . out . p r i n t l n ( " Farbe : " + farbe ) ;33 System . out . p r i n t l n ( " Ma te r i a l : " + m a te r i a l ) ;34 System . out . p r i n t l n ( " Größe : " + groeße ) ;35 super . ausgeben ( ) ;36 System . out . p r i n t l n ( " " ) ;37 }38

39 } / / Ende Klasse " Kle idungsstueck "

Im BlueJ-Projekt KAPITEL-4-8 kannst du die Lösung auch direkt am Computerbetrachten.

Aufgabe 4.8 b:Nachdem nun die Klasse Kleidungsstueck hinzugefügt wurde, kann unser Pro-gramm noch keine Kleidungsstücke verwalten. Denn die Klasse Warenlager be-sitzt lediglich einen Array, welcher Objekte vom Typ ’moebelstueck’ aufnehmenkann.

Aufgabe 4.9:Für die genannten Anweisungen müsste der Java-Code wie folgt aussehen:

1 Ware ding ;2 Kleidungsstueck k l e i = new Kleidungsstueck ( ) ;3 ding = k l e i ;

Die Variable «ding» mit dem darin enthaltenen Kleidung-Objekt sieht dann soaus:

Aufgabe 4.10:Die angepasste Klasse Warenlager sieht nun so aus:

1 /∗ ∗2 ∗ Diese Klasse s t e l l t e in Warenlager dar .3 ∗4 ∗ @author C h r i s t i a n Baart , David Van de Water5 ∗ @version 1.06 ∗ /

51

Page 52: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

7

8 public class Warenlager {9

10 / / A t t r i b u t e11 / / g i b t maximale Kapaz i taet an12 private i n t kapaz i tae t ;13

14 / / Array fue r Moebelstuecke15 private Ware [ ] bestandWaren ;16

17 / / g i b t a k t u e l l e n Bestand im Lager an :18 private i n t zaehlerWaren = 0;19

20 / / Kons t ruk to r21 public Warenlager ( i n t kapaz i tae t )22 {23 th is . kapaz i tae t = kapaz i tae t ;24 bestandWaren = new Ware [ kapaz i tae t ] ;25 }26

27 / / Methoden28 / / Einfuegen29 public void einfuegenWare (Ware neu )30 {31 i f ( zaehlerWaren < kapaz i tae t )32 {33 bestandWaren [ zaehlerWaren ] = neu ;34 zaehlerWaren ++;35 }36 }37

38 / / Ausgaben am Bi ldsch i rm39 public void ausgeben ( )40 {41 i n t i = 0 ;42

43 / / ge lager te Ware anzeigen44 System . out . p r i n t l n ( "Waren : " ) ;45

46 while ( i < zaehlerWaren )47 {48 bestandWaren [ i ] . ausgeben ( ) ;49 i ++;50 }51

52 i =0;53

54 } / / Ende Methode ausgeben ( )55

56 } / / Ende Klasse " Warenlager "

Im BlueJ-Projekt KAPITEL-4-10 kannst du die nun fertige Klasse betrachten.

Additum:Die Lösung kannst du dir im BlueJ-Projekt KAPITEL-4-ADD ansehen. In diesemwurde das Programm wie im obigen Klassendiagramm (siehe Aufgabenstellung)erweitert.

52

Page 53: Leitprogramm Informatik: Vererbungslehre & …frankengel.org/images/PDF/Programmierung_mit_BlueJ_-_Schueler... · Leitprogramm Informatik: Vererbungslehre & Polymorphie in JAVA Schultyp:

Lernkontrolle:

Aufgabe 1:Welche Verwendung des Befehls extends ist korrekt?

2 private int zahl = 0; extends Oberklasse;4 public class A extends B2 Extends from: public void ausgeben()

Aufgabe 2:Welche Aussagen bezüglich des Ausdrucks super sind richtig?

2 Mit dem Ausdruck super kann in einer Oberklasse der Konstruktor derUnterklasse aufgerufen werden

4 Um in einer Unterklasse eine Methode der Oberklasse aufzurufen, wirdder Ausdruck super verwendet

2 Mit dem Ausdruck super wird eine herkömmliche Klasse als eine Unter-klasse gekennzeichnet

Aufgabe 3:Worauf muss bei Konstruktoren in einer Unterklasse geachtet werden?

4 Möglicherweise muss der geerbte Konstruktor der Oberklasse erweitertwerden, damit alle Attribute initialisiert werden können

2 Unterklassen benötigen keinen Konstruktor2 In Unterklassen kann der Konstruktor der Oberklasse stets unverändert

übernommen werden

Aufgabe 4:Wann wird von einer polymorphen Variable gesprochen?

2 Wenn ein Objekt einer Oberklasse an eine Variable einer Unterklassezugewiesen wird.

2 Immer wenn ein Objekt einer Variable zugewiesen wird.4 Wenn ein Objekt einer Unterklasse an eine Variable vom Typ seiner Ober-

klasse zugewiesen wird.

53