Grundlagen der Informatik

Werbung
1. Grundbegriffe aus der Informatik
Aufbau eines Rechnersystems
Grundlagen der Informatik
Einführung in die objektorientierte Software-Entwicklung mit Java
Prof. Dr. Katrin Brabender
Labor für Angewandte Informatik und
Datenbanken
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 1
Seite 2
Der Universalrechenautomat nach von Neumann
Grundlegende Eigenschaften des von Neumann Rechners
Der logische Aufbau moderner Computer folgt dem Konzept des
Mathematikers John von Neumann (1903-1975) und wurde in den Jahren
1946/47 in den USA entwickelt.
•
Struktur ist unabhängig von den zu bearbeitenden Problemen
•
Programme, Befehle und Daten befinden sich im selben Speicherwerk
•
Sein Speicher wird in einzelne Speicherplätze unterteilt, die eine
eindeutige Adresse haben.
•
Es wird das Duale Zahlensystem verwendet
•
Sequentielles Abarbeiten von Befehlen
Der von Neumann Rechner besteht im Wesentlichen aus den drei Einheiten
-
Speicherwerk (Arbeitsspeicher)
=> Informationen können eindeutig angesprochen werden
Hier werden die Programme und Daten gespeichert
-
Rechenwerk
Hier werden die Rechenoperationen und logischen Verknüpfungen
ausgeführt
-
Steuerwerk
Hier werden der Programmablauf sowie die Ein- und Ausgabe von
Programmen und Daten gesteuert
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 3
Seite 4
Die Zentraleinheit eines Computers
Die CPU (Central Processing Unit)
Steuerwerk
Der Prozessor ist das Kernstück eines Computers.
Hauptspeicher
CPU
Rechenwerk
Die CPU dient zur Verarbeitung von Daten, die sich in Form von Bytes im
Speicher des Rechners befinden.
Zentraleinheit
Die CPU besteht aus dem Steuerwerk und Rechenwerk.
Komponenten der Zentraleinheit sind
-
Steuerwerk (control unit)
-
Rechenwerk
-
Hauptspeicher
CPU
Der Informationsaustausch erfolgt über zwei Bussysteme.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 5
Seite 6
Das Steuerwerk mit Befehlsregister, Befehlszähler, Adressregister
•
steuert den Austausch mit dem Arbeitsspeicher
•
steuert den Datenaustausch mit den Peripheriegeräten, wie Festplatte,
Drucker etc.
•
steuert die Ausführung der Maschinenbefehle
Register sind extrem schnelle Hilfsspeicherzellen.
Die wesentlichen Aufgaben des Steuerwerks sind
1. Befehlsdecodierung:
Erkennen eines Programmbefehls und Einleiten der zu seiner Ausführung
notwendigen Funktionen.
2. Ablaufsteuerung:
Steuern der Reihenfolge der auszuführenden Programmbefehle.
Der durchzuführende Befehl steht im Befehlsregister.
Die Adressen der benötigten Daten stehen im Adressregister.
Die Adresse des nächsten Befehls steht im Register Befehlszähler.
Grundlagen der Informati
WS 2003/2004
Seite 7
Grundlagen der Informati
WS 2003/2004
Seite 8
Jeder dieser Befehle besitzt einen OpCode (Befehlsnummer).
Typische Befehle sind
Ein Programm besteht aus einer Folge von OpCodes.
Wird ein Programm ausgeführt, so wird die Programmdatei in den
Speicher geladen.
LOAD Laden eines CPU Registers mit einem Wert aus dem
Speicher
Die CPU übernimmt die Kontrolle und führt die den Opcodes
entsprechenden Befehle aus.
STORE Speichern eines Registerinhaltes in einem Speicherplatz
des Speichers
Ein internes Register, der Befehlszähler, zeigt immer auf den nächsten
auszuführenden Opcode.
ADD, SUB, MUL, DIV Arithmetische Operationen auf Registern
NOT, OR, AND, XOR Logische Befehle auf Registern
COMPARE Vergleich des Inhalts zweier Register
Die CPU durchläuft dabei immer wieder den folgenden Zyklus
IN, OUT Ein- und Ausgabe von Daten an Register der Periperiegeräte
LOAD (Lade den Opcode, auf den der Befehlszähler zeigt)
INCREMENT (Erhöhe den Befehlszähler)
EXECUTE (Führe den Befehl, der zu dem Opcode gehört, aus)
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 9
Seite 10
3. Koordination
Das Rechenwerk
Koordination sämtlicher Transporte auf den verschiedenen Bussystemen.
Besteht im Wesentlichen aus der ALU (Arithmetical Logical Unit).
Hier werden alle arithmetischen und logischen Operationen ausgeführt,
indem zwei Datenregister miteinander logisch verknüpft werden.
Von der Breite des Datenregisters leitet man die Bezeichnung des
Prozessors ab, z.B. 16 Bit Prozessor hat Datenregisterbreite von 16 Bit.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 11
Seite 12
Der Hauptspeicher
Ein weiterer dynamischer Speicher ist der
ist ein dynamischer Speicher für Daten und Programme.
Wird als RAM (Random Access Memory) bezeichnet.
Cache
Schneller Zwischenspeicher (zwischen CPU und RAM) mit einer
Zugriffszeit von < 10 ns. Ermöglicht dem Prozessor Daten ohne
Wartezyklen zu archivieren.
Die Bits des Hauptspeichers sind meist byteweise organisiert.
Jeder Befehl kann immer nur auf ein ganzes Byte zugreifen, um es
zu lesen, zu bearbeiten oder zu schreiben.
Jedes Byte des Speichers erhält eine Adresse.
Auf jedes Byte kann direkt zugegriffen werden.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 13
Seite 14
Das BUS System
Das externe Bussystem bzw. der Systembus besteht aus
Unterschieden wird zwischen internem und externem Bussystem.
Adressbus, Datenbus und Steuerbus.
Das interne Bussystem sorgt für den Datenaustausch innerhalb der
CPU, d.h. zwischen Rechenwerk und Steuerwerk.
Das externe Bussystem (Systembus) sorgt für den Datenaustausch
zwischen CPU und Hauptspeicher sowie CPU und Peripheriegeräte.
•
Adressbus selektiert die Komponenten
•
Datenbus übermittelt die Daten
•
Steuerbus übernimmt z.B. Verwaltungsfunktion
Adressen / Adressbus
Busse sind parallele Datenleitungen.
Steuerwerk
Befehle / Datenbus
Rechenwerk
Daten / Datenbus
Grundlagen der Informati
WS 2003/2004
Seite 15
Hauptspeicher
Grundlagen der Informati
WS 2003/2004
Seite 16
Die Bestandteile eines Rechnersystems
Peripherie
Die Gesamtheit der Eingabegeräte, Speichergeräte, Dialoggeräte und
• Eingabeeinheit
Ausgabegeräte , d.h. alle Geräte außerhalb der Zentraleinheit bezeichnet
• Verarbeitungseinheit
man als Peripherie
• Ausgabeeinheit
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 17
Seite 18
Massenspeicher / Festplatte
Organisation von Massenspeicher
Speichern von großen Datenmengen
Die Verwaltung der physikalischen Eigenschaften einer Platte wird durch das
Betriebssystem vollständig gekapselt.
Für den Benutzer erfolgt die Organisation von Festplatten in Verzeichnissen.
Köpfe, Zylinder, Sektoren, Spuren, Cluster
Die Organisation von Dateien erfolgt in
• Laufwerke
• Verzeichnisse
• Unterverzeichnisse
Spur
Sektor
Spur 1023
Spur 0
Zylinder
Zum Einrichten von Verzeichnisstrukturen muß berücksichtigt werden
• Benutzerrechte, Zugriffsrechte
• Sicherungskonzepte
• Backup-Strategien
Kopf
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 19
Seite 20
Dateneingabe-Geräte
•
Tastatur
•
Maus
•
Touchpad
•
Scanner etc.
Dateiausgabe-Geräte
•
Bildschirm
•
Drucker etc.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 21
Seite 22
Software in einem Rechnersystem
BIOS
Das BIOS – Basic IO System - enthält
Unter Software versteht man alle Programme, Prozeduren und Objekte, die
ein Rechnersystem lauffähig machen.
Unterschieden wird zwischen Systemsoftware und Anwendungssoftware.
•
grundlegende Hilfsprogramme zur Ansteuerung von
Hardwarekomponenten (z.B. Tastatur, Maus, Festplatte)
•
Programme, die nach Einschalten des Rechners ausgeführt werden, wie
• Prüfung, welche Geräte angeschlossen sind,
Zur Systemsoftware zählen alle Programme, die für den korrekten Ablauf
von Rechnern verantwortlich sind, wie BIOS und Betriebssystem.
• Funktionstest des Speichers
• Laden des Betriebssystems
Grundlagen der Informati
WS 2003/2004
Seite 23
Grundlagen der Informati
WS 2003/2004
Seite 24
Das Betriebssystem
Verwaltet die Ressourcen des Rechners und stellt Dienstleistungen zur
Verfügung.
•
Ein- und Ausgabesteuerung
•
Prozessverwaltung
•
Zugriff und Verwaltung des Dateisystems
Die zentralen Aufgaben des Betriebssystems sind
•
Ablaufsteuerung
Laden, Starten und Abarbeiten der Anwenderprogramme
•
Speicherverwaltung
z.B. Festlegung der vom Programm zu benutzenden Adressbereiche des
Hauptspeichers
•
Konfigurationsverwaltung
Erkennen aller angeschlossenen Peripheriegeräte
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 25
Seite 26
Die Anwendungssoftware
Zusammenfassung
Ein Computersystem besteht aus den Komponenten
Anwendungsprogramme unterstützen den Anwendern bei der
Lösung von Problemen.
Bsp: Textverarbeitungsprogramme, Tabellenkalulation etc.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 27
Seite 28
2. Zahlendarstellung und mathematische Grundoperationen in
einem Rechnersystem
•
Zahlensysteme
•
Zahlenkonvertierung
Zahlensysteme
Der Wert einer Zahl im Dezimalsystem kann dargestellt werden in der Form
n
•
Grundoperationen in den Zahlensystemen - Das Rechnen im Dualsystem
•
Subtraktion und Division mit Hilfe des Komplements
•
Darstellung von INTEGER und REAL-Zahlen im Rechner
x = ± ∑ bi * 10 i , b i ∈ {0,1, 2 ,3, 4,5,6 ,7 ,8,9}
i=m
Bsp:
345,23 = 3*102 + 4*101 + 5*100 + 2*10-1 + 3*10-2
Diese Darstellung nennt man Stellenwertsystem.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 29
Seite 30
Beispiel für einige Stellenwertsysteme
Definition Stellenwertsystem
System zur Darstellung von Zahlen durch Ziffern, bei denen der Wert
einer Ziffer von der Stelle abhängt, an der sie innerhalb der Zahl
geschrieben ist.
Für den Wert einer Zahl x in einem Stellenwertsystem zur Basis B gilt
n
x = ±∑ bi ∗ B i , bi ∈ {0,1,2,
i =m
, B − 1}
mit
Zahlensystem
Dualsystem
Fünfersystem
Siebenersystem
Oktalsystem
Dezimalsystem
Hexadezimalsystem
Zahlenbasis
B=2
B=5
B=7
B=8
B=10
B=16
Ziffern
0,1
0,1,2,3,4
0,1,2,3,4,5,6
0,1,2,3,4,5,6,7
0,1,2,3,4,5,6,7,8,9
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
B∈IN, B ≥ 2
Grundlagen der Informati
WS 2003/2004
Seite 31
Beispiel
11000011
1240
366
303
195
C3
Grundlagen der Informati
WS 2003/2004
Seite 32
Das Dualsystem ist ein Spezialfall des Binärsystems.
Besteht die Gefahr der Verwechslung, wird das benutzte Stellenwertsystem
durch Zusätze markiert:
Binärsystem
Eine Menge, die nur aus zwei Zeichen besteht, z.B. Morsealpabet,
Fußgängerampel etc.
Dualsystem:
Für die interne Verarbeitung innerhalb eines Rechners wird das Dualsystem
benutzt.
110000112
Oktalsystem:
3038
Dezimalsystem:
19510
Hexadezimalsystem:
C316
Aber auch das Oktal- und Hexadezimalsystem sind wichtige
Stellenwertsysteme, da sie als abkürzende Schreibweise für Dualzahlen
benutzt werden können.
Da 8=23 und 16=24, können jeweils 3 Dualziffern durch eine Oktalziffer und 4
Dualziffern durch eine Hexadezimalziffer ersetzt werden.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 33
Seite 34
Vergleichstabelle
Zahlenkonvertierung
Dezimal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dual
0
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101
1110
1111
Oktal
0
1
2
3
4
5
6
7
10
11
12
13
14
15
16
17
Hexadezimal
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Dezimal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Die Umwandlung von Dual in Oktal oder
Dual in Hexadezimal und umgekehrt ist
sehr einfach.
Umwandlungstabellen
Dezimal
0
1
2
3
4
5
6
7
Dual
000
001
010
011
100
101
110
111
Oktal
0
1
2
3
4
5
6
7
Dual
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Grundlagen der Informati
WS 2003/2004
Hexa
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Grundlagen der Informati
WS 2003/2004
Seite 35
Seite 36
Umwandlung von ganzen Zahl im Dezimalsystem in eine Zahl beliebiger Basis
Beispiel:
1 0 0 1 0 1 1 1 0 1, 1 0 1 0 0 1 12=X16
0 0 1 0 0 1 0 1 1 1 0 1, 1 0 1 0 0 1 1 0
2
5
D
A
Beispiel:
232010=X8
a)
Z
Z div 8 Z mod 8
2320
?
?
b)
c)
d)
Z
2320
290
Z div 8
290
?
Z mod 8
0
?
6
Hinweis:
Die Umwandlung von Dezimalzahlen in Dual-, Oktal- oder
Hexadezimalzahlen ist auf diese einfache Art nicht möglich. Hierfür gibt es
Konvertierungsverfahren.
Z
2320
290
36
Ergebnis:
Z div 8
290
36
?
Z mod 8
0
2
?
Z
2320
290
36
4
Z div 8
290
36
4
0
Z mod 8
0
2
4
4
232010= 44208
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 37
Seite 38
Umwandlung einer ganzen Zahl beliebiger Basis in eine Dezimalzahl
Unsere üblichen Rechenverfahren sind allgemein für Stellenwertsysteme
gültig. Es wird sich zeigen, dass sich alle 4 Grundrechenarten im
Dualsystem auf die Addition zurückführen lassen.
Verfahren:
Multipliziere die erste Ziffer (von links) der umzuwandelnden Zahl
mit ihrer Basis B, addiere dazu die nächste Ziffer, multipliziere das
Ergebnis erneut mit Basis B, usw.
3.1 Addition im Dualsystem
+
0
1
Additionsregeln 0
0
1
1
1 10
Beispiel
44208=X10
4
B=8
Grundoperationen in den Zahlensystemen - Das Rechnen im
Dualsystem
4
32
36
2
288
290
0
2320
2320
Beispiel für eine Addition
1 0 0 1 1 12 + 1 1 0 1 12 = ?
+
Übertrag
Grundlagen der Informati
WS 2003/2004
Seite 39
1 0 0
1 1
1 1 1
1 0 0 0
1
0
1
0
1 1
1 1
1
1 0
Grundlagen der Informati
WS 2003/2004
Seite 40
Multiplikation im Dualsystem
Beispiel für eine Multiplikation
Multiplikationsregeln
*
0
1
0
0
0
1 0 0 1 1 0 *
0
1 0
1 0 0
0 0 0 0
1 0 0 1 1
Übertrag
1 1 1 1
1 1 0 1 0
1
0
1
Verfahren:
a.) Verschiebe die zu multiplizierende Zahl nach links
1
0
0
1
0
0
1
0
0
0
1
1
0
1 1 0
0 0 0
1 0
0
0 1 0 0
b.) Addiere die Zahlen
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 41
Seite 42
Subtraktion im Dualsystem
Division im Dualsystem
Subtraktionsregeln
0
-0
0
Leihen 0
0
-1
1
1
1
-0
1
0
1
-1
0
0
Das schriftliche Divisionsverfahren kann analog zum Dezimalsystem benutzt
werden.
Divisionsregeln
0 : 0 = verboten
0:1=0
Beispiel
1 : 0 = verboten
1
Leihen
Übertrag 1
0
1
1
1
0
1
0
0
1
1
0
1:1=1
Dieses Rechenverfahren ist für eine elektronische Rechenanlage nicht
geeignet.
Dieses Rechenverfahren ist für einen Computer nicht geeignet.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 43
Seite 44
Subtraktion und Division mit Hilfe des Komplements
Beispiel
11011101
- 10011
010001
- 000000
100010
10011
0011111
10011
011000
10011
001010
:
10011
=
1 0 1 1, 1 0 1....
Definition Komplement einer Dualzahl
Das Komplement einer Dualzahl ist die Ergänzung zur nächst höheren
Bit-Wertigkeit (=Zweierpotenz).
Bildungsrezept
Das Komplement einer Dualzahl bildet man durch Invertieren (Ersetzen
von 0 durch 1 und umgekehrt) der Zahl und anschließender Addition
einer 1.
Beispiel: Komplement zur Zahl 101012 (= 2110)
01010
+
1
0 1 0 1 1 (= 1110)
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 45
Seite 46
Subtraktion durch Addition des Komplements
Division durch fortlaufende Addition des Komplements
1. Schritt: Subtrahend durch Voranstellen von Nullen auf die gleiche
Stellenanzahl des Minuenden bringen
Verfahren
2. Schritt: Bilde das Komplement des erweiterten Subtrahenden
1. Schritt: Divisor durch Voranstellen von Nullen auf die gleiche
Stellenanzahl des Dividenden bringen.
3. Schritt: Addiere Minuend und das Komplement des Subtrahenden.
Der Übertrag über die höchste vorgegebene Stellenanzahl wird nicht
berücksichtigt.
2. Schritt: Bilde Komplement des erweiterten Divisors
3. Schritt: Addiere Komplement zum Dividenden. Überträge über die
höchste Stellenzahl werden notiert, aber für die weitere Rechnung
zunächst nicht verwendet.
Beispiel: 1 0 1 0 1 12 - 1 0 0 0 1 2 (= 4310 - 1710) = 2610
4. Schritt: Wiederhole Schritt 3 bis kein Übertrag mehr auftritt.
Schritte 1 + 2
Schritt 3
010001
101110
+
1
101111
101011
+ 101111
1 011010
Das Ergebnis der letzten Addition, bei der es noch zu einem Übertrag
kam, ist der Divisionsrest. Die Übertragseinsen werden addiert und
bilden das Ergebnis der Division.
Grundlagen der Informati
WS 2003/2004
Seite 47
Grundlagen der Informati
WS 2003/2004
Seite 48
Informationsdarstellung / Codierung
Beispiel: 1 0 1 0 0 12 : 1 1 12 ( = 4110 : 710)
Schritte 1 + 2
Schritt 3
+
1
+
000111
111000
1
111001
+
1
+
1
+
1
+
1
+
101001
111001
100010
111001
011011
111001
010100
111001
001101
111001
000110
111001
111111
Computer können intern nur Bits verarbeiten.
Daher muss jedes Zeichen in eine Bitfolge umgewandelt werden.
Unter einem Zeichen versteht man Buchstaben, Ziffern (z.B. „0“, „1“),
Sonderzeichen (z.B. „$“, „€“,…) und Steuerzeichen (z.B. „\n“ für Zeilenumbruch)
Das Ersetzen eines Zeichens in eine Bitfolge nennt man Codierung.
Die Umwandlungsvorschrift ist ein Code.
Es wurden eine Reihe von Computercodes entwickelt.
Beispiele hierfür sind der ASCII-Code sowie der Unicode.
Ergebnis: 1 0 1 0 0 02 : 1 1 12 = 1 + 1 + 1 + 1 + 1 Rest 110 = 1 0 1 Rest 110
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 49
Seite 50
ASCII-Code
American Standard Code for Information Interchange
7- Bit Code, d.h. 27=128 Zeichen sind darstellbar, davon
•
32 Steuerzeichen
(ASCII 0 bis ASCII 31 entspricht Tastenkombination Ctrl-A bis Ctrl-Z, z.B.
Ctrl-H Backspace, Ctrl-M Return),
•
84 internationale Schriftzeichen (lateinisches Alphabet, Ziffern,
Sonderzeichen),
•
12 nationale Schriftzeichen.
Addition der Zeile und Spalte ergibt den ASCII-Wert des entsprechenden
Zeichens, z.B. ASCII 52 = 4.
Bei der ASCII-Codierung werden nur 7 Bits eines Bytes benutzt,
das achte Bit dient als Kontrollbit für die Datenübertragung.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 51
Seite 52
ASCII-Erweiterung
Unicode
Erweiterung des ASCII-Satzes auf 8-Bit Code,
d.h. 28 = 256 Zeichen sind darstellbar.
•
16-Bit Code, d.h. er umfasst 216 = 65536 Zeichen
•
umfasst Schriftzeichen aller Verkehrssprachen der Welt
Somit ergibt sich ein weiterer verfügbarer Bereich von
ASCII 128 bis ASCII 255.
IBM-PCs sowie dazu kompatible Rechner benutzen diesen zusätzlichen
Code zur Darstellung von sprachspezifischen Zeichen,
wie z.B. „ä“ (ASCII 132), „ö“ (ASCII 148).
Bemerkung:
Es kann zu Problemen beim Datenaustausch zwischen Rechnern mit
unterschiedlicher ASCII-Erweiterung kommen.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 53
Seite 54
Zahlendarstellung im Rechner
Mit 2 Bytes können 216 verschiedene Zahlen dargestellt werden,
mit 4 Bytes 232 verschiedene Zahlen.
Darstellung ganzer Zahlen (Datentyp INTEGER)
•
Können direkt in Dualzahlen umgewandelt werden
•
Werden in ihrer Bitdarstellung gespeichert und verarbeitet
Daher lassen sich folgende Bereiche von Integer Zahlen darstellen:
Short Integer Zahlen von –215 bis 215-1
(-32768 bis 32767)
Long Integer Zahlen von –231 bis 231-1
(-2147483648 bis 2147483647)
Die meisten Programmiersprachen unterscheiden zwischen
Short Integer: Speicherlänge 2 Byte (=16 Bits)
Die positiven ganzen Zahlen werden direkt in ihrer Bitdarstellung gespeichert
Long Integer: Speicherlänge 4 Byte (= 32 Bits)
(bei Short Integer von 0000 0000 0000 0000 bis 0111 1111 1111 1111).
Das vorderste Bit ist hier immer 0.
Grundlagen der Informati
WS 2003/2004
Seite 55
Grundlagen der Informati
WS 2003/2004
Seite 56
Die negativen ganzen Zahlen werden abgespeichert als Komplement
ihres Betrages.
Standardformate für die Darstellung ganzer Zahlen
Bereich
-128..127
-32768..32767
-231..231-1
-263..263-1
Beispiel
Für Short integer hat –1 die Darstellung 1111 1111 1111 1111
Der Zahlenbereich bei Short Integer erstreckt sich also von
Format
8 Bit
16 Bit
32 Bit
64 Bit
Java
byte
short
int
long
1111 1111 1111 1111 bis 1000 0000 0000 0000
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 57
Seite 58
Darstellung von Dezimalbrüchen (Datentyp REAL)
Gilt für eine Gleitkommadarstellung |M| < 1 und beginnt M nach dem
Komma mit einer Ziffer ungleich Null, so nennt man diese Darstellung
Alle Zahlen Z dieses Typs werden im Rechner in der Gleitpunktdarstellung
normierte Gleitkommadarstellung.
Z = V * M * BE
(Gleitkommadarstellung) dargestellt:
Bemerkung: Jede Gleitkommadarstellung kann normiert werden.
mit V: Vorzeichen, E: Exponent, M: Mantisse, B: Basis
Beispiel
- 83,2 = - 0,832 * 102
Beispiel
75 =
75*100
=
7,5*101 =
- 0,36 = - 0,36*
100
=-
0,75*102 =
3,6*10-1=
-
0,045 = 0,45 * 10-1
...
36*10-2=...
bzw. im Dualsystem
10,01 = 0,1001 * 22
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 59
Seite 60
IEEE-Norm (Institute of Electrical and Electronics Engineers)
Da im Dualsystem eine normalisierte Mantisse immer mit 0,1 beginnt, wird
dieser Wert innerhalb eines Rechners nicht abgespeichert.
short real: Vorzeichen: 1Bit, Exponent: 8 Bit, Mantisse:23 Bit
long real: Vorzeichen: 1Bit, Exponent: 11 Bit, Mantisse:52 Bit
REAL-Zahlen werden im Rechner meist in 32 (short real)
Exponent
oder 64 Bits (long real) abgespeichert:
Mantisse
v
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 61
Seite 62
Beispiel: 4,75 als IEEE Zahl (short real)
Anmerkung:
4,75 = 100,11
29 28 27 26 25 24 23 22
21 20 2-1 2-2 2-3 2-4 2-5 2-6
,
1
Mit 8 Bit können Zahlen im Bereich von –128 bis 127 dargestellt werden.
Der Exponent bei short real stellt Zahlen im Bereich von –125 bis + 128 dar.
Normieren ergibt:
0,10011*23
,
1
0
0
1
1
1
1
0
Damit das Vorzeichen des Exponenten nicht gespeichert werden muss, wird zum
Exponenten + 126 addiert, so dass der Exponent aus Zahlen von 1 bis 254
Exponent mit 126 addieren: 126+3 = 129 = 10000001
besteht.
0 und 255 sind für betragsmäßig sehr kleine Werte sowie „Unendlich“ reserviert.
Damit ergibt sich
IEEE Zahl: 0 10000001 00110000000000000000000
Beachte: Bei der Mantisse wird die erste 1 nach dem Komma nicht mitgespeichert
Grundlagen der Informati
WS 2003/2004
Seite 63
Grundlagen der Informati
WS 2003/2004
Seite 64
Beispiel: gegeben sei IEEE Zahl (short real)
3. Erstellung von Software – Anwendungsprogrammierung
1 10000101 10110000000000000000000
Definition
Ein Programm ist eine Folge von Befehlen oder Anweisungen an eine
EDV-Anlage zur automatischen Bearbeitung eines Problems.
gesucht: zugehörige Dezimalzahl
Exponent = 10000101 = 13310 => Exponent - 126 = 7
Also entspricht die IEEE Zahl der Dezimalzahl
Zur Erstellung eines Programms sind die folgenden Komponenten
von Bedeutung: Editor, Compiler, Linker, Loader
- (1* 2-1 + 1*2-2+0*2-3+1*2-4+1* 2-5)*27= -108
Editor
• Erzeugt lesbare Textdateien in der jeweiligen Programmiersprache
Zur Übersetzung des Quellcodes in die Maschinensprache des Rechners gibt
es zwei Typen von Übersetzungsprogrammen: Compiler und Interpreter
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 65
Seite 66
Interpreter
•
Übersetzt immer nur eine einzige Programmanweisung in Maschinensprache
Linker
•
Jeder übersetzte Befehl wird sofort ausgeführt
•
•
Die Übersetzung wird nicht abgespeichert
eines Softwareprojektes zu einem Gesamtprojekt zusammen
•
Übersetzt immer einen kompletten Programmtext in eine Folge von
•
Erzeugt aus den Objektcode des Programmierers und dem
Objektcode der Bibliothek ausführbaren Programmcode.
Maschinenbefehlen, bevor die erste Programmanweisung ausgeführt wird
•
Hinzufügung benötigter mathematischer oder anderer allgemeiner
Programmteile aus Softwarebibliotheken
Compiler
•
Führt nach dem Compilieren mehrere unabhängige Programmteile
Erzeugt aus dem Quellcode durch einen Übersetzungsvorgang den
sogenannten Objektcode.
Loader
•
Überprüft auf Grammatik- oder Syntaxfehler
•
Lädt das Programm an eine freie Position im RAM
•
Objektcode enthält binären Code für einen speziellen Prozessor für ein
•
Funktion wird in der Regel durch das Betriebssystem bereitgestellt.
bestimmtes Quellcode-Modul
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 67
Seite 68
Zur Entstehung eine lauffähigen Compiler-Programms sind also folgende
Schritte notwendig:
Hilfsmittel zur Softwareentwicklung sind:
Debugger
Editor
•
System zur Identifizierung von logischen bzw. semantischen Fehlern
Quellcode
Quellcode
•
Debugger drängen sich zwischen Betriebssystem und Programm und
übernehmen die Steuerung und Kontrolle der Programmausführung.
Compiler
Objektcode
Objektcode
IDE - Integrated Development Environment
Objektcode
Objektcode
•
Linker
ProgrammProgrammcode
code
möglich macht.
Lauffähiges
Programm
im Speicher
Loader
Entwicklungsumgebung, die sämtliche Schritte der
Programmentwicklung von einer gemeinsamen Entwicklungsoberfläche
BibliotheksBibliothekscode
code
•
Ermöglicht die graphische Entwicklung von Software
•
Verbirgt die Komplexität der Entwicklung
Grundlagen der Informati
WS 2003/2004
Seite 69
Grundlagen der Informati
WS 2003/2004
Seite 70
Programmiersprachen – Übersicht (Auswahl)
4. Softwareentwicklung mit Java
Fortran
1960
ALGOL
Basic
Lisp
1965
1970
COBOL
PL/1
Simula
Pascal
C
1975
1980
Modula 2
1985
Object Pascal
1990
Ada 95
ABAP
C++
Delphi
1995
Prolog
Smaltalk
Ada
CLOS
Java
2000
Prozedurale
Sprache
Objektorientiert Sprache
KI Sprache
Business
Sprache
Grundlagen der Informati
WS 2003/2004
Seite 71
Grundlagen der Informati
WS 2003/2004
Seite 72
Kurze Einführung in die Geschichte von Java
Das Arbeitsprinzip von Java
•
Java wurde ab 1991 von der Firma Sun Microsystems entwickelt.
•
•
Zu Beginn erfolgte die Entwicklung im Rahmen eines internen
Forschungsprojektes mit dem Ziel, eine Programmiersprache zur
Steuerung von Geräten der Haushaltselektronik zu entwickeln.
•
Hauptziel der Programmiersprache: klein, schnell, effizient und leicht
portierbar für breiten Bereich von Hardware.
•
Die Programmiersprache erhielt den Namen Java (Umgangssprachlich
Kaffee).
•
1993 sollte Projekt abgebrochen werden, da sich Markt für intelligente
Haushaltsgeräte nicht gut entwickelte.
•
Zu dieser Zeit etablierte sich das World Wide Web (WWW).
•
Sun erkannte Potential in Java und Projekt wurde fortgeführt.
•
Anfang 1995: Durchbruch von Java durch Netscape Navigator 2.0, der
Java Programme ausführen kann.
Der Source Code eines Java-Programms steht in einer Textdatei mit der
Endung .java
•
Von einem Compiler mit dem Namen javac wird diese Text-Datei in eine Datei
mit der Endung .class umgewandelt.
•
Diese Datei enthält den so genannten Bytecode, der auf einer virtuellen
Maschine (JVM) läuft. Dies ist ein Interpreter, der für jedes Betriebssystem den
Bytecode in den RAM des Rechners lädt und das Programm ablaufen lässt.
•
Die virtuelle Maschine wird durch den Befehl java aufgerufen und führt den
Bytecode aus.
•
Die JVM ist Teil der Java Runtime Environment (JRE), die es für jedes gängige
Betriebssystem gibt.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 73
Seite 74
Einige Eigenschaften von Java
Die Voraussetzung für das Arbeiten mit Java
•
Definition der Firma Sun:
Zur Erstellung von Java-Programmen benötigt man die Java 2 SDKUmgebung für das entsprechende Betriebssystem.
Java ist eine einfache, objektorientierte, verteilte, interpretierte, stabile, sichere,
•
SDK = Software Development Kit
•
Das SDK beinhaltet die notwendigen Programme, insbesondere den
•
Das J2SE kann man im Internet direkt von SUN herunterladen. Die Adresse
plattformunabhängige, portierbare, leistungs- und multithreadingfähige und
dynamische Sprache.
Compiler javac, den Interpreter java und die Virtuelle Maschine.
lautet http://www.sun.com
•
Die Beschreibung der Installation findet man z.B. im Online-Tutorial
http://java.sun.com/docs/books/tutorial/index.html
oder z.B. in Jobst (2001), S. 13
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 75
Seite 76
Erstellung von Java-Programmen
Die vier Programmarten von Java
Java Programme werden als Text in Dateien eingegeben.
•
Hierzu benutzt man entweder
Applikationen (lat. für Anwendung)
eigenständiges Programm, da nur die virtuelle Maschine als Interpreter
•
einen Texteditor oder
•
eine integrierte Entwicklungsumgebung (IDE).
braucht und selbstständig lauffähig ist (wie in anderen
Programmiersprachen üblich)
Wir werden in der Vorlesung und im Praktikum mit einem Texteditor arbeiten.
•
Applets (engl. für „kleine Applikation“)
Unterprogramm eines Webbrowsers.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 77
•
Seite 78
Servlets
•
Midlets (MID = mobile information device)
Unterprogramm eines Webservers (Gegenstück zu einem Applet auf dem
Java-Programm, das auf Mobilgeräten wie Handys oder Handhelds
Webclient = Browser)
ablaufen kann.
• erweitert die Funktionalität eines Webservers
• ist geeignet für Geräte mit wenig Speicher, geringer Performanz,
• eng verwandt: JSP (Java Server Pages), d.h. Java Programme, die in
HTML-Seiten eingebettet sind und bei ihrer Aktivierung durch den
Browser Servlets erzeugen
temporären Verbindungen zum Netz
• Spezielle Entwicklungsumgebung von SUN: J2ME (Java 2 Micro
Edition), benötigt J2SDK
• mögliche Anwendungen: sichere und vertrauliche Zugänge zu einer
Website, Zugriffe auf Datenbanken, dynamische Erstellung von HTMLSeiten
• Abgespeckte Virtuelle Maschine KVM (K für kilo, da der benötigte
Speicher im Kilobyte Bereich liegt)
• Weiter Informationen unter http://java.sun.com/j2me/
Grundlagen der Informati
WS 2003/2004
Seite 79
Grundlagen der Informati
WS 2003/2004
Seite 80
Einfache Java-Applikationen
Auszug aus der Java - Literatur
•
Joachim Goll, Cornelia Weiß, Frank Müller: Java als erste
Programmiersprache. B.G. Teubner. 3. Auflage 2001.
•
Fritz Jobst: Einführung in Java. Fachbuchverlag Leipzig. 2. Auflage 2001.
•
Christian Ullenboom: Java ist auch eine Insel. Galileo Press, Bonn, 2002.
•
Aaron Walsh, John Fronckowiak: Java. Mitp-Verlag. 2002.
•
Albrecht Weinert: Java für Ingenieure. Fachbuchverlag Leipzig. 2001.
Links
•
Java Tutorial von SUN http://java.sun.com/docs/books/tutorial
•
Guido Krüger, Go to Java Online http://www.javabuch.de
•
Christian Ullenbooms Online-Buch http://java-tutor.com/javabuch/index.htm
// Willkommen.java
/*
Ausgabe eines Textes
*/
class Willkommen
{
public static void main (String args[])
{
System.out.println ("Willkommen zur Java-Vorlesung");
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 81
Seite 82
Wie kommt die Applikation ans Laufen?
Grundbestandteile eines Java-Programms
1. Ein Java Programm ist stets eine Klasse und beginnt mit dem
1. Erstellen der Datei Willkommen.class im Bytecode:
Schlüsselwort class und dem Namen der Klasse.
javac Willkommen.java
2. Ein Java-Programm ist in Einheiten gepackt, so genannte Blöcke, die von
2. java Willkommen führt zur Ausführung des Programms
geschweiften Klammern {...} umschlossen sind.
Das Ergebnis ist die Ausgabe des Textes „Willkommen zur Java-Vorlesung“.
3. Der Startpunkt jeder Applikation ist die Methode main. Hier beginnt der
Java-Interpreter (die „virtuelle Maschine“) die einzelnen Anweisungen
auszuführen. Abgearbeitet wird sequenziell, d.h. der Reihe nach.
4. Die Applikation Willkommen.java besteht aus einer Anweisung, der
Ausgabe eines Textes.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 83
Seite 84
Kommentare
Empfehlung:
Kommentare werden in Programme eingefügt, um sie zu dokumentieren und
Jedes Programm sollte mit einem Kommentar beginnen, der den Dateinamen
ihre Lesbarkeit zu verbessern. Sie bewirken keine Aktion bei der Ausführung
beinhaltet und den Zweck des Programms beschreibt.
des Programms und werden vom Java-Compiler ignoriert.
Es gibt drei verschiedene Arten, Kommentare in Java zu erstellen.
Leerzeilen, Leerzeichen und Tabstops werden vom Java-Compiler nicht
//.. einzeiliger Kommentar, beginnt mit dem Doppelslash // und endet mit dem
verarbeitet. Sie sollten verwendet werden zur Strukturierung und Lesbarkeit des
Zeilenende (Quellcode, der in derselben Zeile vor den Backslashs steht, wird
Programms.
normal verarbeitet)
/*...*/ Kommentierung von mehreren Textzeilen
/**...*/ Dokumentationskommentar zur automatischen Dokumentation
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 85
Seite 86
Die Klassendeklaration
Merkregel
•
Jedes Java-Programm besteht aus mindestens einer Klasse
•
Das reservierte Wort class eröffnet die Klassendeklaration in Java, gefolgt
von dem Klassennamen (in unserem ersten Beispiel Willkommen)
•
Allgemein gilt folgende Konvention: Klassennamen beginnen mit einem
Reservierte Wörter sind von Java belegt (nur kleine Buchstaben)
•
Der Klassenname ist ein Identifier oder Bezeichner
•
Ein Identifier ist eine Folge von alphanumerischen Zeichen, d.h.
Eine Klasse in Java muss in einer Datei abgespeichert werden, die genau so
heißt, wie die Klasse mit der Erweiterung „.java“.
Großbuchstaben und bestehen aus einem Wort.
Buchstaben, Ziffern, dem Unterstrich_ und dem $ Zeichen
•
Ein Bezeichner darf nicht mit einer Ziffer beginnen und keine Leerzeichen
enthalten
•
Java ist case sensitive, d.h. Groß- und Kleinschreibung wird unterschieden
Grundlagen der Informati
WS 2003/2004
Seite 87
Grundlagen der Informati
WS 2003/2004
Seite 88
Blöcke
Der Programmstart: Die Methode main
•
Die Deklaration einer Klasse geschieht in einem Block, der durch
geschweifte Klammern {} umschlossen ist
•
Die zentrale Einheit einer Applikation ist die Methode main.
•
Innerhalb eines Blockes können sich noch weitere Blöcke befinden
•
Durch sie wird die Applikation gestartet, durch die dann alle Anweisungen
•
Die Klammern müssen korrekt geschlossen sein.
ausgeführt werden, die in ihr programmiert sind.
Zwei Konventionen sind üblich
class Willkommen
{
....
}
•
Die Zeile public static void main ( String args[] )
•
Java-Applikationen beginnen automatisch bei main.
•
Die runden Klammern hinter main zeigen an, dass main eine Methode ist
ist Teil jeder Java-Applikation.
oder
•
class Willkommen {
.....
}
Nach dem Aufruf der Methode main mit dem Standardargument String
args[] kommt der Methodenrumpf, eingeschlossen durch geschweifte
Klammern ({...}).
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 89
Seite 90
Erweiterung der ersten Java-Applikationen
Eine allgemeine Applikation in Java muss in jedem Fall die folgende
Konstruktion beinhalten
// Willkommen2.java
/*
Ausgabe eines Textes in einem Dialogfenster
*/
import javax.swing.JOptionPane;
class Klassenname
{
public static void main( String args[] )
{
Deklarationen und Anweisungen;
}
}
class Willkommen2
{
public static void main (String args[])
{
JOptionPane.showMessageDialog (null,
"Willkommen zur \nJava-Vorlesung");
System.exit( 0 );
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 91
Seite 92
Die Methode System.exit
Die Ausgabe erfolgt dann in einem Dialogfenster
•
Die Methode exit gehört zur Klasse System und beendet die Applikation
•
Wird diese Anweisung bei Dialogfenstern nicht angegeben, so blockiert die
bei Dialogfenstern
Applikation die Java Virtual Maschine
•
Die Klasse System gehört zu dem Paket java.lang, das automatisch
jedem Java-Programm zur Verfügung steht.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 93
Seite 94
Die import-Anweisung
•
•
Im Gegensatz zu dem Paket java.lang muss eine Klasse aus einem
anderen Paket ausdrücklich mit ihrem Paketpfad angegeben werden
•
Mit der import-Anweisung wird die Klasse JOptionPane eingelesen und für
Die Methode showMessageDialog öffnet eine Dialogbox, die den nach
der Konstanten null in Hochkommata eingeschlossenen Text anzeigt.
• null ist ein reserviertes Wort, das hier die Position des Dialogfensters in
der Mitte des Bildschirms festlegt.
das Programm benutzbar.
• JOptionPane ist eine Standardklasse von Java aus dem Paket
javax.swing und stellt Dialogboxen, d.h. Fenster zur Ein-und Ausgabe
zur Verfügung
•
Java-Klassen können generell in Paketen, d.h. in Verzeichnissen
bereitgestellt werden. Z.B. sind alle Klassen des Swing-Pakets
javax.swing in dem Verzeichnis \javax\swing zu finden
Grundlagen der Informati
WS 2003/2004
Seite 95
Grundlagen der Informati
WS 2003/2004
Seite 96
Escape-Sequenzen
Escape-Zeichen
Bedeutung
•
Der in die Anführungszeichen („) gesetzte Text ist ein String, also eine Kette
\n
neue Zeile
von beliebigen Zeichen
\t
führt Tabulatorsprung aus
\r
positioniert den Cursor an den Anfang der aktuellen
•
Sie werden durch die Methode JOptionPane.showMessageDialog auf
dem Bildschirm exakt so ausgegeben, wie eingetippt- bis auf die Escape-
Zeile;
Sequenz:
•
\b
positioniert den Cursor ein Zeichen zurück
\f
Seitenvorschub (neue Seite)
\\
Backslash \
\“
Anführungszeichen
\‘
Hochkomma
Escape-Sequenzen werden von Java erkannt durch den Baskslash (\) und
ein weiteres Zeichen, hier \n
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 97
Seite 98
Anmerkung zu den Escape-Sequenzen
Programmier-Styleguide
Die Escape-Sequenzen \t, \f, \r und \b werden von
Als Programmierstil hat sich durchgesetzt:
showMessageDialog nicht beachtet.
Variablennamen
Kleinbuchstaben
variable
Methodennamen
Kleinbuchstaben
methode ( )
Klassennamen
1. Buchstabe groß, Rest klein
Willkommen
Aus mehreren Wörtern zusammengesetzte Namen werden ohne Unterstrich
geschrieben, dabei wird ab dem zweiten Wort jeweils der erste Buchstabe
eines Wortes groß geschrieben. Für das erste Wort gilt die normale
Konvention.
Beispiel: dritteWurzel
addiereWerte ( )
Variable
Methode
Grundlagen der Informati
WS 2003/2004
Seite 99
Grundlagen der Informati
WS 2003/2004
Seite 100
Reservierte Schlüsselwörter
Folgende Schlüsselwörter gibt es in Java:
Bestimmte Wörter sind als Bezeichner nicht zulässig, da sie als
abstract, boolean, break, byte, case, catch, char, class,
Schlüsselwörter durch den Compiler besonders behandelt werden.
const *), continue, default,do, double, else, extends,
Schlüsselwörter bestimmen die „Sprache“ eines Compilers.
final, finally, float, for, goto *), if, implements,
import, instanceof, int, interface, int, long, native,
new, package, private, protected, public, return, short,
static, strictfp,super, switch, synchronized,this, throw,
transient, try, void, volatile, while.
*) Diese Schlüsselwörter sind reserviert, werden aber nicht benutzt.
Grundlagen der Informati
WS 2003/2004
Seite 101
// StringAddition.java
//Addiert zwei einzugebende Strings
import javax.swing.JOptionPane;
class StringAddition
{
public static void main(String args[])
{
String ersteEingabe, zweiteEingabe;
String ausgabe;
//Einlesen des ersten Textes:
ersteEingabe = JOptionPane.showInputDialog("Geben
Sie einen Text ein");
zweiteEingabe = JOptionPane.showInputDialog("Geben
Sie einen zweiten Text ein");
//Zusammenfuehrung beider Texte
ausgabe = ersteEingabe + zweiteEingabe;
//Ausgabe des zusammengefuegten Textes
JOptionPane.showMessageDialog(null, ausgabe, "Ergebnis",
JOptionPane.PLAIN_MESSAGE);
System.exit( 0 );
}
Grundlagen der Informati
WS 2003/2004
}
Seite 103
Grundlagen der Informati
WS 2003/2004
Seite 102
Die Ein- und Ausgabe erfolgt dann in folgenden Dialogfenstern
Grundlagen der Informati
WS 2003/2004
Seite 104
Eingabedialoge
Ausgabe-Dialoge
Die Methode JOptionPane.showInputDialog mit dem String("Geben
Sie einen Text ein")erzeugt das folgende Fenster:
Die Methode
JOptionPane.showMessageDialog(null, ausgabe, "Ergebnis",
JOptionPane.PLAIN_MESSAGE);
erzeugt das Fenster.
Der Anwender muss einen String eingeben, der mit der Return-Taste oder mit
einem Mausklick auf den OK-Button beendet wird.
Über dem Eingabefeld erscheint der Text, der der Methode im Programm
Hier hat die Methode 4 Argumente:
1.
null
Position des Fensters in Mitte des Bildschirms
2.
ausgabe
Nachricht, die angezeigt werden soll
String in der Titelleiste
mitgegeben wurde.
3.
"Ergebnis"
Der eingegebene String wird durch die Methode an das Programm zurück
4.
JOptionPane.PLAIN_MESSAGE Bestimmt Anzeige des Message-Dialogtyps
gegeben.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 105
Seite 106
Variablen, Datentyp, Deklaration
Zusammenstellung der Message-Dialogtypen
Bedeutung
•
Allgemein sind Variablen Platzhalter bzw. Speicherbereiche.
JOptionPane.ERROR_MESSAGE
Fehlermeldung
•
Variablen können eine bestimmte Menge von Werten annehmen. Diese
JOptionPane.INFORMATION_MESSAGE
informative Meldung;
Message-Dialogtyp
Icon
der User kann sie nur
Menge bezeichnet man als Datentyp.
•
Eine Deklaration Datentyp variablenName ordnet der Variable mit dem
Namen variablenName einen bestimmten Datentyp zu.
wegklicken
Variablen müssen stets deklariert werden, der Datentyp steht immer vor
JOptionPane.WARNING_MESSAGE
Warnmeldung
JOptionPane.QUESTION_MESSAGE
Fragemeldung
JOptionPane.PLAIN_MESSAGE
Meldung ohne Icon
dem Namen der Variable.
Durch die Deklaration wird ein bestimmter Speicherplatz im RAM reserviert.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 107
Seite 108
Beispiel für eine Deklaration: String ausgabe;
Wertzuweisungen
Gibt es in einem Programm mehrer Variablen des selben Datentyp, so kann
In der Applikation StringAddition sind die Ausdrücke
man deren Namen bei der Deklaration durch Kommata getrennt hinter den
ersteEingabe = JOptionPane.showInputDialog
Datentyp setzten:
("Geben Sie einen Text ein");
Beispiel: String ersteEingabe, zweiteEingabe;
zweiteEingabe = JOptionPane.showInputDialog
("Geben Sie einen zweiten Text ein");
ausgabe = ersteEingabe + zweiteEingabe;
Wertzuweisungen.
= ist der Zuweisungsoperator
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 109
Seite 110
Die Variable ersteEingabe bekommt den String zugewiesen, den der User
eingegeben hat.
Die Applikation Zahlen addieren
In der Applikation IntAddition sollen zwei ganze Zahlen über die Tastatur
Nach der Belegung der Variable durch den String, hat das Programm den
eingegebenen Wert im Hauptspeicher.
eingelesen und die Summe berechnet und ausgegeben werden.
Ganze Zahlen sind in Java vom Datentyp int (integer).
Die Anweisung
ausgabe = ersteEingabe + zweiteEingabe;
weist der Variablen ausgabe die Aneinanderreihung der beiden Strings zu.
Grundlagen der Informati
WS 2003/2004
Seite 111
Grundlagen der Informati
WS 2003/2004
Seite 112
// IntAddition.java
//Einlesen der ersten Zahl als String:
ersteEingabe = JOptionPane.showInputDialog("Geben Sie
die erste ganze Zahl ein");
zweiteEingabe = JOptionPane.showInputDialog("Geben Sie
die zweite ganze Zahl ein");
//Addiert zwei einzugebende ganze Zahlen
import javax.swing.JOptionPane;
class IntAddition
{
public static void main (String args[])
{
String ersteEingabe,
//1. Eingabestring
zweiteEingabe; //2. Eingabestring
int zahl1,
zahl2,
summe;
//Konvertierung der Eingabe von String nach int:
zahl1 = Integer.parseInt(ersteEingabe);
zahl2 = Integer.parseInt(zweiteEingabe);
//Addition der beiden Zahlen:
summe = zahl1 + zahl2;
//1. zu addierende Zahl
//2. zu addierende Zahl
//Summe von zahl1 und zahl2
//Ausgabe
JOptionPane.showMessageDialog(
null, "Die Summe ist " + summe,
Ergebnis",JOptionPane.PLAIN_MESSAGE);
System.exit ( 0 );
}
Grundlagen der Informati
WS 2003/2004
Seite 113
Die Applikation liefert folgende Ergebnisse
Grundlagen der Informati
WS 2003/2004
}
Seite 114
Datentypen und Typkonvertierung
Anmerkungen zu der Applikation IntAddition
•
Die Methode showMessageDialog kann nur Strings einlesen und auch nur
Strings weitergeben.
•
Jede Eingabe von der Tastatur ist daher ein String, d.h. auch wenn 5
eingetippt wird, ist 5 keine Zahl sondern ein String.
•
Sind 5 und 11 Zahlen, so ergibt 5 + 11 den Wert 16.
Sind 5 und 11 Strings, so ergibt “ 5“ + “ 11“ den String “511“
•
Zahlen werden durch + arithmetisch addiert, Strings werden
aneinandergereiht.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 115
•
Seite 116
Da über die Tastatur die Eingabe als String erfolgt, müssen die Strings in
Integer Zahlen konvertiert (umgewandelt) werden.
•
•
Das Ergebnis wird ausgegeben:
"Die Summe ist " + summe
Für die Typumwandlung von String in eine Integer-Zahl gibt es in Java die
"Die Summe ist " ist ein String, summe eine Integer-Zahl.
Methode Integer.parseInt. Dies ist eine Methode der Klasse Integer
String + Zahl ergibt String, d.h. der +-Operator reiht die Strings
aus dem Paket java.lang. Beispiel:
aneinander. summe wird automatisch in einen String konvertiert.
zahl1 = Integer.parseInt(ersteEingabe);
•
Die Zeile
summe = zahl1 + zahl2;
besteht aus den zwei Operationen = und +. Der Operator + addiert die
Werte der beiden Zahlen, der Zuweisungsoperator = weist diesen Wert der
Variablen summe zu.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 117
Seite 118
S c hlüsse lw ort
Die Primitiven Datentypen / Speicherkonzepte
•
Datentypen für ganzzahlige Werte (mit Vorzeichen)
byte
8 Bit
-128..127
im Arbeitsspeicher des Rechners.
short
16 Bit
-32768..32767
int
32 Bit
-231..231-1
long
64 Bit
-263..263-1
Jede Variable hat einen Namen, einen Typ, eine Größe und einen Wert
•
Bei der Deklaration am Beginn einer Klassendeklaration werden bestimmt
Speicherzellen für die jeweilige Variable reserviert.
Datentypen für Gleitkommazahlen
float
32 Bit
Der Name der Variable im Programmcode verweist während der Laufzeit
double
64 Bit
auf die Adresse dieser Speicherzellen
•
W e rte bereich
Variablennamen wie zahl1 und zahl2 beziehen sich auf bestimmte Stellen
•
•
S p eicherp latz
Die primitiven Datentypen bekommen standardmäßig die folgenden
Speichergrößen zugewiesen:
- 3.40292347E+38 bis
+ 3.40292347E+38
- 1.7976313486231570E+308 bis
+ 1.7976313486231570E+308
Datentypen für Boolesche Werte
boolean
1 Bit
false, true
Datentypen für Unicode-Textzeichen
char
16 Bit
\u0000…\uFFFF
Grundlagen der Informati
WS 2003/2004
Seite 119
Grundlagen der Informati
WS 2003/2004
Seite 120
// Zeichen.java
// Rechnen mit dem Datentyp char
Der primitive Datentyp char
-
Eine Zeichenkonstante ist ein Zeichen, eingeschlossen in einfache
Anführungszeichen. Beispiel char c = 'a';
-
In Java ist eine Zeichenkonstante vom Typ char
-
Ein char ist nicht vorzeichenbehaftet
-
Der Datentyp char ist 2 Byte groß und nimmt ein Unicode-Zeichen auf.
-
Mit Zeichenkonstanten kann man rechnen wie mit ganzen Zahlen
-
Man kann sie in ganzzahligen Ausdrücken verwenden
-
Beispiel: Zeichen '1' hat im Unicode-Zeichensatz den Wert 49
class Zeichen
{
public static void main (String args[])
{
int b, f, g, h;
char c, d, e;
b = 5;
c = '1';
d = 'A';
e = 66;
f = b + c;
g = c + d;
h = b + d;
System.out.println ("b = "+ b +" \nc = "+ c + "\nd = "+ d);
System.out.println ("e = "+ e +"\nf = "+ f + "\ng = "+ g );
System.out.println ("h = "+ h );
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 121
Seite 122
Zeichen.java liefert die Ausgabe
Typanpassungen (Casting) bei elementaren Datentypen
Müssen Datentypen konvertiert (umgewandelt) werden, so bezeichnet man
dies als Typanpassung.
Java unterscheidet zwei Arten von Typanpassung:
•
Automatische Typanpassung
Daten eines kleineren Datentyps werden automatisch dem größeren
angepasst.
•
Bemerkung:
Explizite Typanpassung
Ein größerer Typ kann einem kleineren Typ nur mit Verlust von
Das Zeichen '0' hat in Unicode den Wert 48, 'A' hat den Unicode
Wert 65.
Informationen zugewiesen werden.
Zwischen dem elementaren Datentyp boolean und den anderen elementaren
Datentypen findet keine Typanpassung statt.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 123
Seite 124
Automatische Typanpassung
•
Ohne Informationsverlust erfolgen die folgenden Zuweisungen
von Datentyp
Werte der Datentypen byte und short werden bei Rechenoperationen
automatisch in den Datentyp int umgewandelt.
•
in Datentyp
byte
short, char, int, long, float, double
short
int, long, float, double
char
int, long, float, double
int
long, float, double
long
float, double
float
double
Ist ein Operand vom Datentyp long, dann werden alle Operanden auf
long gesetzt.
Beispiele für die automatische Typanpassung:
1. Beispiel int b = 7; double c = b; ergibt c = 7.0
2. Beispiel long a, b = 6; int c = 3;
a = b +c; wandelt automatisch alle Operanden in den Datentyp long um.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 125
Seite 126
Bei der Umwandlung von Gleitpunktzahlen in Ganzzahlen kann es zum
Explizite Typanpassung
Verlust von Genauigkeit kommen.
Regel: Der gewünschte Typ für eine Typanpassung wird vor den
Die Stellen hinter dem Komma (Punkt) werden abgeschnitten.
umzuwandelnden Datentyp geschrieben. Der Zieldatentyp ist dabei
geklammert, d.h. (Typname) ausdruck
Bei zu großen Zahlen ist ein korrektes Ergebnis nicht möglich.
Beispiele: int n = (int) 5.316;
int m = (int) (4.315 + 1.66);
Beispiel double i = 345.886; int a = (int) i; ergibt a = 345;
Bei der Konvertierung eines größeren Ganzzahltyps in einen kleineren
werden die oberen Bits abgeschnitten.
Beispiel: int i = 385; byte a= (byte) i; ergibt a = -127
Grundlagen der Informati
WS 2003/2004
Seite 127
Grundlagen der Informati
WS 2003/2004
Seite 128
Die Umwandlung von short in char oder umgekehrt ist nur mit Hilfe der
Arithmetische Operationen:
expliziten Typumwandlung möglich (obwohl beide Länge 16 Bit haben).
Die Grundrechenoperationen in Java
Dies liegt am Vorzeichen von short, char hat kein Vorzeichen.
Die Grundrechenoperationen bestehen aus einem Operator und zwei Operanden
(z.B. Operation 1 + 2 hat Operator + und Operanden 1 und 2).
Der Wert von positiven Zahlen bleibt bei der Konvertierung erhalten.
Allgemein ist eine Operation gegeben durch einen Operator und mindestens einem
Beispiel: short i = 48; char a =
Operanden.
(char) i; ergibt a = '0'
Operationen mit dem selben Operator aber unterschiedlichen Datentypen können
zu verschiedenen Ergebnissen führen
(Beispiel die Stringaddition "1" + "2" liefert anderes Ergebnis als die IntegerAddition 1 + 2).
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 129
Seite 130
// Arithmetik.java
// Führt verschiedene arithmetische Operationen durch
class Arithmetik
{
public static void main (String args[])
{
int a,b,c,d; //ganze Zahlen
double x,y,z;
//reelle Zahlen
String ausgabe;
a = 6 * (3 - 1); b = 6 * 3 + 5;
x = 16 / 5; y = 16 / 5.0; z = 16.0 / 5;
c = 16 / 5; d = 16 % 5;
ausgabe = "Das Ergebnis ist:\na = "+ a + "\nb = "+ b;
ausgabe = ausgabe + "\nx = "+ x + "\ny = "+ y + "\nz = "+ z;
ausgabe = ausgabe + "\nc = "+ c + "\nd = "+ d;
System.out.println (ausgabe);
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 131
Seite 132
Der Additionsoperator A + B
Der Multiplikationsoperator A * B
Wendet man den zweistelligen Additionsoperator auf seine Operanden an, so
Der Operator multipliziert den Wert A mit dem Wert B. Es gelten die normalen
ist der Rückgabewert die Summe der Werte der beiden Operanden
Rechenregeln, d.h. Klammer vor Punktrechnung vor Strichrechnung.
Beispiel: int a = 6 + (3 + 4); ergibt a = 13
Beispiel: int a = 6 * (3 + 4); ergibt a = 42
Der Subtraktionsoperator A – B
Wendet man den zweistelligen Subtraktionsoperator auf die Operanden A und
B an, so ist der Rückgabewert die Differenz der Werte der beiden Operanden.
Beispiel: int a = 16 - (3 - 4); ergibt a = 17
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 133
Seite 134
Der Divisionsoperator A / B
Anmerkungen zum Divisionsoperator A / B
Der Operator / ist mit zwei ganzzahligen Operanden A und B eine ganzzahlige
•
Division.
Ist mindestens ein Operand eine Gleitpunktzahl, d.h. float oder double,
so ist das Ergebnis eine Gleitpunktzahl.
Das Ergebnis A / B ist wieder eine ganze Zahl. Der Nachkommateil des
Ergebnisses wird abgeschnitten.
Beispiel: int c = 16 / 5; ergibt c = 3
Ist bei einer ganzzahligen Division entweder Zähler oder Nenner negativ, so ist
das Ergebnis negativ. Dabei bestimmt sich der Quotient vom Betrag her nach
der Vorschrift, dass der Quotient die größtmögliche ganze Zahl ist, für die gilt:
|Quotient * Nenner| <= |Zähler|
Grundlagen der Informati
WS 2003/2004
Seite 135
Grundlagen der Informati
WS 2003/2004
Seite 136
•
Division durch 0
• Sind beide Operanden ganze Zahlen, so ergibt sich beim Interpretieren
Der Restwertoperator A % B für ganzzahlige Operanden
Der Restwertoperator oder Modulo-Operator gibt für ganzzahlige Operanden A
die Meldung
und B den Rest der ganzzahligen Division A / B an.
Das Ergebnis A % B ergibt sich aus A – (A / B) * B.
• Ist einer der Operanden eine Gleitpunktzahl, so ergibt sich als Ergebnis
Infinity mit Berücksichtigung des Vorzeichens
4.0 / 0 ergibt x =
es kann nur positiv sein, wenn der Zähler A positiv ist.
Beispiele: (-9) % 2 =
Beispiel double x = -4.0 / 0 ergibt x = -Infinity
double x =
Das Ergebnis von A % B kann nur negativ sein, wenn der Zähler A negativ ist,
denn (-9) / 2 = -4
-1
(-9) % (-2) = -1 denn (-9)/ (-2) = 4
Infinity
Null durch Null ergibt NaN (Not a number)
Beispiel 0.0 / 0.0 = NaN
9 % (-2) = 1
denn 9 / (-2) = -4
9 % 2 = 1
denn 9 / 2 = 4
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 137
Seite 138
Spezielle arithmetische Operatoren
Rechenreihenfolge (Präzedenz) der arithmetischen Operatoren
Operator
Operation
Präzedenz
()
Klammern
werden zuerst ausgewertet.
Sind Klammern von Klammern
umschlossen, werden sie von innen
nach außen ausgewertet.
*, /, %
+, -
Multiplikation,
Division,
Modulus
werden als zweites ausgewertet
Addition,
Subtraktion
werden zuletzt ausgewertet
Zuweisungsoperator
Beispiel
Bedeutung
+=
c += x
c=c + x
-=
c -= x
c=c - x
*=
c *= x
c = c * x
/=
c /= x
c = c / x
%=
c %= x
c = c % x
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 139
Seite 140
Inkrementoperator ++ und Dekrementoperator -Operator
Beispiel
Bedeutung
++
++c
erhöht c um 1, bevor der neue Wert von c in dem
Ausdruck verwendet wird, in dem sich c befindet
++
c++
verwendet den aktuellen Wert von c in dem
Ausdruck, in dem sich c befindet, und erhöht erst
dann c um 1
--
--c
erniedrigt c um 1, bevor der neue Wert von c in
dem Ausdruck verwendet wird, in dem sich c
befindet
--
c--
import javax.swing.JOptionPane;
class Inkrement
{
public static void main (String args[])
{
int c;
String ausgabe ;
c = 5;
ausgabe = c + ", ";
ausgabe += c++ + ", ";
ausgabe += c + "\n";
c = 5;
ausgabe += c + ", ";
ausgabe += ++c + ", ";
ausgabe += c;
verwendet den aktuellen Wert von c in dem
Ausdruck, in dem sich c befindet, und erniedrigt
erst dann c um 1
Da die Operatoren ++ und – nur einen Operanden haben, heißen sie unär.
JOptionPane.showMessageDialog(null, ausgabe);
System.exit ( 0 );
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 141
Seite 142
Die Sequenz
Kontrollstrukturen
Die Sequenz ist eine einfache Abfolge von Anweisungen
Eine Kontrollstruktur ist eine Abfolge von Anweisungen.
Jedes Programm kann mit Hilfe von drei Kontrollstrukturen geschrieben werden:
{
Anweisung 1;
1. Sequenz (sequence structure)
2. Auswahl oder Selektion (selection structure)
Anweisung n;
}
3. Wiederholung oder Schleife (repetition structure)
Die Darstellung der Sequenz als Struktogramm:
Anweisung 1
Anweisung n
Grundlagen der Informati
WS 2003/2004
Seite 143
Grundlagen der Informati
WS 2003/2004
Seite 144
Die Auswahl- oder Selektionsstruktur
Die Syntax der Selektion lautet in Java
In Abhängigkeit von einer Bedingung wird zwischen alternativen
Anweisungsabfolgen gewählt.
if (Bedingung)
Als Struktogramm kann die Selektionsstruktur wie folgt dargestellt werden:
{ Anweisung a1; … ;Anweisung an;
}
else
{ Anweisung b1;…;Anweisung bm;
Bedingung?
wahr
falsch
Anweisung a1
Anweisung b1
Anweisung an
Anweisung bm
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 145
Seite 146
Bemerkung
•
Bedingungen in Java können durch Vergleichsoperatoren gebildet werden
Besteht der Anweisungsblock nur aus einer einzigen Anweisung, so können
die geschweiften Klammern weggelassen werden.
Operator
in Java
Beispiel
Bedeutung
•
Die Bedingung nach if muss in runden Klammern stehen.
•
Die Bedingung nach if muss vom Typ boolean sein.
•
Der else-Zweig ist optional. Entfällt der else-Zweig, so spricht man von
>
x>y
x ist größer als y
einer bedingten Anweisung.
<
x<y
x ist kleiner als y
•
Ein else-Zweig bezieht sich immer auf das letzte if, das ohne zugehöriges
==
x == y
x ist gleich y
!=
x != y
x ist ungleich y
>=
x >= y
x ist größer gleich y
<=
x <= y
x ist kleiner gleich y
else im Programm vorkam.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 147
Seite 148
Bemerkung zu den algebraischen Vergleichsoperatoren
•
Logische Verknüpfungen von Ausdrücken
Der Operator == darf nicht mit dem Zuweisungsoperator = verwechselt
werden.
•
Alle algebraischen Vergleichsoperatoren können nur zwei Ausdrücke von
elementaren Datentypen vergleichen.
•
Operator
in Java
&&
Bedeutung
||
logisches oder
!
logisches nicht
logisches und
Strings sind Objekte und werden mit der Methode equals verglichen:
String1.equals(String2)
Beispiel
Java
Bedeutung
if (a < b && b < c)
b liegt zwischen a und c
if (b < a || b > c)
b ist kleiner als a oder größer als c
if (!(b < 4))
b ist nicht kleiner als 4
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 149
Seite 150
Die Wahrheitstabelle der logischen Verknüpfungen
Operand 1
Operand 2
logisches und &&
false
false
false
false
true
false
true
false
false
true
true
true
Bemerkung zu den logischen Operatoren
In Java gibt es sowohl für das logische UND als auch für das logische ODER
zwei verschiedene Operatoren.
•
Logische UND: && bzw. &
Wird der Operator & zwischen zwei Operanden verwendet, so wird der
Operand 1
Operand 2
logisches oder ||
false
false
false
rechte Operand immer ausgewertet, egal ob der linke Operand true oder
false
true
true
false ist.
true
false
true
true
true
true
Operand
logisches nicht !
false
true
true
false
Wird der Operator && verwendet, so wird der rechte Ausdruck nur dann
ausgewertet, wenn der linke Ausdruck true ist.
Die Operatoren && und & haben identische Wahrheitstabellen.
Grundlagen der Informati
WS 2003/2004
Seite 151
Grundlagen der Informati
WS 2003/2004
Seite 152
•
// Vergleiche.java
//If Anweisungen und Vergleichsoperatoren
Logische ODER-Operatoren: || bzw. |
Wird der Operator | zwischen zwei Operanden verwendet, so wird der
rechte Operand immer ausgewertet, egal ob der linke Operand true oder
false ist.
import javax.swing.JOptionPane;
class Vergleiche
{
public static void main (String args[])
{
Wird der Operator || verwendet, so wird der rechte Ausdruck nur dann
String ersteEingabe, zweiteEingabe, ausgabe;
int zahl1, zahl2;
ausgewertet, wenn der linke Ausdruck false ist.
Die Operatoren || und | haben identische Wahrheitstabellen.
•
ersteEingabe = JOptionPane.showInputDialog("Geben Sie die
erste ganze Zahl ein");
zweiteEingabe = JOptionPane.showInputDialog("Geben Sie die
zweite ganze Zahl ein");
Prioritäten
zahl1 = Integer.parseInt(ersteEingabe);
zahl2 = Integer.parseInt(zweiteEingabe);
! vor && vor ||
//Initialisierung von ausgabe als leerer String:
ausgabe = "";
Grundlagen der Informati
WS 2003/2004
Seite 153
//Bestimmung des Ausgabestrings
if (zahl1 == zahl2)
{
ausgabe = ausgabe + zahl1 + " == " + zahl2;
}
if (zahl1 != zahl2)
{
ausgabe = ausgabe + "\n" + zahl1 + " != " + zahl2;
}
if (zahl1 < zahl2)
{
ausgabe = ausgabe + "\n" + zahl1 + " < " + zahl2;
}
if (zahl1 > zahl2)
{
ausgabe = ausgabe + "\n" + zahl1 + " > " + zahl2;
}
if (zahl1 <= zahl2)
{
ausgabe = ausgabe + "\n" + zahl1 + " <= " + zahl2;
}
if (zahl1 >= zahl2)
{
ausgabe = ausgabe + "\n" + zahl1 + " >= " + zahl2;
}
if (ersteEingabe.equals(zweiteEingabe))
{
ausgabe = ausgabe + "\n" + ersteEingabe + " ist gleich "
+ zweiteEingabe;
}
else
{
ausgabe += "\n" + ersteEingabe + " ist nicht gleich "
+ zweiteEingabe;
}
JOptionPane.showMessageDialog(null, ausgabe);
System.exit ( 0 );
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 155
Seite 156
Geschachtelte if- und else- Anweisungen
Bemerkung
•
Jede lokale Variable, d.h. Variable innerhalb einer Methode muss vor der
if- Anweisungen können auch geschachtelt werden.
Ein else-Zweig gehört dabei immer zu dem letzten if, für das noch kein else-
Verwendung initialisiert werden. (Im Beispiel ausgabe = "";)
•
Grundlagen der Informati
WS 2003/2004
Seite 154
Werden lokale Variablen verwendet, bevor sie initialisiert wurden, so erzeugt
der Compiler eine Fehlermeldung
Zweig existiert.
Beispiel:
if (n < = 5)
if (a > b)
z = a;
else
z = b;
Soll eine andere Zugehörigkeit dargestellt werden, so müssen geschweifte
Klammern gesetzt werden.
Grundlagen der Informati
WS 2003/2004
Seite 157
Grundlagen der Informati
WS 2003/2004
Seite 158
//Alternative Bestimmung des Ausgabestrings
Mehrfache Alternative – else if
if ((zahl1 <= zahl2) && (zahl1 != zahl2))
{
ausgabe = ausgabe + zahl1 + " < " + zahl2;
ausgabe = ausgabe + "\n" + zahl1 + " <= " + zahl2;
ausgabe = ausgabe + "\n" + zahl1 + " != " + zahl2;
}
else if (zahl1 == zahl2)
{
ausgabe = ausgabe + "\n" + zahl1 + " == " + zahl2;
ausgabe = ausgabe + "\n" + zahl1 + " <= " + zahl2;
ausgabe = ausgabe + "\n" + zahl1 + " >= " + zahl2;
}
else
{
ausgabe = ausgabe + "\n" + zahl1 + " > " + zahl2;
ausgabe = ausgabe + "\n" + zahl1 + " >= " + zahl2;
ausgabe = ausgabe + "\n" + zahl1 + " != " + zahl2;
}
else if Anweisungen bieten die Möglichkeit, eine Auswahl unter
verschiedenen Alternativen zu treffen. Die Syntax in Java lautet
if (Bedingung1)
Anweisung1;
else if (Bedingung2)
Anweisung2;
else if (Bedingung n)
Anweisung n;
else
//der else-Zweig ist optional
Anweisung m;
Grundlagen der Informati
WS 2003/2004
Seite 159
Grundlagen der Informati
WS 2003/2004
Seite 160
Die Wiederholung oder Schleife
Schleifen mit Vorabprüfung (Abweisende Schleifen)
•
while-Schleife
Schleifen dienen dazu, eine bestimmte Abfolge von Anweisungen
(Schleifenrumpf) wiederholt auszuführen. Die Anweisungen werden
•
ausgeführt, so lange eine bestimmte Bedingung (Schleifenbedingung) wahr
Abhängigkeit von der Bewertung der Bedingung wiederholt ausgeführt
ist.
•
In einer while-Schleife kann eine Anweisung oder ein Anweisungsblock in
werden. Da die Bedingung vor der Ausführung der Anweisungen bewertet
Dabei unterscheidet man Schleifen, bei denen die Schleifenbedingung am
Anfang geprüft wird, und Schleifen, bei denen diese Prüfung am Ende
wird, spricht man auch von einer abweisenden Schleife.
•
erfolgt.
Die Bedingung wird berechnet und die Anweisungen dann ausgeführt, wenn
die Bedingung true ist.
•
Danach wird die Berechnung der Bedingung und die eventuelle Ausführung
der Anweisungen wiederholt.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 161
Seite 162
Bemerkung
Das Struktogramm für die while-Schleife
•
while Bedingung
Besteht der Schleifenrumpf nur aus einer Anweisung, so können die
geschweiften Klammern {} weggelassen werden.
Anweisung 1
•
Um keine Endlos-Schleife zu erzeugen, muss die Schleifenbedingung durch
eine Anweisung im Schleifenrumpf manipuliert werden.
Anweisung n
Beispiel
Die Syntax in Java für eine while-Schleife lautet:
while (i < 10)
while ( Bedingung)
{
Anweisung 1;....;Anweisung n;
}
{
.....
i = i + 1;
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 163
Seite 164
// Durchschnitt.java
/*Berechnet den Durchschnitt von x einzugebenden Zahlen.
Die Anzahl x wird eingelesen
*/
import javax.swing.JOptionPane;
class Durchschnitt
{
public static void main (String args[])
while (zaehler <= anzahl)
{
eingabe = JOptionPane.showInputDialog("Geben Sie die "
+ zaehler +". Zahl ein");
//Konvertierung der Eingabe von String nach int:
zahl = Integer.parseInt(eingabe);
// Addition der Zahl zur Gesamtsumme
gesamtsumme = gesamtsumme + zahl;
// Zaehler um 1 erhöhen
++zaehler;
{
String eingabe, anzahl1, ausgabe;
int anzahl;
double durchschnitt;
int zahl = 0, zaehler = 1, gesamtsumme = 0;
}
//Berechnung des Durchschnitts
durchschnitt = (double) gesamtsumme / anzahl;
//Einlesen der Anzahl der einzugebenden Zahlen als String:
anzahl1 = JOptionPane.showInputDialog("Geben Sie die Anzahl der
einzugebenden Zahlen ein");
//Ausgabe
JOptionPane.showMessageDialog(null,"Durchschnitt:"+durchschnitt
System.exit ( 0 );
anzahl = Integer.parseInt (anzahl1);
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 165
Seite 166
Abweisende Schleife mit for
Bemerkung zur for-Schleife
for-Schleife
•
Die for-Schleife ist eine abweisende Schleife, da zuerst geprüft wird, ob die
Bedingung für ihre Ausführung zutrifft.
Die Syntax in Java für eine for-Schleife lautet:
•
Zu Beginn der Schleife wird einmalig die Initialisierung durchgeführt.
Hierdurch wird die lokale Variable, die in der Regel als Laufvariable
for ( Initialisierer ; Bedingung ; Aktualisierung)
{
Anweisung 1;....;Anweisung n;
}
verwendet wird, definiert und initialisiert. Sie ist nach Beendigung der forSchleife ungültig.
•
Die Schleifenbedingung wird vor dem Durchlaufen des Schleifenrumpfes,
d.h. vor jedem Schleifeneintritt, getestet. Ergibt der Ausdruck false, wird
Beispiel:
die Schleife nicht durchlaufen und beendet.
for (int i = 1; i <= 10; i++)
System.out.println (i);
Grundlagen der Informati
WS 2003/2004
Seite 167
Grundlagen der Informati
WS 2003/2004
Seite 168
•
Zwei Beispiele zur for-Schleife
Die Aktualisierung, d.h. die Veränderung der Laufvariablen, wird am Ende
Beispiel 1
jedes Schleifendurchlaufs, aber noch vor dem nächsten Schleifeneintritt
ausgeführt.
•
Die for-Schleife ist eine spezielle Variante der while-Schleife. Sie wird
// Addierer.java
/*
Addiert die ersten 50 ungeraden Zahl
*/
typischerweise zum Zählen benutzt.
•
Im ersten und letzten Teil einer for-Schleife können Kommata eingesetzt
werden. Damit lassen sich entweder mehrere Variablen deklarieren oder
mehrere Ausdrücke nebeneinander schreiben.
Beispiel:
for (int i = 1, j = 9; i <= j; i++, j--)
System.out.println (i + “*“ + j + “ = “ + i*j);
class Addierer
{
public static void main (String args[])
{
int summe = 0;
for (int i = 1; i <= 50; i = i+2)
{
summe = summe + i;
}
System.out.println (summe);
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 169
Seite 170
Beispiel 2
•
// GeschachtelteSchleife.java
/*
Beispiel für das Schachteln von 2 for-Schleifen
*/
Die for-Schleife ist äquivalent mit
{
Initialisierer;
while (Bedingung)
class GeschachtelteSchleife
{
public static void main (String args[])
{
int summe = 0;
for (int i = 1; i <= 10; i++)
{
for (int j = 1; j <= 5 ; j++)
System.out.print (i*j + "\t");
{
Anweisung 1;…;Anweisung n;
Aktualisierung;
}
System.out.println ();
}
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 171
Seite 172
Die in der Applikation Durchschnitt.java benutzte while-Schleife kann durch
folgende for-Schleife ersetzt werden:
Ein weiteres Beispiel für abweisende Schleifen
Die Applikation Ggt.java soll den größten gemeinsamen Teiler von zwei
for (int i = 1; i<= anzahl; i++)
{
eingabe = JOptionPane.showInputDialog("Geben Sie die "
+ zaehler +". Zahl ein");
positiven ganzen Zahlen berechnen. Die beiden Zahlen sollen eingegeben
werden. Falls eine der beiden Zahlen nicht positiv ist, soll eine Fehlermeldung
ausgegeben werden.
//Konvertierung der Eingabe von String nach int:
zahl = Integer.parseInt(eingabe);
// Addition der Zahl zur Gesamtsumme
gesamtsumme = gesamtsumme + zahl;
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 173
Seite 174
// Ggt.java
/*Berechnet den groessten gemeinsamen Teiler von
zwei positiven integer Zahlen
*/
//Sind beide Zahlen positiv?
if (zahl1 <=0 || zahl2 <= 0)
{
JOptionPane.showMessageDialog(null,"Die Zahlen muessen
positiv sein!","Fehler",JOptionPane.ERROR_MESSAGE);
System.exit (0);
}
import javax.swing.JOptionPane;
class Ggt
{
public static void main (String args[])
while (zahl2 > 0)
{ //Vertausch zahl1 und zahl2
hilf = zahl1;
zahl1 = zahl2;
zahl2 = hilf;
zahl2 = zahl2 % zahl1;
}
{
String
ersteEingabe, zweiteEingabe, ausgabe;
int zahl1, zahl2, hilf;
ersteEingabe = JOptionPane.showInputDialog("Geben Sie die erste
positive ganze Zahl ein");
zweiteEingabe =JOptionPane.showInputDialog("Geben Sie die zweit
positive ganze Zahl ein");
//Ausgabe
JOptionPane.showMessageDialog(null, "ggt von „
+ersteEingabe+" und "+zweiteEingabe+" ist "+zahl1);
System.exit ( 0 );
}
zahl1 = Integer.parseInt (ersteEingabe);
zahl2 = Integer.parseInt (zweiteEingabe);
}
Grundlagen der Informati
WS 2003/2004
Seite 175
Grundlagen der Informati
WS 2003/2004
Seite 176
Die Ausgabe der Applikation Ggt.java ist
Schleife Prüfung am Ende (Annehmende Schleife)
do while-Schleife
Die Syntax in Java lautet
do
{ Anweisung 1;…;Anweisung n;
} while ( Bedingung);
Struktogramm der do while Schleife:
oder falls eine Zahl nicht echt positiv:
Anweisung 1
Anweisung n
while Bedingung
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 177
Seite 178
//BinaerUmwandler.java
/*
Umwandlung einer ganzen Zahl in eine binäre Zahl
*/
import javax.swing.JOptionPane;
Bemerkung zur do while Schleife
•
Die do while-Schleife ist eine annehmende Schleife, da die
Schleifenbedingung erst nach jedem Schleifendurchgang geprüft wird.
•
Bevor es zum ersten Test kommt, ist der Rumpf schon einmal durchlaufen.
•
Achtung: Nach while (Bedingung); muss ein Semikolon gesetzt werden.
class BinaerUmwandler
{
public static void main (String args[])
{ String eingabe;
eingabe = JOptionPane.showInputDialog (null,
"Geben Sie eine ganze Zahl ein, die umgewandelt werden soll");
int zahl = Integer.parseInt(eingabe);
//Initialisierung
String binaer = "";
int rest;
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 179
Seite 180
Die Endlosschleifen
do
{
rest = zahl % 2;
zahl = zahl / 2;
Sind die Bedingungen von Schleifen immer wahr, so handelt es sich um
Endlosschleifen.
//Zusammensetzung des Strings zur Binaerdarstellung
binaer = rest + binaer;
} while (zahl > 0);
Beispiele
while-Schleife
JOptionPane.showMessageDialog(null,"Die ganze Zahl "+ eingabe
+" hat die binaere Darstellung "+binaer);
while (true)
;
System.exit( 0 );
oder
}
}
while ( 0 == 0)
{
// immer wieder und immer wieder
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 181
Seite 182
Ausstieg aus Schleifen
Beispiel für eine Endlosschleife mit for
Alle drei Ausdrücke im Kopf der Schleife sind bei einer for Schleife optional.
• Die Schlüsselwörter break und continue ermöglichen es,
Anweisungsblöcke zu verlassen bzw. wieder einzusteigen.
Damit ist die einfachste Endlosschleife gegeben durch
• Wird innerhalb einer for-, while- oder do/while Schleife eine breakfor (; ; )
Anweisung gesetzt, so wird der Schleifendurchlauf beendet.
;
• break beendet immer die innerste Schleife
Die Semikolons sowohl im Schleifenkopf als auch im Schleifenrumpf müssen
Beispiel
stets gesetzt werden.
for (int i = 1; i < 1000;i++)
Beispiel für eine Endlosschleife mit do while
{
System.out.println(i);
do
if (i > 5)
;
break;
while (true);
}
Grundlagen der Informati
WS 2003/2004
Seite 183
Grundlagen der Informati
WS 2003/2004
Seite 184
Beispiel für ein Schleifenausstieg mit Label
Ausstieg aus beliebig tief geschachtelten Schleifen
•
Zum Ausstieg aus beliebig tief geschachtelten Schleifen wird ein so
•
Ein Label besteht aus einem Java-Bezeichner, an den ein Doppelpunkt
genanntes Label benutzt, um anzuzeigen, wohin der Sprung gehen soll.
gehängt wird.
class BreakMitLabel
{
public static void main (String args[])
{
TestSchleife:
for (int i = 1; i < 10;i++)
{
for (int j = 1; j < 10;j++)
{
System.out.println (i + j);
if ( j > 5)
break TestSchleife;
}
}
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 185
Seite 186
Bemerkung zum Einsatz eines Labels
Noch ein Beispiel für ein Schleifenausstieg mit Label
•
Das Label gibt der Schleife einen Namen (im Beispiel TestSchleife)
•
Die break-Anweisung springt hinter die Schleife, die den Namen des Labels
class BreakMitLabel2
{
public static void main (String args[])
{
TestSchleife:
for (int i = 1; i < 3;i++)
{
NochEinLabel:
for (int j = 1; j < 10;j++)
{
System.out.println (i + j);
if ( j > 2)
break NochEinLabel;
}
}
}
}
trägt.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 187
Seite 188
Das Schlüsselwort continue
Beispiel für den Einsatz von continue
Im Gegensatz zu break beendet continue die Schleife nicht, sondern
class BeispielMitContinue
{
public static void main (String args[])
{
int zahl = 12;
while (zahl > 0)
{
zahl --;
if (zahl % 3 == 0)
continue;
System.out.println ("zahl = " + zahl);
}
überspringt die restlichen Anweisungen innerhalb der Schleife, um den
nächsten Durchgang zu starten.
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 189
Seite 190
Die Applikation BeispielMitContinue liefert die Ausgabe
Zur 2. Kontrollstruktur „Auswahl oder Selektion“
Neben der if-Anweisung gibt es noch eine weitere Anweisung, die zur
Kontrollstruktur „Auswahl oder Selektion“ gehört:
Dies ist die switch – Anweisung.
Bemerkung: Die continue-Anweisungen können wie das break mit einem Label
ergänzt werden.
Grundlagen der Informati
WS 2003/2004
Seite 191
Grundlagen der Informati
WS 2003/2004
Seite 192
Die switch – Anweisung
Bemerkung zur switch-Anweisung
Die switch-Anweisung dient zur Selektion unter mehreren Alternativen (vgl.
•
Der Ausdruck nach switch muss vom Datentyp byte, char, short oder
int sein.
else if-Anweisung).
•
Die Syntax in Java lautet
Nach case muss eine Konstanten stehen, die bereits bei der Übersetzung
des Programms berechnet werden konnte.
switch (Ausdruck)
{
case
konst1: Anweisungen1;
break;
case
•
Nach case darf jeweils nur eine Konstante stehen.
•
Wenn es keine passende Konstante gibt, wird der Programmablauf bei der
//ist optional
default- Anweisung fortgesetzt, falls diese vorhanden ist.
konst2: Anweiungen2;
•
Die break-Anweisung ist von der Syntax her nicht erforderlich, sollte aber
break; //ist optional
stets gesetzt werden.
……
default : Anweisungen;
•
//ist optional
Ohne die break-Anweisung werden nach einer Übereinstimmung alle
weiteren Anweisungen ausgeführt
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 193
Seite 194
Beispiel für eine switch Anweisung
oder (mit identischem Ergebnis)
Sei monat eine Integer-Variable:
switch
case
case
case
case
switch (monat){
case 4: tage =
break;
case 6: tage =
break;
case 9: tage =
break;
case 11: tage =
break;
case 2: tage =
break;
default: tage =
}
(monat){
4:
6:
9:
11: tage = 30;
break;
case 2:
tage = 28;
break;
default: tage = 31;
30;
30;
30;
30;
}
28;
31;
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 195
Seite 196
Damit hat eine Methode folgende Gestalt
Methoden
Eine Methode ist ein Block von Anweisungen, der gewisse Eingabeparameter
als Input benötigt und nach Ausführungen der Anweisungen einen Wert zurück
methodenName (p1, p2,…,pn)
gibt. Dabei kann die Menge der Eingabeparameter oder die Rückgabe auch leer
{
sein.
Anweisung 1;
…….;
Eine Methode besteht aus drei Teilen:
Anweisung m;
Dem Methodennamen, der Eingabe- oder Parameterliste und dem
Methodenrumpf
}
Methodenrumpf.
Der Methodenrumpf enthält eine Block von einzelnen Anweisungen, die von
geschweiften Klammern { } umschlossen sind.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 197
Seite 198
Die Bestandteile einer Methode
Die Eigenschaften der Parameterliste
Der Methodenname legt den Namen der Methoden fest.
•
Sie besteht aus endlich vielen Parametern, die von runden Klammern
umschlossen werden.
Der Methodenrumpf enthält die Anweisungen und Verarbeitungsschritte, die
•
Die Parameterliste kann auch leer sein. In diesem Fall muss man dennoch
die runden Klammern hinter dem Methodennamen aufführen, d.h.
die Parameterdaten als Input verwenden.
methodenName()
Er wird von geschweiften Klammern {} umschlossen.
•
Parameter können beliebige Daten sein (z.B. Zahlenwerte, Strings, Objekte).
Parameter werden wie Variablen definiert, d.h. zuerst der Datentyp, dann der
Name.
Die Parameter werden durch Kommata getrennt.
•
Wichtig: Die Reihenfolge der Parameter in der Methodendeklaration ist
bindend festgelegt.
Grundlagen der Informati
WS 2003/2004
Seite 199
Grundlagen der Informati
WS 2003/2004
Seite 200
Anmerkungen zu Methoden
Bekannte Beispiele für Methoden
•
Methode showMessageDialog der Klasse JOptionPane
•
Methode showInputDialog der Klasse JOptionPane
•
Methode parseInt der Klasse Integer
•
Methode main
•
Methoden müssen stets vollständig in der Klasse angegeben werden, der sie
angehören.
•
Es gibt keine Methoden außerhalb von Klassen.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 201
Seite 202
Methodendeklaration
Methode ohne Rückgabe
Man unterscheidet zwei Arten von Methoden: Methoden ohne Rückgabewert
und Methoden mit Rückgabewert.
void methodenName (Datentyp p1,…,Datentyp pn)
Wie Variablen müssen Methoden auch deklariert werden:
{
…….;
Die Syntax einer Methode mit Rückgabe
}
Datentyp des Rückgabewertes methodenName (Datentyp p1,…,Datentyp pn)
{
…….;
•
return Rückgabewert;
Das reservierte Wort void gibt an, dass die Methode keinen
Rückgabewert liefert.
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 203
Seite 204
Der Aufruf einer Methoden
Statische Methoden
Der Aufruf erfolgt durch die Angabe des Namens der Methode mit Angaben der
Eine spezielle Art von Methoden sind die statischen Methoden. Diese Methoden
Eingabeparameter
benötigen kein Objekt (die Bedeutung von Objekte werden wir später
behandeln).
Eine statische Methode wird unter Angabe des Namens derjenigen Klasse, in
Beispiele:
der sie deklariert ist, aufgerufen, d.h.
Integer.parseInt (ersteEingabe);
Klassenname.Methodenname (…);
JOptionPane.showMessageDialog(null,"Die Zahlen muessen
Sie heißen Klassenmethoden.
positiv sein!","Fehler",JOptionPane.ERROR_MESSAGE);
Der Klassenname kann auch weggelassen werden, wenn die Methode in
derselben Klasse deklariert ist.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 205
Seite 206
Deklaration von statischen Methoden
Deklariert wird eine statische Methode, indem man vor dem Rückgabetyp das
reservierte Wort static schreibt.
Statische Methode ohne Rückgabe
static void methodenName (Datentyp p1,…,Datentyp pn)
{
…….;
Statische Methode mit Rückgabe
}
static Datentyp des Rückgabewertes methodenName (Datentyp p1,…,Datentyp pn)
{
…….;
return Rückgabewert;
}
Grundlagen der Informati
WS 2003/2004
Seite 207
Grundlagen der Informati
WS 2003/2004
Seite 208
Beispiele für den Einsatz von statischen Methoden
// Pythagoras.java
/*Liest zwei Zahlen ein und gibt die Wurzel ihrer
Quadratsumme aus
*/
class MaximumBestimmung {
static int maximum (int x, int y){
if (x > y)
return x;
else
return y;
}
import javax.swing.JOptionPane;
class Pythagoras {
static double liesDouble() {
String eingabe;
double zahl;
eingabe =JOptionPane.showInputDialog("Geben Sie eine
Zahl ein:");
zahl = Double.parseDouble (eingabe);
return zahl;
}
public static void main (String args[]) {
int a = 3, b = 10;
int m;
m = maximum(a,b);
System.out.println("Maximum ist "+m);
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 209
Seite 210
static double hypothenuse (double x, double y){
double h;
h = Math.sqrt(x*x + y*y);
return h;
}
Methoden der Klasse Math
•
Für die arithmetischen und trigonometrischen Standardfunktionen hat Java
eine spezielle Klasse, die Klasse Math.
public static void main (String args[]) {
double a, b, c;
a = liesDouble();
b = liesDouble();
c = hypothenuse(a,b);
String ausgabe = "f( " + a+ ", " + b +") = " + c;
JOptionPane.showMessageDialog(null,ausgabe);
System.exit (0);
• Math gehört zum Paket java.lang, dem einzigen Paket, das
automatische in jedes Programm importiert wird.
• Math-Methoden können damit jederzeit genutzt werden.
•
Alle Math-Methoden sind static.
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 211
Seite 212
• cos, sin, tan: Trigonometrische Funktionen, in Bogenmaß
Einige Methoden der Klasse Math
double cos (double a)
• abs: Liefert den Betrag einer Zahl
double abs (double a)
double sin(double a)
float abs (float a)
double tan(double a)
int abs (int a)
• exp: Liefert die Eulersche Zahl e hoch einen double Wert
long abs (long a)
• acos, asin, atan: Liefert den arc cosinus, arc sinus, arc tan eines Winkels
double exp (double a)
double acos (double a)
• log: Liefert den natürlichen Logarithmus (d.h. zur Basis e) von einem
double asin (double a)
double-Wert
double atan (double a)
double log (double a)
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 213
Seite 214
• max, min: Liefert Maximum bzw. Minimum zweier Zahlen
• pow: Liefert den Wert des ersten Arguments potenziert mit dem zweiten
Argument
double max (double a, double b)
double pow (double a, double b)
float max(float a, float b)
• random: Liefert einen positiven Zufalls- double-Wert größer gleich 0.0 und
int max(int a, int b)
kleiner 1.0
long max (long a, long b)
double random()
double min (double a, double b)
• round: Runden auf ganze Zahlen
float min(float a, float b)
long round (double a)
int min(int a, int b)
int round (float a)
long min (long a, long b)
• sqrt: Liefert die Wurzel
double sqrt (double a)
Grundlagen der Informati
WS 2003/2004
Seite 215
Grundlagen der Informati
WS 2003/2004
Seite 216
Arrays
Überladen von Methoden
•
Ein Array ist ein grundlegende Datenstruktur.
•
Unter einem Array (Feld) versteht man eine Anordnung von Elementen
desselben Datentyps.
•
Die einzelnen Elemente heißen Komponenten und können über Indizes
angesprochen werden.
besitzen und unterschiedliche, aber für den Compiler unterscheidbare, Typen
•
In Java beginnen die Indizes eines Arrays stets mit 0.
annehmen
•
Der Zugriff auf die i-te Komponente des Arrays mit dem Namen arrayName
erfolgt durch arrayName[i-1].
Eine Methode ist gekennzeichnet durch Rückgabewert, Name und Parameterliste.
Eine überladene Methode ist eine Methode mit gleichem Namen wie eine andere
Methode, aber eine davon verschiedenen Parameterliste. Es gibt zwei Arten:
•
•
Eine Methode kann die gleiche Anzahl von Parametern wie eine andere
Die Anzahl der Parameter kann unterschiedliche sein.
Beispiel die Methode min aus der Klasse Math.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 217
Seite 218
Arrays werden in drei Schritten erstellt
zu b:
a. Deklaration der Arrayvariablen
Mit dem new-Operator kann das Array erzeugt werden.
b. Zuweisung von Speicher für die Komponenten des Arrays
Beispiel:
c.
Initialisierung der Komponenten
arrayName = new byte [4] legt ein Array-Ojekt mit 4 Komponenten an.
zu a.
Durch die Deklaration deiner Arrayvariablen wird eine Referenzvariable definiert,
die auf ein Array-Objekt zeigen kann.
Die allgemeine Form der Definition einer Referenzvariablen auf ein
eindimensionales Array ist:
Diese Komponenten werden bei Zahlen mit dem default-Wert 0 belegt.
zu c:
Durch Zuweisung von Werten an die Komponenten können die Default-Werte
mit sinnvollen Werten überschrieben werden, z.B. arrayName[0] = 3;
Typname[] arrayName;
oder
Typname arrayName [];
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 219
Seite 220
zu a,b,c: Implizites Erzeugen über eine Initialisierungsliste
Beispiele für das Erzeugen von Arrays
Eine andere Möglichkeit, ein Array anzulegen, ist, das Array implizit über eine
Initialisierungsliste zu erzeugen und gleichzeitig zu initialisieren.
/* a
/* b
/* c
Beispiel: byte[] arrayName = {1,2,3,4}
Das Erzeugen des Array-Objektes wird hier vom Compiler im Verborgenen
durchgeführt. Die Definition der Referenzvariablen arrayName, das Anlegen
*/
*/
*/
int feld[];
feld = new int [8];
for (int i = 0; i < feld.length; i++)
feld[i] = i*i;
oder
des Arrays, sowie die Initialisierung der Array-Elemente erfolgt in einem Schritt.
/* a
*/
/* b,c */
int feld[];
feld = new int[] {0,1,4,9,16,25,36,49};
oder
/* a,b,c
*/
int feld[] = {0,1,4,9,16,25,36,49};
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 221
Seite 222
Bemerkung zu Arrays
// TemperaturJan.java
//Initialisierung und Ausgabe eines Arrays
•
class TemperaturJan{
Arrays kann man mit einem beliebigen Datentyp oder einer beliebigen
Klasse erstellen. Dies können primitive Datentypen, Objekte oder andere
public static void main (String args[]){
final int ANZAHL_TAGE = 31;
String ausgabe;
double temperatur[] = new double [ANZAHL_TAGE];
Arrays sein. Im letzteren Fall spricht man dann von mehrdimensionalen
Arrays.
•
//Initialisierung mit Durchschnittswerten;
for (int i = 0; i < temperatur.length;i++)
temperatur [i] = 5.3;
Die Größe eines Arrays wird zum Zeitpunkt der Erstellung des Arrays
festgelegt, danach kann sie nicht mehr verändert werden.
//Ausgabe der Arraywerte
ausgabe = "Tag\tTemperatur\n";
for (int i = 0; i < temperatur.length;i++)
ausgabe += i+ "\t" + temperatur [i] + "\n";
System.out.println (ausgabe);
•
Mit Hilfe der Eigenschaft length kann man die Anzahl der Komponenten
des Arrays erhalten. (siehe temperatur.length im Programm-Beispiel)
•
Java erlaubt einen Zugriff ausschließlich auf solche Elemente eines Arrays,
die auch tatsächlich vorhanden sind. Bei jedem Zugriff auf ein Array wird
der angegebene Index mit den in der Array-Deklaration angegebenen
}
}
Grenzen verglichen.
Grundlagen der Informati
WS 2003/2004
Seite 223
Grundlagen der Informati
WS 2003/2004
Seite 224
Konstanten in Java
•
Grundlagen der Objektorientierung
Das Schlüsselwort final (siehe Beispiel TemperaturJan) indiziert, dass
die deklarierte Variable (ANZAHL_TAGE) eine Konstante ist. Sie wird bei
ihrer Deklaration initialisiert und kann danach nicht wieder verändert werden.
•
•
Manchmal werden Konstanten auch als „read-only“ Variablen bezeichnet.
Der Versuch, eine final-Variable zu verändern, resultiert in einer
Die Welt besteht aus Objekten. Das sind
•
Gegenstände (Autos, Flugzeuge, Schiffe…)
•
Lebewesen (Menschen, Tiere, Pflanzen…)
•
abstrakte Konstrukte (Staaten, Konzerne, Konten…)
Für diese Objekte gilt
Fehlermeldung des Compilers.
•
Konstanten werden üblicherweise mit Großbuchstaben geschrieben.
•
Sie können in Kategorien -d.h. in sinnvolle Einheiten- zusammengefasst werden
•
Jedes Objekt ist individuell, es hat mindestens eine Eigenschaft, die es von
anderen Objekten der gleichen Kategorie unterscheidet (ein Objekt „Person“ hat
einen Namen, ein Objekt „Auto“ eine Marke…)
•
Objekte erfahren Prozesse oder führen sie selber aus (ein Mensch wird
geboren, der Kontostand von Person A verringert sich…)
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 225
Seite 226
Die Theorie der Objektorientierung fasst dies zu einem Konzept zusammen.
In der Objektorientierung werden die folgende Bezeichnungen verwendet:
Kategorien
→
Klassen
Eigenschaften
→
Attribute
Prozesse
→
Methoden
Definition: Ein Objekt im Sinne der Theorie der Objektorientierung ist die
Darstellung eines individuellen Gegenstandes oder Wesens (konkret oder abstrakt,
real oder virtuell) aus dem zu modellierenden Problembereich der realen Welt.
Ein Objekt ist eindeutig bestimmt durch seine Attribute (Daten, Eigenschaften) und
durch seine Methoden (Funktionen, Verhalten).
Ein Objekt wird durch folgendes Diagramm dargestellt
Klasse
attribute
methoden()
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 227
Seite 228
Ein wesentliches Konzept der Objektorientierung ist, dass die Attribute von den
Klassen
Methoden vor der Außenwelt gekapselt sind. Sie können (im allgemeinen) nur
•
durch die Methoden verändert werden.
Eine Klasse ist ein Schema, eine Schablone, eine Kategorie, in die
bestimmte individuelle Objekte eingeordnet werden können.
Die Methoden eines Objektes sind die Schnittstellen des Objektes zur
•
Außenwelt.
Eine Klasse kann als eine Menge von gleichartigen Objekten aufgefasst
werden.
Es bedeutet, dass die internen Strukturen von Objekten vor dem Verwender
•
verborgen sind.
Ein Objekt ist immer eine konkrete Ausprägung einer Klasse, man sagt:
•
•
Attribute
Ein Objekt ist eine Instanz seiner Klasse.
Die Klasse ist der zentrale Begriff aus Sicht der objektorientierten
Programmierung.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 229
Seite 230
Generalisierung und Vererbung
•
•
Einzelne Klassen können zu weiteren Klassen zusammengefasst werden.
Z.B. können die Klasse der Autos, die Klasse der Flugzeuge, die Klasse der
•
Schiffe zur Klasse der Fortbewegungsmittel zusammengefasst werden.
Man sagt, dass die einzelnen Klassen generalisiert bzw. verallgemeinert
Alle Attribute und Methoden der Superklasse sind gleichzeitig Attribute und
Methoden jeder ihrer Subklassen.
Man sagt, dass ein Objekt einer Subklasse die Attribute und Methoden der
Superklasse erbt.
•
Dieses Prinzip nennt man Vererbung.
•
Für Subklassen spezifische Attribute und Methoden können nicht geerbt
werden.
•
Die allgemeine Klasse heißt Superklasse, Oberklasse oder Mutterklasse.
•
Die speziellen Klassen heißen Subklassen, Unterklassen oder Kindklassen.
•
werden.
Eine Superklasse hat eine besondere Beziehung zu ihrer Subklasse (oder
ihren Subklassen), eine „Ist-ein“-Beziehung (‚is-a‘ relation)
Grundlagen der Informati
WS 2003/2004
Seite 231
Grundlagen der Informati
WS 2003/2004
Seite 232
UML
Fallbeispiel (das Arbeiten mit Objekten)
•
UML (Unified Modelling Language) ist eine Sprache zur visuellen
Problembeschreibung: die Laufzeit eines Marathonläufers soll ermittelt
Modellierung von Strukturen und Prozessen von Software.
werden. Die Startzeit und die Ankunftzeit werden eingegeben.
•
Sie ist Standard der modernen Software-Entwicklung
Version 1.0: Zunächst sollen die Zeiten in vollen Stunden angegeben werden.
•
Eines der Diagramme der UML ist das Klassendiagramm
Wir entwickeln die Software mit Hilfe der drei Phasen:
•
Jede Klasse wird als ein Rechteck dargestellt, mit dem Namen der Klasse
Analyse: Anforderungen an die Software ermitteln und beschreiben
im oberen Teil, allen Daten (Attributen) im mittleren Teil und den Methoden
(Verwendung von Klassendiagrammen)
im unteren Teil.
Entwurf: Aufbauend auf der Analyse, die Softwarearchitektur und die
•
Oft wird in der UML einer der beiden unteren Teile weggelassen, wenn sie
Spezifikation der Komponenten erstellen (insb. Algorithmen der Methoden)
für die jeweilige Betrachtung nicht interessant sind.
Implementierung: Codierung der Klassen und Programme
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 233
Seite 234
// MarathonTeilnehmer.java
//Die Klasse ermöglicht die Berechnung der Gesamtlaufzeit eines
//Marathonläufers
Die Syntax für eine Klasse lautet
class MarathonTeilnehmer{
//Attribute
int startZeit,ankunftZeit,laufDauer;
class Klassenname{
Deklaration der Attribute;
//Methoden:
void setzeStartZeit (int uhrzeit){
startZeit = uhrzeit;
}
void setzeAnkunftZeit (int uhrzeit){
ankunftZeit = uhrzeit;
}
int liesLaufDauer (){
laufDauer = ankunftZeit - startZeit;
return laufDauer;
}
Deklaration der Methoden;
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 235
Seite 236
Lokale Variablen und Attribute
•
Die zugehörige Applikation des Marathon-Beispiels
Ein Aufrufparameter einer Methode (z.B. uhrzeit), hat einen
Geltungsbereich nur für die eine Methode, die mit ihm aufgerufen wird.
•
Er ist eine lokale Variable. Lokale Variablen gelten („leben“) immer nur in der
Methode, in der sie deklariert sind.
•
Attribute sind keine lokalen Variablen. Sie sind Variablen, die in der
gesamten Klasse bekannt sind. Sie gelten damit auch in jeder Methode, die
in der Klasse deklariert ist.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 237
Seite 238
// MarathonApplikation.java
//Erzeugung des Marathon-Läufers tergat:
MarathonTeilnehmer tergat = new MarathonTeilnehmer();
import javax.swing.JOptionPane;
//setze die Zeiten:
tergat.setzeStartZeit (start);
tergat.setzeAnkunftZeit (ankunft);
class MarathonApplikation {
public static void main (String args[]){
String ersteEingabe, zweiteEingabe, ausgabe;
int start, ankunft, dauer;
//berechne Laufdauer:
dauer = tergat.liesLaufDauer();
//Einlesen der Eingabestrings:
ersteEingabe = JOptionPane.showInputDialog ("Gib die
Startzeit des Marathon-Läufers ein:");
zweiteEingabe = JOptionPane.showInputDialog ("Gib die
Ankunftzeit ein:");
//erzeuge Ausgabestring:
ausgabe = "Die Marathonzeit betraegt " +dauer + " Stunden.";
//Ausgabe auf dem Bildschirm
JOptionPane.showMessageDialog (null, ausgabe,
"Marathonzeit",JOptionPane.PLAIN_MESSAGE);
//Konvertierung String in int:
start = Integer.parseInt(ersteEingabe);
ankunft = Integer.parseInt(zweiteEingabe);
System.exit( 0 );
}
}
Grundlagen der Informati
WS 2003/2004
Seite 239
Grundlagen der Informati
WS 2003/2004
Seite 240
Der new-Operator
•
•
Die Zeile (*) kann auch in zwei Zeilen geschrieben werden:
Deklaration der variable durch Klassenname variable;
Die Erzeugung eines Objektes geschieht mit dem new-Operator und der
hierdurch wird Speicherplatz reserviert.
Zuordnung der Variablen:
KlassenName variable = new KlassenName();
Erzeugung des Objektes mit dem new-Operator, d.h.
(*)
variable = new KlassenName();
•
Der new-Operator erzeugt bzw. instanziiert ein Objekt.
•
Nach dem new-Operator erscheint eine spezielle Methode, der so genannte
Konstruktor. Er trägt den Namen der Klasse des erzeugten Objekts und
initialisiert die Attribute.
Je nach Definition des Konstruktors müssen eventuell Parameter
mitgegeben werden.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 241
Seite 242
// MarathonApplikation.java
Version 2.0: Genauere Zeitangaben
import javax.swing.JOptionPane;
Die Eingabe der Zeiten soll im Format hh:mm:ss erfolgen.
class MarathonApplikation {
Die Ausgabe der Laufzeit soll im selben Format erfolgen.
public static void main (String args[]){
String ersteEingabe, zweiteEingabe, ausgabe;
Uhrzeit start, ankunft;
String dauer;
//Einlesen der Eingabestrings:
ersteEingabe =
JOptionPane.showInputDialog ("Startzeit (hh:mm:ss)");
zweiteEingabe =
JOptionPane.showInputDialog ("Ankunftzeit (hh:mm:ss)");
//Erzeugung zweier Objekte der Klasse Uhrzeit:
start = new Uhrzeit (ersteEingabe);
ankunft = new Uhrzeit (zweiteEingabe);
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 243
Seite 244
//Erzeugung des Marathon-Läufers tergat:
MarathonTeilnehmer tergat = new MarathonTeilnehmer();
//setze die Zeiten:
tergat.setzeStartZeit (start);
tergat.setzeAnkunftZeit (ankunft);
// MarathonTeilnehmer.java
//Die Klasse ermöglicht die Berechnung die Gesamtlaufzeit eines
//Marathonläufers
class MarathonTeilnehmer{
//Attribute
Uhrzeit startZeit, ankunftZeit;
String laufDauer;
//berechne Laufdauer:
dauer = tergat.liesLaufDauer();
//erzeuge Ausgabestring:
ausgabe = "Die Marathonzeit betraegt " +dauer ;
//Methoden:
void setzeStartZeit (Uhrzeit uhrzeit){
startZeit = uhrzeit;
}
void setzeAnkunftZeit (Uhrzeit uhrzeit){
ankunftZeit = uhrzeit;
}
String liesLaufDauer (){
laufDauer = ankunftZeit.minus(startZeit);
return laufDauer;
}
//Ausgabe auf dem Bildschirm
JOptionPane.showMessageDialog (null, ausgabe,
"Marathonzeit",JOptionPane.PLAIN_MESSAGE);
System.exit( 0 );
}
}
Grundlagen der Informati
WS 2003/2004
}
Grundlagen der Informati
WS 2003/2004
Seite 245
Seite 246
// Uhrzeit.java
//Die Klasse ermöglicht die Berechnung der Zeiten im Format hh:mm:ss
String minus (Uhrzeit zeit){
//subtrahiert die Uhrzeit zeit und gibt String hh:mm:ss zurueck
int differenz, diffStunde, diffMinute, diffSekunde;
String rueckgabe ="";
differenz = rechneInSekunden() - zeit.rechneInSekunden();
diffStunde = differenz / 3600;
differenz = differenz % 3600;
diffMinute = differenz / 60;
diffSekunde = differenz % 60;
class Uhrzeit{
//Attribute
int stunde, minute, sekunde;
//Konstruktor:
Uhrzeit (String text) {
stunde = Integer.parseInt (text.substring(0,2));
minute = Integer.parseInt (text.substring (3,5));
sekunde = Integer.parseInt (text.substring (6,8));
}
//Methoden:
int rechneInSekunden() {
int sekundenZeit; //Uhrzeit in Sekunden (lokale Variable)
sekundenZeit = sekunde;
sekundenZeit = sekundenZeit + 60*minute;
sekundenZeit = sekundenZeit + 3600*stunde;
return sekundenZeit;
Grundlagen der Informati
}
WS 2003/2004
Seite 247
rueckgabe += diffStunde + " h ";
rueckgabe += diffMinute + " min ";
rueckgabe += diffSekunde +" sec ";
return rueckgabe;
}
}
Grundlagen der Informati
WS 2003/2004
Seite 248
Die Deklaration eines Konstruktors
Die Methode substring()
•
Konstruktoren sind Methoden zur Initialisierung von Objektattributen.
Sie ist definiert durch substring (int beginn, int ende).
•
Sie heißen genau wie die Klasse.
Sei text ein String. Dann liefert der Methodenaufruf
•
Im Unterschied zu anderen Methoden wird bei ihnen kein Rückgabewert
text besteht (Strings beginnen mit dem Index 0).
deklariert.
•
•
text.substring(3,5), einen Teilstring, der aus dem 4. bis 5. Element von
Konstruktoren werden bei der Objekterzeugung mit dem new-Operator
Beispiel:
aufgerufen.
String text = “HALLO“;
Ein Konstruktor hat allgemein die Syntax:
String text2 = text.substring(0,2);
KlassenName (Datentyp p1,…,Datentyp pn){
ergibt text2 = “HA“;
Anweisungen;
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 249
Seite 250
Ein weiteres Beispiel für das Arbeiten mit Objekten und das
// Konto.java
//Die Klasse implementiert Konten
Zusammenspiel von Objekten
public class Konto{
Es soll eine Applikation programmiert werden, die 5 Konten mit einem
//Attribute
int kontNr;
double saldo;
Startguthaben von 100 Euro einrichtet und Überweisungen von einem Konto zu
einem anderen Konto durchführt.
//Konstruktor
public Konto(int kontNr){
this.kontNr = kontNr;
saldo = 100; //Startguthaben
}
//Methoden
public int getKontoNr(){
return kontNr;
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 251
Seite 252
// Bankautomat.java
//Applikation, die Konten erzeugt und Überweisungen ermöglicht
public double getSaldo(){
return saldo;
}
import javax.swing.JOptionPane;
public class Bankautomat{
public void einzahlen (double betrag){
saldo += betrag;
}
public static void main (String args[]) {
final int ANZAHL_KONTEN = 5;
public void abheben (double betrag){
saldo -= betrag;
}
//erzeugt Array von Konten mit Kontonummer 0,1,2,3,4
Konto konto[] = new Konto[ANZAHL_KONTEN];
for (int i = 0; i< konto.length;i++){
konto[i] = new Konto(i);
}
Konto vonKonto, nachKonto;
double betrag;
String eingabe, ausgabe;
public void ueberweisen(Konto nachKonto, double betrag){
saldo -= betrag;
nachKonto.einzahlen(betrag);
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 253
Seite 254
eingabe =JOptionPane.showInputDialog("Überweisung von
Kontonr.");
vonKonto = konto[Integer.parseInt(eingabe)];
eingabe = JOptionPane.showInputDialog("...nach Kontonr.");
nachKonto = konto[Integer.parseInt(eingabe)];
eingabe = JOptionPane.showInputDialog("Betrag:");
betrag = Double.parseDouble(eingabe);
Das Schlüsselwort this
•
•
Der Bezeichner this dient dazu, auf das Objekt selbst zu verweisen
Auf eine eigene Methode oder ein eigenes Attribut kann man verweisen mit
der Syntax this.methode() bzw. this.attribut
•
//Überweisung durchführen:
vonKonto.ueberweisen(nachKonto, betrag);
Solange die Attributnamen nicht mehrdeutig sind, braucht this nicht
benutzt zu werden.
• this muss verwendet werden, wenn es Namenskonflikte mit gleichnamigen
//Ausgabe:
ausgabe = "Kontostand von Kontonr." + vonKonto.getKontoNr();
ausgabe += ": " + vonKonto.getSaldo() + " Euro \n";
ausgabe += "Kontostand von Kontonr."+ nachKonto.getKontoNr();
ausgabe += ": " + nachKonto.getSaldo() +" Euro";
JOptionPane.showMessageDialog(null,ausgabe);
System.exit( 0 );
lokalen Variablen gibt (s. kontNr ist einmal das Attribut von Konto, und
einmal der Name des Eingabeparameters des Konstruktors).
•
Bemerkung: Namenskonflikte könnten natürlich auch vermieden werden,
indem man der lokalen Variable einen anderen Namen gibt. In der Praxis
wird aber gerade bei Konstruktormethoden hiervon Abstand genommen.
}
}
Grundlagen der Informati
WS 2003/2004
Seite 255
Grundlagen der Informati
WS 2003/2004
Seite 256
Bemerkung zum Standardkonstruktor
Ausnahmen – Exceptions
•
•
Stellt der Compiler fest, dass kein Konstruktor definiert wurde, so baut der
Ausnahmen sind in Java Objekte. Man unterscheide zwischen
automatisch selbst einen.
•
•
Diesen nennt man Standardkonstruktor.
•
•
Der Standardkonstruktor ist immer parameterlos.
Error: schwere Systemfehler
Exception: „normaler Fehler“, der vom Programm kontrolliert werden
kann
•
Eine Ausnahme oder Exception zeigt an, dass ein Problem während der
Ausführung eines Programms aufgetaucht ist, z.B. Division durch 0,
Bereichsüberschreitung von Array-Indizes, Nichtkompatible Datentypen beim
Typumwandeln, unbekannte Datei beim Lesen,....
•
Solche Fehler bringen ein Programm meist zum Absturz, wenn man sie nicht
abfängt.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 257
Seite 258
Beispiele für Exceptions
Werden die Array Grenzen nicht eingehalten (s. Programmbeispiel), so wird
zur Laufzeit die folgende Exception erzeugt und das Programm wird beendet.
class ArrayGrenzen{
public static void main (String args[]) {
Wird im Programm durch 0 dividiert, so wird zur Laufzeit die folgende
Exception erzeugt und das Programm wird beendet.
Falsche Formate erzeugen eine NumberFormatException
class Cast{
public static void main (String args[]) {
int a[] = new int [10];
//Initialisierung
for(int i = 0;i< a.length;i++)
a[i] = i*i;
String s1="12", s2 = "a";
int i1 = Integer.parseInt(s1);
int i2 = Integer.parseInt(s2);
}
for (int i = a.length; i>=0;i--)
System.out.println (a[i]);
}
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 259
Seite 260
Exception Handling
•
Exceptions sind Objekte der Klasse Exception aus dem Paket java.lang
•
oder einer Unterklasse (z.B. NumberFormatException).
Eine Ausnahme Behandlung kann in Java durch eine Kombination von einem
try- (Versuchen) mit einem oder mehreren catch- (Abfangen) Codeblöcken
•
Errors sind Objekte der Klasse Error.
•
Die Klassen Exception sowie Error sind Unterklassen von Throwable.
•
Ausnahmen, die von Error oder von RuntimeException abgeleitet sind,
erfolgen. Der try-Block legt den Programmbereich fest, der überwacht wird, d.h.
try{
Anweisungen, die eine Ausnahme verursachen können
}
catch (Ausnahmetyp e1){
Anweisungen zum Reagieren und Beheben
}
catch (Ausnahmetyp e1){
Anweisungen zum Reagieren und Beheben
}
…weitere catches
sind unkontrollierte Ausnahmen
•
der eine Ausnahme erzeugen/auswerfen könnte.
Alle anderen Ausnahmen sind kontrollierte Ausnahmen.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 261
Seite 262
Das folgende Programm reagiert auf den Laufzeitfehler im Programm Cast.java
class Cast2{
public static void main (String args[]) {
String s1="12", s2 = "a", s3 = "9";
int i1,i2,i3 ;
i1= i2 = i3 = 0;
try{
i1 = Integer.parseInt(s1);
i2 = Integer.parseInt(s2);
i3 = Integer.parseInt(s3);
}
catch(NumberFormatException e){
System.out.println("Keine Zahl");
}
System.out.println(i1+i2+i3);
System.out.println(i1*i3);
}
}
Optional kann nach dem catch-Block ein finally-Block folgen.
Der Teil im finally Block wird immer ausgeführt, auch wenn in try und
catch ein return, break, oder continue steht.
Die Syntax lautet dann
try{
Anweisungen, die eine Ausnahme verursachen können
}
catch (Ausnahmetyp e1){
Anweisungen zum Reagieren und Beheben
}
…weitere catches
finally {
Anweisungen
}
Das Programm liefert die Ausgabe
Grundlagen der Informati
WS 2003/2004
Seite 263
Grundlagen der Informati
WS 2003/2004
Seite 264
import javax.swing.JOptionPane;
Die folgende Applikation Wochentag2.java fängt Fehler der Kategorie
ArrayIndexOutOfBoundsException und NumberFormatException sowie
eine Exception, die durch das Klicken des Abbruch-Buttons erzeugt wird.
class Wochentag2{
public static void main (String args[]) {
String eingabe, ausgabe; int zahl;
String wochentag[] =
{"Samstag","Sonntag","Montag","Dienstag",
"Mittwoch","Donnerstag","Freitag"};
Hier wird der Fehler explizit mit der throw-Anweisung ausgeworfen.
while (true){
try{
eingabe = JOptionPane.showInputDialog ("Eingabe
Wochentag");
if (eingabe == null)
//User klickt "abbrechen"
throw new Exception ("Ende");
Eine Exception kann mit throw new Ausnahmetyp(); geworfen (erzeugt)
werden.
int hilf = Integer.parseInt(eingabe);
zahl = hilf;
//Tag 1 ist Sonntag, Tag 7 ist Samstag
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 265
Seite 266
if (hilf == 7)
hilf %= 7;
throws im Methodenkopf angeben
Neben dem Einzäunen von problematischen Blöcken durch einen try- und catch-
ausgabe = "Der Tag "+zahl+" ist ein“+wochentag[hilf];
JOptionPane.showMessageDialog(null,ausgabe);
Block gibt es noch eine andere Möglichkeit auf Exceptions zu reagieren:
Im Methodenkopf wird eine throws-Klausel eingeführt.
}
catch (ArrayIndexOutOfBoundsException ab){
JOptionPane.showMessageDialog(null, "kein Wochentag");
}
Beispiel String readFirstLineFromFile (String filename)
throws IOException{ ….};
catch (NumberFormatException nfe){
Dadurch zeigt eine Methode an, dass sie möglicherweise eine Exception
JOptionPane.showMessageDialog(null,"keine Zahl!");
}
catch (Exception e){
auswerfen wird, aber diese nicht selbst behandelt, sondern diese unter
Umständen an die aufrufende Methode weitergibt.
JOptionPane.showMessageDialog(null,"Tschuess");
System.exit(0);
Eine Methode muss alle kontrollierten Ausnahmen, die sie auslösen kann, auch
deklarieren. (D.h. Ausnahmen, die von der Klasse Error und
}
}
RuntimeException abgeleitet sind, müssen nicht angekündigt werden).
}
Grundlagen der Informati
WS 2003/2004
}
Grundlagen der Informati
WS 2003/2004
Seite 267
Seite 268
Runden von Zahlen
•
•
Die Methoden round() und rint() der Klasse Math runden Zahlen.
Mit Hilfe von rint() und round() können auch Zahlen auf Nachkomma-Stellen
gerundet werden.
• round() rundet auf die nächste Ganzzahl vom Typ long (kaufmännisches
•
Runden).
Beispiel: Runden auf 2 Nachkommastellen
Math.rint(a*100)/100. liefert für a = 1.3456 den Wert 1.34
Beispiel: double a = 97.56; // ergibt Math.round(a) = 98;
• rint() liefert einen double-Wert und rundet bei .5 auf die nächste gerade
Zahl.
Beispiel: 13.5 wird durch rint() auf 14.0 gerundet, 12.5 dagegen auf 12.0
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 269
Seite 270
Formatieren von Zahlen
•
Beispiel für eine Formatierung
Die Klasse Decimalformat aus dem Paket java.text dient zur
import java.text.DecimalFormat;
formatierten Ausgabe von Zahlen. Dem Konstruktor wird ein
class Formatieren{
public static void main (String args[]){
double a = 98963478.9735468;
Formatierungsstring übergeben, d.h. eine Vorlage wie die Zahlen zu
formatieren sind.
•
Beispiele für Symbole im Formatierungsstring:
DecimalFormat zweiStellen = new DecimalFormat ("#,###.00");
String ausgabe =zweiStellen.format(a);
•
0 repräsentiert eine Ziffer
•
# steht für eine Ziffer. Ist an dieser Stelle keine angegeben, bleibt die
System.out.println (ausgabe);
}
}
Stelle leer
•
. trennt Vor- und Nachkommastellen
•
, gruppiert die Ziffern. Eine Gruppe ist so groß wie der Abstand von
ergibt
„,“ zu „.“
Grundlagen der Informati
WS 2003/2004
Seite 271
Grundlagen der Informati
WS 2003/2004
Seite 272
Erstellen eines Ausgabefensters mit Festlegung der Größe des
Das folgende Programmbeispiel (s.nächste Folie) zeigt die Ausgabe
Ausgabebereichs sowie mit Scroll-Funktion
in einem Fenster mit 15 Zeilen und 10 Spalten und Scroll-Funktionalität
•
•
•
Die Klasse JTextArea aus dem Paket javax.swing ist eine GUI-
und sofort erzeugt. Das Objekt ausgabeBereich hat damit 15 Zeilen und 10
auszugeben.
Spalten Text.
Die Parameter in den Klammern beim Aufruf des Konstruktors geben die
Anzahl der Zeilen sowie Spalten vor
•
Zunächst wir ein Objekt ausgabeBereich der Klasse JTextArea deklariert
Komponente, die es ermöglicht, mehrere Zeilen Text auf dem Bildschirm
Die Klasse JScrollPane aus dem javax.swing-Paket liefert eine GUI-
•
Danach wird ein Objekt scroller der Klasse JScrollPane instanziiert.
•
Der String ausgabe wird mit der Methode setText in das Objekt
ausgabeBereich gesetzt.
Komponente mit Scroll-Funktionalität.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 273
Seite 274
import javax.swing.*;
class AusgabeScroll{
public static void main (String args[]){
String ausgabe;
double [ ] a = new double [50];
for (int i = 0; i < a.length;i++)
a [i] = 5.0;
ausgabe = "Feld Nr.\t Wert\n";
for (int i = 0; i < a.length;i++)
ausgabe += (i)+ " \t " + a[i] + "\n";
Die Auswahlbox
Wir wollen als nächstes dem Anwender eine Auswahlbox mit JavaProgrammen zur Verfügung stellen. Durch das Auswählen eines Programms
und das Bestätigen durch OK soll dieses Programm dann auch sofort
automatisch ausgeführt werden.
//Erstellen des Ausgabebereichs
JTextArea ausgabeBereich = new JTextArea(15,10);
JScrollPane scroller = new JScrollPane(ausgabeBereich);
ausgabeBereich.setText (ausgabe);
JOptionPane.showMessageDialog(null,scroller,
"Ausgabe",JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 275
Seite 276
Die Auswahlbox kann mit einer Variante der Methode showInputDialog
Die Klasse Object ist die Wurzelklasse der „Klassenhierarchie“ von Java:
erstellt werden. Diese ist definiert durch
Jede Java-Klasse hat Object als Oberklasse, d.h. z.B. Strings, Arrays, selbst
definierte Klassen.
public static Object showInputDialog(
Component mutterKomponente,
Object nachricht,
String titel,
int messageType,
Icon icon,
Object [] auswahlWerte,
Object vorausgewaehlterWert)
Sie wird also mit 7 Parametern aufgerufen und gibt ein Objekt der Klasse
Object zurück.
Grundlagen der Informati
WS 2003/2004
Seite 277
Grundlagen der Informati
WS 2003/2004
Seite 278
Die Bedeutung der Parameter:
Der Aufruf kann dann wie folgt erfolgen:
• mutterKomponente Fenster bzw. der Fensterteil, in dem der Dialog
erscheinen soll (hier null, da Standardfenster)
String [] moeglicheWerte ={"eins", "zwei", "drei"};
Object ausgewaehlterWert = JOptionPane.showInputDialog(
• nachricht Das anzuzeigende Objekt
null, "Waehle aus", "Input",
• title Der Text in der Fensterzeile
JOptionPane.INFORMATION_MESSAGE,
• messageType z.B. INFORMATION_MESSAGE
null,moeglicheWerte, moeglicheWerte[0]);
• icon anzuzeigendes Icon, hier keins, null
• auswahlWerte Array von Object (hier Strings), die die möglichen
Auswahlwerte ergibt
• vorausgewaehlterWert ein Wert, der vorausgewählt ist
Grundlagen der Informati
WS 2003/2004
Seite 279
Grundlagen der Informati
WS 2003/2004
Seite 280
// AuswahlMenue.java
import javax.swing.*;
if(gewaehlterWert == null){
//beendet Schleife, wenn Anwender "Abbruch" klickt
break;
} else if (gewaehlterWert.equals ("BinaerUmwandler")){
BinaerUmwandler.main (aufrufArray);
} else if (gewaehlterWert.equals ("Durchschnitt")){
Durchschnitt.main(aufrufArray);
} else if (gewaehlterWert.equals ("Ggt")){
Ggt.main(aufrufArray);
} else if (gewaehlterWert.equals ("MarathonApplikation"
MarathonApplikation.main(aufrufArray);
} else if (gewaehlterWert.equals ("Pythagoras")){
Pythagoras.main(aufrufArray);
} else if (gewaehlterWert.equals ("StringAddition")){
StringAddition.main(aufrufArray);
}
public class AuswahlMenue{
public static void main (String args[]) {
//konstanter Aufrufparamter fuer main
final String[] aufrufArray = {""};
String[] moeglicheWerte =
{"BinaerUmwandler","Durchschnitt","Ggt",
"MarathonApplikation","Pythagoras",
"StringAddition","Vergleiche","Willkommen"};
Object gewaehlterWert;
while (true) { //Endlosschleife
try{
gewaehlterWert =
JOptionPane.showInputDialog(null,
"Waehlen Sie ein Programm aus",
"Java Programme",
JOptionPane.QUESTION_MESSAGE,null,
moeglicheWerte,moeglicheWerte[0]);
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 281
Seite 282
} else if (gewaehlterWert.equals ("Vergleiche")){
Vergleiche.main(aufrufArray);
} else if (gewaehlterWert.equals ("Willkommen")){
Willkommen.main(aufrufArray);
}
}catch (Exception e){};
Referenzdatentypen im Vergleich zu primitiven Datentypen
In Java gibt es fundamentale Unterschiede zwischen Objekten und Daten
vom primitiven Datentyp,
d.h. int, double, boolean, char, long, float.
}
System.exit(0);
}
•
Eine Variable eines primitiven Datentyps kann nur genau einen Wert zu
}
einem bestimmten Zeitpunkt annehmen
•
Objekte bestehen aus Daten, d.h. aus Objekten oder primitiven Datentypen
und haben Methoden.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 283
•
Seite 284
Variablen vom primitiven Datentyp belegen einen bestimmten Platz im
Eine Klasse Person sei wie folgt definiert:
Speicher. Bei Verwendung im Programm wird ihr Wert kopiert und
verarbeitet (Bsp. int a = 5; int b = a).
•
Eine Variable, die ein Objekt darstellt, ist dagegen eine Referenz auf den
Speicherort, an dem sich das Objekt befindet, also seine Speicheradresse.
Man nennt sie daher Referenzdatentypen.
•
Bei Verwendung im Programm wird die Referenz übergeben.
// Person.java
public class Person {
//Attribute:
String name;
//Konstruktor:
Person ( String name) {
this.name = name;
}
}
Das nächste Programm veranschaulicht den Unterschied zwischen
Referenzdatentypen und primitiven Datentypen.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 285
Seite 286
import javax.swing.*;
Die Applikation erzeugt die folgende Ausgabe
public class PersonenTest {
public static void main (String args[]) {
Person subjekt1, subjekt2;
int x, y;String ausgabe;
//primitive Datentypen
x = 1;
y = x;
y = 2;
//Objekte
subjekt1 = new Person ("Tom"); // erzeugt Objekt Tom
subjekt2 = subjekt1;
subjekt2.name = "Andrea";
//Ausgabe
ausgabe = "x = "+ x +"\ny = " +y;
ausgabe += "\nName von subjekt1: " + subjekt1.name;
ausgabe += "\nName von subjekt2: " + subjekt2.name;
JOptionPane.showMessageDialog ( null, ausgabe) ;
System.exit (0);
•
Da x und y primitive Datentypen sind, wird durch y = x der Wert kopiert.
Eine Veränderung von y führt daher nicht zu einer Veränderung von x.
• subjekt1 und subjekt2 sind vom Datentyp Person, also von einem
Referenzdatentyp. Somit wird durch subjekt2 = subjekt1 bewirkt,
dass beide Variablen auf das selbe Objekt zeigen und dieses verändern
können.
}
Grundlagen der Informati
WS 2003/2004
}
Seite 287
Grundlagen der Informati
WS 2003/2004
Seite 288
Gleichheit von Objekten und die Methode equals()
Öffentlichkeit und Privatsphäre
Durch objekt1 == objekt2 werden die Referenzen auf die Objekte
•
miteinander verglichen.
Oft ist es sinnvoll Attribute und Methoden einer Klasse nur teilweise oder
gar nicht der Öffentlichkeit zur Verfügung zu stellen.
Möchte man aber die Inhalte zweier Objekte miteinander vergleichen, so kann
•
die Methode equals() verwendet werden.
Man spricht von Kapselung, wenn die Attribute vor der Außenwelt
verborgen sind und nur über die eigenen Methoden verändert werden
string1.equals(string2) ist true, wenn die beiden Strings string1 und
string2 identisch sind.
objekt1.equals(objekt2) ist dagegen true, wenn die Referenzen
können.
•
Die Kapselung ist eines der wichtigsten Konzepte der Objektorientierung.
•
Somit kann kein anderes Programm oder Objekt auf verborgene Attribute
übereinstimmen.
zugreifen und dort unbeabsichtigt Effekte bewirken.
Um die Inhalte auf Gleichheit zu Überprüfen müssen die einzelnen Attribute
explizit angegeben werden bzw. die Methode equals() überschrieben werden.
•
Auch wird dadurch verhindert, dass das Objekt unbeabsichtigt in anderen
Programmen etwas zerstört.
Beispiel: objekt1.name.equals(objekt2.name)
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 289
Seite 290
Sichtbarkeit
In Java sind Zugriffsmodifikatoren erlaubt für Klassen, Schnittstellen,
In einer Klasse kann bei einer Definition jeder einzelnen Komponente separat
spezifiziert werden, in welcher Weise der Zugriff auf diese Komponente
Methoden, Konstruktoren und Attribute.
Die nächste Tabelle zeigt die möglichen Zugriffsmodifikatoren
möglich ist. Unterschieden werden kann zwischen private, protected,
Element
public und keine Angabe.
Spezifizierer in selber
Klasse
private
nichts
angegeben
protected
public
Attribut
X
X
X
X
Methode
X
X
X
X
sichtbar
Konstruktor
X
X
X
X
Klasse
X
X
Schnittstelle
X
X
in Unterklasse in selbem
Paket
private
sichtbar
nichts
angegeben
sichtbar
protected
sichtbar
sichtbar
sichtbar
public
sichtbar
sichtbar
sichtbar
überall
sichtbar
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 291
Seite 292
Wenn wir in der Klasse Person.java das Attribut name mit private
schützen, so kann die Applikation PersonenTest nicht mehr hierauf
zugreifen.
Es müssen also Methoden definiert werden, die den Zugriff auf die
Attribute ermöglichen:
// Person.java
public class Person {
//Attribute:
private String name;
//Konstruktor:
Person ( String name) {
this.name = name;
}
// Methoden:
public String liesName () {
return name;
}
void schreibName ( String text) {
name = text;
}
}
// Person.java
public class Person {
//Attribute:
private String name;
//Konstruktor:
Person ( String name) {
this.name = name;
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 293
Seite 294
import javax.swing.*;
Die Applikation erzeugt
public class PersonenTest {
public static void main (String args[]) {
Person subjekt1, subjekt2;
String ausgabe ="";
//Objekte:
subjekt1 = new Person ("Tom"); // erzeugt Objekt Tom
subjekt2 = new Person ("Kai"); //erzeugt Objekt Kai
ausgabe += "1. Momentaufnahme: ";
ausgabe += "subjekt1 = " + subjekt1.liesName() + ", ";
ausgabe += "subjekt2 = " + subjekt2.liesName() + "\n";
subjekt2.schreibName("Thomas"); //ändert Namen
ausgabe += "2. Momentaufnahme: ";
ausgabe += "subjekt1 = " + subjekt1.liesName() + ", ";
ausgabe += "subjekt2 = " + subjekt2.liesName() + "\n";
//Ausgabe:
JOptionPane.showMessageDialog ( null, ausgabe) ;
System.exit (0);
Der name von subjekt2 konnte also kontrolliert durch die eigenen
Methoden verändert werden.
}
}
Grundlagen der Informati
WS 2003/2004
Seite 295
Grundlagen der Informati
WS 2003/2004
Seite 296
Vererbung
•
•
Mitarbeiter.
Die Vererbung ist eines der wesentlichsten Konzepte der
•
Objektorientierung.
•
Dies wird durch das reservierte Wort extends im Kopf der Klasse
ausgedrückt. class Abteilungsleiter extends Mitarbeiter
Vererbung ist ein Mechanismus, der es erlaubt, bestehenden
•
Programmcode zu benutzen und ihn den eigenen Bedürfnissen
Ein Objekt der Klasse Abteilungsleiter kann damit die Attribute und
Methoden von Mitarbeiter nutzen. Im Beispiel wird ein zusätzliches
anzupassen.
•
Im folgenden Beispiel ist die Klasse Abteilungsleiter eine Subklasse von
Attribut eingesetzt sowie zwei Methoden hinzugefügt.
Die abgeleitete Klasse, d.h. die Subklasse übernimmt die Attribute und
Methoden der Elternklasse (Superklasse).
•
Die Subklasse kann selbst entscheiden, welche Attribute und Methoden
sie übernehmen will und welche sie hinzufügen bzw. überschreiben will.
•
In Java kann jede Subklasse nur eine Superklasse haben. Man spricht
von Einfachvererbung.
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 297
Seite 298
public class Mitarbeiter{
public class Abteilungsleiter extends Mitarbeiter{
private String name;
private int personalNummer;
private double gehalt;
//Attribute:
private String abteilung; //zusätzliches Attribut
void setName (String name){
this.name = name;
}
void setPersonalnummer(int personalNummer){
this.personalNummer = personalNummer;
}
void setGehalt (double gehalt){
this.gehalt = gehalt;
}
void drucke () {
System.out.print("\nName: " + name);
System.out.print ("\tPersonalnummer: " + personalNummer);
System.out.print("\tGehalt: " + gehalt);
}
void erhoeheGehalt (double betrag){
gehalt += betrag;
}
Grundlagen der Informati
//Methoden
void setAbteilung (String abteilung){
this.abteilung = abteilung;
}
void ausgabeAbteilung () {
System.out.println ("\tLeiter Abteilung: " + abteilung);
}
}
Grundlagen der Informati
WS 2003/2004
WS 2003/2004
}
Seite 299
Seite 300
public class MitarbeiterApplikation{
public static void main(String args[]){
Mitarbeiter uwe = new Mitarbeiter();
uwe.setName("Maier");
uwe.setPersonalnummer(13);
uwe.setGehalt(2000);
Die Applikation liefert die Ausgabe
uwe.drucke();
Abteilungsleiter anja = new Abteilungsleiter();
anja.setName ("Mueller");
anja.setPersonalnummer ( 25);
anja.setGehalt ( 4030);
anja.setAbteilung ("F3O Projekte");
anja.erhoeheGehalt (300);
anja.drucke();
anja.ausgabeAbteilung ();
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 301
Seite 302
Methoden überschreiben
Mit dem reservierten Wort super kann auf die Methoden und Attribute der
Es ist auch möglich, bestehende Methoden in der Subklasse zu
Mutterklasse zugegriffen werden.
überschreiben.
Beim Überschreiben definiert man eine Methode in der Subklasse exakt so,
wie sie in der Elternklasse definiert ist. Wird die Methode in der Kindklasse
Im Beispiel ist allerdings ein super.gehalt nicht möglich, da die Attribute in
aufgerufen, wird nicht die geerbte Methode der Elternklasse (Superklasse)
der Superklasse mit private geschützt sind.
sondern die der Kindklasse benutzt.
Im nächsten Beispiel wird die Methode drucke() überschrieben.
Grundlagen der Informati
WS 2003/2004
Seite 303
Grundlagen der Informati
WS 2003/2004
Seite 304
Das Arbeiten mit Konstruktoren
public class Abteilungsleiter extends Mitarbeiter{
//Attribute:
private String abteilung; //zusätzliches Attribut
Im nächsten Beispiel ändern wir nun die Klassen, indem wir Konstruktoren
verwenden.
void setAbteilung (String abteilung){
this.abteilung = abteilung;
}
Der Konstruktor der Subklasse muss als erste Anweisung den
Konstruktoraufruf der Suberklasse haben. Dieser Aufruf erfolgt auch mit
//Methode drucke() wird überschrieben
void drucke () {
super.drucke();
System.out.println ("\tLeitung Abteilung: " +abteilung);
}
super, im Beispiel
super (name, personalNummer,gehalt);
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 305
Seite 306
public class Mitarbeiter{
//Attribute:
private String name;
private int personalNummer;
private double gehalt;
public class Abteilungsleiter extends Mitarbeiter{
//Attribute:
private String abteilung; //zusätzliches Attribut
//Konstruktor
public Abteilungsleiter (String name, int personalNummer,
double gehalt, String abteilung) {
//Aufruf des Konstrukors von Mitarbeiter
super (name, personalNummer,gehalt);
//Konstruktor:
public Mitarbeiter(String name, int personalNummer, double gehalt){
this.name = name;
this.personalNummer = personalNummer;
this.gehalt = gehalt;
}
//Methoden:
public void drucke () {
System.out.println();
System.out.print ("Name: " + name);
System.out.print ("\tPersonalnummer: " + personalNummer);
System.out.print("\tGehalt: " + gehalt);
}
public void erhoeheGehalt (double betrag){
gehalt += betrag;
}
}
this.abteilung = abteilung;
}
public void drucke () {
super.drucke();
System.out.println ("\tAbteilung: " + abteilung);
}
}
Grundlagen der Informati
WS 2003/2004
Grundlagen der Informati
WS 2003/2004
Seite 307
Seite 308
public class MitarbeiterApplikation{
public static void main(String args[]){
Mitarbeiter uwe = new Mitarbeiter("Maier", 13, 2000);
Mitarbeiter anja = new Abteilungsleiter ("Mueller",
25,4030,"F30 Projekte");
uwe.drucke();
anja.erhoeheGehalt(300);
anja.drucke();
}
}
Die Speicherung in einem Array ergibt
public class PersonalVerwaltung{
public static void main(String args[]){
Mitarbeiter personal [] ={new Mitarbeiter("Maier", 13, 2000),
new Abteilungsleiter ("Mueller", 25,4030,"F30 Projekte")};
for (int i = 0;i < personal.length; i++)
personal[i].drucke();
}
}
Beim Aufruf der Methode drucke() wird unterschieden, ob es sich um
ein Objekt Mitarbeiter oder Abteilungsleiter handelt.
Dies bezeichnet man als späte Bindung bzw. Polymorphie.
Grundlagen der Informati
WS 2003/2004
Seite 309
Die Deklaration static
Sollen Attribute oder Methoden für alle Objekte der Klasse zugänglich sein,
so werden sie als static deklariert. Man spricht dann von Klassenvariablen
bzw. Klassenmethoden.
Meist werden Methoden als static deklariert, um sie anderen Klassen zur
Verfügung zu stellen, ohne Objekte der betreffenden Klassen zu erzeugen,
z.B. Methode sqrt() aus der Klasse Math.
Grundlagen der Informati
WS 2003/2004
Seite 311
Grundlagen der Informati
WS 2003/2004
Seite 310
class Klasse1{
public Klasse1(){
System.out.println("Konstruktor Klasse1");
}
public Klasse1 (int dummy){
System.out.println("Konstruktor mit dummy Klasse1");
}
}
class Klasse2 extends Klasse1{
public Klasse2(){
System.out.println("Konstruktor Klasse2");
}
public Klasse2 (int dummy){
super (dummy);
System.out.println("Konstruktor mit dummy Klasse2");
}
}
public class Konstruktor {
public static void main (String args[]){
Klasse2 k = new Klasse2();
Klasse2 l = new Klasse2(1);
}
}
Grundlagen der Informati
WS 2003/2004
Seite 312
Herunterladen