Praktikum Entwicklung und Einsatz von Geosoftware I Sitzung 2 Programmieren und Typen Sommersemester 2003 Lars Bernard Organisation • Infos unter: http://ifgi.uni-muenster.de/~bernard/public/ GeosI/index.html • Teilnehmer-Liste Geosoftware I – Lars Bernard Einführung: Was bedeutet Programmieren? • Eine mögliche Definition: Erstellen einer Simulation Objektorientierung wurde mit der Sprache Simula “erfunden” (1967) ! Es geht nicht nur darum, dass das Programm läuft • Simulation = ausführbares Modell Sie lernen hier, mit Informatikmethoden Modelle zu bauen und sie auszuprobieren Geosoftware I – Lars Bernard Beispiele • Wettervorhersage • Roboter • Fahrzeugnavigation • Hydrologische Modelle • etc. Geosoftware I – Lars Bernard Kern der Simulation: ein Modell • ein Modell der Welt, nicht des Computers Folge: Sie sollten genau verstehen, was Sie wollen Lassen Sie sich vom Programmcode nicht den Blick aufs Wesentliche nehmen • Merke: “gute Programmierer programmieren einfache Aufgaben; divide & conquer ! schlechte Programmierer versuchen, schwierige Aufgaben zu programmieren” Geosoftware I – Lars Bernard Was ist ein Modell ? • eine Abstraktion von der Welt Wichtiges hervorheben, Details weglassen klassifizieren und verallgemeinern • in einer Sprache beschrieben welche Sprachen zur Modellierung kennen Sie? welche Sprachmittel bieten diese? • bestehend aus Objekten und Operationen Objektorientierung: beide zusammen betrachten. Geosoftware I – Lars Bernard Modelle der Geoinformatik • 3 Komponenten: Raumbezug Zeitbezug Thematik • Besonderheiten: wir können nicht einfach festlegen, wie die Welt funktionieren soll Geometrie Geosoftware I – Lars Bernard Werkzeuge • Ihr Kopf • Papier und Bleistift • Java als moderne Programmiersprache Geosoftware I – Lars Bernard Was ist Java? • eine Programmiersprache • modern, d.h. vergleichsweise “neu” (vgl. Fortran, Pascal, C, Basic, …..) • eine wichtige Programmiersprache für verteilte Anwendungen und das World Wide Web (WWW) Geosoftware I – Lars Bernard Was ist Java ? (2) • sehr stark an C++ angelehnt • objektorientiert • “einfach”, “schnell”, “sicher” • andere Programmier(sprachen)kenntnisse sind hilfreich Geosoftware I – Lars Bernard Was macht man mit Java ? • Programmieren! • Anwendungen schreiben! alle Arten von Anwendungen, die man mittels “klassischer” Sprachen schreiben kann insbesondere Anwendungen, die mit anderen Computern via Internet kommunizieren können • Einbindung von Grafiken, Webseiten, interaktiven Fenstern, benutzerfreundlichen Oberflächen, ... Geosoftware I – Lars Bernard Compiler & Interpreter • Compiler = “Übersetzer”: übersetzt (kompiliert) das Programm in Maschinensprache • Compiler liest und kompiliert gesamtes Programm ==> ausführbares Programm • Interpreter liest ein Programm Zeile für Zeile und führt jede Zeile gleich aus. Geosoftware I – Lars Bernard Java Compiler und Interpreter • Java Quellcode wird mittels JAVAC kompiliert (in speziellen Bytecode) • der Bytecode wird während des Programmablaufs in Maschinensprache übersetzt (mittels JAVA) • Vorteile sind u.a.: der vorkompilierte Code ist Plattform-unabhängig! (Internet!) Überwachung der Programmausführung, z. B. bei Speicherzugriffen, Datenmanipulationen (Datenaustausch via Internet) Geosoftware I – Lars Bernard Geosoftware I – Lars Bernard Geosoftware I – Lars Bernard Literatur-Hinweis zur Seminar Homepage ... Geosoftware I – Lars Bernard Typen - Ziele • Begriff (Daten-)Typ Zweck von Typen Beschreibung von Typen • Elementare Datentypen in Java Deklaration Bereiche Operatoren Typumwandlung Geosoftware I – Lars Bernard Was ist ein Typ ? • Welche Typen kennen Sie? Integer, Boolean, Character, String, etc. • Was bezeichnen diese Namen? Mengen von Werten (“Wertebereich”) • Boolean = { True, False } • Integer = { x | minInt x maxInt} • Wie baut man eigene Typen? Mit Typkonstruktoren wie array, list, class etc. Geosoftware I – Lars Bernard Wozu braucht man Typen ? • Hauptzweck: Fehler vermeiden z.B. c := a + b (wo a = 5 und b = True) • Speicherverwaltung Typen übersetzen die Daten der Benutzer in den internen Binärcode • Modularisierung Programme bauen auf Typen auf (Zahlen, Punkte,…) Dies sorgt für Wiederverwendbarkeit! Geosoftware I – Lars Bernard Wie beschreibt man Typen ? • Durch eine Implementierung class Point { //*...*// }; • Durch die zulässigen Operationen (Operatoren und Methoden) Integer: +, -, *, (div) Punkt: new Point(5.0, 4.0), getX(), getY() • Signaturen von Operationen + :: Integer, Integer -> Integer getX :: Point -> Double Geosoftware I – Lars Bernard Elementare Datentypen in Java • Variablen werden als Elemente eines Typs deklariert int a, b, c; a = 5; b = 2; c = a + b; int number_; Geosoftware I – Lars Bernard Java - Deklaration und Initialisierung • int a; • Im Speicher wird ein Bereich für a reserviert und der Inhalt dieses Bereichs im weiteren als ganzzahliger Wert von a interpretiert. • Dann kann a ein Wert zugewiesen werden: a = 5; Geosoftware I – Lars Bernard Java - Deklaration und Initialisierung • In Java kann nur auf den Wert der Variablen zugegriffen werden (nicht auf die Adresse) • Deklaration und Zuweisung/Initialisierung können in einer Anweisung erfolgen: int a = 5; • Werte können explizit als Konstante deklariert werden: final int a = 5; Geosoftware I – Lars Bernard Elementare Datentypen in Java Typ Beispiele Wertemenge short int 3, -3, 0x3FF (hexadezimal), 0377 (octal) -215 ... 215-1 long 3l, 30000000000L -263 ... 263-1 float double 3.1415, 1e20, 1e-10, -1E10 byte char 'A', 'a', boolean true, false -231 ... 231-1 6-stellige Mantisse, 2-stelliger Exponent. 16-stellige Mantisse, 3-stelliger Exponent. 0... 28-1 = 255 Zwei byte-Character in Unicode. Wahr oder falsch. Geosoftware I – Lars Bernard Java - Operatoren • Operatoren dienen der Veränderung und Verknüpfung von Variablen arithmetische Operatoren, z.B: Add: + Subtr: - Mult: * Div: / Incr: ++ logische Operatoren: Und: && Oder: || Ungleich: != Gleich: == Zugriffsoperatoren: Indexzugriff: [] ... Geosoftware I – Lars Bernard Java - Typumwandlung (casting) • Implizite Typumwandlung (vom niedrigeren zum höheren Typ): int a = 5; double x; x = a; // => x == 5.0 • Explizite Typumwandlung (vom höheren zum niedrigeren Typ): int a; double x = 5.0; a = x; // => warning or error a = (int)X; // => ok Geosoftware I – Lars Bernard Java - Typumwandlung • Bereichsüberschreitung: int a int b short s = a = 31 000; // 4 byte = 32 bit = 31 000; s; // 2 byte = 16 bit + b; // => s < 0 => overflow • Implizite Typumwandlung in arithmetischen Ausdrücken: int a = 1; int b = 2; double x; x = a / b; // => x = 0 x = a / (double)b; // => x = 0.5 Geosoftware I – Lars Bernard Zusammenfassung • Typen sind ein Konzept der Programmierung • Ausblick: Klassen sind die objekt-orientierte Form der Erzeugung von Typen durch Benutzer Listen zur Mengen-Verwaltung Geosoftware I – Lars Bernard Und jetzt probieren … class Number { Number(int numberIn) { number_ = numberIn; } int getNumber() { return number_; } int number_; } class HelloNumber { public static void main(String[] args){ /* 1. Numbers as basic typs */ int Number1 = 1; int Number2, Number3; Number2 = 4; Number3 = 10; Number1 = Number2 + Number3; System.out.println("Hello to basic number 1: "+ Number1) ; System.out.println("Hello to a basic number 2 + number 3: "+ Number2 + " " + Number3) ; /* 2. Numbers as Objects */ Number myNumberObject; myNumberObject = new Number(4); System.out.println("Hello to a number object: "+ myNumberObject.getNumber()); } } Geosoftware I – Lars Bernard Aufgabe 1 und 2 • Jetzt lesen, beginnen und dazu fragen ;-) • die HA via e-mail an: Lars Bernard ([email protected]) jeweils bis Montag 12.00 st Geosoftware I – Lars Bernard