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