Grundlagen der Informatik

Werbung
Grundlagen der Informatik
Einführung in die objektorientierte Software-Entwicklung mit Java
Teil 1
Prof. Dr. Katrin Brabender
Labor für
Angewandte Informatik und Datenbanken
Version: 28.07.2006
Grundlagen der Informatik
WS 2006/2007
Seite 1
Themen des 1. Semesters
1. Grundbegriffe aus der Informatik
2. Zahlendarstellung und mathematische Grundoperationen in einem
Rechnersystem
3. Grundlagen der Booleschen Algebra
4. Softwareentwicklung mit Java
•
Datentypen
•
Kontrollstrukturen
•
Methoden
•
Grundlagen der Objektorientierung (Klassen, Vererbung, Kapselung etc.)
•
Ausnahmebehandlung
•
Die Klassen Object, String, StringBuffer
Grundlagen der Informatik
WS 2006/2007
Seite 2
1. Grundbegriffe aus der Informatik
Aufbau eines Rechnersystems
Grundlagen der Informatik
WS 2006/2007
Seite 3
Der Universalrechenautomat nach von Neumann
Der logische Aufbau moderner Computer folgt dem Konzept des
Mathematikers John von Neumann (1903-1957) und wurde in den Jahren
1946/47 in den USA entwickelt.
Der von Neumann Rechner besteht im Wesentlichen aus den drei Einheiten
-
Speicherwerk (Arbeitsspeicher)
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 Informatik
WS 2006/2007
Seite 4
Grundlegende Eigenschaften des von Neumann Rechners
•
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.
=> Informationen können eindeutig angesprochen werden
•
Es wird das Duale Zahlensystem verwendet
•
Sequentielles Abarbeiten von Befehlen
Grundlagen der Informatik
WS 2006/2007
Seite 5
Die Zentraleinheit eines Computers
Steuerwerk
Hauptspeicher
CPU
Rechenwerk
Zentraleinheit
Komponenten der Zentraleinheit sind
-
Steuerwerk (control unit)
-
Rechenwerk
-
Hauptspeicher
CPU (Central Processing Unit)
Der Informationsaustausch erfolgt über zwei Bussysteme.
Grundlagen der Informatik
WS 2006/2007
Seite 6
Die CPU (Central Processing Unit)
Der Prozessor ist das Kernstück eines Computers.
Die CPU dient zur Verarbeitung von Daten, die sich im Speicher des
Rechners befinden.
Die CPU besteht aus dem Steuerwerk und Rechenwerk.
Grundlagen der Informatik
WS 2006/2007
Seite 7
Das Steuerwerk mit Befehlsregister, Befehlszähler, Adressregister
•
steuert den Austausch von Daten 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 mit denen die CPU die
logischen Operationen ausführen kann. Diese liegen nicht im Arbeitsspeicher
sondern direkt innerhalb der CPU und können deshalb vom Rechenwerk direkt
erreicht werden.
Grundlagen der Informatik
WS 2006/2007
Seite 8
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 Informatik
WS 2006/2007
Seite 9
Typische Befehle sind
LOAD Laden eines CPU Registers mit einem Wert aus dem
Speicher
STORE Speichern eines Registerinhaltes in einem Speicherplatz
des Speichers
ADD, SUB, MUL, DIV Arithmetische Operationen auf Registern
NOT, OR, AND, XOR Logische Befehle auf Registern
COMPARE Vergleich des Inhalts zweier Register
IN, OUT Ein- und Ausgabe von Daten an Register der Periperiegeräte
Grundlagen der Informatik
WS 2006/2007
Seite 10
Jeder dieser Befehle besitzt einen OpCode (Befehlsnummer).
Ein Programm besteht aus einer Folge von OpCodes.
Wird ein Programm ausgeführt, so wird die Programmdatei in den
Speicher geladen.
Die CPU übernimmt die Kontrolle und führt die den Opcodes
entsprechenden Befehle aus.
Ein internes Register, der Befehlszähler, zeigt immer auf den nächsten
auszuführenden Opcode.
Die CPU durchläuft dabei immer wieder den folgenden Zyklus
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 Informatik
WS 2006/2007
Seite 11
3. Koordination
Koordination sämtlicher Transporte auf den verschiedenen Bussystemen.
Grundlagen der Informatik
WS 2006/2007
Seite 12
Das Rechenwerk
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. ein 16 Bit Prozessor hat Datenregisterbreite von 16 Bit.
Beispiele:
8 Bit Prozessor: Intel 8086 (XT), 8051
16 Bit Prozessor: Intel 80286 (AT)
32 Bit Prozessor: Intel 80386, Motorola 68000
64 Bit Prozessor: Intel Itanium, AMD Athlon 64
Grundlagen der Informatik
WS 2006/2007
Seite 13
Der Hauptspeicher
ist ein außerhalb der CPU befindlicher Speicher für Daten und Programme.
Wird als RAM (Random Access Memory) bezeichnet.
Die Bits des Hauptspeichers sind byte- oder wortweise organisiert.
Jeder Befehl kann in Abhängigkeit von der Struktur des Prozessors auf ein
oder mehrere Byte zugreifen, um sie zu lesen, zu bearbeiten oder zu
schreiben.
Jedes Byte des Speichers erhält eine Adresse.
Auf jedes Byte kann direkt zugegriffen werden.
Grundlagen der Informatik
WS 2006/2007
Seite 14
Ein weiterer dynamischer Speicher ist der
Cache
Zusätzlicher Speicher zwischen dem Hautspeicher und den
Registern der Zentraleinheit, auf den besonders schnell zugegriffen
werden kann.
Im Normalfall bildet der Cache zusammen mit dem Prozessor ein
Bauteil.
Kleinere Programmstrukturen, die sich komplett im Cache befinden,
können so aus diesem deutlich schneller abgearbeitet werden.
Grundlagen der Informatik
WS 2006/2007
Seite 15
Das BUS System
Unterschieden wird zwischen internem und externem Bussystem.
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.
Grundlagen der Informatik
WS 2006/2007
Seite 16
Das externe Bussystem bzw. der Systembus besteht aus
Adressbus, Datenbus und Steuerbus.
•
Adressbus selektiert die Komponenten
•
Datenbus übermittelt die Daten
•
Steuerbus übernimmt Verwaltungsfunktion z.B. Umschalten von Lesen auf
Schreiben
Adressen / Adressbus
Steuerwerk
Befehle / Datenbus
Rechenwerk
Hauptspeicher
Daten / Datenbus
Grundlagen der Informatik
WS 2006/2007
Seite 17
Die Bestandteile eines Rechnersystems
• Eingabeeinheit
• Verarbeitungseinheit
• Ausgabeeinheit
Grundlagen der Informatik
WS 2006/2007
Seite 18
Peripherie
Die Gesamtheit der Eingabegeräte, Speichergeräte, Dialoggeräte und
Ausgabegeräte , d.h. alle Geräte außerhalb der Zentraleinheit bezeichnet
man als Peripherie
Grundlagen der Informatik
WS 2006/2007
Seite 19
Massenspeicher / Festplatte
Speichern von großen Datenmengen
Köpfe, Zylinder, Sektoren, Spuren
Spur
Sektor
Spur 1023
Spur 0
Zylinder
Kopf
Grundlagen der Informatik
WS 2006/2007
Seite 20
Organisation von Massenspeicher
Die Verwaltung der physikalischen Eigenschaften einer Platte wird durch
BIOS und Betriebssystem vollständig gekapselt.
Für den Benutzer erfolgt die Organisation von Festplatten in Verzeichnissen.
Die Organisation von Dateien erfolgt in Abhängigkeit vom Betriebssystem in
• Laufwerke (DOS/Windows)
• Verzeichnisse
• Unterverzeichnisse
Zum Einrichten von Verzeichnisstrukturen muß berücksichtigt werden
• Benutzerrechte, Zugriffsrechte
• Sicherungskonzepte
• Backup-Strategien
Grundlagen der Informatik
WS 2006/2007
Seite 21
Grundlagen der Informatik
WS 2006/2007
Seite 22
Dateneingabe-Geräte
•
•
•
•
Tastatur
Maus
Touchpad
Scanner etc.
Dateiausgabe-Geräte
•
•
Bildschirm
Drucker etc.
Schnittstellen
•
•
Netzwerk
Seriell, Parallel, USB
Grundlagen der Informatik
WS 2006/2007
Seite 23
Software in einem Rechnersystem
Unter Software versteht man alle Programme, Prozeduren und Objekte, die
ein Rechnersystem lauffähig machen.
Unterschieden wird zwischen Systemsoftware und Anwendungssoftware.
Zur Systemsoftware zählen alle Programme, die für den korrekten Ablauf
von Rechnern verantwortlich sind, wie BIOS und Betriebssystem.
Grundlagen der Informatik
WS 2006/2007
Seite 24
BIOS
Das BIOS – Basic IO System - enthält
•
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,
• Funktionstest des Speichers
• Laden des Betriebssystems
•
Ist das BIOS in einem nicht flüchtigem Speicher (ROM oder EPROM) fest
im Gerät eingebaut, so spricht man auch von Firmware.
Grundlagen der Informatik
WS 2006/2007
Seite 25
Das Betriebssystem
Verwaltet die Ressourcen des Rechners und stellt Dienstleistungen zur
Verfügung.
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 Informatik
WS 2006/2007
Seite 26
•
Ein- und Ausgabesteuerung
•
Prozessverwaltung
•
Zugriff und Verwaltung des Dateisystems
Grundlagen der Informatik
WS 2006/2007
Seite 27
Die Anwendungssoftware
Anwendungsprogramme unterstützen den Anwendern bei der
Lösung von Problemen.
Bsp: Textverarbeitungsprogramme, Tabellenkalulation etc.
Grundlagen der Informatik
WS 2006/2007
Seite 28
Zusammenfassung
Ein Computersystem besteht aus den Komponenten
Grundlagen der Informatik
WS 2006/2007
Seite 29
2. Zahlendarstellung und mathematische Grundoperationen in
einem Rechnersystem
•
Zahlensysteme
•
Zahlenkonvertierung
•
Grundoperationen in den Zahlensystemen - Das Rechnen im Dualsystem
•
Subtraktion und Division mit Hilfe des Komplements
•
Darstellung von Ganzen- und Gleitkommazahlen im Rechner
Grundlagen der Informatik
WS 2006/2007
Seite 30
Zahlensysteme
Der Wert einer Zahl im Dezimalsystem kann dargestellt werden in der Form
n
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 Informatik
WS 2006/2007
Seite 31
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 z in einem Stellenwertsystem zur Basis B gilt
n
z = ±∑ bi ∗ Bi , bi ∈ {0,1,2,K, B − 1}
mit
B∈IN, B ≥ 2
i =m
Grundlagen der Informatik
WS 2006/2007
Seite 32
Beispiel für einige Stellenwertsysteme
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
Beispiel
11000011
1240
366
303
195
C3
Grundlagen der Informatik
WS 2006/2007
Seite 33
Das Dualsystem ist ein Spezialfall des Binärsystems.
Binärsystem
Eine Menge, die nur aus zwei Zeichen besteht, z.B. Morsealpabet,
Fußgängerampel etc.
Für die interne Verarbeitung innerhalb eines Rechners wird das Dualsystem
benutzt.
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 Informatik
WS 2006/2007
Seite 34
Besteht die Gefahr der Verwechslung, wird das benutzte Stellenwertsystem
durch Zusätze markiert:
Dualsystem:
100100112
Oktalsystem:
2238
Dezimalsystem:
14710
Hexadezimalsystem:
9316
Grundlagen der Informatik
WS 2006/2007
Seite 35
Vergleichstabelle
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
Grundlagen der Informatik
WS 2006/2007
Seite 36
Zahlenkonvertierung
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
Hexa
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Grundlagen der Informatik
WS 2006/2007
Seite 37
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
6
Hinweis:
Die Umwandlung von Dezimalzahlen in Dual-, Oktal- oder
Hexadezimalzahlen ist auf diese einfache Art nicht möglich. Hierfür gibt es
Konvertierungsverfahren.
Grundlagen der Informatik
WS 2006/2007
Seite 38
Umwandlung von ganzen Zahl im Dezimalsystem in eine Zahl beliebiger Basis:
Das Quellenverfahren
Beispiel:
232010=X8
a)
Z div 8 Z mod 8
Z
2320
?
?
b)
c)
d)
Z
2320
290
36
Ergebnis:
Z div 8
290
36
?
Z mod 8
0
2
?
Z
2320
290
Z div 8
290
?
Z mod 8
0
?
Z
2320
290
36
4
Z div 8
290
36
4
0
Z mod 8
0
2
4
4
232010= 44208
Grundlagen der Informatik
WS 2006/2007
Seite 39
Umwandlung einer ganzen Zahl beliebiger Basis in eine Dezimalzahl:
Das Zielverfahren
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.
Beispiel
44208=X10
4
B=8
4
32
36
2
288
290
0
2320
2320
Grundlagen der Informatik
WS 2006/2007
Seite 40
Grundoperationen in den Zahlensystemen - Das Rechnen im
Dualsystem
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.
3.1 Addition im Dualsystem
+
0
1
Additionsregeln 0
0
1
1
1 10
Beispiel für eine Addition
1 0 0 1 1 12 + 1 1 0 1 12 = ?
+
Übertrag
1 0
1
1 1
1 0 0
0
1
1
0
1
0
1
0
1 1
1 1
1
1 0
Grundlagen der Informatik
WS 2006/2007
Seite 41
Multiplikation im Dualsystem
Multiplikationsregeln
*
0
1
0
0
0
1
0
1
Verfahren:
a.) Verschiebe die zu multiplizierende Zahl nach links
b.) Addiere die Zahlen
Grundlagen der Informatik
WS 2006/2007
Seite 42
Beispiel für eine Multiplikation
1
Übertrag
0 0 1 1 0 *
0
1 0
1 0 0
0 0 0 0
1 0 0 1 1
1 1 1 1
1 1 0 1 0
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
Grundlagen der Informatik
WS 2006/2007
Seite 43
Subtraktion im Dualsystem
Subtraktionsregeln
0
-0
0
Leihen 0
0
-1
1
1
1
-0
1
0
1
-1
0
0
Beispiel
1
Leihen
Übertrag 1
0
1
1
1
0
1
0
0
1
1
0
Dieses Rechenverfahren ist für einen Computer nicht geeignet.
Grundlagen der Informatik
WS 2006/2007
Seite 44
Division im Dualsystem
Das schriftliche Divisionsverfahren kann analog zum Dezimalsystem benutzt
werden.
Divisionsregeln
0 : 0 = verboten
0:1=0
1 : 0 = verboten
1:1=1
Dieses Rechenverfahren ist für eine elektronische Rechenanlage nicht
geeignet.
Grundlagen der Informatik
WS 2006/2007
Seite 45
Beispiel
11011101
- 10011
010001
- 000000
100010
10011
0011111
10011
011000
10011
001010
:
10011
=
1 0 1 1, 1 0 1....
Grundlagen der Informatik
WS 2006/2007
Seite 46
Subtraktion und Division mit Hilfe des Komplements
Definition 2-Komplement einer Dualzahl
Das 2-Komplement einer Dualzahl ist die Ergänzung zur nächst höheren
Bit-Wertigkeit (=Zweierpotenz).
Bildungsrezept
Das 2-Komplement einer Dualzahl bildet man durch Invertieren (Ersetzen
von 0 durch 1 und umgekehrt) der Zahl und anschließender Addition
einer 1.
Beispiel: 2-Komplement zur Zahl 101012 (= 2110)
01010
+
1
0 1 0 1 1 (= 1110)
Grundlagen der Informatik
WS 2006/2007
Seite 47
Subtraktion durch Addition des Komplements
1. Schritt: Subtrahend durch Voranstellen von Nullen auf die gleiche
Stellenanzahl des Minuenden bringen
2. Schritt: Bilde das 2-Komplement des erweiterten Subtrahenden
3. Schritt: Addiere Minuend und das 2-Komplement des Subtrahenden.
Der Übertrag über die höchste vorgegebene Stellenanzahl wird nicht
berücksichtigt.
Beispiel: 1 0 1 0 1 12 - 1 0 0 0 1 2 (= 4310 - 1710) = 2610
Schritte 1 + 2
Schritt 3
010001
101110
+
1
101111
101011
+ 101111
1 011010
Grundlagen der Informatik
WS 2006/2007
Seite 48
Division durch fortlaufende Addition des Komplements
Verfahren
1. Schritt: Divisor durch Voranstellen von Nullen auf die gleiche
Stellenanzahl des Dividenden bringen.
2. Schritt: Bilde 2-Komplement des erweiterten Divisors
3. Schritt: Addiere 2-Komplement zum Dividenden. Überträge über die
höchste Stellenzahl werden notiert, aber für die weitere Rechnung
zunächst nicht verwendet.
4. Schritt: Wiederhole Schritt 3 bis kein Übertrag mehr auftritt.
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 Informatik
WS 2006/2007
Seite 49
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
Ergebnis: 1 0 1 0 0 02 : 1 1 12 = 1 + 1 + 1 + 1 + 1 Rest 110 = 1 0 1 Rest 110
Grundlagen der Informatik
WS 2006/2007
Seite 50
Informationsdarstellung / Codierung
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.
Grundlagen der Informatik
WS 2006/2007
Seite 51
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.
Grundlagen der Informatik
WS 2006/2007
Seite 52
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 Informatik
WS 2006/2007
Seite 53
ASCII-Erweiterung
Erweiterung des ASCII-Satzes auf 8-Bit Code,
d.h. 28 = 256 Zeichen sind darstellbar.
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 Informatik
WS 2006/2007
Seite 54
Unicode
•
16-Bit Code, d.h. er umfasst 216 = 65536 Zeichen
•
umfasst Schriftzeichen aller Verkehrssprachen der Welt
Grundlagen der Informatik
WS 2006/2007
Seite 55
Zahlendarstellung im Rechner
Darstellung ganzer Zahlen (Datentyp INTEGER)
•
Können direkt in Dualzahlen umgewandelt werden
•
Werden in ihrer Bitdarstellung gespeichert und verarbeitet
Die meisten Programmiersprachen unterscheiden zwischen
Short Integer: Speicherlänge 2 Byte (=16 Bits)
Long Integer: Speicherlänge 4 Byte (= 32 Bits)
Grundlagen der Informatik
WS 2006/2007
Seite 56
Mit 2 Bytes können 216 verschiedene Zahlen dargestellt werden,
mit 4 Bytes 232 verschiedene Zahlen.
Daher lassen sich folgende Bereiche von Integer Zahlen darstellen:
Short Integer Zahlen von –215 bis 215-1
Long Integer Zahlen von
–231
bis
231-1
(-32768 bis 32767)
(-2147483648 bis 2147483647)
Die positiven ganzen Zahlen werden direkt in ihrer Bitdarstellung gespeichert
(bei Short Integer von 0000 0000 0000 0000 bis 0111 1111 1111 1111).
Das vorderste Bit ist hier immer 0.
Grundlagen der Informatik
WS 2006/2007
Seite 57
Die negativen ganzen Zahlen werden abgespeichert als 2-Komplement
ihres Betrages.
Beispiel
Für Short integer hat –1 die Darstellung 1111 1111 1111 1111
Der Zahlenbereich bei Short Integer erstreckt sich also von
1111 1111 1111 1111 bis 1000 0000 0000 0000
Grundlagen der Informatik
WS 2006/2007
Seite 58
Standardformate für die Darstellung ganzer Zahlen
Bereich
-128..127
-32768..32767
-231..231-1
-263..263-1
Format
8 Bit
16 Bit
32 Bit
64 Bit
Java
byte
short
int
long
Grundlagen der Informatik
WS 2006/2007
Seite 59
Darstellung von Kommazahlen (Datentyp REAL)
Alle Zahlen Z dieses Typs werden im Rechner in der Gleitpunktdarstellung
(Gleitkommadarstellung) dargestellt:
Z = V * M * BE
mit V: Vorzeichen, E: Exponent, M: Mantisse, B: Basis
Beispiel
75 = 75*100 = 7,5*101 = 0,75*102 = ...
- 0,36 = - 0,36* 100 = - 3,6*10-1= - 36*10-2=...
Grundlagen der Informatik
WS 2006/2007
Seite 60
Eigenschaften der Gleitpunktdarstellung
•
Die Gleitpunktdarstellung ist eine Methode zur näherungsweisen
Darstellung von reellen Zahlen.
•
Sie ist eine Darstellung, die bei festem Bitformat
- ein möglichst großes Intervall der reellen Zahlen umfasst und
- deren Genauigkeit bei kleinen Zahlen sehr hoch, bei großen Zahlen
niedrig ist.
•
In einer Rechenanlage werden Mantisse und Exponent im Dualsystem
dargestellt.
•
REAL-Zahlen werden im Rechner meist in 32 (short real, float)
oder 64 Bits (long real, double) abgespeichert:
Grundlagen der Informatik
WS 2006/2007
Seite 61
Damit Gleitkommazahlen in einer Rechenanlage eine eindeutige
Darstellung haben, werden sie normiert dargestellt.
Eine zur Basis 2 normierte Gleitkommazahl ist eine Zahl, bei der der
Exponent so gewählt wird, dass die Zahl in der Form
±1, m1m2m3….mn*2E
dargestellt werden kann.
Beispiel: 10,01 = 1,001 * 21
Bemerkung:
Bei der Verwendung normierter Gleitkommazahlen muss die 1 vor dem
Komma nicht gespeichert werden, da sie immer vorhanden ist.
Grundlagen der Informatik
WS 2006/2007
Seite 62
IEEE-Norm (Institute of Electrical and Electronics Engineers)
Mitte der Achtzigerjahre wurde vom Institute of Electrical and Electronics
Engineers die sog. IEEE-Norm verabschiedet, die mittlerweile Standard in den
meisten Rechnern ist.
Für Exponent und Mantisse sind hierbei eine feste Bitanzahl vorgegeben.
Exponent
v
Mantisse
e
m
short real (32 Bits): Vorzeichen: 1Bit, Exponent: 8 Bit, Mantisse:23 Bit
long real (64 Bits): Vorzeichen: 1Bit, Exponent: 11 Bit, Mantisse:52 Bit
Grundlagen der Informatik
WS 2006/2007
Seite 63
Das Vorzeichenbit
Das erste Bit (engl.. most significant bit) wird als Vorzeichenbit interpretiert.
0 = positiv, 1 = negativ
Die Exponentenbits (für short real)
Die nächsten acht Bits codieren den Exponenten e.
Mit 8 Bits können maximal 28 = 256 verschiedene Exponenten codiert werden.
Damit können Zahlen im Bereich von –127 bis 128 dargestellt werden.
Damit das Vorzeichen des Exponenten nicht gespeichert werden muss, wird zum
Exponenten + 127 addiert, so dass der Exponent aus Zahlen von 1 bis 254
besteht.
0 und 255 sind für betragsmäßig sehr kleine Werte sowie „Unendlich“ reserviert.
Grundlagen der Informatik
WS 2006/2007
Seite 64
Die Mantissenbits (für short real)
Die restlichen 23 Bits dienen zur Codierung der Mantisse.
Die Mantisse wird normiert dargestellt, wobei die 1 vor dem Komma nicht
mitgespeichert wird.
Damit entspricht eine short real Codierung der Zahl
für e ∈ ] 0;255 [
Z = (-1)v * 1,m * 2e-127
Bemerkung: Die 64 Bit Codierung von long real erfolgt analog. Es gilt
Z = (-1)v * 1,m * 2e-1023
für e ∈ ] 0;2047 [
Grundlagen der Informatik
WS 2006/2007
Seite 65
Sonderfälle
e
m
Gleitkommazahl Z
0
≠0
0
0
-1v * 0
255
0
-1v * ∞
255
≠0
-1v*0,m * 21-127
NaN
NaN = Not a Number, d.h. nicht definiert
Grundlagen der Informatik
WS 2006/2007
Seite 66
Beispiel: 4,75 als IEEE Zahl (short real)
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
Normieren ergibt:
1,0011*22
1
,
0
0
1
1
1
1
0
Exponent mit 127 addieren: 127+2 = 129 = 10000001
Damit ergibt sich
IEEE Zahl: 0 10000001 00110000000000000000000
Beachte: Bei der Mantisse wird die 1 vor dem Komma nicht mitgespeichert.
Grundlagen der Informatik
WS 2006/2007
Seite 67
Beispiel: gegeben sei IEEE Zahl (short real)
1 10000101 10110000000000000000000
gesucht: zugehörige Dezimalzahl
Exponent = 10000101 = 13310 => Exponent - 127 = 6
Also entspricht die IEEE Zahl der Dezimalzahl
- (1* 20 + 1* 2-1 + 0*2-2+1*2-3+1*2-4)*26= -108
Grundlagen der Informatik
WS 2006/2007
Seite 68
3. Grundlagen der Boolesche Algebra
•
Definition
•
Grundlagen der Schaltalgebra
•
de Morgansche Gesetze
Grundlagen der Informatik
WS 2006/2007
Seite 69
Die boolesche Algebra wurde von dem Engländer George Boole 1854 entwickelt.
Ziel: Zweifelsfreie Feststellung der Wahrheit oder Falschheit von Aussagen.
Die Boolesche Algebra kennt zwei zulässige Zustände
wahr =
logisch 1 =
nicht wahr = logisch 0 =
Spannung vorhanden
keine Spannung
Sie beruht auf drei Basisoperationen
Negation
NICHT-Funktion
Konjunktion
UND-Funktion
Disjunktion
ODER-Funktion
Grundlagen der Informatik
WS 2006/2007
Seite 70
Definition Boolesche Algebra
⋅
Eine Menge M mit zwei Verknüpfungen und + heißt boolesche Algebra,
wenn für alle x, y, z
∈ M gilt:
Assoziativgesetz
⋅⋅
⋅ ⋅
x (y z) = (x y) z
x + (y+z) = (x+y) + z
Kommutativgesetz
⋅
⋅
x y=y x
x+y = y+x
Grundlagen der Informatik
WS 2006/2007
Seite 71
Verschmelzungsgesetz oder Absorptionsgesetz
⋅
x (x+y) = x
⋅
x + (x y) = x
Distributivgesetz
⋅
⋅
⋅
x (y+z) = (x y)+(x z)
⋅
⋅
x+(y z) =(x+y) (x+z)
⋅
es gibt ein Element 0 ∈ M mit 0 ⋅ x = 0 und 0 + x = x für alle x ∈ M
es gibt ein Element 1 ∈ M mit 1⋅ x = x und 1 + x = 1 für alle x∈ M
neutrales Element bzgl. + und
komplementäres Element
⋅
zu jedem x∈ M existiert genau ein y ∈ M mit x y = 0 und x + y = 1
Seite 72
Grundlagen der Informatik
WS 2006/2007
Grundlagen der Schaltalgebra
Die Schaltalgebra ist eine Anwendung der booleschen Algebra zur
Beschreibung und Untersuchung logischer Schaltungen.
M sei eine Menge mit zwei Elementen, die mit 0 und 1 oder O und L bezeichnet
werden.
Es gibt drei Basis-Verknüpfungen
Disjunktion
oder ODER-Funktion
mit den Symbolen + bzw.
Konjunktion
oder UND-Funktion
mit den Symbolen bzw.
Negation
oder NICHT-Funktion
mit den Symbolen
⋅
∨
∧ bzw. &
bzw.
¬
bzw.
Die DIN 40700 legt Schaltzeichen für die logischen Funktionen fest.
Grundlagen der Informatik
WS 2006/2007
Seite 73
Disjunktion bzw. ODER-Funktion
•
Die Disjunktion beschreibt eine logische ODER-Verknüpfung
•
Gleichung:
A = E1 ∨ E2 bzw. A = E1 + E2
•
Der Ausgang ist dann "wahr", wenn entweder E1 oder E2 "wahr" sind.
Wahrheitstabelle
E1 E2
0 0
0 1
1 0
1 1
A
0
1
1
1
Schaltzeichen
E1
E2
≥
A
Parallelschaltung
E1 o
S1
U0 > 0
o
•
E2 o
•
S2
o
R
Grundlagen der Informatik
WS 2006/2007
Seite 74
Konjunktion bzw. UND-Funktion
•
Die Konjunktion beschreibt eine logische UND-Verknüpfung
•
Gleichung:
A = E1 & E2 bzw. A = E1 ∧ E2 bzw. A = E1 E2 bzw. A = E1 E2
•
Wenn beide Eingänge "wahr" sind, dann ist auch der Ausgang "wahr"
⋅
U0 > 0
o
Wahrheitstabelle
E1 E2
0 0
0 1
1 0
1 1
Reihenschaltung
Schaltzeichen
A
0
0
0
1
E1
E2
&
A
E1
o
S1
E2
o
S2
•
oA
R
Grundlagen der Informatik
WS 2006/2007
Seite 75
Negation bzw. NOT-Funktion
•
Die Negation beschreibt eine logische NICHT-Verknüpfung
•
Gleichung:
A = E bzw. A = ¬E bzw. A = E
•
Wenn der Eingang "wahr" ist, dann ist der Ausgang "falsch"
Wahrheitstabelle
E
0
1
A
1
0
Schaltzeichen
E
1
o
A
Grundlagen der Informatik
WS 2006/2007
Seite 76
Weitere Verknüpfungen
•
NOT AND bzw. NAND
Wahrheitstabelle
Gleichung
⋅
A = E1 E2
•
NOT OR bzw. NOR
Gleichung: A = E1 + E2
E1 E2
0 0
0 1
1 0
1 1
A
1
1
1
0
E1 E2
0 0
0 1
1 0
1 1
A
1
0
0
0
Schaltzeichen
E1
&
o
A
≥1
o
A
E2
E1
E2
Grundlagen der Informatik
WS 2006/2007
Seite 77
Weitere Verknüpfungen
•
Antivalenz (Exklusives ODER) bzw. EXOR
Gleichung
Wahrheitstabelle
A = E1⊕ E2 = E1E2 + E1E2
•
E1 E2
0 0
0 1
1 0
1 1
Äquivalenz (Gleichheit) bzw. EXNOR
Gleichung: A = E1E2 + E1E2
E1 E2
0 0
0 1
1 0
1 1
A
0
1
1
0
A
1
0
0
1
Schaltzeichen
E1
E2
E1
E2
=1
A
=
A
Grundlagen der Informatik
WS 2006/2007
Seite 78
Einige Rechengesetze für beliebige boolesche Ausdrücke
de Morgansche Gesetze
i) A ∨ B =
ii ) A ∧ B =
A ∧ B
A ∨ B
weitere Gesetze
iii ) A ∨ A = A
iv ) A ∧ A = A
v ) A ∧ B ∨
A ∧ B = B
Grundlagen der Informatik
WS 2006/2007
Seite 79
4. Erstellung von Software – Anwendungsprogrammierung
Definition
Ein Programm ist eine Folge von Befehlen oder Anweisungen an eine
EDV-Anlage zur automatischen Bearbeitung eines Problems.
Zur Erstellung eines Programms sind die folgenden Komponenten
von Bedeutung: Editor, Compiler, Linker, Loader
Editor
• Erzeugt lesbare Textdateien in der jeweiligen Programmiersprache
Assembler
• Maschinenorientierte Programmiersprache
Zur Übersetzung des Quellcodes in die Maschinensprache des Rechners gibt
es zwei Typen von Übersetzungsprogrammen: Compiler und Interpreter
Grundlagen der Informatik
WS 2006/2007
Seite 80
Interpreter
•
Übersetzt immer nur eine einzige Programmanweisung in Maschinensprache
•
Jeder übersetzte Befehl wird sofort ausgeführt
•
Die Übersetzung wird nicht abgespeichert
Compiler
•
Übersetzt immer einen kompletten Programmtext in eine Folge von
Maschinenbefehlen, bevor die erste Programmanweisung ausgeführt wird
•
Erzeugt aus dem Quellcode durch einen Übersetzungsvorgang den
sogenannten Objektcode.
•
Überprüft auf Grammatik- oder Syntaxfehler
•
Objektcode enthält binären Code für einen speziellen Prozessor für ein
bestimmtes Quellcode-Modul
Grundlagen der Informatik
WS 2006/2007
Seite 81
Linker
•
Führt nach dem Compilieren mehrere unabhängige Programmteile
eines Softwareprojektes zu einem Gesamtprojekt zusammen
•
Hinzufügung benötigter mathematischer oder anderer allgemeiner
Programmteile aus Softwarebibliotheken
•
Erzeugt aus den Objektcode des Programmierers und dem
Objektcode der Bibliothek ausführbaren Programmcode.
Loader
•
Lädt das Programm an eine freie Position im RAM
•
Funktion wird in der Regel durch das Betriebssystem bereitgestellt.
Grundlagen der Informatik
WS 2006/2007
Seite 82
Zur Entstehung eines lauffähigen Compiler-Programms sind also
folgende Schritte notwendig:
Editor
Quellcode
Quellcode
Compiler
Objektcode
Objektcode
Objektcode
Objektcode
BibliotheksBibliothekscode
code
Linker
ProgrammProgrammcode
code
Loader
Lauffähiges
Programm
im Speicher
Grundlagen der Informatik
WS 2006/2007
Seite 83
Hilfsmittel zur Softwareentwicklung sind:
Debugger
•
System zur Identifizierung von logischen u. Laufzeit - Fehlern
•
Debugger drängen sich zwischen Betriebssystem und Programm und
übernehmen die Steuerung und Kontrolle der Programmausführung.
IDE - Integrated Development Environment
•
Entwicklungsumgebung, die sämtliche Schritte der
Programmentwicklung von einer gemeinsamen Entwicklungsoberfläche
möglich macht.
•
Ermöglicht die graphische Entwicklung von Software
•
Verbirgt die Komplexität der Entwicklung
Grundlagen der Informatik
WS 2006/2007
Seite 84
Programmiersprachen – Übersicht (Auswahl)
Fortran
1960
ALGOL
Basic
Lisp
1965
COBOL
PL/1
Simula
1970
Pascal
C
1975
1980
Modula 2
Prolog
Smaltalk
Ada
1985
Object Pascal
1990
Delphi
1995
Ada 95
ABAP
C++
CLOS
Java
2000
Prozedurale
Sprache
Objektorientiert Sprache
KI Sprache
Business
Sprache
Grundlagen der Informatik
WS 2006/2007
Seite 85
4. Softwareentwicklung mit Java
•
Grundlagen von Java
•
Datentypen
•
Kontrollstrukturen
•
Methoden
•
Grundlagen der Objektorientierung
•
Klassen, Objekte
•
Zugriffschutz
•
Kapselung
•
Vererbung
•
Ausnahmebehandlung
•
Die Klassen Object, String, StringBuffer
Grundlagen der Informatik
WS 2006/2007
Seite 86
Kurze Einführung in die Geschichte 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 das Projekt wurde fortgeführt.
•
Anfang 1995: Durchbruch von Java durch Netscape Navigator 2.0, der
Java Programme ausführen kann.
Grundlagen der Informatik
WS 2006/2007
Seite 87
Das Arbeitsprinzip von Java
•
Der Source Code eines Java-Programms steht in einer Textdatei mit der
Endung .java
•
Von einem Compiler mit dem Namen javac wird anhand dieser Text-Datei eine
Datei mit der Endung .class erzeugt.
•
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 Informatik
WS 2006/2007
Seite 88
Einige Eigenschaften von Java
Definition der Firma Sun:
Java ist eine einfache, objektorientierte, verteilte, interpretierte, stabile, sichere,
plattformunabhängige, portierbare, leistungs- und multithreadingfähige und
dynamische Sprache.
Grundlagen der Informatik
WS 2006/2007
Seite 89
Die Voraussetzung für das Arbeiten mit Java
•
Zur Erstellung von Java-Programmen benötigt man die Java 2 SDKUmgebung für das entsprechende Betriebssystem.
•
SDK = Software Development Kit
•
Das SDK beinhaltet die notwendigen Programme, insbesondere den
Compiler javac, den Interpreter java und die Virtuelle Maschine.
•
Das J2SE kann man im Internet direkt von SUN herunterladen. Die Adresse
lautet http://java.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 Informatik
WS 2006/2007
Seite 90
Erstellung von Java-Programmen
Java Programme werden als Text in Dateien eingegeben.
Hierzu benutzt man entweder
•
einen Texteditor oder
•
eine integrierte Entwicklungsumgebung (IDE Integrated Development
Environment).
Wir werden in der Vorlesung und im Praktikum mit einem Texteditor arbeiten.
Das JDK werden wir in der aktuellen Version 1.5 verwenden.
Grundlagen der Informatik
WS 2006/2007
Seite 91
Die vier Programmarten von Java
•
Applikationen (lat. für Anwendung)
eigenständiges Programm, das nur die virtuelle Maschine als Interpreter
braucht und selbstständig lauffähig ist (wie in anderen
Programmiersprachen üblich)
•
Applets (engl. für „kleine Applikation“)
Unterprogramm eines Webbrowsers, welcher die virtuelle Maschine als
Interpreter braucht.
Grundlagen der Informatik
WS 2006/2007
Seite 92
•
Servlets
Unterprogramm eines Webservers (Gegenstück zu einem Applet auf dem
Webclient = Browser)
• erweitert die Funktionalität eines Webservers
• eng verwandt: JSP (Java Server Pages), d.h. HTML-Seiten, in die Java
Programme eingebettet sind, welche bei Aufruf auf dem Server
ausgeführt werden.
• mögliche Anwendungen: sichere und vertrauliche Zugänge zu einer
Website, Zugriffe auf Datenbanken, dynamische Erstellung von HTMLSeiten
Grundlagen der Informatik
WS 2006/2007
Seite 93
•
Midlets (MID = mobile information device)
Java-Programm, das auf Mobilgeräten wie Handys oder Handhelds
ablaufen kann.
• ist geeignet für Geräte mit wenig Speicher, geringer Performanz,
temporären Verbindungen zum Netz
• Spezielle Entwicklungsumgebung von SUN: J2ME (Java 2 Micro
Edition), benötigt J2SDK
• 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 Informatik
WS 2006/2007
Seite 94
Auszug aus der Java - Literatur
•
Helmut Erlenkötter: Java. Programmieren von Anfang an. Rohwohlt
Taschenbuch Verlag.
•
Joachim Goll, Cornelia Weiß, Frank Müller: Java als erste
Programmiersprache. B.G. Teubner.
•
Fritz Jobst: Einführung in Java. Fachbuchverlag Leipzig.
•
Christian Ullenboom: Java ist auch eine Insel. Galileo Press, Bonn.
Links
•
Java Tutorial von SUN http://java.sun.com/docs/books/tutorial
•
Guido Krüger, Handbuch der Java-Programmierung http://www.javabuch.de
•
Christian Ullenbooms Online-Buch http://java-tutor.com/javabuch/index.htm
Grundlagen der Informatik
WS 2006/2007
Seite 95
Einfache Java-Applikationen
// Willkommen.java
/*
Ausgabe eines Textes
*/
class Willkommen{
public static void main (String args[]){
System.out.println ("Willkommen zur Java-Vorlesung");
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 96
Was sind die Schritte, um die Applikation zu Starten?
1. Erstellen der Datei Willkommen.class im Bytecode:
javac Willkommen.java
2.
java Willkommen führt zur Ausführung des Programms
Das Ergebnis ist die Ausgabe des Textes
Grundlagen der Informatik
WS 2006/2007
Seite 97
Grundbestandteile eines Java-Programms
1. Ein Java Programm ist stets eine Klasse und beginnt mit dem
Schlüsselwort class und dem Namen der Klasse.
2. Ein Java-Programm ist in Einheiten gepackt, so genannte Blöcke, die von
geschweiften Klammern {...} umschlossen sind.
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 Informatik
WS 2006/2007
Seite 98
Kommentare
Kommentare dienen zur Dokumentation von Programmen und Verbessern ihre
Lesbarkeit. Sie bewirken keine Aktion bei der Ausführung des Programms und
werden vom Java-Compiler ignoriert.
Es gibt drei verschiedene Arten, Kommentare in Java zu erstellen.
//.. einzeiliger Kommentar, beginnt mit dem Doppelslash // und endet mit
dem Zeilenende (Quellcode, der in derselben Zeile vor dem Doppelslash steht,
wird normal verarbeitet)
/*...*/ Kommentierung von mehreren Textzeilen
/**...*/ Dokumentationskommentar zur automatischen Dokumentation
Grundlagen der Informatik
WS 2006/2007
Seite 99
Empfehlung:
Jedes Programm sollte mit einem Kommentar beginnen, der den
Klassennamen beinhaltet, die Version, das Datum und den Zweck des
Programms beschreibt.
/*
*Classname
*
*Versioninformation
*
*Date
*
*Copyrightnotice
*/
Leerzeilen, Leerzeichen und Tabstops werden vom Java-Compiler nicht
verarbeitet. Sie sollten verwendet werden zur Strukturierung und Lesbarkeit des
Programms.
Grundlagen der Informatik
WS 2006/2007
Seite 100
Die Klassendeklaration
•
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)
•
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.
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 Informatik
WS 2006/2007
Seite 101
Merkregel für das Erstellen einfacher Applikationen
Speichern Sie zunächst Ihre Klasse in einer Datei ab, die genau so heißt, wie
die Klasse mit der Erweiterung „.java“.
Es gilt folgende Konvention:
Klassennamen beginnen mit einem Großbuchstaben und bestehen aus einem
Wort.
Grundlagen der Informatik
WS 2006/2007
Seite 102
Blöcke
•
Die Deklaration einer Klasse geschieht in einem Block, der durch
geschweifte Klammern {} umschlossen ist
•
Innerhalb eines Blockes können sich noch weitere Blöcke befinden
•
Die Klammern müssen korrekt geschlossen sein.
Zwei Konventionen sind üblich
class Willkommen
{
....
}
oder die bei Java bevorzugte Konvention
class Willkommen {
.....
}
Grundlagen der Informatik
WS 2006/2007
Seite 103
Der Programmstart: Die Methode main
•
Die zentrale Einheit einer Applikation ist die Methode main.
•
Durch sie wird die Applikation gestartet, durch die dann alle Anweisungen
ausgeführt werden, die in ihr programmiert sind.
•
Die Zeile public static void main ( String args[] )
ist Teil jeder Java-Applikation.
•
Java-Applikationen beginnen automatisch bei main.
•
Die runden Klammern hinter main() zeigen an, dass main eine Methode
ist.
•
Nach dem Aufruf der Methode main mit dem Standardargument String
args[] kommt der Methodenrumpf, eingeschlossen durch geschweifte
Klammern ({...}).
Grundlagen der Informatik
WS 2006/2007
Seite 104
Eine allgemeine Applikation in Java muss in jedem Fall die folgende
Konstruktion beinhalten
class Klassenname {
public static void main( String args[] ){
Deklarationen und Anweisungen;
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 105
Erweiterung der ersten Java-Applikationen
/*
Ausgabe eines Textes in einem Dialogfenster
*/
import javax.swing.JOptionPane;
class Willkommen2{
public static void main (String args[]){
JOptionPane.showMessageDialog (null,
"Willkommen zur \nJava-Vorlesung");
System.exit( 0 );
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 106
Die Ausgabe erfolgt dann in einem Dialogfenster,
das durch das Klicken des OK Buttons geschlossen werden kann.
Grundlagen der Informatik
WS 2006/2007
Seite 107
Die Methode System.exit
•
Die Methode exit() gehört zur Klasse System und beendet die
Applikation bei Dialogfenstern.
•
Wird diese Anweisung bei Dialogfenstern nicht angegeben, so blockiert die
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 Informatik
WS 2006/2007
Seite 108
Die import-Anweisung
•
Benutzt man Klassen aus anderen Paketen (Ausnahme bildet das Paket
java.lang) so muss diese Klasse ausdrücklich mit ihrem Paketpfad
angegeben werden.
•
Mit der import-Anweisung wird die Klasse JOptionPane eingelesen und für
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 Informatik
WS 2006/2007
Seite 109
•
Die Methode showMessageDialog() öffnet eine Dialogbox, die den in
Hochkommata eingeschlossenen Text anzeigt, der an zweiter Stelle, d.h.
nach dem reservierten Wort null steht.
• null ist ein reserviertes Wort. null ist der Bezeichner für ein nicht
vorhandenes Objekt. In unserem Fall bewirkt es, dass ein Standard-Frame
benutzt wird, der zentriert auf der Mitte des Bildschirms erscheint. (Mit der
Erstellung von Frames beschäftigen wir uns im zweiten Semester).
Grundlagen der Informatik
WS 2006/2007
Seite 110
Escape-Sequenzen und Strings
•
Der in die Anführungszeichen (" ") gesetzte Text ist ein String, d.h. eine
Kette von beliebigen Zeichen
•
Strings sind in Java vom Datentyp String
•
Strings werden z. B. durch die Methoden System.out.println() oder
JOptionPane.showMessageDialog() auf dem Bildschirm exakt so
ausgegeben, wie eingetippt- bis auf die sogenannten Escape-Sequenzen:
•
Eine Escape-Sequenzen ist ein Hilfsmittel zur Darstellung nicht druckbarer
Zeichen und wird durch den Backslash (\) gefolgt von genau einem
weiteren Zeichen, z.B. \n für einen Zeilenwechsel, geschrieben.
Grundlagen der Informatik
WS 2006/2007
Seite 111
Escape-Zeichen
Bedeutung
\n
neue Zeile (new line)
\t
führt Tabulatorsprung aus (tab)
\r
positioniert den Cursor an den Anfang der aktuellen
Zeile (carriage return)
\b
positioniert den Cursor ein Zeichen zurück (backspace)
\f
Seitenvorschub (neue Seite) (form feed)
\\
Ausgabe des Backslash \
\"
Ausgabe der Anführungszeichen
\‘
Ausgabe der Hochkomma
Grundlagen der Informatik
WS 2006/2007
Seite 112
Anmerkung zu den Escape-Sequenzen
Die Escape-Sequenzen \t, \f, \r und \b werden von der Methode
showMessageDialog() nicht beachtet.
Grundlagen der Informatik
WS 2006/2007
Seite 113
Programmier-Styleguide
Als Programmierstil hat sich durchgesetzt:
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 Informatik
WS 2006/2007
Seite 114
Reservierte Schlüsselwörter
Bestimmte Wörter sind als Bezeichner nicht zulässig, da sie als
Schlüsselwörter durch den Compiler besonders behandelt werden.
Schlüsselwörter bestimmen die „Sprache“ eines Compilers.
Grundlagen der Informatik
WS 2006/2007
Seite 115
Folgende Schlüsselwörter gibt es in Java:
abstract, boolean, break, byte, case, catch, char, class,
const *), continue, default,do, double, else, extends,
final, finally, float, for, goto *), if, implements,
import, instanceof, int, interface, 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 Informatik
WS 2006/2007
Seite 116
String Addition
Strings können durch den Verkettungsoperator + verknüpft werden.
Durch diesen Operator werden zwei Strings aneinander gereiht.
Im nächsten Beispiel werden zwei einzugebende Strings aneinander gefügt.
Grundlagen der Informatik
WS 2006/2007
Seite 117
// StringAddition.java
//Fuehrt zwei einzugebende Strings zusammen
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 Informatik
WS 2006/2007
Seite 118
Die Ein- und Ausgabe erfolgt dann in folgenden Dialogfenstern
Grundlagen der Informatik
WS 2006/2007
Seite 119
Eingabedialoge
Die Methode JOptionPane.showInputDialog mit dem String("Geben
Sie einen Text ein")erzeugt das folgende 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
mitgegeben wurde.
Der eingegebene String wird durch die Methode an das Programm zurück
gegeben.
Grundlagen der Informatik
WS 2006/2007
Seite 120
Ausgabe-Dialoge
Die Methode
JOptionPane.showMessageDialog(null, ausgabe, "Ergebnis",
JOptionPane.PLAIN_MESSAGE);
erzeugt das Fenster.
Hier hat die Methode 4 Argumente:
1.
null
Standard-Frame (keine Bindung an ein Fenster)
2.
ausgabe
Nachricht, die angezeigt werden soll
3.
"Ergebnis"
String in der Titelleiste
4.
JOptionPane.PLAIN_MESSAGE Bestimmt Anzeige des Message-Dialogtyps
Grundlagen der Informatik
WS 2006/2007
Seite 121
Zusammenstellung der Message-Dialogtypen
Message-Dialogtyp
Icon
Bedeutung
JOptionPane.ERROR_MESSAGE
Fehlermeldung
JOptionPane.INFORMATION_MESSAGE
informative Meldung;
der User kann sie nur
wegklicken
JOptionPane.WARNING_MESSAGE
Warnmeldung
JOptionPane.QUESTION_MESSAGE
Fragemeldung
JOptionPane.PLAIN_MESSAGE
Meldung ohne Icon
Grundlagen der Informatik
WS 2006/2007
Seite 122
Variablen, Datentyp, Deklaration
•
Allgemein sind Variablen Platzhalter bzw. Speicherbereiche.
•
Variablen können eine bestimmte Menge von Werten annehmen. Diese
Menge bezeichnet man als Datentyp.
•
Eine Deklaration Datentyp variablenName ordnet der Variable mit dem
Namen variablenName einen bestimmten Datentyp zu.
•
Eine Variable wird deklariert, indem man zuerst ihren Typ angibt und
dahinter ihren Namen schreibt.
•
Variablen müssen stets deklariert sein, bevor sie verwendet wird.
•
Durch die Deklaration wird ein bestimmter Speicherplatz im RAM reserviert.
Grundlagen der Informatik
WS 2006/2007
Seite 123
Beispiel für eine Deklaration: int a;
Gibt es in einem Programm mehrer Variablen des selben Datentyp, so kann
man deren Namen bei der Deklaration durch Kommata getrennt hinter den
Datentyp setzten:
Beispiel: int a, b;
Grundlagen der Informatik
WS 2006/2007
Seite 124
Wertzuweisungen
In der Applikation StringAddition sind die Ausdrücke
ersteEingabe = JOptionPane.showInputDialog
("Geben Sie einen Text ein");
zweiteEingabe = JOptionPane.showInputDialog
("Geben Sie einen zweiten Text ein");
ausgabe = ersteEingabe + zweiteEingabe;
Wertzuweisungen.
= ist der Zuweisungsoperator
Grundlagen der Informatik
WS 2006/2007
Seite 125
Die Variable ersteEingabe bekommt den String zugewiesen, den der User
eingegeben hat.
Nach der Belegung der Variable durch den String, hat das Programm den
eingegebenen Wert im Hauptspeicher.
Die Anweisung
ausgabe = ersteEingabe + zweiteEingabe;
weist der Variablen ausgabe die Aneinanderreihung der beiden Strings zu.
Grundlagen der Informatik
WS 2006/2007
Seite 126
Die Applikation Zahlen addieren
In der Applikation IntAddition sollen zwei ganze Zahlen über die Tastatur
eingelesen und die Summe berechnet und ausgegeben werden.
Ganze Zahlen sind in Java vom Datentyp int (integer).
Grundlagen der Informatik
WS 2006/2007
Seite 127
// IntAddition.java
//Addiert zwei einzugebende ganze Zahlen
import javax.swing.JOptionPane;
class IntAddition{
public static void main (String args[]){
//Variablendeklaration
String ersteEingabe,
//1. Eingabestring
zweiteEingabe; //2. Eingabestring
int zahl1,
zahl2,
summe;
//1. zu addierende Zahl
//2. zu addierende Zahl
//Summe von zahl1 und zahl2
Grundlagen der Informatik
WS 2006/2007
Seite 128
//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");
//Konvertierung der Eingabe von String nach int:
zahl1 = Integer.parseInt(ersteEingabe);
zahl2 = Integer.parseInt(zweiteEingabe);
//Addition der beiden Zahlen:
summe = zahl1 + zahl2;
//Ausgabe
JOptionPane.showMessageDialog(null,
"Die Summe ist " + summe,
"Ergebnis",JOptionPane.PLAIN_MESSAGE);
System.exit ( 0 );
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 129
Die Applikation liefert folgende Ergebnisse
Grundlagen der Informatik
WS 2006/2007
Seite 130
Datentypen und Typkonvertierung
Anmerkungen zu der Applikation IntAddition
•
Die Methode showMessageDialog() kann nur Strings einlesen und auch
nur Strings an das Programm 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 Informatik
WS 2006/2007
Seite 131
•
Da über die Tastatur die Eingabe als String erfolgt, müssen die Strings in
Integer Zahlen konvertiert (umgewandelt) werden.
•
Für die Typumwandlung von String in eine Integer-Zahl gibt es in Java die
Methode parseInt(). Dies ist eine Methode der Klasse Integer aus
dem Paket java.lang. Beispiel:
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 Informatik
WS 2006/2007
Seite 132
•
Das Ergebnis wird ausgegeben:
"Die Summe ist " + summe
"Die Summe ist " ist ein String, summe eine Integer-Zahl.
String + Zahl ergibt String, d.h. der + Operator reiht die Strings aneinander.
summe wird automatisch in einen String konvertiert.
Man nennt dies automatische Typanpassung oder implizite Typkonvertierung
oder implizites Typcasting.
Grundlagen der Informatik
WS 2006/2007
Seite 133
Die Primitiven bzw. elementaren Datentypen
•
Variablennamen wie zahl1 und zahl2 beziehen sich auf bestimmte
Stellen im Arbeitsspeicher des Rechners.
•
Jede Variable hat einen Namen, einen Typ, eine Größe und einen Wert.
•
Bei der Deklaration einer Variablen werden bestimmt Speicherzellen
reserviert.
•
Der Name der Variable im Programmcode verweist während der Laufzeit
auf die Adresse dieser Speicherzellen
•
Die primitiven Datentypen bzw. elementaren Datentypen bekommen
standardmäßig die folgenden Speichergrößen zugewiesen:
Grundlagen der Informatik
WS 2006/2007
Seite 134
S c h lü s se lw ort
S p eich e rpla tz
W erteb ereich
Datentypen für ganzzahlige Werte (mit Vorzeichen)
byte
8 Bit
-128..127
short
16 Bit
-32768..32767
int
32 Bit
-2 ..2 -1
long
64 Bit
-2 ..2 -1
Datentypen für Gleitkommazahlen
float
32 Bit
double
64 Bit
31
31
63
63
- 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 Informatik
WS 2006/2007
Seite 135
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
Grundlagen der Informatik
WS 2006/2007
Seite 136
// Zeichen.java
// Rechnen mit dem Datentyp char
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 Informatik
WS 2006/2007
Seite 137
Zeichen.java liefert die Ausgabe
Bemerkung:
Das Zeichen '0' hat in Unicode den Wert 48, 'A' hat den Unicode
Wert 65.
Grundlagen der Informatik
WS 2006/2007
Seite 138
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.
•
Explizite Typanpassung
Ein größerer Typ kann einem kleineren Typ nur mit Verlust von
Informationen zugewiesen werden.
Zwischen dem elementaren Datentyp boolean und den anderen elementaren
Datentypen findet keine Typanpassung statt.
Grundlagen der Informatik
WS 2006/2007
Seite 139
Typumwandlungen in einen „breiteren“ Datentyp
Der Wert ist immer darstellbar. Es kann allerdings an Genauigkeit verloren
gehen, z.B. bei der Umwandlung von int nach float.
von Datentyp
in Datentyp
byte
short, int, long, float, double
short
int, long, float, double
char
int, long, float, double
int
long, float, double
long
float, double
float
double
Grundlagen der Informatik
WS 2006/2007
Seite 140
•
Werte der Datentypen byte und short werden bei Rechenoperationen
automatisch in den Datentyp int umgewandelt.
•
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 Informatik
WS 2006/2007
Seite 141
Explizite Typanpassung
Regel: Der gewünschte Typ für eine Typanpassung wird vor den
umzuwandelnden Datentyp geschrieben. Der Zieldatentyp ist dabei
geklammert, d.h. (Typname) ausdruck
Beispiele: int n = (int) 5.316;
int m = (int) (4.315 + 1.66);
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 Informatik
WS 2006/2007
Seite 142
Bei der Umwandlung von Gleitpunktzahlen in Ganzzahlen kann es zum
Verlust von Genauigkeit kommen.
Die Stellen hinter dem Komma (Punkt) werden abgeschnitten.
Bei zu großen Zahlen ist ein korrektes Ergebnis nicht möglich.
Beispiel double i = 345.886; int a = (int) i; ergibt a = 345;
Grundlagen der Informatik
WS 2006/2007
Seite 143
Die Umwandlung von short in char oder umgekehrt ist nur mit Hilfe der
expliziten Typumwandlung möglich (obwohl beide Länge 16 Bit haben).
Dies liegt am Vorzeichen von short. char hat kein Vorzeichen.
Der Wert von positiven Zahlen bleibt bei der Konvertierung erhalten.
Beispiel: short i = 48; char a =
(char) i; ergibt a = '0'
Grundlagen der Informatik
WS 2006/2007
Seite 144
Arithmetische Operationen:
Die Grundrechenoperationen in Java
Die Grundrechenoperationen bestehen aus einem Operator und zwei Operanden
(z.B. Operation 1 + 2 hat Operator + und Operanden 1 und 2).
Allgemein ist eine Operation gegeben durch einen Operator und mindestens einen
Operanden.
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 Informatik
WS 2006/2007
Seite 145
// 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 Informatik
WS 2006/2007
Seite 146
Grundlagen der Informatik
WS 2006/2007
Seite 147
Der Additionsoperator A + B
Wendet man den zweistelligen Additionsoperator auf seine Operanden an, so
ist der Rückgabewert die Summe der Werte der beiden Operanden
Beispiel: int a = 6 + (3 + 4); ergibt a = 13
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 Informatik
WS 2006/2007
Seite 148
Der Multiplikationsoperator A * B
Der Operator multipliziert den Wert A mit dem Wert B. Es gelten die normalen
Rechenregeln, d.h. Klammer vor Punktrechnung vor Strichrechnung.
Beispiel: int a = 6 * (3 + 4); ergibt a = 42
Grundlagen der Informatik
WS 2006/2007
Seite 149
Der Divisionsoperator A / B
Bei Nutzung des Divisionsoperators muss eine Fallunterscheidung
durchgeführt werden:
Erster Fall: A und B sind beide ganzzahlig.
Man spricht bei A / B von einer ganzzahlige Division.
Das Ergebnis A / B ist wieder eine ganze Zahl. Der Nachkommateil des
Ergebnisses wird abgeschnitten.
Beispiel: int c = 16 / 5; ergibt c = 3
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 Informatik
WS 2006/2007
Seite 150
Der Divisionsoperator A / B
Zweiter Fall:
A und/oder B sind Gleitpunktzahlen, d.h. vom Typ float oder double.
Das Ergebnis ist dann eine Gleitpunktzahl.
Beispiel: double d = 16.0 / 5; ergibt c = 3.2
Grundlagen der Informatik
WS 2006/2007
Seite 151
•
Division durch 0
•
Sind beide Operanden ganze Zahlen (z.B. 3/0), so ergibt sich beim
Interpretieren die Meldung
•
Ist einer der Operanden eine Gleitpunktzahl, so ergibt sich als Ergebnis
Infinity mit Berücksichtigung des Vorzeichens
Beispiel double x = -4.0 / 0 ergibt x = -Infinity
double x =
4.0 / 0 ergibt x =
Infinity
Null durch Null ergibt NaN (Not a number)
Beispiel 0.0 / 0.0 = NaN
Grundlagen der Informatik
WS 2006/2007
Seite 152
Der Restwertoperator A % B
Der Restwertoperator oder Modulo-Operator gibt den Rest der ganzzahligen
Division A / B an.
Das Ergebnis A % B ergibt sich aus A – (A / B) * B.
Das Ergebnis von A % B kann nur negativ sein, wenn der Zähler A negativ ist,
es kann nur positiv sein, wenn der Zähler A positiv ist.
Beispiele: (-9) % 2 =
-1
denn (-9) / 2 = -4
(-9) % (-2) = -1 denn (-9)/ (-2) = 4
9 % (-2) = 1
denn 9 / (-2) = -4
9 % 2 = 1
denn 9 / 2 = 4
Grundlagen der Informatik
WS 2006/2007
Seite 153
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
Grundlagen der Informatik
WS 2006/2007
Seite 154
Spezielle arithmetische Operatoren
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 Informatik
WS 2006/2007
Seite 155
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--
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.
Grundlagen der Informatik
WS 2006/2007
Seite 156
Was liefert die folgende Applikation für eine Ausgabe?
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 + "\n";
c = 5;
ausgabe += c + ", ";
ausgabe += --c + ", ";
ausgabe += c;
System.out.println(ausgabe);
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 157
Kontrollstrukturen
Eine Kontrollstruktur ist eine Abfolge von Anweisungen.
Jedes Programm kann mit Hilfe von drei Kontrollstrukturen geschrieben werden:
1. Sequenz (sequence structure)
2. Auswahl oder Selektion (selection structure)
3. Wiederholung oder Schleife (repetition structure)
Grundlagen der Informatik
WS 2006/2007
Seite 158
Die Sequenz - Blöcke
Die Sequenz ist eine einfache Abfolge von Anweisungen. Diese Anweisungen
werden in Form eines Blockes zusammengefasst.
{
Anweisung 1;
Anweisung n;
}
Anweisung 1
Die Darstellung der Sequenz
als Struktogramm:
Anweisung n
Grundlagen der Informatik
WS 2006/2007
Seite 159
Die Auswahl- oder Selektionsstruktur
Die Selektion ermöglicht die Abarbeitung von Anweisungen in Abhängigkeit von
einer Bedingung.
In Java unterscheidet man zwischen der
•
einfachen Alternative mit if und else und der
•
mehrfachen Alternative mit else if oder switch.
Grundlagen der Informatik
WS 2006/2007
Seite 160
Die Selektion: Einfache Alternative – if und else
Als Struktogramm kann die Selektionsstruktur mit der einfachen Alternative wie
folgt dargestellt werden:
Bedingung
wahr
falsch
Anweisung a1
Anweisung b1
Anweisung an
Anweisung bm
Ist die Bedingung wahr, so wird der Block Anweisung a1 … Anweisung an
ausgeführt.
Ist die Bedingung falsch, so wird der Block Anweisung b1 … Anweisung bm
ausgeführt.
Grundlagen der Informatik
WS 2006/2007
Seite 161
Die Syntax der Selektion mit einfacher Alternative lautet in Java
if (Bedingung) {
Anweisung a1;
…;
Anweisung an;
}else{
Anweisung b1;
…;
Anweisung bm;
}
Grundlagen der Informatik
WS 2006/2007
Seite 162
Bemerkung
•
Die Selektion wählt eine Anweisung bzw. eine Sequenz aus.
•
Besteht der Anweisungsblock nur aus einer einzigen Anweisung, so können
die geschweiften Klammern weggelassen werden.
•
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
einer bedingten Anweisung.
Grundlagen der Informatik
WS 2006/2007
Seite 163
Bedingungen in Java können durch Vergleichsoperatoren gebildet werden
Operator
in Java
==
Beispiel
Bedeutung
x == y
x ist gleich y
!=
x != y
x ist ungleich y
>
x > y
x ist größer als y
<
x < y
x ist kleiner als y
>=
x >= y
x ist größer gleich y
<=
x <= y
x ist kleiner gleich y
Grundlagen der Informatik
WS 2006/2007
Seite 164
Bemerkung zu den algebraischen Vergleichsoperatoren
•
Der Operator == darf nicht mit dem Zuweisungsoperator = verwechselt
werden.
•
Alle algebraischen Vergleichsoperatoren können nur zwei Ausdrücke von
primitiven Datentypen vergleichen.
•
Strings sind Objekte und werden mit der Methode equals() verglichen:
String1.equals(String2)
Grundlagen der Informatik
WS 2006/2007
Seite 165
Logische Verknüpfungen von Ausdrücken
Operator
in Java
&&
Bedeutung
||
logisches oder
!
logisches nicht
logisches und
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 Informatik
WS 2006/2007
Seite 166
Die Wahrheitstabelle der logischen Verknüpfungen
Operand 1
false
Operand 2
false
logisches und &&
false
false
true
false
true
false
false
true
true
true
Operand 1
Operand 2
logisches oder ||
false
false
false
false
true
true
true
false
true
true
true
true
Operand
logisches nicht !
false
true
true
false
Grundlagen der Informatik
WS 2006/2007
Seite 167
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
rechte Operand immer ausgewertet, egal ob der linke Operand true oder
false ist.
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 Informatik
WS 2006/2007
Seite 168
•
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.
Wird der Operator || verwendet, so wird der rechte Ausdruck nur dann
ausgewertet, wenn der linke Ausdruck false ist.
Die Operatoren || und | haben identische Wahrheitstabellen.
•
Prioritäten
! vor && vor ||
Grundlagen der Informatik
WS 2006/2007
Seite 169
// Vergleiche.java
//If Anweisungen und Vergleichsoperatoren
import javax.swing.JOptionPane;
class Vergleiche{
public static void main (String args[]){
String ersteEingabe, zweiteEingabe, ausgabe;
int zahl1, zahl2;
ersteEingabe = JOptionPane.showInputDialog("Geben Sie die
erste ganze Zahl ein");
zweiteEingabe = JOptionPane.showInputDialog("Geben Sie die
zweite ganze Zahl ein");
zahl1 = Integer.parseInt(ersteEingabe);
zahl2 = Integer.parseInt(zweiteEingabe);
//Initialisierung von ausgabe als leerer String:
ausgabe = "";
Grundlagen der Informatik
WS 2006/2007
Seite 170
//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;
}
Grundlagen der Informatik
WS 2006/2007
Seite 171
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 Informatik
WS 2006/2007
Seite 172
Bemerkung
•
Jede lokale Variable, d.h. eine Variable innerhalb einer Methode muss vor
der Verwendung initialisiert werden. (Im Beispiel ausgabe = "";)
•
Werden lokale Variablen verwendet, bevor sie initialisiert wurden, so erzeugt
der Compiler eine Fehlermeldung
Grundlagen der Informatik
WS 2006/2007
Seite 173
Geschachtelte if- und else- Anweisungen
if- Anweisungen können auch geschachtelt werden.
Ein else-Zweig gehört dabei immer zu dem letzten if, für das noch kein elseZweig 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 Informatik
WS 2006/2007
Seite 174
Die Selektion: Mehrfache Alternative – else if
else if Anweisungen bieten die Möglichkeit, eine Auswahl unter verschiedenen
Alternativen zu treffen. Die Syntax in Java lautet
if (Bedingung 1)
Anweisung 1; //Block oder Einzelanweisung
else if (Bedingung 2)
Anweisung2;
else if (Bedingung n)
Anweisung n;
else
//der else-Zweig ist optional
Anweisung m;
Grundlagen der Informatik
WS 2006/2007
Seite 175
//Alternative Bestimmung des Ausgabestrings
if ((zahl1 <=
ausgabe =
ausgabe =
ausgabe =
zahl2) &&
ausgabe +
ausgabe +
ausgabe +
(zahl1 != zahl2)){
zahl1 + " < " + zahl2;
"\n" + zahl1 + " <= " + zahl2;
"\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;
}
Grundlagen der Informatik
WS 2006/2007
Seite 176
Ein weiteres Beispiel: Liegt bei einer einzugebenden Jahreszahl ein Schaltjahr vor?
Eine Jahr ist ein Schaltjahr, wenn die Jahreszahl durch 400 teilbar ist oder – falls
nein- wenn sie nicht durch 100 teilbar ist und gleichzeitig aber durch 4 teilbar ist.
import javax.swing.JOptionPane;
class Schaltjahr{
public static void main (String args[]){
String eingabe, ausgabe;
boolean schaltj;
int jzahl;
eingabe = JOptionPane.showInputDialog("Geben Sie ein
Jahr > 1583 ein");
//Konvertierung der Eingabe von String nach int:
jzahl = Integer.parseInt(eingabe);
Grundlagen der Informatik
WS 2006/2007
Seite 177
//Fallunterscheidung
if (jzahl % 400 == 0)
schaltj = true;
else if (jzahl % 100 == 0)
schaltj = false;
else if (jzahl % 4 == 0)
schaltj = true;
else
schaltj = false;
if (schaltj)
ausgabe = eingabe + " ist ein Schaltjahr";
else
ausgabe = eingabe + " ist kein Schaltjahr";
JOptionPane.showMessageDialog(null,ausgabe);
System.exit ( 0 );
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 178
Die Selektion: Mehrfache Alternative – switch
Die switch-Anweisung dient zur Selektion unter mehreren Alternativen (vgl.
else if-Anweisung).
Die Syntax in Java lautet
switch (Ausdruck){
case
konst1: Anweisungen 1;
break;
case
//ist optional
konst2: Anweisungen 2;
break; //ist optional
……
default : Anweisungen default;
//ist optional
}
Grundlagen der Informatik
WS 2006/2007
Seite 179
Bemerkung zur switch-Anweisung
•
Der Ausdruck nach switch muss vom Datentyp byte, char, short oder
int sein.
•
Nach case muss eine Konstanten stehen, die bereits bei der Übersetzung
des Programms berechnet werden konnte.
•
Nach case darf jeweils nur eine Konstante stehen.
•
Wenn es keine passende Konstante gibt, wird der Programmablauf bei der
default- Anweisung fortgesetzt, falls diese vorhanden ist.
•
Die break-Anweisung ist von der Syntax her nicht erforderlich, sollte aber
stets gesetzt werden.
•
Ohne die break-Anweisung werden nach einer Übereinstimmung alle
weiteren Anweisungen ausgeführt
Grundlagen der Informatik
WS 2006/2007
Seite 180
Beispiel für eine switch Anweisung
Sei monat eine Integer-Variable:
switch (monat){
case 4: tage = 30;
break;
case 6: tage = 30;
break;
case 9: tage = 30;
break;
case 11:tage = 30;
break;
case 2: tage = 28;
break;
default:tage = 31;
}
Grundlagen der Informatik
WS 2006/2007
Seite 181
oder (mit identischem Ergebnis)
switch (monat){
case 4:
case 6:
case 9:
case 11: tage = 30;
break;
case 2: tage = 28;
break;
default: tage = 31;
}
Grundlagen der Informatik
WS 2006/2007
Seite 182
Die Wiederholung oder 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
ist.
•
Eine Schleife wiederholt eine Anweisung bzw. eine Sequenz.
•
Dabei unterscheidet man Schleifen, bei denen die Schleifenbedingung am
Anfang geprüft wird, und Schleifen, bei denen diese Prüfung am Ende
erfolgt.
Grundlagen der Informatik
WS 2006/2007
Seite 183
Schleifen mit Vorabprüfung (Abweisende Schleifen)
while-Schleife
•
In einer while-Schleife kann eine Anweisung oder ein Anweisungsblock in
Abhängigkeit von der Bewertung der Bedingung wiederholt ausgeführt
werden. Da die Bedingung vor der Ausführung der Anweisungen bewertet
wird, spricht man auch von einer abweisenden Schleife.
•
Die Bedingung wird berechnet und die Anweisungen dann ausgeführt, wenn
der Ausdruck true ist.
•
Danach wird die Berechnung der Bedingung und die eventuelle Ausführung
der Anweisungen wiederholt.
Grundlagen der Informatik
WS 2006/2007
Seite 184
Das Struktogramm für die while-Schleife
while Bedingung
Anweisung 1
Anweisung n
Die Syntax in Java für eine while-Schleife lautet:
while (Bedingung){
Anweisung 1;....;Anweisung n;
}
Grundlagen der Informatik
WS 2006/2007
Seite 185
Bemerkung
•
Besteht der Schleifenrumpf nur aus einer Anweisung, so können die
geschweiften Klammern {} weggelassen werden.
•
Um keine Endlos-Schleife zu erzeugen, muss die Schleifenbedingung durch
eine Anweisung manipuliert werden.
Beispiel
while (i < 10){
.....
i = i + 1;
}
Grundlagen der Informatik
WS 2006/2007
Seite 186
// 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[]){
String eingabe, anzahl1, ausgabe;
int anzahl;
double durchschnitt;
int zahl = 0, zaehler = 1, gesamtsumme = 0;
//Einlesen der Anzahl der einzugebenden Zahlen als String:
anzahl1 = JOptionPane.showInputDialog("Geben Sie die Anzahl der
einzugebenden Zahlen ein");
anzahl = Integer.parseInt (anzahl1);
Grundlagen der Informatik
WS 2006/2007
Seite 187
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;
}
//Berechnung des Durchschnitts
durchschnitt = (double) gesamtsumme / anzahl;
//Ausgabe
JOptionPane.showMessageDialog(null,
"Durchschnitt:"+durchschnitt);
System.exit ( 0 );
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 188
Abweisende Schleife mit for
Die Syntax in Java für eine for-Schleife lautet:
for ( Initialisierer ; Bedingung ; Aktualisierung){
Anweisung 1;....;Anweisung n;
}
Beispiel:
for (int i = 1; i <= 10; i++)
System.out.println (i);
Grundlagen der Informatik
WS 2006/2007
Seite 189
Bemerkung zur for-Schleife
•
Die for-Schleife ist eine abweisende Schleife, da zuerst geprüft wird, ob die
Bedingung für ihre Ausführung zutrifft.
•
Zu Beginn der Schleife wird einmalig die Initialisierung durchgeführt.
Hierdurch wird die lokale Variable, die in der Regel als Laufvariable
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
die Schleife nicht durchlaufen und beendet.
Grundlagen der Informatik
WS 2006/2007
Seite 190
•
Die Aktualisierung, d.h. die Veränderung der Laufvariablen, wird am Ende
jedes Schleifendurchlaufs, aber noch vor dem nächsten Schleifeneintritt
ausgeführt.
•
Die for-Schleife ist eine spezielle Variante der while-Schleife. Sie wird
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);
Grundlagen der Informatik
WS 2006/2007
Seite 191
Zwei Beispiele zur for-Schleife
Beispiel 1
// Addierer.java
/*
Addiert alle ungeraden Zahlen zwischen 1 und 50
*/
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 Informatik
WS 2006/2007
Seite 192
Beispiel 2
// GeschachtelteSchleife.java
/*
Beispiel für das Schachteln von 2 for-Schleifen
*/
class GeschachtelteSchleife {
public static void main (String
for (int i = 1; i <= 10;
for (int j = 2; j <= 5 ;
System.out.print (i*j
args[]){
i++){
j++)
+ "\t");
System.out.println ();
}
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 193
•
Die for-Schleife ist äquivalent mit
{
Initialisierer;
while (Bedingung){
Anweisung 1;…;Anweisung n;
Aktualisierung;
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 194
Die in der Applikation Durchschnitt.java benutzte while-Schleife kann durch
folgende for-Schleife ersetzt werden:
for (int i = 1; i<= anzahl; i++){
eingabe = JOptionPane.showInputDialog("Geben Sie die "
+ i +". Zahl ein");
//Konvertierung der Eingabe von String nach int:
zahl = Integer.parseInt(eingabe);
// Addition der Zahl zur Gesamtsumme
gesamtsumme = gesamtsumme + zahl;
}
Grundlagen der Informatik
WS 2006/2007
Seite 195
Ein weiteres Beispiel für abweisende Schleifen
Die Applikation Ggt.java soll den größten gemeinsamen Teiler von zwei
positiven ganzen Zahlen berechnen. Die beiden Zahlen sollen eingegeben
werden. Falls eine der beiden Zahlen nicht positiv ist, soll eine Fehlermeldung
ausgegeben werden.
Grundlagen der Informatik
WS 2006/2007
Seite 196
// Ggt.java
/*Berechnet den groessten gemeinsamen Teiler von
zwei positiven integer Zahlen
*/
import javax.swing.JOptionPane;
class Ggt{
public static void main (String args[]){
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
zweite positive ganze Zahl ein");
zahl1 = Integer.parseInt (ersteEingabe);
zahl2 = Integer.parseInt (zweiteEingabe);
Grundlagen der Informatik
WS 2006/2007
Seite 197
//Sind beide Zahlen positiv?
if (zahl1 <=0 || zahl2 <= 0){
JOptionPane.showMessageDialog(null,"Die Zahlen muessen
positiv sein!","Fehler",JOptionPane.ERROR_MESSAGE);
System.exit (0);
}
while (zahl2 > 0){ //Vertausch zahl1 und zahl2
hilf = zahl1;
zahl1 = zahl2;
zahl2 = hilf;
zahl2 = zahl2 % zahl1;
}
//Ausgabe
JOptionPane.showMessageDialog(null, "ggt von „
+ersteEingabe+" und "+zweiteEingabe+" ist "+zahl1);
System.exit ( 0 );
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 198
Die Ausgabe der Applikation Ggt.java sieht wie folgt aus:
oder falls eine Zahl nicht echt positiv ist:
Grundlagen der Informatik
WS 2006/2007
Seite 199
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:
Anweisung 1
Anweisung n
while Bedingung
Grundlagen der Informatik
WS 2006/2007
Seite 200
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.
Grundlagen der Informatik
WS 2006/2007
Seite 201
//BinaerUmwandler.java
/*
Umwandlung einer ganzen Zahl in eine binäre Zahl
*/
import javax.swing.JOptionPane;
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 Informatik
WS 2006/2007
Seite 202
do {
rest = zahl % 2;
zahl = zahl / 2;
//Zusammensetzung des Strings zur Binaerdarstellung
binaer = rest + binaer;
} while (zahl > 0);
JOptionPane.showMessageDialog(null,"Die ganze Zahl "+ eingabe
+" hat die binaere Darstellung "+binaer);
System.exit( 0 );
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 203
Die Endlosschleifen
Sind die Bedingungen von Schleifen immer wahr, so handelt es sich um
Endlosschleifen.
Beispiele
while-Schleife
while (true)
;
oder
while ( 0 == 0){
// immer wieder und immer wieder
}
Grundlagen der Informatik
WS 2006/2007
Seite 204
Beispiel für eine Endlosschleife mit for
Alle drei Ausdrücke im Kopf der Schleife sind bei einer for Schleife optional.
Damit ist die einfachste Endlosschleife gegeben durch
for (; ; )
;
Die Semikolons sowohl im Schleifenkopf als auch im Schleifenrumpf müssen
stets gesetzt werden.
Beispiel für eine Endlosschleife mit do while
do
;
while (true);
Grundlagen der Informatik
WS 2006/2007
Seite 205
Ausstieg aus Schleifen
• Die Schlüsselwörter break und continue ermöglichen es,
Anweisungsblöcke zu verlassen bzw. wieder einzusteigen.
• Wird innerhalb einer for-, while- oder do/while Schleife eine breakAnweisung gesetzt, so wird der Schleifendurchlauf beendet.
• break beendet immer die innerste Schleife
Beispiel
for (int i = 1; i < 1000;i++){
System.out.println(i);
if (i > 5)
break;
}
Grundlagen der Informatik
WS 2006/2007
Seite 206
Ausstieg aus beliebig tief geschachtelten Schleifen
•
Zum Ausstieg aus beliebig tief geschachtelten Schleifen wird ein so
genanntes Label benutzt, um anzuzeigen, wohin der Sprung gehen soll.
•
Ein Label besteht aus einem Java-Bezeichner, an den ein Doppelpunkt
gehängt wird.
Grundlagen der Informatik
WS 2006/2007
Seite 207
Beispiel für ein Schleifenausstieg mit Label
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 Informatik
WS 2006/2007
Seite 208
Bemerkung zum Einsatz eines Labels
•
Das Label gibt der Schleife einen Namen (im Beispiel TestSchleife)
•
Die break-Anweisung springt hinter die Schleife, die den Namen des Labels
trägt.
Grundlagen der Informatik
WS 2006/2007
Seite 209
Noch ein Beispiel für ein Schleifenausstieg mit Label
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;
}
}
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 210
Das Schlüsselwort continue
Im Gegensatz zu break beendet continue die Schleife nicht, sondern
überspringt die restlichen Anweisungen innerhalb der Schleife, um den
nächsten Durchgang zu starten.
Grundlagen der Informatik
WS 2006/2007
Seite 211
Beispiel für den Einsatz von continue
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);
}
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 212
Die Applikation BeispielMitContinue liefert die Ausgabe
Bemerkung: Die continue-Anweisungen können wie das break mit einem Label
ergänzt werden.
Grundlagen der Informatik
WS 2006/2007
Seite 213
Arrays
•
Ein Array ist ein grundlegende Datenstruktur.
•
Unter einem Array (Feld) versteht man eine Anordnung von Elementen
desselben Datentyps.
•
Ein Array ist ein Objekt.
•
Die einzelnen Elemente heißen Komponenten und können über Indizes
angesprochen werden.
•
In Java beginnen die Indizes eines Arrays stets mit 0.
•
Der Zugriff auf die i-te Komponente des Arrays mit dem Namen arrayName
erfolgt durch arrayName[i-1].
Grundlagen der Informatik
WS 2006/2007
Seite 214
Arrays werden in drei Schritten erstellt
a. Deklaration der Arrayvariablen
b. Zuweisung von Speicher für die Komponenten des Arrays
c.
Initialisierung der Komponenten
zu a.
Durch die Deklaration einer Arrayvariablen wird eine Variable definiert, die auf
ein Array-Objekt zeigen kann. Die Variable ist also eine Speicheradresse, die
zunächst den Wert null (d.h. keinen Wert) hat. Da es sich um einen Zeiger
handelt, bezeichnet man Arrayvariablen als Referenzvariablen.
Grundlagen der Informatik
WS 2006/2007
Seite 215
zu a.
Die allgemeine Form der Definition einer Referenzvariablen auf ein
eindimensionales Array ist:
Typname[] arrayName;
oder
Typname arrayName [];
Grundlagen der Informatik
WS 2006/2007
Seite 216
zu b:
Mit dem new-Operator kann das konkrete Array erzeugt werden.
Beispiel:
arrayName = new byte [4] legt ein Array-Objekt mit 4 Komponenten an.
Diese Komponenten werden mit dem default-Wert binär 0 belegt (d.h. z.B. bei
Zahlen wie int mit Wert 0, boolean mit false, char mit null und Objekte
mit null).
Es wird jetzt 4 mal so viel Speicher reserviert, wie der Datentyp des Arrays für
die Speicherung von einem Element benötigt.
zu c:
Durch Zuweisung von Werten an die Komponenten können die Default-Werte
mit sinnvollen Werten überschrieben werden, z.B. arrayName[0] = 3;
Grundlagen der Informatik
WS 2006/2007
Seite 217
zu a,b,c: Implizites Erzeugen über eine Initialisierungsliste
Eine andere Möglichkeit, ein Array anzulegen, ist, das Array implizit über eine
Initialisierungsliste zu erzeugen und gleichzeitig zu initialisieren.
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
des Arrays, sowie die Initialisierung der Array-Elemente erfolgt in einem Schritt.
Grundlagen der Informatik
WS 2006/2007
Seite 218
Beispiele für das Erzeugen von Arrays
/* a
/* b
/* c
*/
*/
*/
int feld[];
feld = new int [8];
for (int i = 0; i < feld.length; i++)
feld[i] = i*i;
oder
/* 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 Informatik
WS 2006/2007
Seite 219
// TemperaturJan.java
//Initialisierung und Ausgabe eines Arrays
class TemperaturJan{
public static void main (String args[]){
final int ANZAHL_TAGE = 31;
String ausgabe;
double temperatur[] = new double [ANZAHL_TAGE];
//Initialisierung mit Durchschnittswerten;
for (int i = 0; i < temperatur.length;i++)
temperatur [i] = 5.3;
//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);
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 220
Bemerkung zu Arrays
•
Arrays kann man von einem beliebigen Datentyp oder einer beliebigen
Klasse erstellen. Dies können primitive Datentypen, Objekte oder andere
Arrays sein. Im letzteren Fall spricht man dann von mehrdimensionalen
Arrays.
•
Die Größe eines Arrays wird zum Zeitpunkt der Erstellung des Arrays
festgelegt, danach kann sie nicht mehr verändert werden.
•
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 Informatik
WS 2006/2007
Seite 221
Konstanten in Java
•
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
Fehlermeldung des Compilers.
•
Konstanten werden durchgängig in Großbuchstaben geschrieben.
Unterstriche sind hier erlaubt.
Grundlagen der Informatik
WS 2006/2007
Seite 222
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
gibt. Dabei kann die Menge der Eingabeparameter oder die Rückgabe auch leer
sein.
Eine Methode besteht aus vier Teilen (ein Konstruktor nur aus drei, s. später):
Dem Rückgabetyp, dem Methodennamen, der Eingabe- oder Parameterliste
und dem Methodenrumpf.
Der Rückgabetyp gibt den Datentyp des zurückgegebenen Wertes an.
Der Methodenname legt den Namen der Methoden fest.
Der Methodenrumpf besteht aus einzelnen Anweisungen, die von
geschweiften Klammern { } umschlossen werden, d.h. einen Block bilden.
Grundlagen der Informatik
WS 2006/2007
Seite 223
Damit hat eine Methode folgende Gestalt
Rückgabetyp methodenName (Parameterliste){
Anweisung 1;
……. ;
Anweisung m;
Methodenrumpf
}
Grundlagen der Informatik
WS 2006/2007
Seite 224
Die Eigenschaften der Parameterliste
•
Sie besteht aus endlich vielen Parametern, die von runden Klammern
umschlossen werden.
•
Die Parameterliste kann auch leer sein. Man muss dennoch die runden
Klammern hinter dem Methodennamen setzen, d.h. methodenName()
•
Parameter können beliebige Daten sein (z.B. Zahlenwert, Strings, Objekte).
Parameter werden wie Variablen definiert, d.h. erst der Datentyp, dann der
Name.
Jeder Parameter muss einzeln definiert werden, die Parameter werden
durch Kommata getrennt.
•
Wichtig: Die Reihenfolge der Parameter in der Methodendeklaration ist
bindend festgelegt.
Grundlagen der Informatik
WS 2006/2007
Seite 225
Methodendeklaration – der Rückgabetyp
Man unterscheidet zwei Arten von Methoden: Methoden ohne Rückgabewert
und Methoden mit Rückgabewert.
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;
}
Grundlagen der Informatik
WS 2006/2007
Seite 226
Methode ohne Rückgabe
void methodenName (Datentyp p1,…,Datentyp pn){
…….;
}
•
Das reservierte Wort void gibt an, dass die Methode keinen
Rückgabewert liefert.
Grundlagen der Informatik
WS 2006/2007
Seite 227
Bekannte Beispiele für Methoden
•
Methode showMessageDialog() der Klasse JOptionPane liefert void
•
Methode showInputDialog() der Klasse JOptionPane liefert String
•
Methode parseInt() der Klasse Integer liefert int
•
Methode main()liefert void
Grundlagen der Informatik
WS 2006/2007
Seite 228
Anmerkungen zu Methoden
•
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 Informatik
WS 2006/2007
Seite 229
Der Aufruf einer Methode
Der Aufruf erfolgt durch die Angabe des Namens der Methode mit Angaben der
Eingabeparameter.
Beispiele:
Integer.parseInt (ersteEingabe);
JOptionPane.showMessageDialog(null,"Die Zahlen muessen
positiv sein!","Fehler",JOptionPane.ERROR_MESSAGE);
Grundlagen der Informatik
WS 2006/2007
Seite 230
Statische Methoden
Es werden zwei Arten von Methoden unterschieden. Dies sind die
Instanzmethoden und die Klassenmethoden. Hier beschäftigen wir uns zunächst
mit den Klassenmethoden.
Klassenmethoden oder statische Methoden sind eine spezielle Art von
Methoden, die kein Objekt benötigen (die Bedeutung von Objekte werden wir
später behandeln).
Eine statische Methode wird unter Angabe des Namens derjenigen Klasse, in
der sie deklariert ist, aufgerufen, d.h.
Klassenname.Methodenname (…);
Der Klassenname kann auch weggelassen werden, wenn die Methode in
derselben Klasse deklariert ist.
Grundlagen der Informatik
WS 2006/2007
Seite 231
Deklaration von statischen Methoden
Deklariert wird eine statische Methode, indem man vor dem Rückgabetyp das
reservierte Wort static schreibt.
Statische Methode mit und ohne Rückgabe
static Datentyp des Rückgabewertes methodenName (Datentyp p1,…,Datentyp pn){
…….;
return Rückgabewert;
}
static void methodenName (Datentyp p1,…,Datentyp pn){
…….;
}
Grundlagen der Informatik
WS 2006/2007
Seite 232
Beispiele für den Einsatz von statischen Methoden
class MaximumBestimmung {
static int maximum (int x, int y){
if (x > y)
return x;
else
return y;
}
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 Informatik
WS 2006/2007
Seite 233
Ein weiters Beispiel für die Verwendung von Klassenmethoden
// Rechteck.java
/*Liest die Seitenlaengen eines Rechtecks ein und ermittelt
Flaecheninhalt und Laenge der Diagonale
*/
import javax.swing.JOptionPane;
class Rechteck {
static double liesSeite() {
String eingabe;
double zahl;
eingabe =JOptionPane.showInputDialog("Geben Sie eine
Seitenlaenge des Rechtecks ein:");
zahl = Double.parseDouble (eingabe);
return zahl;
}
Grundlagen der Informatik
WS 2006/2007
Seite 234
static double inhalt (double x, double y){
double i;
i = x*y;
return i;
}
static double diagonale (double x, double y){
double d;
d = Math.sqrt(x*x + y*y);
return d;
}
public static void main (String args[]) {
double a, b, c , d;
a = liesSeite();
b = liesSeite();
c = diagonale(a,b);
d= inhalt(a,b);
String ausgabe = "Flaecheninhalt: " + d +"\nDiagonale: "+c;
JOptionPane.showMessageDialog(null,ausgabe);
System.exit (0);
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 235
Bemerkung: Die Deklaration static
Nicht nur Methoden können static sein.
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 Informatik
WS 2006/2007
Seite 236
Methoden der Klasse Math
•
Für die arithmetischen und trigonometrischen Standardfunktionen hat Java
eine spezielle Klasse, die Klasse Math.
• 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 Informatik
WS 2006/2007
Seite 237
Einige Methoden der Klasse Math
• abs: Liefert den Betrag einer Zahl
double abs (double a)
float abs (float a)
int abs (int a)
long abs (long a)
• acos, asin, atan: Liefert den arc cosinus, arc sinus, arc tan eines Winkels
double acos (double a)
double asin (double a)
double atan (double a)
Grundlagen der Informatik
WS 2006/2007
Seite 238
• cos, sin, tan: Trigonometrische Funktionen, in Bogenmaß
double cos (double a)
double sin(double a)
double tan(double a)
• exp: Liefert die Eulersche Zahl e hoch einen double Wert
double exp (double a)
• log: Liefert den natürlichen Logarithmus (d.h. zur Basis e) von einem
double-Wert
double log (double a)
Grundlagen der Informatik
WS 2006/2007
Seite 239
• max, min: Liefert Maximum bzw. Minimum zweier Zahlen
double max (double a, double b)
float max(float a, float b)
int max(int a, int b)
long max (long a, long b)
double min (double a, double b)
float min(float a, float b)
int min(int a, int b)
long min (long a, long b)
Grundlagen der Informatik
WS 2006/2007
Seite 240
• pow: Liefert den Wert des ersten Arguments potenziert mit dem zweiten
Argument
double pow (double a, double b)
• random: Liefert einen positiven Zufalls- double-Wert größer gleich 0.0 und
kleiner 1.0
double random()
• round: Runden auf ganze Zahlen
long round (double a)
int round (float a)
• sqrt: Liefert die Wurzel
double sqrt (double a)
Grundlagen der Informatik
WS 2006/2007
Seite 241
Runden von Zahlen
•
Die Methode round() der Klasse Math rundet Zahlen.
• round() rundet auf die nächste Ganzzahl vom Typ long (kaufmännisches
Runden).
Beispiel: double a = 97.56; // ergibt Math.round(a) = 98;
•
Mit Hilfe von round() können auch Zahlen auf Nachkomma-Stellen gerundet
werden.
•
Beispiel: Runden auf 2 Nachkommastellen
Math.round(a*100)/100. liefert für a = 1.3456 den Wert 1.35
Grundlagen der Informatik
WS 2006/2007
Seite 242
Überladen von Methoden
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
besitzen und unterschiedliche, aber für den Compiler unterscheidbare, Typen
annehmen
•
Die Anzahl der Parameter kann unterschiedlich sein.
Beispiel die Methode min() aus der Klasse Math.
Grundlagen der Informatik
WS 2006/2007
Seite 243
Grundlagen der Objektorientierung
Ziel der objektorientierten Programmierung (OOP) ist die mehrfache Verwendung
von Programmcode.
Die Grundidee der OOP ist der Ansatz, dass Programme die Welt oder Teile der
Welt abbilden.
Die Welt besteht aus Objekten. Das sind
•
Gegenstände (Autos, Flugzeuge, Schiffe…)
•
Lebewesen (Menschen, Tiere, Pflanzen…)
•
abstrakte Konstrukte (Staaten, Konzerne, Konten…)
Grundlagen der Informatik
WS 2006/2007
Seite 244
Für diese Objekte gilt
•
Sie können in Kategorien bzw. Klassen -d.h. in sinnvolle Einheitenzusammengefasst werden.
Beispiel: Tiere, Pflanzen, Wirbeltiere, Säugetiere, Fische gehören alle zur
Klasse der Lebewesen.
•
Jedes Objekt hat individuelle Eigenschaften (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 Informatik
WS 2006/2007
Seite 245
Die Theorie der Objektorientierung fasst dies zu einem Konzept zusammen.
In der Objektorientierung werden die folgende Bezeichnungen verwendet:
→
Klassen
Eigenschaften →
Attribute
Kategorien
Prozesse
→
Methoden
Klasse
attribute
methoden()
Grundlagen der Informatik
WS 2006/2007
Seite 246
Klassen und Objekte
•
Eine Klasse ist ein Schema, eine Schablone, eine Kategorie, in die
bestimmte individuelle Objekte eingeordnet werden können.
•
Gehört ein Objekt zu einer Klasse, gelten alle Eigenschaften der Klasse.
•
Ein Objekt ist immer eine konkrete Ausprägung einer Klasse, man sagt:
•
•
Ein Objekt ist eine Instanz seiner Klasse.
Die Klasse ist der zentrale Begriff aus Sicht der objektorientierten
Programmierung.
•
Ein Objekt ist eindeutig bestimmt durch seine Attribute (Daten,
Eigenschaften) und durch seine Methoden (Funktionen, Verhalten).
Grundlagen der Informatik
WS 2006/2007
Seite 247
•
Wie man von einem Konstruktionsplan für ein Auto mehrere Fahrzeuge von
diesem Typ bauen kann, so kann man auch von einer Klasse mehrere
Objekte „bauen“.
•
So wie die Autos in unterschiedlichen Farben, Motoren und Ausstattungen
gebaut werden, so können auch von Klassen die Objekte mit verschiedenen
Eigenschaften erstellt werden.
•
Aus der Weltanschauung könnte dann der Hersteller dem Paket, die
Werksabteilung der Klasse, die Materialien den Attributen, die Maschinen
den Methoden und der Konstruktionsplan dem Konstruktor in Java
entsprechen.
Grundlagen der Informatik
WS 2006/2007
Seite 248
•
Eine einfache Anwendung für eine Klasse ist das Zusammenfassen
zusammengehöriger Variablen.
String ist eine Klasse, die aus einem Array aus char-Variablen besteht.
Nach der Erzeugung des Strings, d.h. nach dem Anlegen der Instanz bzw.
des Objektes, besteht der String aus zusammengehörigen Buchstaben, die
zu einem Wort zusammengefasst sind.
Grundlagen der Informatik
WS 2006/2007
Seite 249
Kapselung
Ein wesentliches Konzept der Objektorientierung ist, dass die Attribute von den
Methoden vor der Außenwelt gekapselt sind. Sie können (im allgemeinen) nur
durch die Methoden verändert werden.
Die Methoden eines Objektes sind die Schnittstellen des Objektes zur
Außenwelt.
Es bedeutet, dass die internen Strukturen von Objekten vor dem Verwender
verborgen sind.
Attribute
Grundlagen der Informatik
WS 2006/2007
Seite 250
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
werden.
•
Die allgemeine Klasse heißt Superklasse, Oberklasse oder Mutterklasse.
•
Die speziellen Klassen heißen Subklassen, Unterklassen oder Kindklassen.
•
Eine Superklasse hat eine besondere Beziehung zu ihrer Subklasse (oder
ihren Subklassen), eine „Ist-ein“-Beziehung (‚is-a‘ relation)
Grundlagen der Informatik
WS 2006/2007
Seite 251
•
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. Die Attribut und Methoden sind dann für die Subklasse
sichtbar.
•
Dieses Prinzip nennt man Vererbung.
•
Für Subklassen spezifische Attribute und Methoden können nicht geerbt
werden.
Grundlagen der Informatik
WS 2006/2007
Seite 252
UML
•
UML (Unified Modelling Language) ist eine Sprache zur visuellen
Modellierung von Strukturen und Prozessen von Software.
•
Sie ist Standard der modernen Software-Entwicklung
•
Eines der Diagramme der UML ist das Klassendiagramm
•
Jede Klasse wird als ein Rechteck dargestellt, mit dem Namen der Klasse
im oberen Teil, allen Daten (Attributen) im mittleren Teil und den Methoden
im unteren Teil.
•
Oft wird in der UML einer der beiden unteren Teile weggelassen, wenn sie
für die jeweilige Betrachtung nicht interessant sind.
Grundlagen der Informatik
WS 2006/2007
Seite 253
Einige Darstellungsformen aus UML
Klasse
Objekt
Klasse
:Klasse
attribute
attribute
methoden()
methoden()
Vererbung
SubKlasse
SuperKlasse
Grundlagen der Informatik
WS 2006/2007
Seite 254
Ein erstes Beispiel für eine Klasse
Gegeben sei ein Punkt im Koordinatensystem mit einer x- und einer yKoordinate.
Damit hat ein jeder Punkt die Eigenschaften (Attribute)
double y; double x
Jeder Punkt hat auch Methoden, dies sind Methoden, die die Koordinaten x
und y setzen und Methoden, die die Koordinaten eines Punktes auslesen.
Natürlich sind auch noch andere Methoden möglich.
Damit hat die Klasse Punkt die Form
Grundlagen der Informatik
WS 2006/2007
Seite 255
Die Syntax für eine Klasse lautet
class Klassenname{
Deklaration der Attribute;
Deklaration der Methoden;
}
Grundlagen der Informatik
WS 2006/2007
Seite 256
class Punkt {
double x;
double y;
double getX(){
return x;
}
//Attribut
//Attribut
//get-Methode
double getY(){
return y;
}
//get-Methode
void setX(double i){
x = i;
}
//set-Methode
void setY(double j){
y = j;
}
//set-Methode
}
Grundlagen der Informatik
WS 2006/2007
Seite 257
Erzeugen eines Objektes, d.h. einer Instanz einer Klasse
Als nächstes wird ein Objekt von der Klasse Punkt erzeugt.
Dies erfolgt in innerhalb der Klasse PunktApp in der main-Methode.
class PunktApp{
public static void main (String args[]) {
Punkt p;
//Deklaration der Variable
p = new Punkt(); //Erzeugung des Objektes
p.setX(3.7);
p.setY(4.0);
System.out.println("Koordinaten des
Punktes sind:
("+p.getX() +","+ p.getY()+")");
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 258
Der new-Operator
•
Die Erzeugung eines Objektes geschieht mit dem new-Operator und der
Zuordnung der Variablen:
KlassenName 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.
Dem Konstruktor können Parameter übergeben werden –oder wie hierkann die Parameterliste leer sein. In diesem Fall spricht man von einem
Standardkonstruktor.
Grundlagen der Informatik
WS 2006/2007
Seite 259
•
Die Zeile (*) kann auch in zwei Zeilen geschrieben werden:
Deklaration der variable durch Klassenname variable;
hierdurch wird Speicherplatz reserviert.
Erzeugung des Objektes mit dem new-Operator, d.h.
variable = new KlassenName();
Grundlagen der Informatik
WS 2006/2007
Seite 260
Zugriff auf die Methoden und Attribute des Objektes
•
Wurde ein Objekt p erzeugt, so kann durch p.Attribut auf die Attribute
zugegriffen bzw. durch p.methode() die Methoden des Objektes verwendet
werden. Im Beispiel PunktApp wurde z.B. durch p.setX(3.7); die
Methode setX() des Objektes p aufgerufen.
•
Bemerkung: Im Allgemeinen ist es nicht erlaubt, direkt auf Attribute
zuzugreifen. Auch der Zugriff auf Methoden kann beschränkt sein. Dies wird
näher im Kapitel: „Öffentlichkeit und Privatsphäre“ behandelt.
Grundlagen der Informatik
WS 2006/2007
Seite 261
Lokale Variablen und Attribute
•
Ein Aufrufparameter einer Methode 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 Informatik
WS 2006/2007
Seite 262
Ein weiteres Beispiel:
Es sollen zwei Konten erstellt werden, von denen jeweils ein Betrag zugebucht
und abgebucht werden kann.
class Konto{
//Attribute
int kontoNr;
double saldo;
//Methoden
void einzahlen (double betrag){
saldo += betrag;
}
void abheben (double betrag){
saldo -= betrag;
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 263
Die Erzeugung der Objekte findet in der main()-Methode der Klasse KontoApp
statt.
class KontoApp{
public static void main (String args[]) {
Konto k1, k2;
k1 = new Konto();
k2 = new Konto();
k1.kontoNr = 1;
k2.kontoNr = 2;
k1.saldo = 1000;
k2.saldo = 500;
k1.einzahlen(300);
k2.abheben(40);
System.out.println("Saldo von Konto "
+k1.kontoNr
+": "+k1.saldo
+"\nSaldo von Konto "
+k2.kontoNr +": "+k2.saldo);
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 264
Bemerkung zu der Klasse Konto
•
In der Applikation KontoApp wurden zwei Instanzen der Klasse Konto
erstellt.
•
Von KontoApp, d.h. außerhalb der Klasse Konto, konnte direkt auf die
Attribute der Objekte zugegriffen werden und diese verändert werden z.B.
durch k1.saldo = 1000;
•
Dies ist sehr gefährlich, denn somit können unkontrolliert Werte von
Attributen von außen manipuliert werden, ohne dass das Objekt, d.h. der
Besitzer der Attribute, hierauf Einfluss hat.
•
Um dies zu verhindern, sollten Attribute stets geschützt werden.
Grundlagen der Informatik
WS 2006/2007
Seite 265
Öffentlichkeit und Privatsphäre
•
Oft ist es sinnvoll Attribute und Methoden einer Klasse nur teilweise oder
gar nicht der Öffentlichkeit zur Verfügung zu stellen.
•
Man spricht von Kapselung, wenn die Attribute vor der Außenwelt
verborgen sind und nur über die eigenen Methoden verändert werden
können.
•
Die Kapselung ist eines der wichtigsten Konzepte der Objektorientierung.
•
Somit kann kein anderes Programm oder Objekt auf verborgene Attribute
zugreifen und dort unbeabsichtigt Effekte bewirken.
•
Auch wird dadurch verhindert, dass das Objekt unbeabsichtigt in anderen
Programmen etwas zerstört.
Grundlagen der Informatik
WS 2006/2007
Seite 266
Sichtbarkeit
In einer Klasse kann bei einer Definition jeder einzelnen Komponente separat
spezifiziert werden, in welcher Weise der Zugriff auf diese Komponente
möglich ist. Unterschieden werden kann zwischen private, protected,
public und keine Angabe.
Spezifizierer in selber
Klasse
in Unterklasse in selbem
Paket
private
sichtbar
nichts
angegeben
sichtbar
protected
sichtbar
sichtbar
sichtbar
public
sichtbar
sichtbar
sichtbar
überall
sichtbar
sichtbar
Grundlagen der Informatik
WS 2006/2007
Seite 267
In Java sind Zugriffsmodifikatoren erlaubt für Klassen, Schnittstellen,
Methoden, Konstruktoren und Attribute.
Die nächste Tabelle zeigt die möglichen Zugriffsmodifikatoren
Element
private
nichts
angegeben
protected
public
Attribut
X
X
X
X
Methode
X
X
X
X
Konstruktor
X
X
X
X
Klasse
X
X
Schnittstelle
X
X
Grundlagen der Informatik
WS 2006/2007
Seite 268
Wenn wir in der Klasse Konto.java das Attribut kontoNr und saldo
mit private schützen, so kann die Applikation KontoApp nicht mehr
hierauf zugreifen.
class Konto{
//Attribute
private int kontoNr;
private double saldo;
//Methoden
void einzahlen (double betrag){
saldo += betrag;
}
void abheben (double betrag){
saldo -= betrag;
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 269
Es müssen Methoden definiert werden, die den Zugriff auf die Attribute ermöglichen:
class Konto{
private int kontoNr;
private double saldo;
public int getKontoNr () {
return kontoNr;
}
public double getSaldo () {
return saldo;
}
void setKontoNr ( int nummer) {
kontoNr = nummer;
}
void setSaldo ( double kontoStand) {
saldo = kontoStand;
}
//weitere Methoden einzahlen() und abheben()
}
Seite 270
Grundlagen der Informatik
WS 2006/2007
public class KontoApp{
public static void main (String args[]) {
Konto k1, k2;
k1 = new Konto();
k2 = new Konto();
k1.setKontoNr(1);
k2.setKontoNr(2);
k1.setSaldo(1000);
k2.setSaldo(500);
k1.einzahlen(300);
k2.abheben(40);
System.out.println("Saldo von Konto "+k1.getKontoNr() +":"
+k1.getSaldo()
+"\nSaldo von Konto "
+k2.getKontoNr() +": "
+k2.getSaldo());
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 271
Die Applikation erzeugt
kontoNr und saldo von k1 und k2 können also kontrolliert durch die
eigenen Methoden verändert werden.
Grundlagen der Informatik
WS 2006/2007
Seite 272
Das Beispiel Konto wird nun etwas erweitert
Es soll eine Applikation programmiert werden, die 5 Konten mit einem
Startguthaben von 100 Euro einrichtet und Überweisungen von einem Konto zu
einem anderen Konto durchführt.
Grundlagen der Informatik
WS 2006/2007
Seite 273
public class Konto{
//Attribute
private int kontoNr;
private double saldo;
//Konstruktor
public Konto(int kontoNr){
this.kontoNr = kontoNr;
saldo = 100; //Startguthaben
}
//Methoden
public int getKontoNr(){
return kontoNr;
}
Grundlagen der Informatik
WS 2006/2007
Seite 274
public double getSaldo(){
return saldo;
}
public void einzahlen (double betrag){
saldo += betrag;
}
public void abheben (double betrag){
saldo -= betrag;
}
public void ueberweisen(Konto nachKonto, double betrag){
saldo -= betrag;
nachKonto.einzahlen(betrag);
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 275
//Applikation, die Konten erzeugt und Überweisungen ermöglicht
import javax.swing.JOptionPane;
class KontoApp{
public static void main (String args[]) {
final int ANZAHL_KONTEN = 5;
//erzeugt Array von Konten mit Kontonummer 0,1,2,3,4
Konto kontoArray[] = new Konto[ANZAHL_KONTEN];
for (int i = 0; i< kontoArray.length;i++){
kontoArray[i] = new Konto(i);
}
Konto vonKonto, nachKonto;
double betrag;
String eingabe, ausgabe;
Grundlagen der Informatik
WS 2006/2007
Seite 276
eingabe =JOptionPane.showInputDialog("Überweisung von
Kontonr.");
vonKonto = kontoArray[Integer.parseInt(eingabe)];
eingabe = JOptionPane.showInputDialog("...nach Kontonr.");
nachKonto = kontoArray[Integer.parseInt(eingabe)];
eingabe = JOptionPane.showInputDialog("Betrag:");
betrag = Double.parseDouble(eingabe);
//Überweisung durchführen:
vonKonto.ueberweisen(nachKonto, betrag);
//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 );
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 277
Die Deklaration eines Konstruktors
•
Konstruktoren sind Methoden zur Initialisierung von Objektattributen.
•
Sie heißen genau wie die Klasse.
•
Im Unterschied zu anderen Methoden wird bei ihnen kein Rückgabewert
deklariert.
•
Konstruktoren werden bei der Objekterzeugung mit dem new-Operator
aufgerufen.
•
Ein Konstruktor hat allgemein die Syntax:
KlassenName (Datentyp p1,…,Datentyp pn){
Anweisungen;
}
Grundlagen der Informatik
WS 2006/2007
Seite 278
Bemerkung zum Standardkonstruktor
•
Stellt der Compiler fest, dass kein Konstruktor definiert wurde, so baut der
automatisch selbst einen.
•
Diesen nennt man Standardkonstruktor.
•
Der Standardkonstruktor ist immer parameterlos.
Grundlagen der Informatik
WS 2006/2007
Seite 279
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
•
Solange die Attributnamen nicht mehrdeutig sind, braucht this nicht
benutzt zu werden.
• this muss verwendet werden, wenn es Namenskonflikte mit gleichnamigen
lokalen Variablen gibt (s. kontoNr 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 Informatik
WS 2006/2007
Seite 280
Noch ein Beispiel für das Arbeiten mit Objekten
Problembeschreibung: Ein Computerprogramm soll die Laufzeiten der
Teilnehmer eines Rennens ermittelt. Eingegeben werden Startzeit und
Ankunftszeit eines Läufers.
Version 1.0: Zunächst sollen die Zeiten in vollen Stunden angegeben werden.
Wir entwickeln die Software mit Hilfe der drei Phasen:
Analyse: Anforderungen an die Software ermitteln und beschreiben
(Verwendung von Klassendiagrammen)
Entwurf: Aufbauend auf der Analyse, die Softwarearchitektur und die
Spezifikation der Komponenten erstellen (insb. Algorithmen der Methoden)
Implementierung: Codierung der Klassen und Programme
Grundlagen der Informatik
WS 2006/2007
Seite 281
/*
Die Klasse ermöglicht die Berechnung die Gesamtlaufzeit eines Läufers
*/
class Laeufer{
//Attribute
private int startZeit, ankunftsZeit, laufDauer;
//Konstruktor:
Laeufer(int startZeit, int ankunftsZeit){
this.startZeit = startZeit;
this.ankunftsZeit = ankunftsZeit;
}
int getLaufDauer (){
laufDauer = ankunftsZeit - startZeit;
return laufDauer;
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 282
Die zugehörige Applikation des Beispiels
import javax.swing.JOptionPane;
class LaufZeitApp{
public static void main (String args[]){
String ersteEingabe, zweiteEingabe, ausgabe;
int start, ankunft, dauer;
//Einlesen der Eingabestrings:
ersteEingabe = JOptionPane.showInputDialog ("Gib die
Startzeit des Läufers ein:");
zweiteEingabe = JOptionPane.showInputDialog ("Gib die
Ankunftzeit ein:");
//Konvertierung String in int:
start = Integer.parseInt(ersteEingabe);
ankunft = Integer.parseInt(zweiteEingabe);
Grundlagen der Informatik
WS 2006/2007
Seite 283
//Erzeugung eines speziellen Läufers mit start,ankunft-Zeit
Laeufer teilnehmer = new Laeufer(start,ankunft);
//Berechnung Laufdauer
dauer = teilnehmer.getLaufDauer();
//Erzeugung Ausgabestring
ausgabe = "Die Laufzeit betraegt " +dauer + " Stunden.";
//Ausgabe auf dem Bildschirm
JOptionPane.showMessageDialog (null, ausgabe);
System.exit( 0 );
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 284
Version 2.0: Genauere Zeitangaben
Die Eingabe der Zeiten soll im Format hh:mm:ss erfolgen.
Die Laufzeit soll ebenfalls mit Stunde, Minute und Sekunde ausgegeben
werden.
Grundlagen der Informatik
WS 2006/2007
Seite 285
import javax.swing.JOptionPane;
class LaufZeitApp {
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 ("Ankunftszeit
(hh:mm:ss)");
//Erzeugung zweier Objekte der Klasse Uhrzeit:
start = new Uhrzeit (ersteEingabe);
ankunft = new Uhrzeit (zweiteEingabe);
Grundlagen der Informatik
WS 2006/2007
Seite 286
//Erzeugung eines speziellen Läufers
Laeufer teilnehmer = new Laeufer(start,ankunft);
//Berechnnung Laufdauer:
dauer = teilnehmer.getLaufDauer();
//erzeuge Ausgabestring:
ausgabe = "Die Laufzeitzeit betraegt " +dauer ;
//Ausgabe auf dem Bildschirm
JOptionPane.showMessageDialog (null, ausgabe);
System.exit( 0 );
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 287
/*
Die Klasse ermöglicht die Berechnung der Laufzeit eines Laeufers
*/
class Laeufer{
//Attribute
private Uhrzeit startZeit, ankunftsZeit;
private String laufDauer;
//Konstruktor
Laeufer(Uhrzeit startZeit, Uhrzeit ankunftsZeit){
this.startZeit = startZeit;
this.ankunftsZeit = ankunftsZeit;
}
//Methode
String getLaufDauer (){
laufDauer = ankunftsZeit.minus(startZeit);
return laufDauer;
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 288
//Die Klasse ermöglicht die Berechnung der Zeiten im Format hh:mm:ss
class Uhrzeit{
//Attribute
private 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 Informatik
WS 2006/2007
Seite 289
String minus (Uhrzeit zeit){
//subtrahiert die Uhrzeit zeit und gibt String in h,m,s zurueck
int differenz, diffStunde, diffMinute, diffSekunde;
String rueckgabe ="";
differenz = rechneInSekunden() - zeit.rechneInSekunden();
diffStunde = differenz / 3600;
differenz = differenz % 3600;
diffMinute = differenz / 60;
diffSekunde = differenz % 60;
rueckgabe += diffStunde + " h ";
rueckgabe += diffMinute + " min ";
rueckgabe += diffSekunde +" sec ";
return rueckgabe;
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 290
Die Methode substring()
Sie ist definiert durch substring (int beginn, int ende).
Sei text ein String. Dann liefert der Methodenaufruf
text.substring(3,5), einen Teilstring, der aus dem 4. bis 5. Element von
text besteht (Strings beginnen mit dem Index 0).
Beispiel:
String text = “HALLO“;
String text2 = text.substring(0,2);
ergibt text2 = “HA“;
Grundlagen der Informatik
WS 2006/2007
Seite 291
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.
•
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 Informatik
WS 2006/2007
Seite 292
•
Variablen vom primitiven Datentyp belegen einen bestimmten Platz im
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.
Das nächste Programm veranschaulicht den Unterschied zwischen
Referenzdatentypen und primitiven (elementaren) Datentypen.
Grundlagen der Informatik
WS 2006/2007
Seite 293
Eine Klasse IntZahlen sei wie folgt definiert:
public class IntZahlen {
//Attribut
int zahl;
//Konstruktor
IntZahlen ( int zahl) {
this.zahl = zahl;
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 294
import javax.swing.*;
public class VergleichDatenTypen {
public static void main (String args[]) {
IntZahlen zahl1, zahl2;
int x, y;
String ausgabe;
//primitive Datentypen
x = 1;
y = x;
y = 2;
//Objekte
zahl1 = new IntZahlen (1);
zahl2 = zahl1;
zahl2.zahl = 2;
//Ausgabe
ausgabe = "x = "+ x +"\ny = " +y;
ausgabe += "\nWert der Zahl des Objektes zahl1: " + zahl1.zahl;
ausgabe += "\nWert der Zahl des Objektes zahl2: " + zahl2.zahl;
JOptionPane.showMessageDialog ( null, ausgabe) ;
System.exit (0);
Grundlagen der Informatik
}
WS 2006/2007
Seite 295
}
Die Applikation erzeugt die folgende Ausgabe
•
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.
• zahl1 und zahl2 sind vom Datentyp IntZahlen, also von einem
Referenzdatentyp. Somit wird durch zahl2 = zahl1 bewirkt, dass beide
Variablen auf das selbe Objekt zeigen und dieses verändern können.
Grundlagen der Informatik
WS 2006/2007
Seite 296
Gleichheit von Objekten und die Methode equals()
Durch objekt1 == objekt2 werden die Referenzen auf die Objekte
miteinander verglichen.
Möchte man aber die Inhalte zweier Objekte miteinander vergleichen, so kann
die Methode equals() verwendet werden.
string1.equals(string2) ist true, wenn die beiden Strings string1 und
string2 identisch sind.
objekt1.equals(objekt2) ist dagegen true, wenn die Referenzen
übereinstimmen.
Um die Inhalte auf Gleichheit zu Überprüfen müssen die einzelnen Attribute
explizit angegeben werden bzw. die Methode equals() überschrieben werden.
Beispiel: objekt1.name.equals(objekt2.name)
Grundlagen der Informatik
WS 2006/2007
Seite 297
Garbage Collection (Müllsammlung)
•
Werden Objekte mit new angelegt, so wird im Hauptspeicher Platz für diese
Objekte bereitgestellt.
•
Im Gegensatz zu anderen Programmiersprachen wird dieser Speicherplatz
wieder freigegeben, sobald er nicht mehr benötigt wird.
•
Diese Freigabe geschieht, indem eine sog. garbage collection automatisch
durchgeführt wird.
•
Die garbage collection startet dann, wenn Java Speicherplatz benötigt.
•
Man kann sie auch explizit mit System.gc() aufrufen.
Grundlagen der Informatik
WS 2006/2007
Seite 298
Exceptions
•
Exceptions sind in Java Objekte. Man unterscheidet zwischen
•
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 Informatik
WS 2006/2007
Seite 299
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[]) {
int a[] = new int [10];
//Initialisierung
for(int i = 0;i< a.length;i++)
a[i] = i*i;
for (int i = a.length; i>=0;i--)
System.out.println (a[i]);
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 300
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[]) {
String s1="12", s2 = "a";
int i1 = Integer.parseInt(s1);
int i2 = Integer.parseInt(s2);
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 301
•
Exceptions sind Objekte der Klasse Exception aus dem Paket java.lang
oder einer Unterklasse (z.B. NumberFormatException).
•
Errors sind Objekte der Klasse Error.
•
Die Klassen Exception sowie Error sind Unterklassen von Throwable.
•
„Ausnahmen“, die von Error oder von RuntimeException abgeleitet sind,
sind unkontrollierte Ausnahmen
•
Alle anderen „Ausnahmen“ sind kontrollierte Ausnahmen.
Grundlagen der Informatik
WS 2006/2007
Seite 302
Exception Handling
•
Eine Ausnahme Behandlung kann in Java durch eine Kombination von einem
try- (Versuchen) mit einem oder mehreren catch- (Abfangen) Codeblöcken
erfolgen. Der try-Block legt den Programmbereich fest, der überwacht wird,
d.h. der eine Ausnahme erzeugen/auswerfen könnte.
try{
Anweisungen, die eine Ausnahme verursachen können;
}catch (Ausnahmetyp e1){
Anweisungen zum Reagieren und Beheben;
}catch (Ausnahmetyp e2){
Anweisungen zum Reagieren und Beheben;
}…weitere catches
Grundlagen der Informatik
WS 2006/2007
Seite 303
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);
}
}
Das Programm liefert die Ausgabe
Grundlagen der Informatik
WS 2006/2007
Seite 304
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;
}
Grundlagen der Informatik
WS 2006/2007
Seite 305
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.
Hier wird der Fehler explizit mit der throw-Anweisung ausgeworfen.
Eine Exception kann mit throw new Ausnahmetyp(); geworfen (erzeugt)
werden.
Grundlagen der Informatik
WS 2006/2007
Seite 306
import javax.swing.JOptionPane;
class Wochentag2{
public static void main (String args[]) {
String eingabe, ausgabe; int zahl;
String wochentag[] =
{"Sonntag","Montag","Dienstag","Mittwoch",
"Donnerstag","Freitag","Samstag"};
while (true){
try{
eingabe = JOptionPane.showInputDialog ("Eingabe
Wochentag");
if (eingabe == null)
//User klickt "abbrechen"
throw new Exception ("Ende");
int hilf = Integer.parseInt(eingabe);
zahl = hilf-1;
//Tag 1 ist Sonntag, Tag 7 ist Samstag
Grundlagen der Informatik
WS 2006/2007
Seite 307
ausgabe = "Der Tag "+hilf+" ist ein“+wochentag[zahl];
JOptionPane.showMessageDialog(null,ausgabe);
}catch (ArrayIndexOutOfBoundsException ab){
JOptionPane.showMessageDialog(null, "kein Wochentag");
}
catch (NumberFormatException nfe){
JOptionPane.showMessageDialog(null,"keine Zahl!");
}
catch (Exception e){
JOptionPane.showMessageDialog(null,"Tschuess");
System.exit(0);
}
}
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 308
throws im Methodenkopf angeben
Neben dem Einzäunen von problematischen Blöcken durch einen try- und catchBlock gibt es noch eine andere Möglichkeit auf Exceptions zu reagieren:
Im Methodenkopf wird eine throws-Klausel eingeführt.
Beispiel String readFirstLineFromFile (String filename)
throws java.io.IOException{ ….};
Dadurch zeigt eine Methode an, dass sie möglicherweise eine Exception
auswerfen wird, aber diese nicht selbst behandelt, sondern diese unter
Umständen an die aufrufende Methode weitergibt.
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 Informatik
WS 2006/2007
Seite 309
Vererbung
•
Die Vererbung ist eines der wesentlichsten Konzepte der
Objektorientierung.
•
Vererbung ist ein Mechanismus, der es erlaubt, bestehenden
Programmcode zu benutzen und ihn den eigenen Bedürfnissen
anzupassen.
•
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 Informatik
WS 2006/2007
Seite 310
•
Im folgenden Beispiel ist die Klasse Abteilungsleiter eine Subklasse von
Mitarbeiter.
•
Dies wird durch das reservierte Wort extends im Kopf der Klasse
ausgedrückt. class Abteilungsleiter extends Mitarbeiter
•
Ein Objekt der Klasse Abteilungsleiter kann damit die Attribute und
Methoden von Mitarbeiter nutzen. Im Beispiel wird ein zusätzliches
Attribut eingesetzt sowie zwei Methoden hinzugefügt.
Grundlagen der Informatik
WS 2006/2007
Seite 311
public class Mitarbeiter{
private String name;
private int personalNummer;
private double gehalt;
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 Informatik
}
WS 2006/2007
Seite 312
public class Abteilungsleiter extends Mitarbeiter{
//Attribute:
private String abteilung; //zusätzliches Attribut
//Methoden
void setAbteilung (String abteilung){
this.abteilung = abteilung;
}
void ausgabeAbteilung () {
System.out.println ("\tLeiter Abteilung: " + abteilung);
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 313
public class MitarbeiterApplikation{
public static void main(String args[]){
Mitarbeiter uwe = new Mitarbeiter();
uwe.setName("Maier");
uwe.setPersonalnummer(13);
uwe.setGehalt(2000);
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 Informatik
WS 2006/2007
Seite 314
Die Applikation liefert die Ausgabe
Grundlagen der Informatik
WS 2006/2007
Seite 315
Methoden überschreiben
Es ist auch möglich, bestehende Methoden in der Subklasse zu
ü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
aufgerufen, wird nicht die geerbte Methode der Elternklasse (Superklasse)
sondern die der Kindklasse benutzt.
Im nächsten Beispiel wird die Methode drucke() überschrieben.
Grundlagen der Informatik
WS 2006/2007
Seite 316
Mit dem reservierten Wort super kann auf die Methoden und Attribute der
Mutterklasse zugegriffen werden.
Im Beispiel ist allerdings ein super.gehalt nicht möglich, da die Attribute in
der Superklasse mit private geschützt sind.
Grundlagen der Informatik
WS 2006/2007
Seite 317
public class Abteilungsleiter extends Mitarbeiter{
//Attribute:
private String abteilung; //zusätzliches Attribut
void setAbteilung (String abteilung){
this.abteilung = abteilung;
}
//Methode drucke() wird überschrieben
void drucke () {
super.drucke();
System.out.println ("\tLeitung Abteilung: " +abteilung);
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 318
Das Arbeiten mit Konstruktoren
Im nächsten Beispiel ändern wir nun die Klassen, indem wir Konstruktoren
verwenden.
Der Konstruktor der Subklasse muss als erste Anweisung den
Konstruktoraufruf der Suberklasse haben. Dieser Aufruf erfolgt auch mit
super, im Beispiel
super (name,personalNummer,gehalt);
Grundlagen der Informatik
WS 2006/2007
Seite 319
public class Mitarbeiter{
//Attribute:
private String name;
private int personalNummer;
private double 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;
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 320
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);
this.abteilung = abteilung;
}
public void drucke () {
super.drucke();
System.out.println ("\tAbteilung: " + abteilung);
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 321
public class MitarbeiterApplikation{
public static void main(String args[]){
Mitarbeiter uwe = new Mitarbeiter("Maier", 13, 2000);
Abteilungsleiter anja = new Abteilungsleiter ("Mueller",
25,4030,"F30 Projekte");
uwe.drucke();
anja.erhoeheGehalt(300);
anja.drucke();
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 322
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 Informatik
WS 2006/2007
Seite 323
Späte Bindung - Polymorphie
Hat eine Unterklasse eine Methode der Elternklasse überschrieben, so wird erst
zur Laufzeit dynamisch die entsprechende Objektmethode, passend zum
tatsächlichen Typ des aufrufenden Objekts, ausgewählt.
Die späte Bindung ist eine Anwendung der Polymorphie, wird aber hier
synonym verwendet.
Beispiel: personal[0] und personal[1] sind beide vom Datentyp
Mitarbeiter. personal[1] ist jedoch ein Objekt einer Unterklasse von
Mitarbeiter, nämlich von Abteilungsleiter. Sowohl Mitarbeiter als
auch Abteilungsleiter verfügen über eine Methode drucke(). Erst zur
Laufzeit wird diese Methode gebunden, d.h. erst dann wird entschieden, dass
zu personal[1] die Methode drucke() von Abteilungsleiter gehört.
Grundlagen der Informatik
WS 2006/2007
Seite 324
Bemerkung zur Polymorphie
Polymorphie existiert nicht bei privaten (private), statischen (static) und
finalen (final) Methoden.
final-Methoden können nicht überschrieben werden und sind daher nicht
polymorph gebunden.
Grundlagen der Informatik
WS 2006/2007
Seite 325
Welche Ausgabe liefert die folgende Applikation?
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);
}
}
Seite 326
Grundlagen der Informatik
WS 2006/2007
Die Klasse Object
•
Die Klasse Object ist in der Vererbungshierarchie die höchste Klasse.
Sie ist die Elternklasse für alle anderen Klassen.
•
Immer wenn eine Klasse definiert wird, dabei aber keine explizite
Ableitung mittels extends angegeben wird, fügt Java automatisch
extends Object hinzu.
•
Eine Methoden der Klasse Object, die wir bereits kennen gelernt haben
sind:
equals(Object)
Überprüfung auf Gleichheit
Grundlagen der Informatik
WS 2006/2007
Seite 327
Zeichenketten: Die Klassen String und StringBuffer
•
Strings, d.h. Zeichenketten sind in Java Objekte.
•
In Java gibt zwei Klassen von Strings, dies sind die Klassen String und
StringBuffer.
•
Objekte der Klasse String stellen Zeichenketten mit fester Länge, d.h.
konstante Zeichenketten, dar.
•
Objekte der Klasse StringBuffer stellen Zeichenketten dar, die zur
Laufzeit des Programms verkürzt oder verlängert werden können. Zudem
gibt es verschiedene Methoden zur Textbearbeitung.
•
Die Klassen String und StringBuffer sind aus dem Paket
java.lang
Grundlagen der Informatik
WS 2006/2007
Seite 328
Die Klasse String
Objekte der Klasse sind konstante Zeichenketten.
Sie haben folgende Eigenschaften:
• Die Länge eines Strings steht fest und kann nicht mehr verändert werden.
• Der Inhalt des Strings kann nicht verändert werden. D.h. alle Methoden aus der
Klasse String, die zur Manipulation auf das String Objekt angewendet werden,
geben eine entsprechend manipulierte Kopie des Strings zurück.
Grundlagen der Informatik
WS 2006/2007
Seite 329
Eine konstante Zeichenkette mit beispielsweise dem Inhalt „Peter“ wird entweder
durch die Anweisung
String name = "Peter";
oder durch die Anweisung
String name = new String("Peter");
erzeugt.
name ist also in beiden Fällen eine Referenz auf ein Objekt.
Im ersten Fall spricht man von einer impliziter Erzeugung eines String-Objektes.
Grundlagen der Informatik
WS 2006/2007
Seite 330
Der Unterschied ist, dass im zweiten Fall durch den new-Operator auf jeden
Fall ein neues String-Objekt erzeugt wird und damit Speicher belegt wird.
Im ersten Fall muss dies nicht unbedingt der Fall sein.
Bei optimierenden Compilern können String-Objekte, die den gleichen Inhalt
haben und implizit erzeugt werden, wieder verwendet werden.
Beispiel: Durch
String name = "Peter";
String name2 = "Peter";
erzeugen optimierende Compiler nur ein Objekt, auf das die zwei Referenzen
name und name2 beide zeigen.
Grundlagen der Informatik
WS 2006/2007
Seite 331
Zur Erinnerung:
Strings werden mit der Methode equals() verglichen.
if (name.equals(name2))
…….
vergleicht die Inhalte der beiden Strings name und name2.
Auf den nächsten Folien werden einige weitere String-Methoden erläutert
(schauen Sie bitte auch in der API nach).
Grundlagen der Informatik
WS 2006/2007
Seite 332
Länge eines Strings durch length()
Die Methode length() ermittelt die Länge eines Strings.
String a = "Grundlagen";
int l = a.length();
ergibt l = 10
Zeichen ersetzen mit replace()
Die Methode erzeugt ein neuen String indem die Zeichen aus dem Original ersetzt
wurden.
String s1 = "Java";
String s2 = s1.replace('a', 'A' );
liefert für s2 JAvA, d.h. das a wurden in A verändert. s1 bleibt unverändert.
Grundlagen der Informatik
WS 2006/2007
Seite 333
Stringteile extrahieren mit substring()
Die Methode substring(a,b) liefert einen neuen String als Teilstring des
Originals. a gibt die Startposition an, b die erste Position, die nicht mehr zum
Substring gehören soll.
String subtitel = thema.substring(1,3);
System.out.println(subtitel); ergibt als Ausgabe
av
Grundlagen der Informatik
WS 2006/2007
Seite 334
Anfang und Ende des Strings mit startsWith() und endsWith()
Die Methode startsWith(anfang) überprüft, ob der String mit anfang anfängt.
String titel = "Titel: Grundlagen der Informatik";
boolean s = titel.startsWith("Titel");
System.out.println(s);
ergibt also true.
Die Methode endsWith(ende) überprüft, ob der String mit ende aufhört.
boolean ende = titel.endsWith ("Informatik");
System.out.println(ende);
ergibt true.
Grundlagen der Informatik
WS 2006/2007
Seite 335
Zeichen im String suchen mit indexOf()
Die Methode indexOf(zeichen) gibt die Position aus, an der das zeichen das
erste mal im String vorkommt. Mit String thema = "Java";
int p = thema.indexOf ('a');
ergibt sich für p der Wert 1.
Ist das Zeichen im String nicht enthalten, so liefert die Methode den Wert –1.
Suchen eines Zeichens ab einer bestimmten Position wird durch Angabe eines
weiteren Parameters ermöglicht:
int p = thema.indexOf ('a'‚2);
ergibt für p den Wert 3.
Grundlagen der Informatik
WS 2006/2007
Seite 336
Ist eine Zeichenfolge im String vorhanden?
Seit Java 5 ist es mit Hilfe der Methode contains(zeichenkette) möglich,
innerhalb eines String eine Zeichenkette zu suchen. Die Methode gibt true zurück,
falls die Zeichenkette im String vorhanden ist und false, falls nicht.
String s = "Informatik";
s.contains("for");
ergibt true.
Grundlagen der Informatik
WS 2006/2007
Seite 337
Vergleich zweier Strings auf „Größe“ mit compareTo()
Durch den Methodenaufruf string1.compareTo(string2) werden die beiden
Strings string1 und string2 auf ihre lexikographische Größe verglichen.
Der Rückgabewert ist vom Datentyp int. Er ist 0 bei Gleichheit, negativ, falls
string1 lexikographisch kleiner ist als string2 und positiv, falls string1
lexikographisch größer als string2 ist.
String string1 = "Peter", string2 = "Tina",
string3 = "Peter" , string4 = "Andrea";
Dann ist
string1.compareTo(string2);
kleiner als 0
string1.compareTo(string3);
gleich 0
string1.compareTo(string4); größer als 0
Grundlagen der Informatik
WS 2006/2007
Seite 338
Die Klasse StringBuffer
StringBuffer-Objekte sind Zeichenketten mit folgenden Eigenschaften:
•
Die Länge der Zeichenkette ist nicht festgelegt. Sie vergrößert sich
automatisch, wenn im StringBuffer-Objekt weitere Zeichen angefügt werden
und der vorhandene Platz nicht ausreicht.
•
Der Inhalt einer Instanz der Klasse StringBuffer lässt sich verändern.
D.h. die Methoden aus der Klasse StringBuffer, die zur Manipulation auf
das StringBuffer Objekt angewendet werden, manipulieren das StringBuffer
Objekt selber und geben es zusätzlich zurück.
Grundlagen der Informatik
WS 2006/2007
Seite 339
Das Erzeugen eines StringBuffer-Objektes
StringBuffer-Objekte müssen immer mit Hilfe des new-Operators erzeugt
werden.
Es gibt insgesamt drei Konstruktoren für die Klasse StringBuffer.
• StringBuffer()
Erzeugt StringBuffer-Objekt, das zunächst 16 Zeichen aufnehmen kann
• StringBuffer(int length)
Erzeugt StringBuffer-Objekt, das length Zeichen aufnehmen kann
• StringBuffer(String str)
Es wird ein StringBuffer-Objekt erzeugt und mit einer Kopie des Strings
str initialisiert. Zusätzlich wird bereits Platz für 16 weitere Zeichen
eingeplant.
Grundlagen der Informatik
WS 2006/2007
Seite 340
Die Länge eines StringBuffer-Objektes lesen und setzen
Unterschieden wird zwischen den Methoden length() und capacity().
•
Die Methode length() ermittelt die Anzahl der enthaltenen Zeichen.
•
Die Methode capacity() ermittelt die Kapazität, d.h. den gesamten
Speicherplatz ( belegter und freier Speicherplatz). Diese Kapazität wird
automatisch angepasst, wenn weitere Zeichen eingebaut werden. Man kann
sie aber auch manuell einstellen.
Grundlagen der Informatik
WS 2006/2007
Seite 341
Beispiel
StringBuffer text1 = new StringBuffer();
StringBuffer text2 = new StringBuffer(20);
StringBuffer text3 = new StringBuffer("Vorlesung");
System.out.println(text1);
System.out.println(text1.length());
System.out.println(text1.capacity());
//Ausgabe 0
//Ausgabe 16
System.out.println(text2);
System.out.println(text2.length());
System.out.println(text2.capacity());
//Ausgabe 0
//Ausgabe 20
System.out.println(text3);
System.out.println(text3.length());
System.out.println(text3.capacity());
//Ausgabe „Vorlesung“
//Ausgabe 9
//Ausgabe 25
Grundlagen der Informatik
WS 2006/2007
Seite 342
Zeichen anhängen, einfügen, löschen
•
Die Methode append() hängt Werte an eine Zeichenkette an. Der interne
Platz wird dabei –falls nötig- automatisch vergrößert. Ein neues StringBufferObjekt wird nicht erzeugt.
•
Durch die Methode insert() können Zeichenketten und primitive
Datentypen an einer beliebigen Stelle eingefügt werden. Der erste Parameter
der Methode gibt die gewünschte Position an (1. Zeichen hat Position 0). Der
zweite Parameter gibt den Inhalt an.
•
Die Methode setCharAt() überschreibt einzelne Zeichen. Der erste
Parmameter gibt die Position des zu ersetzenden Zeichens an, der zweite
Parameter gibt das neue Zeichen an.
Grundlagen der Informatik
WS 2006/2007
Seite 343
•
Die Methode reverse() dreht die Reihenfolge der Zeichen um.
•
Die Methode delete() löscht einen Teil der Zeichenkette. Der erste
Parameter gibt die Position des ersten zu löschenden Zeichens an, der zweite
Parameter gibt die Position des ersten Zeichens an, das nicht mehr gelöscht
werden soll.
Grundlagen der Informatik
WS 2006/2007
Seite 344
Beispiel
class BeispielStringBuffer{
public static void main (String args[]){
StringBuffer text3 = new StringBuffer("Vorlesung");
text3.append(" Java");
System.out.println(text3);
text3.insert(9," Ueber");
System.out.println(text3);
Ausgabe des
Programms
text3.setCharAt(10,'u');
System.out.println(text3);
text3.reverse();
System.out.println(text3);
text3.delete(4,10);
System.out.println(text3);
text3.reverse().append(" Teil").append(" 2");
System.out.println(text3);
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 345
Vergleiche von Zeichenketten als String und StringBuffer
Um zwei StringBuffer-Objekte bzw. ein StringBuffer- und ein String-Objekt auf
Gleichheit zu überprüfen, muss das/die StringBuffer-Objekte in Strings
umgewandelt werden:
•
Umwandeln des/der StringBuffer-Objekte in Strings mit Hilfe der Methode
toString() und danach Vergleich mit equals():
StringBuffer text1 = new StringBuffer("Java");
String text2 = "Java";
System.out.println(text2.equals(text1.toString()));
Grundlagen der Informatik
WS 2006/2007
Seite 346
Vergleiche von Zeichenketten als String und StringBuffer
Der Vergleich eines StringBuffer-Objektes mit einem String kann seit Version 1.4
auch mit Hilfe der Methode contentEquals() erfolgen:
•
Benutzung der Methode contentEquals(StringBuffer)
System.out.println(text2.contentEquals(text1));
Grundlagen der Informatik
WS 2006/2007
Seite 347
Ein weiteres Beispiel
Testen, ob der String s ein Palindrom ist.
Palindrome lesen sich von vorne genauso wie von hinten, z.B. OTTO
import javax.swing.*;
class Palindrom{
public static void main (String args[]){
String s = JOptionPane.showInputDialog (null,
"Geben Sie einen String ein");
boolean isPalindrom =
s.contentEquals(new StringBuffer(s).reverse());
if (isPalindrom)
System.out.println(s+" ist ein Palindrom");
else
System.out.println (s +" ist kein Palindrom");
System.exit(0);
}
}
Grundlagen der Informatik
WS 2006/2007
Seite 348
Bemerkung zum Palindrom-Beispiel
Die Zeile
boolean isPalindrom =
s.contentEquals(new StringBuffer(s).reverse());
kann auch ersetzt werden durch
boolean isPalindrom =
new StringBuffer(s).reverse().toString().equals(s);
Grundlagen der Informatik
WS 2006/2007
Seite 349
Herunterladen