Softwareentwicklung 1 Dr. Herbert Prähofer Institut für Systemwissenschaften Johannes Kepler Universität Linz JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 1 © Hanspeter Mössenböck, Herbert Prähofer 2 Vortragender Dr. Herbert Praehofer Systems Science Institute Johannes Kepler University Altenbergerstrasse 69 A-4040 Linz / Austria Tel.: ++43 (732) 2468 8894 Fax.: ++43 (732) 2468 8893 EMail: [email protected] http: www.cast.uni-linz.ac.at Raum: T0758 (TNF Turm 7. Stock) JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) Ziel und Inhalt Ziel Einführung des Programmieren in Java Inhalte Grundlagen der Programmierung Programmieren in Java Einfache Algorithmen Grundlagen der Objektorientierung Programmentwurf JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 3 Motivation programmieren zu lernen Software erstellen können Grundlagen der Programmierung verstehen Java kennen komplexe Software entwerfen sich neue Gebiete der Softwaretechnik erarbeiten können Software verstehen wie arbeitet Software was kann Software leisten wie sind Programme aufgebaut wie wird Software erstellt Kreativität erleben Programmieren kann viel Spaß machen Programmieren ist eine Herausforderung JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 4 Organisation der LVA Softwareentwicklung 1 Vorlesung Stoff wird theoretisch vorgetragen Mit eingebauten Programmierbeispielen ca. 8-10 mal im Semester jeweils ca. 3 – 4 LVA-Stunden Übung Stoff wird geübt Programmieraufgaben sind wöchentlich zu programmieren 2 Unterrichtsstunden für Wiederholung Praktische Beispiele Besprechung der Programmieraufgaben Übungsleiter: Hr. DI Peter Hamader Programmieren ist eine Fähigkeit, die nur mit viel Übung erlernt werden kann!! JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 5 Webpage der LVA http://www.ssw.uni-linz.ac.at/Teaching/Lectures/gTec_SWE1/2005W/index.html/ Alle wichtigen Infos wie Termine Unterlagen Studienmaterial findet man auf dieser Seite JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 6 Literatur P. Mössenböck, Sprechen Sie Java?, 2. Auflage, dpunkt.verlag, 2005 (Lehrbuch zur VL!) G. Krüger, GoTo Java 2, Addison-Wesley, 2000 On-Line Buch für Java Online Version hier Download (www.javabuch.de) M. Campione, K.Walrath: The Java Tutorial Online Edition (www.javasoft.com/tutorial) Java-Einführungskurs (http://www.boku.ac.at/javaeinf/jein.html) JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 7 Einheit 1: Grundlagen der Programmierung Programmierung und Ausführung von Programmen Algorithmen und Algorithmendarstellung Programmiersprachen und Java Das Java-Entwicklungssystem JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 8 Worum geht es? Programmieren Problem so exakt beschreiben, dass es ein Computer lösen kann ) ) ) kreative Tätigkeit Ingenieurtätigkeit Nur wenige Leute können gut programmieren Programm = Daten + Befehle JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 9 Von-Neumann Architektur eines Computers JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) aus: A. Ferscha, Skriptum Softwareentwicklung 1, JKU Linz © Hanspeter Mössenböck, Herbert Prähofer 10 Wiederholung von der VL: RISC-Programm JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network aus: A. 1Ferscha, Softwareentwicklung (gtec) Skriptum Softwareentwicklung 1, JKU Linz © Hanspeter Mössenböck, Herbert Prähofer 11 Verarbeitungseinheit JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) aus: A. Ferscha, © Hanspeter Mössenböck, Herbert Prähofer Skriptum Softwareentwicklung 1, JKU Linz 12 Typische Befehle load: Laden von Daten aus Hauptspeicher store: Schreiben von Daten in Hauptspeicher move: Speicheroperationen add, sub, mult, …: Arithmetsiche Operationen cmp: Vergleichsoperationen: Vergleich auf 0 jmp, jeq; Sprünge und bedingte Sprünge im Ablauf … JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 13 Daten und Befehle Daten Menge adressierbarer Speicherzellen x 17 y 4 z 21 Name Wert Daten sind binär gespeichert (z.B. 17 = 10001) Binärspeicherung ist universell (Zahlen, Texte, Bilder, Ton, ...) 1 Byte = 8 Bit 1 Wort = 2 Byte (oder 4 Byte) 1 Doppelwort = 2 Worte Befehle Operationen mit den Speicherzellen Maschinensprache Hochsprache // Lade Zelle x ACC ← x ACC ← ACC + y // Addiere Zelle y // Speichere Ergebnis in Zelle z z ← ACC z = x + y; JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 14 Variablen Programme arbeiten mit Variablen. Sind benannte Behälter für Werte. x y 99 3 Variablen können ihren Wert ändern x x←x+1 100 Beispiel: byte x = 10 Charakterisiert durch Adresse Name oder Bezeichner Wert 99 Wert 100 Adresse (im Hauptspeicher) 101 10 x (byte) Datentyp Datentyp int, char, byte, float, ... Name JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 15 Datentypen Variablen haben einen Datentyp == Menge erlaubter Werte Variablentyp Werte 17 Zahl Zeichen 'a' 54 'x' ... ... Typ ≅ Form - in eine Zahlenvariable passen nur Zahlen - in eine Zeichenvariable passen nur Zeichen Beispiele von Datentypen: char (2 Byte) [ a-z][A-Z][0-9][Sonderzeichen] int (4 Byte) ~-2,147 Mrd. – ~+2,147 Mrd. boolean true, false float 3.14159265259 JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 16 Algorithmus Ein Algorithmus ist ein endliches, schrittweises Verfahren zur Berechnung gesuchter aus gegebenen Größen, in dem jeder Schritt aus einer Anzahl eindeutig ausführbarer Operationen und einer Angabe über den nächsten Schritt besteht. Berechnungsvorschrift schrittweise endlich ausführbare Operationen Angabe der Reihenfolge der Schritte (Der Name Algorithmus ist abgeleitet von Al Chwarizmi, arabischer Mathematiker, ca. 800 n.Chr.) JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 17 Beispiel: Algorithmus „Sum“ Algorithmus „Sum“ zum Berechnen der Summe einer Zahlenfolge Aufgabenstellung: Gegeben: Eine Zahl n größer 0 Gesucht: Die Summe dieser Zahlen von 1 bis n Algorithmus: 1. Addiere alle Zahlen von 1 bis n 2. Gib das Ergebnis aus Diese Formulierung ist für einen Computer noch zu wenig genau! JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 18 Algorithmus „Sum“ als Verfahren in mehreren Schritten Name Parameter Ergebnis Folge von Schritten Sum (↓n, ↑sum) 1. sum ← 0 2. zahl ← 1 3. Wiederhole, solange zahl ≤ n 3.1 sum ← sum + zahl 3.2 zahl ← zahl + 1 Diese Formulierung ist einem Computerprogramm schon sehr nahe. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 19 Anweisungen: Wertzuweisung und Sequenz Wertzuweisung x ← x+1 Variable 1. werte Ausdruck aus 2. weise seinen Wert der Variablen zu Ausdruck Anweisungsfolge (auch Sequenz) "Ablaufdiagramm" x←3 y←4 z←x+y Assertion x == 3, y == 4, z == 7 Assertion (Zusicherung) Aussage über den Zustand des Algorithmus an einer bestimmten Stelle JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 20 Anweisungen: Verzweigung Auswahl (auch Verzweigung, Abfrage, Selektion) j x<y? min ← x n x≥y min ← y min == Minimum von x und y JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 21 Anweisungen: Wiederholung Wiederholung (auch Schleife, Iteration) Alternative Darstellung d←1 n>9? j d←1 n n>9 n ← n / 10 d←d+1 n ← n / 10 d←d+1 n < 10 d == Anzahl der Ziffer von n n < 10 d == Anzahl der Ziffer von n JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 22 Anweisungen: Wiederholung Wiederholung (auch Schleife, Iteration) n←0 n←0 x>1? j x>1 n x←x/2 n←n+1 x←x/2 n←n+1 x≤1 n = ⎣log2 x⎦ x≤1 n = ⎣log2 x⎦ Alternative Darstellung JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 23 Beispiel: Vertauschen zweier Variableninhalte Swap (↨x, ↨y) Schreibtischtest x 3 2 h=x x=y y=h y 2 3 h 3 JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 24 Beispiel: Maximum dreier Zahlen bestimmen 1 2 3 Max (↓a, ↓ b, ↓ c, ↑max) j j a>c? max ← a n a>b? n j c≥a>b max ← c max ← b b>c? a≤b n a≤b≤c max ← c JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 25 Beispiel: Maximum dreier Zahlen bestimmen 3 2 1 Max (↓a, ↓ b, ↓ c, ↑max) j j a>c? max ← a n a>b? c≥a>b max ← c n j max ← b b>c? a≤b n a≤b≤c max ← c JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 26 Beispiel: Anzahl der Ziffern einer Dezimalzahl Zahl solange durch 10 dividieren, bis Zahl < 10 Anzahl der Divisionen + 1 = Anzahl der Ziffern Digits(↓n, ↑d) Schreibtischtest d←1 n>9 n 12345 d 1 1234 123 2 3 12 1 4 5 n ← n / 10 d←d+1 n < 10 d == Anzahl der Ziffer von n JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 27 Beispiel: Quadratwurzel von x berechnen 1. Näherung: Näherung: -root root← ←(a x /+2root) / 2 -aa← ←xx//root root 0 a1 √x a2 root1 root2 SquareRoot (↓x, ↑root) root ← x / 2 a ← x / root x Schreibtischtest a * root == x a ≠ root a * root == x root ← (root + a) / 2 a ← x / root x root 10 5 3.5 3.17857 3.16232 3.16228 a 2 2.85714 3.14607 3.16223 3.16228 a * root == x & a == root ⇒ root * root == x Kommazahlen sind meist nicht exakt gleich, daher besser |a - root| > 0.0000001 JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 28 Beispiel: Euklidscher Algorithmus Berechnet den größten gemeinsamen Teiler zweier Zahlen x und y Beobachtung: (ggt teilt x) & (ggt teilt y) ⇒ ggt teilt (x - y) ⇒ ggt teilt (x - q*y) ⇒ ggt teilt Rest von x/y (rest) ⇒ GGT(x, y) = GGT(y, rest) GGT (↓x, ↓ y, ↑ggt) rest ← Rest von x / y rest ≠ 0 x←y y ← rest rest ← Rest von x / y Schreibtischtest rest = 0 ggt ← y x y rest 28 20 8 20 8 4 8 4 0 JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 29 Algorithmenschreibweisen Ablaufdiagramm (schon bekannt) 3 Struktogramm GGT (↓x, ↓ y, ↑ggt) x<y? ja nein x⇔y rest ← Rest von x / y + erzwingen strukturiertes Programmieren (ohne beliebige Sprünge) - aufwendig zu zeichnen schwer zu ändern while rest ≠ 0 x←y y ← rest rest ← Rest von x / y ggt ← y JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 30 Algorithmenschreibweisen: Stilisierte Prosa Stilisierte Prosa GGT (↓x, ↓ y, ↑ggt) S1 Mache x ≥ y. Wenn x < y ist, vertausche x und y + größtmögliche Freiheit in der Formulierung S2 Bilde Rest. Dividiere x durch y und nenne den Rest rest - schreibaufwendig - unpräzise - Ablaufstrukturen (Schleifen, Verzweigungen) nicht sichtbar S3 Ende? Wenn rest null ist, gehe zu S5 S4 Ersetze. Ersetze x durch y und y durch rest Gehe nach S2 S5 Fertig. Das Ergebnis ggt ist y JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer Algorithmenschreibweisen: Java Java-Programm + vom Computer lesbar und verarbeitbar + eindeutig und präzise + von Menschen lesbar - exakt, ohne Freiheitsgrade - aufwendig zu schreiben public class GGTProgram { public static void main(String[] args) { static int GGTEuklid(int x, int y) { int x; int y; int ggt; int rest; int ggt; Out.print("Bitte x eingeben: "); x = In.readInt(); Out.print("Bitte y eingeben: "); y = In.readInt(); ggt = GGTEuklid(x, y); Out.print("Der GGT von x und y ist: "); Out.println(ggt); // %-Operator bildet den Rest rest = x % y; while (rest != 0) { x = y; y = rest; rest = x % y; } } // rest == 0 ggt = y; return ggt; } } // end GGTProgram JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network 31 Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 32 Algorithmenschreibweisen: Java + Prosa Prosa + Java Java-Kontrollstrukturen mit Anweisungen in Prosa int GGTEuklid(x, y) { + nahe einem Java-Programm + beliebige Freiheit bei der Formulierung von Anweisungen + muss nicht syntaktisch korrekt sondern nur verständlich sein + daraus kann schrittweise ein JavaProgramm entwickelt werden rest = Rest von x/y while (rest nicht 0 ist) ´ x=y y = rest rest = Rest von x/y ggt = y return ggt } JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 33 Algorithmen und Programmierung Programm Ein für die Lösung einer bestimmten Aufgabe mit einer Datenverarbeitungsanlage geeigneter Algorithmus d.h. Elementare Operationen sind die durch den Computer ausführbaren Befehle Programm muss in einer für den Computer lesbaren Form definiert sein (==> Programmiersprache) JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 34 Höhere Programmiersprachen Höhere Programmiersprachen dienen der Formulierung von Programmen Sind für den Computer lesbar und verarbeitbar können vom Computer gelesen werden können vom Computer in ein ausführbares Programm übersetzt werden (Compiler) für den Menschen wesentlich einfacher lesbar und schreibbar als Maschinensprache Programmieren wird wesentlich erleichtert Programme können vom Experten gelesen und verstanden werden JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 35 Programmerstellung Idee Spezifikation Aufgabenstellung Algorithmus Lösungsverfahren Mensch Programm Compiler Codiertes Lösungsverfahren Maschinenprogramm Lader JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 36 Geschichte der Programmiersprachen Jahr 1957 1960 Sprache Fortran Algol-60 Cobol Basic APL Lisp PL/I Algol-68 Pascal Prolog C Modula-2 Ada Smalltalk C++ Oberon Java C# 1962 1965 1968 1971 1972 1973 1980 1983 1987 1995 2000 Bemerkung technische Anwendungen “Algol-Familie” kaufmännische Anwendungen Anfänger-Sprache Vektoren und Matrizen funktionale Sprache Allzwecksprache Nachfolger von Algol-60 Einfluß auf spätere Sprachen Wissen und Schlußregeln “Unix-Sprache” Nachfolger von Pascal Allzwecksprache; DoD objektorientierte Sprache objektorientierte Erweiterung von C Weiterentwicklung von Modula-2 Weiterentwicklung von C++; WWW Weiterentwicklung von Java durch Microsoft JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 37 Programmiersprache Java Java ist eine höhere, problemorientierte Programmiersprache, die laut Sun durch folgende Eigenschaften charakterisiert ist: Simple: einfacher als C++ Architecture-neutral: läuft auf Windows-Rechner als auch auf Unix/Linux, Mac Object-oriented Portable Distributed High-performance Interpreted Multithreaded Robust Secure Dynamic JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 38 Java Virtual Machine Java-Programme werden nicht direkt auf dem Computer ausgeführt sondern von einen speziellen Programm, nämlich der Java Virtual Machine (JVM) Vorteile: Java-Programme laufen „kontrolliert“ in der JVM ab Erhöhte Sicherheit und Zuverlässigkeit Kann auf jede Plattformen portiert werden. Vom Super Computer bis zu Handys Von Unix bis Windows-CE Selbes Programm läuft (mit Einschränkungen) auf alle diesen Plattformen ohne nochmals übersetzt oder portiert zu werden, da sich die VM auf jeder Plattform gleich verhält JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 39 Unterschied normale Prgrammausführung Ö Virtuelle Machine (VM) normale Prgrammausführung Ö Virtuelle Machine Application I-B er JN Systemlibraries ei ch Application Operating-System Hardware Virtual Machine Systemlibraries Operating-System Hardware JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 40 Java Runtime Environment (JRE) Eine Plattform ist die Hard- und Softwareumgebung auf der ein Programm läuft. Die meisten Plattformen bestehen aus Hardware und Betriebssystem. Die Java-Plattform unterscheidet sich von den meisten anderen Plattformen dadurch, das sie eine reine Software-Plattform ist, die für verschiedenste Hardware und Betreibssysteme verfügbar ist. Die Java Runtime Environment besteht aus zwei Teilen: • Die Java Virtual Machine (Java VM) • Das Java Application Programming Interface (Java API) JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 41 Java Development Tookit (JDK) == Programmwerkzeuge zum Erstellen, Übersetzen und Testen von Java-Programmen Ö javac Java Compiler Übersetzt den Quellcode in Java Byte-Code Ö jdb Java Debugger Tool zur Fehlersuche Ö javap Java Disassembler Erzeugt aus Byte-Code lesbaren Quellcode Weitere Tools jar, javah, javadoc, javakey, serialver, ... Java Dokumentation (separates Download) JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 42 Erstellen und Ausführen von Java-Programmen Beispielprogramm HelloWorld Erstellen von Java-Programm mit Editor Erstellen von Programm HelloWorld mit Editor Quellcode (Sourcecode) in Java Datei HelloWorld.java mit Java-Source Java Compiler (javac) javac HelloWorld.java Java Zwischencode (Byte Code) Datei HelloWorld.class mit Byte-Code java HelloWorld Java Runtime (java) Ausführung von Programm HelloWorld Programmausführung JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 43 Programm schreiben (Wordpad) JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 44 Programm kompilieren (javac) JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 45 © Hanspeter Mössenböck, Herbert Prähofer 46 Programm starten (java) JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) Java: Deklaration von Variablen In Java müssen alle Variablen vor der Verwendung deklariert werden Deklaration von Variablen Angabe des Datentyps Angabe des Namens (eindeutig) [Angabe eine Anfangswertes (optional)] int i; int j = 0, k; boolean positive = false; float x; char ch = ' '; JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 47 Java: Zuweisungsoperation Wichtig! x = 1 + 2; Zuweisung ungleich Gleichheitsoperator x = a + b; (==) x = x + b; x = x + 1; Weist einer Variable einen Wert zu. Der Wert der Variablen auf der rechten Seite geht dabei nicht verloren. Der Zuweisungsoperator ist nicht mit der Gleichheitsrelation der Mathematik zu verwechseln. Die Hauptanwendung des Zuweisungsoperators liegt in der Zuweisung eines Ergebnisses eines Ausdruckes an eine Variable. Verschiedene Schreibweisen in unterschiedlichen PrgmSprachen m = n C/C++, Java, FORTRAN, Basic, ... m <– n APL m := n Pascal, Algol, Modula-2 JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 48 Java: Sequenz int number; number = readInt(); number = number + 1; writeInt(number); ... Folge von Anweisungen werden nacheinander (sequentiell) ausgeführt Ist nichts anderes spezifiziert, werden Anweisungen immer nacheinander - man sagt sequentiell - ausgeführt Während der Ausführung werden Werte von Variablen verändert JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 49 Java: Verzweigungen Eine Verzweigung führt Anweisungen in Abhängigkeit einer Bedingung aus. Java Bedingung Einseitig: wenn x < 0 ist, dann x = -x if (x < 0) { x = -x } Anweisungen Zweiseitig: wenn x < y ist, dann min = x, max = y sonst /* x >= y */ if (x < y) { min = x; max = y; } else { /* x >= y */ min = y; max = x; } min = y, max = x JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 50 Java: Schleifen Schleifen führen Anweisungen in Abhängigkeit einer Bedingung kein- oder mehrmals aus. Beispiel: Berechnung der Fakultät Abweiseschleife Java Bedingung x = 3, i = 1, f = 1 solange i < x ist, wiederhole i = i + 1, f = f *Anweisungen i x = 3; i = 1; f = 1; while (i < x) { i = i + 1; f = f * i; } Durchlaufschleife x = 3, i = 1, f = 1; wiederhole f = f * i, i = i + 1 solange i <= x x = 3; i = 1; f = 1; do { f = f * i; i = i + 1; } while (i <= x); JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 51 Grundstruktur von Java-Programmen Text muß in einer Datei namens ProgramName.java stehen class ProgramName { public static void main (String[] arg) { ... // Deklarationen ... // Anweisungen } main-Methode stellt den Anfang des Programms dar } Beispiel: class Sample { public static void main (String[] arg) { Out.print("Geben Sie 2 Zahlen ein:"); int a = In.readInt(); int b = In.readInt(); Out.println("Summe = " + (a + b)); } } Text steht in Datei Sample.java JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 52 Beispiel Java-Programm public class GGTProgram { public static void main(String[] args) { int x; int y; int ggt; Out.print("Bitte x eingeben: "); x = In.readInt(); Out.print("Bitte y eingeben: "); y = In.readInt(); ggt = GGTEuklid(x, y); Out.print("Der GGT von x und y ist: "); Out.println(ggt); } static int GGTEuklid(int x, int y) { int rest; int ggt; // %-Operator bildet den Rest rest = x % y; while (rest != 0) { x = y; y = rest; rest = x % y; } // rest == 0 ggt = y; return ggt; } } // end GGTProgram JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 53 Java-Programm "Sum" (Sum.java) public class Sum { public static void main(String[] args) { int sum = 0; int number; Out.print("Bitte Zahlen eingeben: "); number = In.readInt(); while (number > 0) { sum = sum + number; number = In.readInt(); } Out.print("Die Summe ist:"); Out.printLn(sum); } } JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 54 Schritte des Algorithmenentwurfs und der Programmierung Problem erfassen und beschreiben Lösungsidee erarbeiten und niederschreiben Lösungsidee in einen schrittweisen Ablauf überführen (= Algorithmus) Algorithmus so weit verfeinern und konkretisieren, dass Umsetzung in Java direkt möglich ist Programmierung in Java Überlegen von Testfällen (dabei alle möglichen Sonderfälle, Grenzfälle betrachten) Testen und Verbessern Dokumentieren der Ergebnisse JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 55 Einige Hinweise Es ist wichtig, klar und einfach zu denken Hat man das Problem einmal richtig erfasst (niederschreiben), so ist meist auch die Lösung klar. Die besten Lösungen sind (fast immer) die einfachsten und kürzesten. Sonderfälle und Grenzfälle betrachten (z.B. Division durch 0) Fehler treten meist bei den Sonderfällen und Grenzfällen auf; an diese denken und im Algorithmus vorsehen. Der Mensch berücksichtigt Sonderfälle meist intuitiv; Intuition fehlt dem Computer aber völlig. Java-Programme müssen absolut exakt, verständlich und übersichtlich sein Keine Syntaxfehler Klare Namensgebung Genaue Konventionen für das Format und die Zeichensetzung (Einrückungen, Leerzeichen etc.) Kommentare für Verständnis wichtig JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) © Hanspeter Mössenböck, Herbert Prähofer 56