Java/Online-Bank und Kreuzzüge/Gott will es: Unterschied zwischen den Seiten

Aus ZUM-Unterrichten
< Java(Unterschied zwischen Seiten)
K (→‎Zuweisen von Werten bei Variablen: Box weg, dafür Absatz)
Markierung: 2017-Quelltext-Bearbeitung
 
(Zwischenstand)
Markierung: 2017-Quelltext-Bearbeitung
 
Zeile 1: Zeile 1:
{{Fortsetzung|
<!--- in Lernpfad "Abendland und Orient" eingebunden --->
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|
<onlyinclude>
weiter=Algorithmik<br>(Logische Operatoren)|weiterlink=Java/Algorithmik|
[[Bild:Dritter_Kreuzzug.jpg|300px|right]]
übersicht=Einstieg in Java<br>(Übersicht)|übersichtlink=Java#Übersicht|}}
{{Aufgabe|Bearbeite im Folgenden die einzelnen Aufgaben. Nimm hierzu auch dein Schulbuch zur Hand und lies zunächst das entsprechende Kapitel. Beantworte anschließend die einzelnen Aufgaben.}}


==Einfache Theorie der Objektorientierten Programmierung==
{{box|Q 1 Aufruf des Papstes Urban II. in Clermont zum Kreuzzug, 1095|
''Bericht des Mönches Robert von Reims, der nach eigenen Aussagen Augenzeuge des Konzils von Clermont war. Er nahm nicht am Kreuzzug teil, unterrichtete sich aber bei den Kreuzfahrern. Seine Geschichte des Kreuzzuges schrieb er Anfang des 12. Jh.''


[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]] Zunächst klären wir am Beispiel Vogel, was eine '''Klasse''' ist: Ähnlich wie in der Biologie gruppiert man  in  der  OOP  (Objektorientierten  Programmierung)  Objekte  und  fasst  sie  in  Klassen  zusammen.  Dabei  stellt sich die Frage,  was einen Vogel auszeichnet:


*Ein  Vogel  kann  bestimmte  Dinge  tun. Er  kann etwa  singen  oder ein Ei legen.  Das  sind die sogenannten  '''Methoden (Operationen)'''  des Vogels (<code>singe(...), legeEi(...)</code> ). Methoden teilt man in zwei Gruppen ein:
,,Von Jerusalem und Konstantinopel kommt schlimme Nachricht zu uns. Die Seldschuken, ein fremdländisches und gottloses Volk, ist in das Land der Christen eingedrungen und hat es mit dem Schwert, durch Plünderungen und Brandstiftungen verwüstet. Besonders das Schicksal des heiligen Grabes muß euch zu Herzen gehen. Es ist in der Gewalt jenes sündhaften Volkes ebenso wie die heiligen Stätten, die von jenen Unreinen geschändet und besudelt werden.
**'''beobachtende''' oder '''sondierende''' Methoden z.B. <code>gibFarbe()</code> und
**'''verändernde''' oder '''manipulierende''' Methoden wie z.B. <code>setFarbe(“gruen“)</code>.
*Ein  Vogel  hat  auch bestimmte  '''Eigenschaften''' ('''Attribute'''). Er hat zum Beispiel eine bestimmte Farbe, ein Geschlecht, eine Flügelspannweite. Die Gesamtheit der Werte dieser Eigenschaften nennt man '''Zustand'''. Hierin unterscheiden sich verschiedene Objekte derselben Klasse.
*Aus der Klasse Vogel lassen sich dann konkrete Objekte bilden z.B.  <code>vogel1</code>, <code>vogel2</code>, <code>vogel3</code>.
*Während die '''Klasse''' Vogel etwas '''abstraktes''' ist (eine Art Bauplan für Objekte), ist ein '''Objekt''' '''konkret'''.<br />


{{Box|Zusammenfassung|
Unerschrockene Ritter, Nachkommen unbesiegter Vorfahren, gedenkt der Tapferkeit eurer Väter. Besitz hält euch nicht, denn das Land, das ihr bewohnt, ist überall von Meer und Bergen umgeben und zu eng für eure große Zahl. Es hat keinen Überfluß an Reichtümern und nährt kaum jene, die es bearbeiten. Aus diesem Grunde streitet ihr euch, führt Kriege gegeneinander und bringt euch gegenseitig um. Hört auf, euch zu hassen und zu bekriegen. Geht hin zum heiligen Grabe, nehmt das Land den verruchten Heiden ab und macht es zu eurem eigenen, jenes Land, von dem die Schrift sagt, daß Milch und Honig dort fließt. Beschreitet den Weg, der zur Vergebung eurer Sünden führt, des unvergänglichen himmlischen Ruhmes seid ihr gewiß. Wir warnen aber davor, daß Greise, Schwache und des Waffengebrauchs Unkundige die Reise antreten."<br>
* '''Objekte''' sind in der objektorientierten Programmierung
(Recueil des Historiens des Croisades. Historiens occidentaux, Bd. 3.)|Zitat}}
** '''Daten''' (Eigenschaften oder auch Attribute) und  
** die damit verknüpfte '''Programmlogik''' (Methoden oder auch Operationen),<br>die zu Einheiten, nämlich eben den Objekten, zusammengefasst sind.
* Gleichartige Objekte werden zu '''Klassen''' zusammengefasst.
* '''Klassen dienen als Vorlage''' (wie ein Bauplan) zur Herstellung von Objekten.
* Von einer Klasse können beliebig viele Objekte hergestellt werden.
* Die '''Objekte sind einzigartig''', da sie einen unterschiedlichen Namen tragen müssen, obwohl ihr Zustand identisch sein kann.
* Der Zustand (oder auch Status) ist die Gesamtheit der Werte der Eigenschaften.|Hervorhebung}}


==Beispiel: Online-Bank==
===Die Klasse Konto===


Um ein Konto zu eröffnen, benötigt eine Bank zumindest
{{Aufgabe|
# Mit welchen Argumenten versucht der Papst die Menschen zum Kreuzzug zu bewegen? Notiere dir deine Antwort in dein Heft.
# Welche Ereignisse führten zum 1. Kreuzzug? Informiere dich hierzu zunächst auf dem Arbeitsblatt und in deinem Buch zu den Hintergründen des ersten Kreuzzuges. Überprüfe dabei auch, inwiefern die Angaben Papst Urban II. mit deinen Rechercheergebnissen übereinstimmen.
}}


*den Namen des Besitzers <code>besitzerName</code> und
{{Box|Q2: Ein Priester beschreibt die Motive der Kreuzzügler|
*den aktuellen Geldbetrag <code>kontostand</code>.
Es eilten so ohne Unterschied Menschen beiderlei Geschlechts herbei, Männer mit Frauen, Arme mit Reichen, Fürsten und hohe Adelige, Mönche mit Bischöfen und Äbten.


Beides sind '''Attribute''' (bzw. Eigenschaften) der '''Klasse Konto'''.
Jeder hatte dabei eigene Absichten: Die einen, begierig auf Neues, wollten die neuen Länder besichtigen.


*Jedes Attribut verlangt die Angabe eines geeigneten '''Datentyps'''.
Die anderen bedrängte die Not oder es wurde ihnen zu Hause eng. Sie kämpften nicht nur gegen die Feinde des Kreuzes Christi, sondern auch gegen Freunde des Christentums, wo es ihnen nützlich schien um der Armut zu entkommen. Andere wurden durch Schulden erdrückt oder wollten dem schuldigen Dienst gegenüber einem Herren entfliehen. Aber auch solche, die wegen Verbrechen auf ihre verdiente Strafe warteten, gaben vor, Gott nachzueifern und wollten doch nur ihren Schwierigkeiten entkommen. Nur wenige fanden sich, die heilige und heilsame Absichten hatten.|Zitat}}
*Java kennt u.a. folgende '''Datentypen''':


{| class="wikitable" style="text-align:left"
== Interaktive Aufgaben ==
!Typname
<div class="kreuzwort-quiz">
!Größe
{| 
!Wertebereich
|-  
!Beschreibung
| Urban|| Welcher Papst rief 1095 zum ersten Kreuzzug auf?
|-----
|boolean||1 bit||true / false||Boolescher Wahrheitswert
|-
|-
|int||32 bit||-2.147.483.648 ... 2.147.483.647||Zweierkomplement-Wert
| Pilger|| Wie werden Christen genannt, die eine Wallfahrt machen?
|-
|-
|float||32 bit||+/-1,4E-45 ... +/-3,4E+38||32-bit IEEE 754, einfache Genauigkeit
| Jerusalem|| Wohin pilgerten die Menschen im Heiligen Land?
|-
|-
|double||64 bit||+/-4,9E-324 ... +/-1,7E+308||64-bit IEEE 754, doppelte Genauigkeit
| Juden|| Wer hatte besonders unter den Kreuzfahrern zu leiden, insbesondere in Deutschland?
|-
|-
|char||16 bit||0 ... 65.535 (z.B. 'A')||Unicode-Zeichen (UTF-16)
| Seldschuken|| Welches türkische Reitervolk eroberte im 11. Jahrhundert Palästina?
|-
|String|| || ||Zeichenkette (kein einfacher Datentyp,<br>sondern ein Objekt der Klasse String)
|}
|}
====Eingabe des Quelltexts====
</div>
[[Datei:BlueJ Online-Bank 1.png|alternativtext=Online-Bank: Klasse Konto|mini|Online-Bank: Klasse Konto]]
 
*Mit "Projekt|neu" wird ein neues Projekt angelegt, das wir "Online-Bank" nennen.
*Mit "Neue Klasse" legen wir eine Klasse mit dem Namen "Konto" an.
*Wenn alles richtig geklappt hat, sollte es etwa so aussehen:
 
Mit einem Doppelklick auf das beige Rechteck kommt zum Editor, in dem man den Quelltext eintippen kann:[[Datei:BlueJ Online-Bank- Neue Instanz konto1-Konto.png|alternativtext=Neue Instanz konto1:Konto|mini|Neue Instanz konto1:Konto]]
<source lang="java">
public class Konto {
  // Instanzvariablen
  private String besitzerName;
  private double kontostand;
}
</source>
und mit dem Button "Übersetzen" abspeichert und ''"compiliert"''.
 
*Die '''Definition''' der Klasse beginnt mit dem Schlüsselwort <code>public</code>
*Die '''Zugriffsmodifizierer''' <code>public</code> und <code>private</code> regeln die Zugriffsrechte.<br> Dies ist vergleichbar mit dem Zugriff auf ein technisches Gerät wie z.B. Handy, TV, Auto, Waschmaschine etc.:
**Die Bedienknöpfe sind <code>public</code>, also öffentlich und von jedem bedienbar.
**Das Innenleben des Gerätes ist <code>private</code> und ein Laie sollte hier keinen Zugriff haben.
 
[[Datei:BlueJ Online-Bank 3.png|alternativtext=Online-Bank: Objektinspektor|mini|500x500px]]
Als erste Faustregel genügt es, sich zu merken, dass
 
*'''Attribute''' <code>private</code> (Innenleben der Klasse) und
*'''Klassen''' <code>public</code>sind.
 
Instanzieren Sie nun ein Objekt <code>Konto1</code> der Klasse <code>Konto</code> mit der Methode <code>new Konto()</code> wähle.
 
====Objektinspektor====
Ein Rechtsklick auf das rote Rechteck und dann auf Inspizieren öffnet den '''Objektinspektor'''. Dieser gibt einen Überblick über den '''Zustand''' des Objektes:
 
*Unser Besitzer heißt <code>null</code>,<br> dem Anfangswert für String-Variablen.
*Der Kontostand ist <code>0</code>,<br> dem Anfangswert für numerische Variablen.
 
{{Box|Zusammenfassung|
*Eine  Klasse definiert man im Quelltextes. Der minimale Aufbau ist:
<source lang="java&quot;">
  public class Klassenname {
    // Instanzvariablen
    private Datentyp eigenschaft1;
    private Datentyp eigenschaft2;
  }
</source>
* Die Zugriffsmodifizierer <code>public</code> und <code>private</code> regeln die Zugriffsrechte.
* Als vorläufige Regel ist die Klasse immer <code>public</code> und die Eigenschaften immer <code>private</code>.
* Aus Klassen lassen sich Objekte erzeugen, die einen eindeutigen Namen tragen müssen.
* Die Objekte haben einen Zustand, den man mit Hilfe des Objektinspektors ansehen kann.
** Anfangszustand von Strings ist das englische Wort <code>null</code> und von Zahlentypen <code>0</code>.
* Ein „Doppelslash“ <code>//</code> am Anfang der Zeile macht aus der Zeile einen Kommentar, den der Computer ignoriert.|Hervorhebung2}}
{{Übung|
# Erweitern Sie die Klasse Konto um die Attribute <code>kreditLimit</code> und <code>telefonNummer</code>.<br> Welche Datentypen würden Sie verwenden?
# Recherchieren Sie, welche weiteren numerischen Datentypen Java bietet?
}}
 
===Der Konstruktor===
 
Der  '''Konstruktor'''  ist eine  spezielle  Methode, die  bei der  Erzeugung von Variablen aufgerufen wird und diese in einen definierten Anfangszustand versetzt. Dieser Vorgang nennt sich auch '''Initialisierung'''.
<source lang="java">
  public class Konto {
    // Instanzvariablen
    private String besitzerName;
    private double kontostand;
    // Konstruktor
    public Konto (String pBesitzerName){
      besitzerName = pBesitzerName; 
      kontostand = 1.0;
    }
  }
</source>
 
{| class="wikitable"
|-
!Begriff!!Erläuterung
|-
|'''Konstruktor'''||Ein Konstruktor ist eine spezielle Methode und legt die Anfangswerte fest. Er erhält den gleichen Namen wie die Klasse selbst z.B. public Konto. Alle Werte, die nicht im Konstruktor festgelegt werden, bekommen einen „default-Wert“. Bei Zahlentypen ist das 0,  bei Strings „null“
|-
|(Übergabe-) '''Parameter'''||Sind die Werte, die der Methode beim Aufruf übergeben werden. Für jeden Parameter muss ein Datentyp festgelegt werden. Der Name des Parameters kann zur besseren Übersicht mit p beginnen.
|-
|geschweifte Klammern||Sie strukturieren das Programm: Die gesamte Klasse und jede Methoden wie z.B. der Konstruktor stehen in geschweiften Klammern. Das Weglassen von Klammern ist eine typische Fehlerquelle.
|-
|'''amerikanische Notation'''||Verwenden Sie im Quelltext
 
*bei Zahlendarstellungen stets '''Punkt statt Komma''': 3.141
*'''keine deutschen Umlaute oder Sonderzeichen'''!!
|-
|Semikolon||Nach (nahezu) jedem Befehl (Anweisung) möchte Java ein Semikolon ;
|}
 
{{Übung|
# Erweitern Sie die Instanzvariablen mit dem String <code>strassenName</code>.<br> Im Konstruktor trennen Sie mehrere Übergabeparameter durch Kommata: <code>public Konto (String pBesitzerName, String pStrassenName)</code>
# Testen Sie Fehleingaben bei BlueJ: Lassen Sie beim Besitzernamen die Anführungsstriche weg, geben Sie eine Zahl, geben Sie nichts ein &hellip;
# Lassen Sie statt des Namens den Kontostand als Parameter übergeben.
# Ergänzen Sie die Eigenschaften <code>vorname</code>, <code>telefonnummer</code>, <code>postleitzahl</code>, <code>geburtsjahr</code>, <code>geschlecht</code> und <code>hausnummer</code>. Begründen Sie dabei, welche Datentypen Sie verwenden.}}
 
===Methoden ===
Die Methode <code>einzahlen(double pBetrag)</code> sorgt dafür, dass zu dem bisherigen Kontostand ein bestimmter Betrag hinzugefügt wird:
<source lang="java">
public void einzahlen(double pBetrag){
  kontostand += pBetrag; 
  // oder kontostand = kontostand + pBetrag;
}</source>
 
====Zuweisen von Werten bei Variablen====
 
Das "''Gleichheits''"-zeichen wird in Java nicht als Vergleichs-, sondern als '''Zuweisungsoperator''' verwendet:
* Auf der linken Seite des Zuweisungsoperators steht die Variable, die einen neuen Wert bekommen soll,
* auf der rechten Seite eine Rechnung, die den neuen Wert ergibt.<br> Die Variable links darf dabei als (alter) Variablenwert in der Rechnung rechts vorkommen:
** <code>x = y + 7</code> bedeutet, dass x den Wert der Rechnung y + 7 bekommt.
** <code>x = x + 7</code> bedeutet, dass x um 7 erhöht wird
** <code>x += 7</code> Kurzschreibweise: x wird um 7 erhöht (analog <code>-=</code>).
** <code>x *= 7</code> Kurzschreibweise: x wird mit 7 multipliziert (analog <code>/=</code>).
** <code>x++</code> x wird um 1 erhöht
** <code>x--</code> x wird um 1 erniedrigt
 
 
{{Übung|# Bauen Sie die Methode <code>einzahlen</code> in Ihre Kontoklasse ein.
# Testen Sie das Einzahlen von negativen Beträgen, großen Beträgen, 0, Wörtern, Rechnungen...
# Entwerfen Sie auf Grundlage von <code>einzahlen</code> die Methode <code>auszahlen()</code>.
# Entwerfen Sie <code>raubeAus()</code>, die den Kontostand auf 0 setzt.}}
 
====Die set-Methoden als Beispiel für verändernde Methode ohne Rückgabewert====
Diese einfache Methode verändert den Namen des Kontobesitzers. Eine Methode ohne Rückgabewert wird mit <code>public void</code> (void entspricht im englischen etwa: nichts) eingeleitet.
 
<source lang="java">
public void setBesitzerName(String pNeuerName){
  besitzerName = pNeuerName;
}</source>
 
====Die get-Methoden als Beispiel für sondierende Methoden====
Eine ebenso einfache Methode liest den Namen des Kontobesitzers wieder aus:
 
<source lang="java">
public String getBesitzerName(){
  return besitzerName;
}</source>
 
{{Merke|Wann schreibe ich void?
* <code>void</code> kommt bei einer Methodendeklaration immer dann vor, wenn es keine Rückgabe gibt.
* <code>return</code> Gibt es eine Rückgabe (return variable), so muss der Datentyp des Rückgabewertes eingetragen werden.}}
 
{{Übung|# Schreiben Sie die get- und set-Methode zu der Eigenschaft kontostand.
# Schreiben Sie die Methode <code>bucheZinsen (double pzinssatz)</code>, die auf den vorliegenden Kontostand <code>zinssatz</code>, Prozent, Zinsen addiert.
# Zeichnen Sie das Klassendiagramm zu der aktuellen Klasse Konto.}}
 
==Einige Beispiele==
Wenn Sie bedenken, wie dick üblicherweise Java-Bücher sind, dann können Sie von den Beispielen zur Zeit noch nicht viel erwarten. Einige einfache Beispiele zeige ich Ihnen hier dennoch, damit Sie einen Überblick bekommen, wie eine Klasse in Java aufgebaut ist.
 
===Der Zähler===
Der Zähler ist eine einfache Klasse, bei dem Sie bei Aufruf der Methode <code>erhoeheZaehlerstand()</code> den Zähler um 1 erhöhen.
 
Anwendungen: Verkehrszählungen, Heizungsverbrauchzähler, Bildzähler bei einer  Kamera,  Rundenzähler  bei  der  Carrera-Bahn... 
 
Bei  den  realen  Anwendungen  kommt  der Impuls von einem Sensor bzw. einen Druckknopf. Bei der Simulation müssen Sie statt dessen eine Methode ausführen.
 
<source lang="java">
public class Zaehler
{
// Instanzvariablen der Eigenschaften
int zaehlerstand;
// Konstruktor
public Zaehler()
// Der Anfangszählerstand soll immer 0 sein.
zaehlerstand=0;
}
// Methoden
public void erhoeheZaehlerstand()
{
zaehlerstand += 1;
// oder zaehlerstand++;
// oder zaehlerstand=zaehlerstand+1;
}
}</source>
===Das Telefonbuch===
[[Datei:Klassendiagramm-Telefonbuch.png|300px|right]]
Der [[Java/Installation#Entwicklungsumgebungen_für_Java|Java-Editor]] half bei der Erstellung dieser Klasse. Unter UML|neue  Klasse  erhalten  Sie  ein  praktisches  Auswahl-Menü, das Ihnen viel Tipparbeit ersparen kann. Der  Java-Editor zeigt übrigens  im Klassendiagramm auch den Konstruktor an. Das wird in der Literatur nicht einheitlich gemacht, oftmals wird er nicht angegeben.Die Telefonnummer wird, obwohl sie laut Name eine Nummer ist, als String eingelesen, um Eingaben wie „/“ zwischen Vorwahl und Nummer zuzulassen. Die Besonderheit an dieser Klasse ist, dass <code>name</code> nur durch den Konstruktor verändert werden kann. D.h. ich kann zwar mit  <code>setTelefonnummer</code> nachträglich  Telefonnummern  ändern, aber der Name bleibt erhalten. Allenfalls durch das Löschen des Objektes kann ich Personen aus dem Telefonbuch entfernen.
 
{{Achtung|Ohne dass wir in Dateien speichern können, werden bei einem Neustart von BlueJ alle Objekte wieder entfernt. Geben Sie also nicht die Telefonnummern ihrer gesamten Freunde ein, das Telefonbuch ist noch nicht fertig!}}
 
<source lang="java">
public class Telefonbuch {
 
  // Eigenschaften
  // Anfang Variablen
  public String name;
  public String telefonnummer;
  // Ende Variablen
 
  // Konstruktor
  public Telefonbuch(String name, String telefonnummer) {
  // ... Hier fehlen 2 Zeilen. Bitte nachtragen! (vgl. Übung)
  }
  // Anfang Ereignisprozeduren
 
  // Methoden
  public String getTelefonnummer() {
return telefonnummer;
  }
 
  public void setTelefonnummer(String pTelefonnummer) {
telefonnummer = pTelefonnummer;
  }
 
  public String getName() {
return name;
  }
 
  // Ende Ereignisprozeduren
}</source>
 
===Das Auto===
[[Datei:Klassendiagramm-Auto.png|right|300px]]
Die folgende Klasse ist schon sinnvoller. Sie ist in ähnlicher  Weise in vielen Bordcomputern von  modernen Autos eingebaut: Die elementare Frage beim Autofahren ist: wie weit komme ich noch, ohne zu tanken. Die Klasse simuliert ein Auto, erfasst aber nur Daten um den Tank und den Verbrauch. 
 
Besonderheit:  <code>tanke(..)</code>  und <code>fahre(...)</code>  sind Methoden, die den aktuellen Füllstand beeinflussen. Es sind auch in der Realität die einzigen Arten, wie man den Füllstand eines  Autos  ändert  (von  <code>klaueBenzin()</code>, <code>tropfeHeraus()</code> und <code>verdampfe()</code> abgesehen). Spannend ist die sondierende Methode <code>getAktuelleMaximaleReichweite</code>, die den Wert in km zurückgibt, der bei aktuellem Füllstand noch gefahren werden kann. Die Probleme der Klasse liegen noch darin, dass man (auch über das Tankvolumen hinaus) soviel tanken kann wie man will und dass der Tankinhalt auch in den negativen Bereich fahren kann (Dispokredit bei der Tankstelle). Das können wir erst lösen, wenn wir die bedingte Ausführung kennen gelernt haben. Der folgende Quelltext ist aus dem Java-Editor übernommen.
 
<source lang="java">
public class Auto {
 
  private double volumenTank;
  private double verbrauchAuf100km;
  private double aktuellerFuellstand;
 
  // Konstruktor
  public Auto(double pVolumenTank, double pVerbrauchAuf100km) {
volumenTank=pVolumenTank;
verbrauchAuf100km=pVerbrauchAuf100km;
aktuellerFuellstand=0; // Bei Auslieferung ist der Tank leer
  }
 
  public double getAktuellerFuellstand() {
return aktuellerFuellstand;
  }
 
  // Methoden
  public void setAktuellerFuellstand(double pAktuellerFuellstand) {
aktuellerFuellstand = pAktuellerFuellstand;
  }
 
  public double getVerbrauchAuf100km() {
return verbrauchAuf100km;
  }
 
  public double getVolumenTank() {
return volumenTank;
  }
 
  public void tanke(double menge) {
this.aktuellerFuellstand+=menge; // füge Menge hinzu
  }
 
  public void fahre(double pKilometerZahl) {
// Die Formel sagt folgendes aus:
// vom aktuellen Füllstand wird abgezogen: der Verbruch bei der Kilometerzahl 
aktuellerFuellstand -= pKilometerZahl / 100 * verbrauchAuf100km;
  } 
 
}</source>
 
 
{{Übung|# Analysieren und testen Sie alle 3 Programme. Warum bekommt nicht jede Eigenschaft eine get- und eine set-Methode?
# Zu Zähler:
## Ergänzen Sie die Methode: <code>getZaehlerstand()</code>
## Ergänzen Sie die Methode: <code>aufNullSetzen()</code> und <code>erhöheUm(double pZahl)</code>
# Zu Telefonbuch: Ergänzen Sie die fehlenden Zeilen zum Konstruktor.
## Ergänzen Sie die Eigenschaften <code>geburtsdatum</code> (ggf. noch <code<schuhgröße</code>). Welchen Datentypen verwenden Sie?
## Benötigt die Eigenschaft eine set-Methode?
# Zum Auto: Ergänzen Sie die Methode: <code>getMaximaleReichweiteBeiVollemTank()</code>
# Entwickeln Sie die Klasse Handy, die die Eigenschaften <code>telefonnummer</code>, <code>guthaben</code> und <ode>gespraechskostenProMinute</code>. Entwickeln Sie geeignete Methoden.
# Übung für Fortgeschrittene: Realisieren Sie die Klasse Bruch mit den Eigenschaften <code>zaehler</code> und <code>nenner</code> und realisieren Sie die Methoden <code>addierenEinerGanzenZahl</code>, <code>kuerzen</code> und <code>erweitern</code>. Wenn Sie schon Vorwissen haben, können Sie hier für eine erweiterte Variante schauen: [https://drdanielappel.de/informatik/mein-kleines-java-tutorium/2-einstieg-in-die-objektorietierte-programmierung/2-04-anwendungsbeispiel-bruchrechnung/ 2.04 Anwendungsbeispiel Bruchrechnung] (drdanielappel.de)}}
 
==Interaktion zwischen Objekten==
Zum Schluss des Kapitels behandeln wir, wie zwei Objekte miteinander kommunizieren können. Ein schönes Beispiel dafür ist die Methode <code>ueberweise()</code>:
 
<source lang="java">
public void ueberweise(double pBetrag, Konto pZielkonto){
  abheben(pBetrag); 
  zielkonto.einzahlen(pBetrag);
}</source>
 
Es gibt diesmal zwei Parameter, die wir, wie schon beim Konstruktor, mit Komma trennen. Die Besonderheit ist, dass der Datentyp von Zielkonto wieder ein Konto ist. Man darf also Klassen  als Datentypen  angeben –  ja,  man  darf sogar in  Methoden  den  Datentypen der Klasse verwenden, zu dem die Methode gehört. Das ist sinnvoll, denn üblicherweise möchte man von einem Konto auf ein anderes Konto überweisen. Also muss das Konto überweisen können (wenn man keine Klasse Bank erschafft, die die Konten verwaltet. Aber das ist ein Thema für später)
 
<source lang="java">
abheben(betrag);
zielkonto.einzahlen(pBetrag);
</source>
 
{{Box|Wichtig!| Eigenschaften, die <code>private</code> sind, sind nur für Objekte der gleichen Klasse sichtbar. D.h. theoretisch können wir von dem einen Konto auf die Eigenschaften des anderen Kontos zugreifen. Damit es nicht zu Verwechslungen kommt, sollten Sie sich das aber erst gar nicht angewöhnen.
 
'''Konvention:'''
 
Auf die Daten von fremden Objekten oder Klassen greifen wir immer über Methoden und nie über deren Eigenschaften zu. Dies gewährleistet, dass nichts Ungewolltes verändert wird (vgl. Waschmaschinenbeispiel). Nur innerhalb des Objektes selbst verändert man die eigenen Eigenschaften direkt.|Hervorhebung}}
 
{{Übung|# Schreiben Sie die Methode <code>holeEinzug (double betrag, Konto zielkonto)</code>, bei dem das Geld von einem fremden Konto überwiesen wird.
# Schreiben Sie die Methode <code>vererben (Konto erbe)</code>, bei dem das gesamte Geld eines Kontos auf ein anderes verbucht wird.
# Schreiben Sie die Methode <code>binIchReich(Konto vergleichskonto)</code>, das die Differenz aus dem eigenen Kontostand mit einem anderen Konto vergleicht.
# Schreiben Sie die Methode <code>stifteVerwirrung(Konto konto1, Konto konto2)</code>, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von <code>konto1</code> auf </code>konto2</code> überwiesen wird.
# Schreiben Sie die Methode <code>stifteNochMehrVerwirrung(Konto konto1, Konto konto2)</code>, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von <code>konto1</code> halbiert, das von <code>konto2</code> aber verdoppelt wird.
# Schreiben Sie die Methode <code>bekommeZinsen(double zinsatz)</code>, das entsprechend des Zinssatzes den Kontostand erhöht.
# Lassen Sie von einem Konto den Namen des Besitzers eines anderen Kontos ändern. Welche Probleme ergeben sich, wenn Sie die Methode <code>setBesitzerName</code> weglassen?
}}
 


{{Fortsetzung|
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|
weiter=Algorithmik<br>(Logische Operatoren)|weiterlink=Java/Algorithmik|
übersicht=Einstieg in Java<br>(Übersicht)|übersichtlink=Java#Übersicht|}}


==Weblinks==


*vgl. {{wpde|Objektorientierte Programmierung#Klassen|Klassen}}
{{Aufgabe|
*vgl. {{wpde|Attribut (UML2)|Attribut (UML2)}}
3. Welche Vor- und Nachteile brachten die Kreuzzüge dem Papst bzw. der Kirche, den Kreuzfahrern und der Bevölkerung im Heiligen Land? Überlegt gemeinsam und notiert euch eure Stichpunkte in euer Heft.}}
*http://www.informatik.ursulaschule.de/index.php?cid=368


[[Kategorie:Java]]
</onlyinclude>
[[Kategorie:Informatik]]
{{Kreuzzüge}}
[[Kategorie:Unterrichtsidee]]

Version vom 27. November 2019, 12:06 Uhr


Dritter Kreuzzug.jpg
Aufgabe
Bearbeite im Folgenden die einzelnen Aufgaben. Nimm hierzu auch dein Schulbuch zur Hand und lies zunächst das entsprechende Kapitel. Beantworte anschließend die einzelnen Aufgaben.


Q 1 Aufruf des Papstes Urban II. in Clermont zum Kreuzzug, 1095

Bericht des Mönches Robert von Reims, der nach eigenen Aussagen Augenzeuge des Konzils von Clermont war. Er nahm nicht am Kreuzzug teil, unterrichtete sich aber bei den Kreuzfahrern. Seine Geschichte des Kreuzzuges schrieb er Anfang des 12. Jh.


,,Von Jerusalem und Konstantinopel kommt schlimme Nachricht zu uns. Die Seldschuken, ein fremdländisches und gottloses Volk, ist in das Land der Christen eingedrungen und hat es mit dem Schwert, durch Plünderungen und Brandstiftungen verwüstet. Besonders das Schicksal des heiligen Grabes muß euch zu Herzen gehen. Es ist in der Gewalt jenes sündhaften Volkes ebenso wie die heiligen Stätten, die von jenen Unreinen geschändet und besudelt werden.

Unerschrockene Ritter, Nachkommen unbesiegter Vorfahren, gedenkt der Tapferkeit eurer Väter. Besitz hält euch nicht, denn das Land, das ihr bewohnt, ist überall von Meer und Bergen umgeben und zu eng für eure große Zahl. Es hat keinen Überfluß an Reichtümern und nährt kaum jene, die es bearbeiten. Aus diesem Grunde streitet ihr euch, führt Kriege gegeneinander und bringt euch gegenseitig um. Hört auf, euch zu hassen und zu bekriegen. Geht hin zum heiligen Grabe, nehmt das Land den verruchten Heiden ab und macht es zu eurem eigenen, jenes Land, von dem die Schrift sagt, daß Milch und Honig dort fließt. Beschreitet den Weg, der zur Vergebung eurer Sünden führt, des unvergänglichen himmlischen Ruhmes seid ihr gewiß. Wir warnen aber davor, daß Greise, Schwache und des Waffengebrauchs Unkundige die Reise antreten."

(Recueil des Historiens des Croisades. Historiens occidentaux, Bd. 3.)


Aufgabe
  1. Mit welchen Argumenten versucht der Papst die Menschen zum Kreuzzug zu bewegen? Notiere dir deine Antwort in dein Heft.
  2. Welche Ereignisse führten zum 1. Kreuzzug? Informiere dich hierzu zunächst auf dem Arbeitsblatt und in deinem Buch zu den Hintergründen des ersten Kreuzzuges. Überprüfe dabei auch, inwiefern die Angaben Papst Urban II. mit deinen Rechercheergebnissen übereinstimmen.


Q2: Ein Priester beschreibt die Motive der Kreuzzügler

Es eilten so ohne Unterschied Menschen beiderlei Geschlechts herbei, Männer mit Frauen, Arme mit Reichen, Fürsten und hohe Adelige, Mönche mit Bischöfen und Äbten.

Jeder hatte dabei eigene Absichten: Die einen, begierig auf Neues, wollten die neuen Länder besichtigen.

Die anderen bedrängte die Not oder es wurde ihnen zu Hause eng. Sie kämpften nicht nur gegen die Feinde des Kreuzes Christi, sondern auch gegen Freunde des Christentums, wo es ihnen nützlich schien um der Armut zu entkommen. Andere wurden durch Schulden erdrückt oder wollten dem schuldigen Dienst gegenüber einem Herren entfliehen. Aber auch solche, die wegen Verbrechen auf ihre verdiente Strafe warteten, gaben vor, Gott nachzueifern und wollten doch nur ihren Schwierigkeiten entkommen. Nur wenige fanden sich, die heilige und heilsame Absichten hatten.

Interaktive Aufgaben

Urban Welcher Papst rief 1095 zum ersten Kreuzzug auf?
Pilger Wie werden Christen genannt, die eine Wallfahrt machen?
Jerusalem Wohin pilgerten die Menschen im Heiligen Land?
Juden Wer hatte besonders unter den Kreuzfahrern zu leiden, insbesondere in Deutschland?
Seldschuken Welches türkische Reitervolk eroberte im 11. Jahrhundert Palästina?



Aufgabe
3. Welche Vor- und Nachteile brachten die Kreuzzüge dem Papst bzw. der Kirche, den Kreuzfahrern und der Bevölkerung im Heiligen Land? Überlegt gemeinsam und notiert euch eure Stichpunkte in euer Heft.