07.06.2014 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

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>

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!