Softwareentwicklung 1 D H Dr. Herbert b tP Prähofer äh f Institut für Systemsoftware Johannes Kepler Universität Linz JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 1 Vortragender Dr. Herbert Praehofer Institute for System Software Johannes Kepler University Altenbergerstrasse 69 A-4040 Linz / Austria Tel.: ++43 (732) 2468 7132 Fax.: ++43 (732) 2468 7138 EMail: [email protected] http: www.ssw.uni-linz.ac.at Raum: HF 306 (Hochschulfondgebäude 3. Stock) JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 2 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 (UZR) © Systemsoftware, JKU Linz 3 Motivation programmieren zu lernen Software erstellen können Grundlagen der Programmierung verstehen Java J kennen k 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 (UZR) © Systemsoftware, JKU Linz 4 Organisation der LVA Softwareentwicklung 1 Vorlesung Stoff wird theoretisch vorgetragen Mit eingebauten Programmierbeispielen Übu g Übung Stoff wird geübt Programmieraufgaben sind wöchentlich zu programmieren 2 Unterrichtsstunden für Wiederholung Praktische P kti h B Beispiele i i l Besprechung der Programmieraufgaben Übungsleiter: g Hr. DI Peter Hamader Programmieren g ist eine Fähigkeit, g , die nur mit viel Übung erlernt werden kann!! JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 5 Webpage der LVA http://www.ssw.uni-linz.ac.at/Teaching/Lectures/UZR/SWE1/2009W/index.html Alle wichtigen Infos wie Termine Unterlagen Studienmaterial St di t i l findet man auf dieser Seite JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 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 (UZR) © Systemsoftware, JKU Linz 7 Einheit 1: Grundlagen der Programmierung Programmierung und Ausführung von Programmen Algorithmen und Algorithmendarstellung g p und Java Programmiersprachen Das Java-Entwicklungssystem JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 8 Worum geht es? Programmieren Problem so exakt beschreiben,, dass es ein Computer p 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 (UZR) © Systemsoftware, JKU Linz 9 Von-Neumann Architektur eines Computers JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) aus: A. Ferscha, Skriptum Softwareentwicklung 1, JKU Linz © Systemsoftware, JKU Linz 10 Wiederholung von der VL: RISC-Programm JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network aus: A. 1Ferscha, Softwareentwicklung (UZR) Skriptum Softwareentwicklung 1, JKU Linz © Systemsoftware, JKU Linz 11 Verarbeitungseinheit JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) aus: A. Ferscha, © Systemsoftware, JKU Linz Skriptum Softwareentwicklung 1, JKU Linz 12 Typische Befehle load: Laden von Daten aus Hauptspeicher store: Schreiben von Daten in Hauptspeicher p p move: Speicheroperationen add, add sub sub, mult 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 (UZR) © Systemsoftware, JKU Linz 13 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 Charakterisiert durch Name oder Bezeichner Beispiel: byte b t x = 10 Adresse Wert 99 Wert 100 Adresse Ad (im (i H Hauptspeicher) t i h ) 101 10 x (byte) Datentyp Datentyp int, int char, char byte, byte float float, ... Name JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 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 true, float 3.14159265259 JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 16 Algorithmus Ein Algorithmus ist ein endliches, schrittweises Verfahren zur Berechnung gesuchter aus gegebenen Größen, in dem jeder S h itt aus einer Schritt i A Anzahl hl eindeutig i d ti ausführbarer füh b O Operationen ti und d 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 (UZR) © Systemsoftware, JKU Linz 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 (UZR) © Systemsoftware, JKU Linz 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 3.2 Diese Formulierung ist einem Computerprogramm schon sehr nahe. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 19 Anweisungen: Wertzuweisung und Sequenz Wertzuweisung x ← x+1 Variable 1. werte 1 t A Ausdruck d k aus 2. weise seinen Wert der Variablen zu Ausdruck Anweisungsfolge (auch Sequenz) "Ablaufdiagramm" x←3 y←4 z←x+y Assertion x == 3, 3 y == 44, z == 7 Assertion (Zusicherung) Aussage über den Zustand des Algorithmus an einer bestimmten Stelle JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 20 Anweisungen: Verzweigung Auswahl (auch Verzweigung, Abfrage, Selektion) j min ← x x<y? n x≥y min ← y min == Minimum von x und y JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 21 Anweisungen: Wiederholung Wiederholung (auch Schleife, Iteration) Alternative Darstellung sum ← 0 zahl ← 1 sum ← 0 zahl ← 1 zahl <= n ? nein ja zahl <= n sum ← sum + zahl zahl ← zahl + 1 sum ← sum + zahl zahl ← zahl + 1 JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 22 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 (UZR) © Systemsoftware, JKU Linz 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 b>c? max ← b a≤b n a≤b≤c max ← c JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 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 b>c? max ← b a≤b n a≤b≤c max ← c JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 26 Beispiel: Summe Summe von 1 bis n Sum(↓n, ↑sum) Schreibtischtest (n = 5) sum ← 0 zahl ← 1 zahl <= n sum ← sum + zahl zahl ← zahl + 1 0 sum 0 zahl 1 1 1 2 2 3 3 3 4 5 6 10 15 4 5 6 JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 27 Algorithmen und Programmierung Programm Ein für die Lösung g einer bestimmten Aufgabe g mit einer Datenverarbeitungsanlage geeigneter Algorithmus d.h. Elementare Operationen p sind die durch den Computer p 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 (UZR) © Systemsoftware, JKU Linz 35 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 p in ein ausführbares Programm g übersetzt werden können vom Computer (Compiler) für den Menschen wesentlich einfacher lesbar und schreibbar als Maschinensprache Programmieren P i wird i d wesentlich li h erleichtert l i h Programme können vom Experten gelesen und verstanden werden JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 36 Programmerstellung Idee Spezifikation Aufgabenstellung Algorithmus Lösungsverfahren Mensch Programm Compiler Codiertes Lösungsverfahren Maschinenprogramm L d Lader JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 37 Geschichte der Programmiersprachen Jahr 1957 1960 Sprache Fortran Algol-60 g Cobol Basic APL Lisp PL/I Algol-68 Pascal Prolog C Modula-2 Ada S llt lk Smalltalk C++ Oberon Java C# 1962 1965 1968 1971 1972 1973 1980 1983 1987 1995 2000 Bemerkung technische Anwendungen “Algol-Familie” g 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 Unix-Sprache Sprache” Nachfolger von Pascal Allzwecksprache; DoD objektorientierte bj kt i ti t Sprache S h 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 (UZR) © Systemsoftware, JKU Linz 38 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 High performance Interpreted Multithreaded Robust Secure Dynamic JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 39 Java Development Kit installieren http://java.sun.com/javase/downloads/ JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Java Runtime Environment (JRE) • Die Java Virtual Machine (Java VM) • Das Java Application Programming Interface (Java API) Java Virtual Machine (JVM) Java-Programme nicht direkt auf dem Computer ausgeführt sondern durch java java-Programm Programm Vorteile: Java-Programme laufen „kontrolliert“ in der JVM ab (erhöhte Sicherheit und Z Zuverlässigkeit) lä i k it) Kann auf jede Plattformen portiert werden. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 41 Java Development Tookit (JDK) == Programmwerkzeuge zum Erstellen, Übersetzen und Testen von Java-Programmen Öj javac Java Compiler p Ü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, jar javah, javah javadoc, javadoc javakey, javakey serialver, serialver ... Java Dokumentation (separates Download) JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 42 Java Development Kit (JDK) Erstellen und Ausführen von Java-Programmen. Beispielprogramm HelloWorld Erstellen von Java-Programm mit it Edit 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) Java Runtime (java) Softwareentwicklung 1 (UZR) JOHANNES KEPLER UNIVERSITY LINZ java HelloWorld Ausführung von Programm HelloWorld Programmausführung Research and teaching network Datei HelloWorld.class mit Byte-Code © Systemsoftware, JKU Linz 43 Java Dokumentation installieren http://java.sun.com/javase/downloads/ C \P C:\Program Files\Java\jdk1.6.0_16\docs\index.html Fil \J \jdk1 6 0 16\d \i d ht l JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Java Development Kit probieren findet javac.exe nicht, weil JDK nicht im PATH JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Java Development Kit probieren JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Java Development Kit verwenden Übersetzen Ausführen 47 JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Daten einlesen und ausgeben B t Bytecode d Dokumentation Quelltext Out.print(5) Out.println("GdP") Out.println("Hello World!"); In.readInt() In.readWord() In.readString() JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Text-Editor Notepad++ http://notepad-plus.sourceforge.net/ 49 JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Schritte des Algorithmenentwurfs und der Programmierung Problem erfassen und beschreiben Lösungsidee Lö id erarbeiten b it und d niederschreiben i d h ib Lösungsidee in einen schrittweisen Ablauf überführen (= Algorithmus) Algorithmus so weit verfeinern und konkretisieren, dass Umsetzung in Java direkt möglich g ist Programmierung in Java Überlegen von Testfällen (dabei alle möglichen Sonderfälle Sonderfälle, Grenzfälle betrachten) Testen und Verbessern Dokumentieren der Ergebnisse JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (UZR) © Systemsoftware, JKU Linz 61