Java/Online-Bank: Unterschied zwischen den Versionen
Markierung: 2017-Quelltext-Bearbeitung |
Markierung: 2017-Quelltext-Bearbeitung |
||
Zeile 76: | Zeile 76: | ||
Nach diesen Einführenden Überlegungen geht es nun daran, den Quelltext zu erarbeiten. Bei jedem Quelltext muss man sich an die Syntax der Programmiersprache richten. In Java beginnen wir damit, eine Klasse zu definieren. Dazu verwenden wir naheliegenderweise das Wort '''class'''. | Nach diesen Einführenden Überlegungen geht es nun daran, den Quelltext zu erarbeiten. Bei jedem Quelltext muss man sich an die Syntax der Programmiersprache richten. In Java beginnen wir damit, eine Klasse zu definieren. Dazu verwenden wir naheliegenderweise das Wort '''class'''. | ||
==== Was bedeuten public und private? | ==== Was bedeuten public und private? ==== | ||
[[Datei:LG 드럼세탁기와 식기세척기, 영국서 물사용 효율 최우수 제품 수상.jpg|right|200px|Eine moderne Waschmaschine]] | [[Datei:LG 드럼세탁기와 식기세척기, 영국서 물사용 효율 최우수 제품 수상.jpg|right|200px|Eine moderne Waschmaschine]] | ||
Zeile 82: | Zeile 82: | ||
* Die Bedienknöpfe sind <code>public</code>, also öffentlich und von jedem bedienbar. | * Die Bedienknöpfe sind <code>public</code>, also öffentlich und von jedem bedienbar. | ||
* Das Innenleben ist <code>private</code>. Hier soll keine Hausfrau und erst Recht kein Hausmann Zugriff haben, da sie bzw. er etwas kaputtmachen könnte. Als erste Faustregel genügt es, sich zumerken, dass Attribute private (Innenleben der Klasse) und Klassen public sind (Jeder soll Klassen ausführen dürfen). Im Klassendiagramm zu Vogel haben wir bereits Zugriffsmodifizierer gesehen (siehe Konvention:Eigenschaften immer private, Klassen immer public) | * Das Innenleben ist <code>private</code>. Hier soll keine Hausfrau und erst Recht kein Hausmann Zugriff haben, da sie bzw. er etwas kaputtmachen könnte. Als erste Faustregel genügt es, sich zumerken, dass Attribute private (Innenleben der Klasse) und Klassen public sind (Jeder soll Klassen ausführen dürfen). Im Klassendiagramm zu Vogel haben wir bereits Zugriffsmodifizierer gesehen (siehe Konvention:Eigenschaften immer private, Klassen immer public) | ||
{{clear}} | |||
==== Schritte zur Eingabe des Quelltexts ==== | |||
Nun kommt [[BlueJ]] ins Spiel. Mit "Projekt|neu" wird ein neues Projekt angelegt, das wir "Online-Bank" nennen wollen. Mit "Neue Klasse" legen wir eine Klasse mit dem Namen "Konto" an. Wenn alles richtig geklappt hat, sollte es etwa so aussehen: | |||
[[Bild:Onlinebank1.png|right]] | |||
Mit einem Doppelklick auf das beige Rechteck kommt zum Editor, in dem man den Quelltext eintippen kann und anschließend mit dem Button "Übersetzen" abspeichert und ''"compiliert"''. | |||
[[Bild:Onlinebank2.png|right]] | |||
<source lang="java"> | |||
public class Konto { | public class Konto { | ||
private String besitzerName; | private String besitzerName; | ||
private double kontostand; | private double kontostand; | ||
} | } | ||
</source> | |||
Unten sollte nun zu sehen sein "Klasse übersetzt - keine Syntaxfehler". Wenn das nicht der Fall ist, beginnt die Suche nach Tippfehlern. | Unten sollte nun zu sehen sein "Klasse übersetzt - keine Syntaxfehler". Wenn das nicht der Fall ist, beginnt die Suche nach Tippfehlern. | ||
Nun sollten in dem Hauptfenster von BlueJ die Streifen von der Klassendarstellung verschwunden sein. Mit | Nun sollten in dem Hauptfenster von BlueJ die Streifen von der Klassendarstellung verschwunden sein. Mit Hilfe der rechten Maustaste kann ich eine "''Instanz des Objektes Konto''" anlegen, indem ich <code>new Konto()</code> wähle. | ||
[[Bild:Onlinebank3.png]] | [[Bild:Onlinebank3.png]] | ||
Ich wähle den vorgegebenen Instanznamen Konto1 und schon habe ich mein Objekt, welches BlueJ unten links als rotes Rechteck visualisiert. | Ich wähle den vorgegebenen Instanznamen <code>Konto1</code> und schon habe ich mein Objekt, welches BlueJ unten links als rotes Rechteck visualisiert. | ||
[[Bild:Onlinebank4.png]] | [[Bild:Onlinebank4.png]] | ||
==== 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 '''null''', ein Wort, das Java verwendet, wenn String-Variablen noch keinen Wert haben. Der Kontostand ist 0, was der Anfangswert für alle numerischen Variablen ist. | 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 '''null''', ein Wort, das Java verwendet, wenn String-Variablen noch keinen Wert haben. Der Kontostand ist 0, was der Anfangswert für alle numerischen Variablen ist. | ||
[[Bild:Onlinebank5.png]] | [[Bild:Onlinebank5.png]] | ||
Zusammenfassung | |||
* Eine Klasse (be-)schreibt man in BlueJ mit Hilfe eines Quelltextes. Der grundsätzlicheminimale Aufbau ist: | |||
<source lang=java">public class Klassenname { | |||
// Eigenschaften | |||
private Datentyp eigenschaft1; | |||
private Datentyp eigenschaft2; | |||
}</source> | |||
* Die Zugriffsmodifizierer public und private regeln die Zugriffsrechte. Als vorläufige Regel ist die Klasse immer public und die Eigenschaften sind immer private. | |||
* 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“ // am Anfang der Zeile macht aus der Zeile einen Kommentar, den der Computer ignoriert. Ein Kommentar erläutert den Quelltext. | |||
Nun möchten wir natürlich andere Werte setzen, einzahlen, auszahlen usw.. Das wird das Konto auch noch können, allerdings bedarf es dazu eines weiteren Ausbaus. | Nun möchten wir natürlich andere Werte setzen, einzahlen, auszahlen usw.. Das wird das Konto auch noch können, allerdings bedarf es dazu eines weiteren Ausbaus. | ||
Zeile 116: | Zeile 130: | ||
{{Übung| | {{Übung| | ||
# Erweitern Sie die Klasse Konto um die Attribute <code>kreditlimit</code> und <code>telefonnummer</code>. Welche Datentypen würden Sie verwenden? | |||
# Entwerfen Sie das Klassendiagramm zur Klasse Konto. Entwerfen Sie den Quelltext zur Klasse Vogel. | |||
# Profis: Recherchieren Sie zum Thema "Genauigkeit von Fließkommazahlen", nach den Grenzen der Genauigkeit des Typs double. Welche weiteren numerischen Datentypen bietet Java? | |||
}} | }} | ||
Version vom 18. August 2019, 03:19 Uhr
Auf dieser Seite sollen Sie anhand der Simulation eines Online-Kontos selbst Klassen definieren und die grundlegenden Elemente einer (objektorientierten) Programmiersprache
- Klasse
- Attribut
- Datentypen für Zahlen:
double
, für Zeichenketten:String
- Quelltext
- Instanz eines Objektes
- den Objektinspektor von BlueJ
und deren Umsetzung in Java mit Hilfe von BlueJ kennen lernen.
Einfache Theorie der Objektorientierten Programmierung
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 hat bestimmte Eigenschaften (oder Attribute). Er hat zum Beispiel eine bestimmte Farbe, ein Geschlecht und man kann seine Flügelspannweite messen.
Ein Vogel kann bestimmte Dinge tun. Er kann etwa singen oder ein Ei legen. Das sind die sogenannten Methoden (Operationen) des Vogels (singe(...), legeEi(...)
).
Methoden teilt man in zwei Gruppen ein:
- Es gibt zum einen beobachtende oder auch sondierende Methoden. Diese beantworten z.B. die Frage: Welche Farbe hast du? Im Programm werden sie
gibFarbe()
odergetFarbe()
genannt. - Zum anderen gibt es Methoden, die Eigenschaften ändern können (verändernde Methode). Ein Beispiel wäre
setFarbe(“gruen“)
.
Aus der Klasse Vogel lassen sich konkrete Objekte bilden: z.B. vogel1, vogel2, vogel3. Jedes Objekt hat einen bestimmten Zustand. Sokann z.B. vogel1 die Farbe gelb haben, weiblich sein und 40cm Spannweite haben. Der Zustand von vogel2 könnte sein: gelb, 30 cm Spannweite, männlich. Während die Klasse Vogel etwas abstraktes ist (eine Art Bauplan für Objekte), ist ein Objekt konkret. Was das genau bedeutet, erfahren Sie, wenn Sie die folgenden Beispiele nachvollziehen.
Objekte sind in der objektorientierten Programmierung Daten (Eigenschaften oder auch Atrribute) und die damit verknüpfte Programmlogik (Methoden oder auch Operationen), 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, dasie einen unterschiedlichen Namen tragen müssen, obwohl ihr Zustand identisch sein kann.
Der Zustand (oder auch Status) ist die Gesamtheit der Werte der Eigenschaften.Klassendiagramm und Objektdiagramm
Im Klassendiagramm (auch UML-Klassendiagramm genannt) hält man die Elemente einer Klasse anschaulich fest: Klassenname, Eigenschaften und Methoden.
- Im Klassendiagramm werden Klassenname, Eigenschaften und Methoden festgehalten.
- Alle Methoden, die wir schreiben, sind öffentlich, also
public
, alle Eigenschaften sindprivate
Im Klassendiagramm bekommen Eigenschaften daher ein vorgestelltes–
und Methoden ein+
- Skat
- Was sind Eigenschaften der Klasse Kartenspiel?
- Was sind die Methoden?
- Legen Sie ein Klassendiagramm an.
- Nennen Sie Eigenschaften und Methoden des Objektes Kaffeemaschine.
- Legen Sie einKlassendiagramm an.
Beispiel: Online-Bank
Wie sieht ein "Bauplan" zu einem Konto aus (z.B. Girokonto an einer Online-Bank)? Dazu beantworte ich die Frage, was ein Konto auszeichnet.
Die Klasse Konto
Eine Online-Bank benötigt zumindest den Namen des Besitzers und den aktuell vorhandenen Geldbetrag, um ein Konto anzulegen.
besitzerName
und kontostand sind Attribute (auch Eigenschaften genannt) der Klasse Konto.
Ein Attribut ist ein strukturelles Merkmal einer Klasse.
- Es hat einen Namen und einen Typ.
- Konvention: Attributsnamen werden klein geschrieben.
Die Namen von zwei Attributen des Kontos haben wir bereits festgelegt: besitzerName und kontostand. Nun wird auch ein Typ (Datentyp) für jedes Attribut gefordert.
Java kennt verschiedene Datentypen. Zwei für unseren Zweck geeignete sind String
und double
.
Zeichenketten, also Aneinanderreihungen von Zeichen, werden in Java mit dem Datentypen String deklariert. Der Datentyp String eignet sich als Datentyp für besitzerName
, da dieser aus beliebigen Zeichen der Tastatur besteht und nicht etwa eine Zahl ist.
Als Typ des Kontostands kontostand bevorzugen wir einen numerischen Datentypen. double
kann Zahlen im Bereich von +/-1,7E+308 (also 17 mit 307 Nullen) abspeichern, was für unseren Zweck genügen sollte.
- Nennen Sie mögliche Attribute einer Klasse Auto, Uhr und Kaffeemaschine. Wählen Sie entsprechend Datentypen für die Attribute.
- Nennen Sie Fälle, bei denen der Zahlenbereich für double nicht ausreichend sein könnte.
Der erste Quelltext der Klasse Konto
Nach diesen Einführenden Überlegungen geht es nun daran, den Quelltext zu erarbeiten. Bei jedem Quelltext muss man sich an die Syntax der Programmiersprache richten. In Java beginnen wir damit, eine Klasse zu definieren. Dazu verwenden wir naheliegenderweise das Wort class.
Was bedeuten public und private?
public und private' regeln die Zugriffsrechte (Fachbegriff: Zugriffsmodifizierer). Vergleichbar ist das mit dem Zugriff auf eine Waschmaschine:
- Die Bedienknöpfe sind
public
, also öffentlich und von jedem bedienbar. - Das Innenleben ist
private
. Hier soll keine Hausfrau und erst Recht kein Hausmann Zugriff haben, da sie bzw. er etwas kaputtmachen könnte. Als erste Faustregel genügt es, sich zumerken, dass Attribute private (Innenleben der Klasse) und Klassen public sind (Jeder soll Klassen ausführen dürfen). Im Klassendiagramm zu Vogel haben wir bereits Zugriffsmodifizierer gesehen (siehe Konvention:Eigenschaften immer private, Klassen immer public)
Schritte zur Eingabe des Quelltexts
Nun kommt BlueJ ins Spiel. Mit "Projekt|neu" wird ein neues Projekt angelegt, das wir "Online-Bank" nennen wollen. 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 und anschließend mit dem Button "Übersetzen" abspeichert und "compiliert".
public class Konto {
private String besitzerName;
private double kontostand;
}
Unten sollte nun zu sehen sein "Klasse übersetzt - keine Syntaxfehler". Wenn das nicht der Fall ist, beginnt die Suche nach Tippfehlern.
Nun sollten in dem Hauptfenster von BlueJ die Streifen von der Klassendarstellung verschwunden sein. Mit Hilfe der rechten Maustaste kann ich eine "Instanz des Objektes Konto" anlegen, indem ich new Konto()
wähle.
Ich wähle den vorgegebenen Instanznamen Konto1
und schon habe ich mein Objekt, welches BlueJ unten links als rotes Rechteck visualisiert.
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 null, ein Wort, das Java verwendet, wenn String-Variablen noch keinen Wert haben. Der Kontostand ist 0, was der Anfangswert für alle numerischen Variablen ist.
Zusammenfassung
- Eine Klasse (be-)schreibt man in BlueJ mit Hilfe eines Quelltextes. Der grundsätzlicheminimale Aufbau ist:
public class Klassenname {
// Eigenschaften
private Datentyp eigenschaft1;
private Datentyp eigenschaft2;
}
- Die Zugriffsmodifizierer public und private regeln die Zugriffsrechte. Als vorläufige Regel ist die Klasse immer public und die Eigenschaften sind immer private.
- 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
null
und von Zahlentypen0>/code>.
- Ein „Doppelslash“ // am Anfang der Zeile macht aus der Zeile einen Kommentar, den der Computer ignoriert. Ein Kommentar erläutert den Quelltext.
Nun möchten wir natürlich andere Werte setzen, einzahlen, auszahlen usw.. Das wird das Konto auch noch können, allerdings bedarf es dazu eines weiteren Ausbaus.
Zunächst daher noch eine
Übung
- Erweitern Sie die Klasse Konto um die Attribute
kreditlimit
und telefonnummer
. Welche Datentypen würden Sie verwenden?
- Entwerfen Sie das Klassendiagramm zur Klasse Konto. Entwerfen Sie den Quelltext zur Klasse Vogel.
- Profis: Recherchieren Sie zum Thema "Genauigkeit von Fließkommazahlen", nach den Grenzen der Genauigkeit des Typs double. Welche weiteren numerischen Datentypen bietet Java?
Weblinks