1 Fragen aus dem Unterricht zu Projekt âGartenâ - Ralph Henne
1 Fragen aus dem Unterricht zu Projekt âGartenâ - Ralph Henne
1 Fragen aus dem Unterricht zu Projekt âGartenâ - Ralph Henne
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Kapitel 1z Grundlagen der Objektorientierung Seite 1<br />
1 <strong>Fragen</strong> <strong>aus</strong> <strong>dem</strong> <strong>Unterricht</strong> <strong>zu</strong> <strong>Projekt</strong> „Garten“<br />
In diesem Zusatzkapitel werde ich Probleme ansprechen, die sich im Laufe des<br />
<strong>Unterricht</strong>sgesprächs ergeben haben. Ich werde Lösungen anbieten, ohne dass<br />
diese im Einzelnen vertieft besprochen werden. Vielmehr ist der einzelne<br />
Schüler hiermit aufgefordert, die vorgeschlagene Implementierung in Ruhe <strong>zu</strong><br />
studieren und die Vorschläge in seine H<strong>aus</strong>aufgaben <strong>zu</strong> übernehmen.<br />
Hinweis:<br />
Ich möchte noch einmal betonen, dass es nicht unbedingt notwendig ist, alles auf<br />
Anhieb <strong>zu</strong> verstehen. Es werden in diesen Vorschlägen immer wieder Strukturen<br />
verwendet, die im <strong>Unterricht</strong> an dieser Stelle noch nicht besprochen worden<br />
sind. Aber es schadet auf keinen Fall, sich darüber Gedanken <strong>zu</strong> machen.<br />
Bei der H<strong>aus</strong>aufgabe wirst du schnell bemerkt haben, dass es kein Problem ist,<br />
einzelne Objekte vom Typ Kreis, Quadrat oder Dreieck <strong>zu</strong> manipulieren, es aber<br />
sinnvoll ist, diese Objekte <strong>zu</strong>erst an den richtigen Ort <strong>zu</strong> platzieren und die<br />
Größe und Farbe ein<strong>zu</strong>stellen, bevor diese sichtbar gemacht werden. Diese<br />
Reihenfolge erzeugt einen einigermaßen ruhigen Bildaufbau. Auch die<br />
Simulation einer Bewegung eines einzelnen Objekts bereitet keine großen<br />
Schwierigkeiten.<br />
Hinweis:<br />
Für die Simulation einer Bewegung werden die Methoden zeichne(), entferne(),<br />
warte(), usw. der Klasse Leinwand verwendet. Auf die Bedeutung dieser<br />
Methoden werde ich in diesem Kapitel nicht eingehen.<br />
Mit der Bewegung eines einzelnen Quadrats erzeugt man jedoch keine<br />
ansprechenden Szenen. Vielfach benötigt man Objekte, die <strong>aus</strong> weiteren<br />
Objekten <strong>zu</strong>sammengesetzt werden. Eine Figur besteht z.B. <strong>aus</strong> einem Rumpf<br />
(Dreieck) und einem Kopf (Kreis). Mit deinem bisherigen Wissen wirst die<br />
Simulation einer Bewegung falsch erstellen. Es bewegt sich <strong>zu</strong>erst der Kopf <strong>zu</strong><br />
der entsprechenden Position und dann folgt der Rumpf nach.<br />
1.1 Objekt, Klasse<br />
Betrachte <strong>zu</strong>erst einmal die Figur in Abbildung 1.1. Sie ist <strong>zu</strong>sammengesetzt <strong>aus</strong><br />
einem Dreieck und einem Kreis. Weiterhin soll diese im <strong>zu</strong>sammengesetzten<br />
Zustand auf die Reise gehen.<br />
Gymnasium Königsbrunn<br />
<strong>Ralph</strong> <strong>Henne</strong>
Kapitel 1z Grundlagen der Objektorientierung Seite 2<br />
Abbildung 1.1: Figur als <strong>zu</strong>sammengesetztes Objekt<br />
Hier<strong>zu</strong> benötigst du zwei Klassen. Die Klasse Mensch ist für die<br />
Zusammenstellung der Figur verantwortlich. Die zweite Klasse Reise erzeugt<br />
ein Objekt der Klasse Mensch und simuliert dessen Bewegung.<br />
Abbildung 1.2: Klassendiagramm des <strong>Projekt</strong>s Bewegung<br />
Betrachte <strong>zu</strong>erst die Klasse Mensch. Sie benötigt<br />
die Datenfelder<br />
und<br />
Dreieck koerper<br />
Kreis kopf<br />
Gymnasium Königsbrunn<br />
<strong>Ralph</strong> <strong>Henne</strong>
Kapitel 1z Grundlagen der Objektorientierung Seite 3<br />
die Methoden<br />
malen()<br />
zeigen()<br />
bewegen()<br />
Mehr Fähigkeiten soll unsere Figur vorerst nicht besitzen.<br />
Nun soll diese Figur auf die Reise gehen. Da<strong>zu</strong> musst du eine Klasse Reise<br />
entwerfen. Diese benötigt<br />
das Datenfeld<br />
Mensch meinMensch<br />
und die Methoden<br />
zeigeMensch()<br />
bewegeMensch()<br />
Die Implementierung dieser Klassen im <strong>Projekt</strong> Bewegung zeigen die folgenden<br />
Listings.<br />
/**<br />
* Diese Klasse erzeugt eine einfache Figur <strong>aus</strong> einem Dreieck und<br />
* und einem Kreis und simuliert horizontale Bewegungen.<br />
*<br />
* @author <strong>Ralph</strong> <strong>Henne</strong><br />
* @version 1.10.2003<br />
*/<br />
public class Mensch<br />
{<br />
private Dreieck koerper;<br />
private Kreis kopf;<br />
/** Konstruktor */<br />
public Mensch()<br />
{<br />
koerper = new Dreieck();<br />
kopf = new Kreis();<br />
malen();<br />
}<br />
/** Das Quadrat(koerper) und der Kreis(kopf) wird gezeichnet. */<br />
private void malen()<br />
{<br />
koerper.groesseAendern(90, 50);<br />
koerper.vertikalBewegen(100);<br />
koerper.horizontalBewegen(30);<br />
kopf.groesseAendern(30);<br />
Gymnasium Königsbrunn<br />
<strong>Ralph</strong> <strong>Henne</strong>
Kapitel 1z Grundlagen der Objektorientierung Seite 4<br />
}<br />
kopf.horizontalBewegen(45);<br />
kopf.vertikalBewegen(25);<br />
/** Die Figur wird nun sichtbar gemacht. */<br />
public void zeigen()<br />
{<br />
koerper.sichtbarMachen();<br />
kopf.sichtbarMachen();<br />
}<br />
}<br />
/** Die gesamte Figur wird um entfernung horizontal verschoben. */<br />
public void bewegen(int entfernung)<br />
{<br />
koerper.horizontalBewegen(entfernung);<br />
kopf.horizontalBewegen(entfernung);<br />
}<br />
/**<br />
* Diese Klasse simuliert die Reise.<br />
*<br />
* @author <strong>Ralph</strong> <strong>Henne</strong><br />
* @version 1.10.2003<br />
*/<br />
public class Reise<br />
{<br />
private Mensch meinMensch;<br />
/** Konstruktor */<br />
public Reise()<br />
{<br />
meinMensch = new Mensch();<br />
}<br />
/** Macht die Figur sichtbar. */<br />
public void zeigeMensch()<br />
{<br />
meinMensch.zeigen();<br />
}<br />
}<br />
/** Bewegt die Figur nach rechts bzw. links. */<br />
public void bewegeMensch(int entfernung)<br />
{<br />
meinMensch.bewegen(entfernung);<br />
}<br />
Übung 1z.1:<br />
Gymnasium Königsbrunn<br />
<strong>Ralph</strong> <strong>Henne</strong>
Kapitel 1z Grundlagen der Objektorientierung Seite 5<br />
Erstelle ein neues <strong>Projekt</strong> Bewegung und implementiere wie oben dargestellt die<br />
entsprechenden Klassen in BlueJ. Untersuche die Methoden. Denke daran, dass<br />
auch das Abschreiben bereits <strong>zu</strong>m Verständnis beiträgt.<br />
1.2 Langsame Bewegung der Figur<br />
Nun soll diese Figur langsam bewegt werden. Die erste Idee ist, in der Klasse<br />
Mensch folgende Methode <strong>zu</strong> implementieren:<br />
/** Die gesamte Figur wird langsam horizontal verschoben. */<br />
public void langsamBewegen(int entfernung)<br />
{<br />
koerper.langsamHorizontalBewegen(entfernung);<br />
kopf.langsamHorizontalBewegen(entfernung);<br />
}<br />
und in der Klasse Reise folgende Methode:<br />
/** Bewegt die Figur langsam horizontal. */<br />
public void bewegeLangsamMensch(int entfernung)<br />
{<br />
meinMensch.langsamBewegen(entfernung);<br />
}<br />
Übung 1z.2:<br />
Füge diese beiden Methoden in die entsprechenden Klassen Mensch und Reise<br />
ein und untersuche ihre Wirkungen in BlueJ.<br />
Das Ergebnis ist nicht sehr befriedigend. Formuliere schriftlich, was beim<br />
Aufruf von meinMensch.langsamBewegen(entfernung) im Einzelnen passiert.<br />
In welcher Klasse müssen wir Verbesserungen vornehmen?<br />
Offensichtlich war es falsch, <strong>zu</strong>erst den Körper um die gesamte Entfernung <strong>zu</strong><br />
verschieben und dann den Kopf folgen <strong>zu</strong> lassen. Besser ist es, den Körper um<br />
ein Pixel, dann den Kopf um ein Pixel <strong>zu</strong> verschieben. Nun soll wieder der<br />
Körper und dann wieder der Kopf um ein weiteres Pixel verschoben werden.<br />
Diese beiden Programmanweisungen sollen so oft wiederholt werden, bis die<br />
gesamte Entfernung <strong>zu</strong>rückgelegt worden ist.<br />
Die Implementierung zeigt folgendes Listing:<br />
/** Die gesamte Figur wird langsam horizontal verschoben. */<br />
public void langsamBewegen(int entfernung)<br />
{<br />
for(int i = 0; i < entfernung; i++) {<br />
Gymnasium Königsbrunn<br />
<strong>Ralph</strong> <strong>Henne</strong>
Kapitel 1z Grundlagen der Objektorientierung Seite 6<br />
}<br />
}<br />
// Die Figurenteile jeweils um 1 Pixel verschieben<br />
koerper.langsamHorizontalBewegen(1);<br />
kopf.langsamHorizontalBewegen(1);<br />
Übung1z.3:<br />
Übernimm nun die oben gezeigte Methode und untersuche diese in BlueJ!<br />
Übertrage die hier gezeigten Ideen in dein H<strong>aus</strong>aufgaben-<strong>Projekt</strong>.<br />
(vgl. <strong>Projekt</strong> Bewegung)<br />
Gymnasium Königsbrunn<br />
<strong>Ralph</strong> <strong>Henne</strong>