Java/Uhr und Java/Online-Bank: Unterschied zwischen den Seiten

Aus ZUM-Unterrichten
< Java(Unterschied zwischen Seiten)
K (10 Versionen importiert)
 
(Zwischenstand)
Markierung: 2017-Quelltext-Bearbeitung
 
Zeile 1: Zeile 1:
{{gelb|
{{Fortsetzung|
;Hinweis:
vorher=Einstieg in die OOP|vorherlink=Java/Einsteig in die OOP|
Leider verschwinden nicht alle schwarzen Striche. Ich nehme an, das sind Rechenungenauigkeiten (Rundungsfehler) der Turtlemethode.
weiter=Beispiel Uhr|weiterlink=Java/Uhr|
; Benötigt:
übersicht=Einstieg in Java<br>(Übersicht)|übersichtlink=Java#Übersicht|}}
* if, for, Turtlegrafik, int, double
 
* BlueJ, daher keine main-Mathode
Auf dieser Seite sollen Sie anhand der Simulation eines Online-Kontos selbst Klassen definieren und die grundlegenden Elemente einer (objektorientierten) Programmiersprache
* [[Klasse (Informatik)]]
* [[Attribut (Informatik)]]
* Datentypen für Zahlen: double, für Zeichenketten: String
* [[Quelltext]]
* Instanz eines Objektes
* Der Objektinspektor von [[BlueJ]]
und deren Umsetzung in Java mit Hilfe von BlueJ kennen lernen.
 
==Die Klasse Konto==
Zur besseren Verwaltung gleichartiger Objekte bedient sich [[Java]] des Konzeptes der [[Klasse (Informatik)|Klasse]].  
 
{{Merke|
* '''Klassen sind Vorlagen, aus denen Objekte zur Laufzeit erzeugt werden.
* Konvention: Klassennamen werden groß geschrieben. '''}}
 
Man kann sich die Erzeugung von Objekten aus einer Klasse vorstellen wie das Fertigen von Autos aus dem Konstruktionsplan eines bestimmten Fahrzeugtyps. Klassen sind quasi die Konstruktionspläne für Objekte.
 
'''Konkretes Beispiel:'''
Wie sieht ein "Bauplan" zu einem Konto aus (z.B. Girokonto an einer Online-Bank)? Dazu beantworte ich die Frage, was ein Konto auszeichnet.
 
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) von der '''Klasse Konto'''.  
 
{{Definition|
Ein '''Attribut''' ist ein '''strukturelles Merkmal einer Klasse'''.
* Es hat einen '''Namen''' und einen '''Typ'''.
* Konvention: Attributsnamen werden klein geschrieben.
}}
}}
==Quelltext==
[[Bild:ScreenshotUhr.gif|thumb|Screenshot]]
<source lang="java">
public class Uhr
{
    private int minute;
    private int stunde;
    private Turtle t;
   
    public Uhr(int pStunde, int pMinute)
    {
        if (stunde==0) {
            stunde=12;
        }
        minute=pMinute;
        stunde=pStunde;
        t=new Turtle();
        t.drehe(-90);
        t.zeige();
    }
    public void laufe15Sekunden(){
        for (int k=1;k<=15;k++){
            zeichneUhr(100,8); // 8 entspr. weiß
            stelleWeiter();
            zeichneUhr(100,0); // 0 entspr. schwarz
            t.ruhe(1000);
        }       
    }
   
    public void stelleWeiter()
    {
        minute++;
        if (minute>59) {
            minute=0;
            stunde++;
            if (stunde>12) {
                stunde=1;
            }
        }
    }
   
    public void zeichneUhr(double pZeigerlaenge, int pFarbe){
        t.setzeFarbe(pFarbe);
        t.drehe(minute*360/60);
        t.vor(pZeigerlaenge);
        t.vor(-pZeigerlaenge);
        t.drehe(-minute*360/60);
        t.drehe(stunde*360/12);
        t.vor(pZeigerlaenge*0.8);
        t.vor(-pZeigerlaenge*0.8);
        t.drehe(-stunde*360/12);       
    }
   
    public int gibVergangeneMinutenSeitMitternacht() {
        int zwischenspeicher;
        zwischenspeicher = minute + stunde * 60;
        return zwischenspeicher;
    }


    public void schreibeUhrzeit() {
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.
        System.out.println("Es ist "+stunde+":"+minute+", das ist "+gibVergangeneMinutenSeitMitternacht()+" Minuten nach Mitternacht");
 
    }
Java kennt verschiedene Datentypen. Zwei für unseren Zweck geeignete sind [[String]] und [[Double|double]].
}
 
</source>
'''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.


==Übungen==
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.


{{Übung|
{{Übung|
# Analysieren Sie die Klasse Uhr.
* Nennen Sie mögliche Attribute einer Klasse Auto, Uhr und Kaffeemaschine. Wählen Sie entsprechend Datentypen für die Attribute.
#Klären Sie am Beispiel der Uhr folgende Begriffe:
* Nennen Sie Fälle, bei denen der Zahlenbereich für double nicht ausreichend sein könnte.
#*Klasse, Methode, Datentyp, Parameter, Schleife (for), Bedingte Ausführung (if)
# Zeichnen Sie das Klassendiagramm zur Klasse Uhr.
# Implementieren Sie die Methode stelleUhr(int pStunde, int pMinute), die die Uhrzeit auf die angegebenen Parameter verstellt. Das soll aber nur dann geschehen, wenn eine gültige Uhrzeit übergeben wurde (Stunden bis max. 12 und Minuten bis 59). Falls als Stunde 0 angegeben wurde, soll der Wert auf 12 gestellt werden.
# Implementieren Sie die Methode stelleUmXMinutenVor(int x), die die Uhrzeit um x-Minuten verstellt. (Hinweis: es gibt zumindest 2 völlig verschiedene Lösungswege!)
# Ergänzen Sie die Uhr um eine Datumsangabe mit Tag und Monat. Implementieren Sie dazu auch stelleDatumWeiter(), die das Datum um einen Tag vorstellt. (Zur Vereinfachung vernachlässigen wir die Schaltjahre).
# Zusatzaufgabe: Ergänzen Sie eine Alarmfunktion.
# Zusatzaufgabe (Übungen zur Turtlegrafik):
#*Lassen Sie ein Ziffernblatt zeichnen.
#*Wahrscheinlich werden Sie die folgenden Befehle benötigen:
#*fuelleKreis(double radius)
#*schreibe(String text)
}}
}}


==Weblinks==
==Der erste Quelltext der Klasse Konto==
* http://www.zitadelle.juel.nw.schule.de/if/java/P2.1/DigUhr.html
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'''.
 
public und private regeln die Zugriffsrechte (Fachbegriff: Zugriffsmodifizierer). Als erste Faustregel genügt es, sich zu merken, dass Attribute private und Klassen public sind.
 
public class Konto {
private String besitzerName;
private double kontostand;
}
 
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]]
 
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]]
 
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.
 
 
[[Bild:Onlinebank3.png]]
 
Ich wähle den vorgegebenen Instanznamen Konto1 und schon habe ich mein Objekt, welches BlueJ unten links als rotes Rechteck visualisiert.
 
[[Bild:Onlinebank4.png]]
 
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.


==Siehe auch==
[[Bild:Onlinebank5.png]]
* [[Java]]
 
* [[Informatik]]
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?
* Profis: Recherchieren Sie zum Thema "Genauigkeit von Fließkommazahlen", nach den Grenzen der Genauigkeit des Typs double. Welche weiteren numerischen Datentypen bietet Java?
}}


== Weblinks ==
* vgl. {{wpde|Objektorientierte Programmierung#Klassen|Klassen}}
* vgl. {{wpde|Attribut (UML2)|Attribut (UML2)}}
* http://www.informatik.ursulaschule.de/index.php?cid=368


[[Kategorie:Java]]
[[Kategorie:Java]]
[[Kategorie:Linksammlung]]
[[Kategorie:Informatik]]
[[Kategorie:Unterrichtsideen/Informatik]]
[[Kategorie:Unterrichtsidee]]

Version vom 16. August 2019, 07:43 Uhr

Auf dieser Seite sollen Sie anhand der Simulation eines Online-Kontos selbst Klassen definieren und die grundlegenden Elemente einer (objektorientierten) Programmiersprache

und deren Umsetzung in Java mit Hilfe von BlueJ kennen lernen.

Die Klasse Konto

Zur besseren Verwaltung gleichartiger Objekte bedient sich Java des Konzeptes der Klasse.


Merke
  • Klassen sind Vorlagen, aus denen Objekte zur Laufzeit erzeugt werden.
  • Konvention: Klassennamen werden groß geschrieben.


Man kann sich die Erzeugung von Objekten aus einer Klasse vorstellen wie das Fertigen von Autos aus dem Konstruktionsplan eines bestimmten Fahrzeugtyps. Klassen sind quasi die Konstruktionspläne für Objekte.

Konkretes Beispiel: Wie sieht ein "Bauplan" zu einem Konto aus (z.B. Girokonto an einer Online-Bank)? Dazu beantworte ich die Frage, was ein Konto auszeichnet.

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) von der Klasse Konto.


Definition

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.


Übung
  • 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.

public und private regeln die Zugriffsrechte (Fachbegriff: Zugriffsmodifizierer). Als erste Faustregel genügt es, sich zu merken, dass Attribute private und Klassen public sind.

public class Konto {
private String besitzerName;
private double kontostand;
}

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:

Onlinebank1.png

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".


Onlinebank2.png

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.


Onlinebank3.png

Ich wähle den vorgegebenen Instanznamen Konto1 und schon habe ich mein Objekt, welches BlueJ unten links als rotes Rechteck visualisiert.

Onlinebank4.png

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.

Onlinebank5.png

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?
  • Profis: Recherchieren Sie zum Thema "Genauigkeit von Fließkommazahlen", nach den Grenzen der Genauigkeit des Typs double. Welche weiteren numerischen Datentypen bietet Java?


Weblinks