http://www.nightofscience.de/ 1 Grundlagen der Programmierung II DBIS - SS2011 Teil 2 Modul: Programmierung B-PRG Grundlagen der Programmierung II Dr. Karsten Tolle [email protected] 2 Aus- und Rückblick 3 Grundlagen der Programmierung II DBIS - SS2011 Hallo Welt! Haskell main :: IO () main = putStrLn "Hallo Welt!" Java Python #!/usr/bin/python print "Hallo ", print "Welt!" Piet public class hallowelt { public static void main( String[] args ) { System.out.println("Hallo Welt! "); } } ~ 130 Hallo-Welt Programme unter: http://de.wikipedia.org/wiki/Liste_von_Hallo-Welt-Programmen/Programmiersprachen 4 Grundlagen der Programmierung II DBIS - SS2011 Hallo Welt! C# Java 5 class MainClass { public static void Main() { System.Console.WriteLine("Hallo Welt!"); } } public class hallowelt { public static void main( String[] args ) { System.out.println("Hallo Welt! "); } } Grundlagen der Programmierung II DBIS - SS2011 Ziel 1. Unterschiede in den Programmiersprachen verstehen und auf zukünftige Wechsel der Programmiersprache vorbereitet sein 2. Programmieren lernen in Java (zumindest die Grundlagen☺) 3. Spaß haben … 6 Grundlagen der Programmierung II DBIS - SS2011 Vergleich Java und Python (Typisierung) Java Statische Typisierung Python Dynamische Typisierung … … int width = 20; width = 20 int height = 5*9; height = 5*9 int summe = width * height; summe = width * height String text1 = "hallo1"; text1 = 'hallo1' String text2; text2 = "hallo2" text2 = "hallo2"; … … 7 Grundlagen der Programmierung II DBIS - SS2011 Vergleich Java und Python (Strukturierung) Java Struktur durch Klammern und Semikolon Python (Version 2.6) … … if(a == 1) { if(a == 1): Struktur durch Einrücken und Zeilenumbruch if(b > 100): if(b > 100) { print c System.out.println(c); print d System.out.println(d); } System.out.println(e); print e … } … 8 … ab Version 3: print (c) Grundlagen der Programmierung II DBIS - SS2011 Vergleich Java und Python (Verzweigungen) Java Python if (<Bedingung_1>) Anweisung_1; if expression: [else if (<Bedingung_2>) Anweisung_2;] block [elif expression: [else block Anweisung_3;] elif expression: block Statt einzelnen Anweisungen können auch durch Klammern begrenzte Blöcke verwendet werden: { Anweisung_1; Anweisung_2; … } 9 …] [else: block] Grundlagen der Programmierung II DBIS - SS2011 Vergleich Java und Python (Schleifen) Java Python for (<Element>:<Kollektion>) Anweisung; for ziel in sequenz: … for (<Init>;<Bedingung>;Anweisung) [else: …] Anweisung; while ziel in sequenz: while (<Bedingung>) Anweisung; … [else: do Anweisung; while (<Bedingung>); 10 …] Grundlagen der Programmierung II DBIS - SS2011 Java - Geschichte Ursprung: „Green“-Project bei der Firma Sun Microsystems 1991 Entwicklung eines Systems mit folgenden Eigenschaften: • hardwareunabhängig • möglichst klein Einsatzgebiet: Konsumgeräte, z.B. Umschalter für das Kabelfernsehen basierend auf C++ (objektorientiert) ohne dessen Schwierigkeiten Name: zuerst OAK (Object Application Kernel), später Java Durchbruch: Ende 1995, 1998 dann JAVA 2 11 Grundlagen der Programmierung II DBIS - SS2011 Plattformunabhängigkeit von Java Erinnerung: Übliche Übersetzungsvorgänge bei Programmiersprachen • Compiler (bei Modula-2, C usw.): MODULE p; VAR n,i:INTEGER; BEGIN FOR i:=1 TO n DO n:=n*n; END; END p. Compiler 00010110010 11001001001 00001110001 11111000001 10101010100 11001100011 11001100111 11000111001 Ausführung Ergebnis Maschinencode Programm (Quellcode) • Interpreter (bei Basic, Lisp, Python usw.): 10 INPUT n$ 20 FOR i=1 TO 10 30 PRINT “Hi”,n$ 40 NEXT Anweisung Nr. i 12 Interpreterer 00010110010 11001001001 Ausführung Ergebnis Nr. i Maschinencode Grundlagen der Programmierung II DBIS - SS2011 Plattformunabhängigkeit von Java Vorgehensweise bei Java (Java Virtual Machine) Ergebnis JavaInterpreter (i686-CPU) class Dreieck extends GeoObj { double seite,hoehe,alpha; Dreieck(double s, double h, double a) { this.seite=s; this.hoehe=h; this.alpha=a;} double berechneFlaeche() { return 0.5*seite*hoehe);} } Java Quellcode Java Compiler JavaInterpreter (Power PC) Java Bytecode (plattformunabhängig) Ergebnis JavaInterpreter (SPARC) Ergebnis 13 Grundlagen der Programmierung II DBIS - SS2011 Ergebnis JavaInterpreter (i686-CPU) class Dreieck ext ends GeoObj { double seite,ho ehe,alpha; Dreieck(double s, double h, double a) { this.seite=s; this.hoehe=h; this.alpha=a; } double berechne Flaeche() { return 0.5*se ite*hoehe);} } Java Compiler JavaInterpreter (Power PC) Java Bytecode (plattformunabhängig) Java Quellcode Ergebnis JavaInterpreter (SPARC) Java Libraries Ergebnis HalloWelt.java HalloWelt.class javac HalloWelt.java 14 Grundlagen der Programmierung II „Hallo Welt“ java HalloWelt DBIS - SS2011 Java Bytecode javac hallowelt.java javap –c hallowelt 15 Grundlagen der Programmierung II DBIS - SS2011 Was ist Java? Java = • Programmiersprache (OO) • Virtuelle Maschine Ergebnis • Bibliotheken JavaInterpreter (i686-CPU) class Dreieck extends GeoObj { double seite,hoehe,alpha; Dreieck(double s, double h, double a) { this.seite=s; this.hoehe=h; this.alpha=a;} double berechneFlaeche() { return 0.5*seite*hoehe);} } Java Quellcode Java Compiler JavaInterpreter (Power PC) Java Bytecode (plattformunabhängig) Ergebnis JavaInterpreter (SPARC) Ergebnis 16 Grundlagen der Programmierung II DBIS - SS2011 JRE und JDK Java Runtime Environment (JRE) – enthält die Java Virtual Machine und eine Programmierschnittstelle (API), welche die Standard-Klassen bereitstellt. Java Development Kit (JDK) – enthält den Compiler zu Erstellen des Byte-Codes (und Programme weitere hilfreiche Programme zum Programmieren) Java Compiler JDK 6 update 25 und Virtuelle Maschine JRE: http://www.oracle.com/technetwork/java/javase/downloads/index.html 17 Grundlagen der Programmierung II DBIS - SS2011 18 Grundlagen der Programmierung II DBIS - SS2011 Literatur zu Java • Java Tutorials: http://download.oracle.com/javase/tutorial/ • Bücher in der Bib. … unter D • … online unter: http://scholar.google.de/ • Empfehlung zum Schmökern: „Thinking in Java 3“ von Bruce Eckel !!! http://www.smart2help.com/e-books/tij-3rd-edition/TIJ3.htm 19 Grundlagen der Programmierung II DBIS - SS2011 Pause 20 Grundlagen der Programmierung II DBIS - SS2011 Programmieren/Arbeitsablauf allgemein 21 Grundlagen der Programmierung II DBIS - SS2011 Wiederholung: Programmieren allgemein Parameter / Konstante Datentypen Bedingungen / Verzweigungen Schleifen / Rekursion Methoden / Funktionen, Prozeduren Kommentare … 22 Grundlagen der Programmierung II DBIS - SS2011 Kontrollstrukturen in Java • if • switch • while • for 23 Grundlagen der Programmierung II DBIS - SS2011 Mehrfachauswahl (switch) • Soll eine Variable auf mehrere Werte überprüft werden, dann kann die If-Anweisung unübersichtlich werden. • Eine switch-Anweisung ist für solche Fälle besser geeignet. 24 Grundlagen der Programmierung II DBIS - SS2011 Mehrfachauswahl (switch) int wahl = 3; … switch (wahl) { case 1: Anw1; [break;] case 3: {Block3} [break;] case 5: Anw5; [break;] … [default: . . . [break;]] } 25 Grundlagen der Programmierung II DBIS - SS2011 Mehrfachauswahl (switch) • Die Variable wahl muss vom Typ – char – byte – short – int • Nicht erlaubt sind: – long – float – double – boolean 26 Grundlagen der Programmierung II DBIS - SS2011 Unbestimmte Schleifen (while) Nur wenn die Bedingung wahr ist, wird der Block ausgeführt: while (Bedingung) { Block } kopfgesteuert Der Block wird auf jeden Fall einmal durchlaufen: do { Block fußgesteuert } while (Bedingung); 27 Grundlagen der Programmierung II DBIS - SS2011 Bestimmte Schleifen (for) Anzahl der Durchläufe kann vorher festgelegt werden. for (<Init>;<Bedingung>;Anweisung) Anweisung; int i; for (i = 1; i <= 10;) { System.out.println(i) i = i+1; } 28 Grundlagen der Programmierung II DBIS - SS2011 Dateinamen (Endung) • Quellcode auf *.java statt *.py in Python oder *.hs in Haskell • Compilierter Code auf *.class • case sensitive Java unterscheidet zwischen Groß- und Kleinschreibung (auch im Quellcode)! Java auf den Rechnern der RBI Java: /opt/rbi/bin/java Javacompiler: /opt/rbi/bin/javac 29 Grundlagen der Programmierung II DBIS - SS2011 Applikationen - Entwicklungsprozess Erster Schritt: Erstellen einer Klasse Hello (in einem Editor) mit dem Namen „Hello.java“ class Hello { public static void main(String[] args) { System.out.println(“Hello Students!”); } MUSS gleich sein! } Zweiter Schritt: Compilieren des Quellcodes Aufruf: „javac Hello.java“ Ergebnis: autom. Erzeugen des Bytecodes „Hello.class“ Dritter Schritt: Evtl. Ausführen des Programms Aufruf: „java Hello“ (Ausgeführt wird immer die main-Methode!) Ausgabe: „Hello Students!“ 30 Grundlagen der Programmierung II DBIS - SS2011 Programmstruktur: Klassen, Methoden und Variablen class ClassName { type variablenName = anfangswert ; rückgabeType methodenName(type parameter1, …){ } } Ein erstes Beispiel: class Student { int semester; int getSemester() { return semester; } } 31 Grundlagen der Programmierung II DBIS - SS2011 Klassen, Methoden und Variablen Konstruktor: Student() { … } Student(int semester) { … } Objekt student1 erzeugen: Student student1 = new Student(); Methode aufrufen und Rückgabewert speichern: int semanzahl = student1.getSemester(); 32 Grundlagen der Programmierung II DBIS - SS2011 Bibliotheken Start! 33 Grundlagen der Programmierung II DBIS - SS2011 OO Einführung in die Objektorientierung siehe auch V8 aus PRG-1 WS 2010/2011 34 Objektorientierung Das Objektmodell beschreibt „die Welt“ als eine Menge interagierender Objekte. 35 Grundlagen der Programmierung II DBIS - SS2011 Klasse Eine Klasse (Typ, Schablone) ist • Klasse dient als Bauplan für Abbildung von realen Objekten („Schablone“) – eine Abstraktion auf die für die Programmierung wichtiger Eigenschaften. • eine Realisierung eines abstrakten Datentyps (ADT). • ein benutzerdefinierter Typ in einer objektorientierten Programmiersprache. • eine zur Compilezeit des Programms notwendige Typspezifikation. 36 Grundlagen der Programmierung II DBIS - SS2011 Objekt Ein Objekt (Instanz) ist • eine individuelle, benennbare reale oder abstrakte Einheit mit einer wohldefinierten Rolle. • eine klar abgrenzbare Einheit mit Merkmalen (Zustand und Verhalten) und einer Identität. • eine Ausprägung einer Klasse. • eine gekapselte Datenstruktur, die zur Laufzeit des Programms Speicherplatz belegt und die nur über die Operationen der definierten Schnittstelle manipuliert werden kann. 37 Grundlagen der Programmierung II DBIS - SS2011 Beispiele Klasse Objekte (Instanzen) PKW • mein Auto • dein Auto • das Auto mit dem Kennzeichen F-CB 2000 usw. Geometrische Formen • ein Kreis mit dem Radius 5 und Mittelpunkt (42,17) • eine Pyramide mit Grundfläche 3x4 und Höhe 6 usw. DVD • „Mr. and Mrs. Smith“-DVD • „King Kong“-DVD 38 Grundlagen der Programmierung II DBIS - SS2011 Attribute und Zustand Die Attribute eines Objektes legen die Eigenschaften und Zustände des Objektes fest. Der Zustand eines Objektes ist die Gesamtheit der Attribute eines Objektes plus ihre momentanen Werte. F-CB 2000 PKW DA-XY 123 Typ Farbe km/h 39 Grundlagen der Programmierung II DBIS - SS2011 Methoden Methoden • sind auf einem Objekt ausführbare Operationen. • werden durch eintreffende Nachrichten ausgelöst. • können den Objekt-Zustand verändern. • werden innerhalb einer Klasse definiert. Es gibt mehrere Arten von Methoden: Modifikation ändert Zustand Selektion liest Zustand Iteration wiederholte Modifikation oder Selektion Konstruktion kreiert ein Objekt und initialisiert Zustand Destruktion löscht Zustand und zerstört ein Objekt 40 Grundlagen der Programmierung II DBIS - SS2011 Verhalten eines Objektes Das Verhalten eines Objektes • sind die Aktionen und Reaktionen des Objektes. • wird durch die Methoden der Klasse des Objekts realisiert. • wird durch den Aufruf der Methoden verursacht. F-CB 2000 PKW DA-XY 123 Typ Farbe km/h VW Rot 60 BMW Gelb 100 beschleunigen() bremsen() 41 Grundlagen der Programmierung II DBIS - SS2011 Vererbung (Inheritance) in der OOP Die Unterklasse erbt alle Merkmale der Oberklasse und ist ihr damit ähnlich. Sie kann die geerbten Attribute und Methoden unverändert benutzen oder neu definieren (überschreiben). Eine Unterklasse besitzt im Allgemeinen zusätzliche Attribute und Methoden. Sie ist eine Spezialisierung, Konkretisierung oder Erweiterung ihrer Oberklasse. Eine Unterklasse kann selbst wieder Oberklasse sein. Dadurch ergibt sich eine Baumstruktur, die so genannte Vererbungsstruktur oder Klassenhierarchie. Die Vererbung ist transitiv. 42 Grundlagen der Programmierung II DBIS - SS2011 Beispiel für eine Klassenhierarchie (1) Kraftfahrzeug Typ, Farbe, kmh beschleunigen() bremsen() Kraftfahrzeug ist eine Klasse mit den drei Attributen Typ, Farbe und kmh und den beiden Methoden beschleunigen() und bremsen(). Es gibt aber auch „spezielle“ Kraftfahrzeuge, die ein zusätzliches, gemeinsames Merkmal haben. 43 Grundlagen der Programmierung II DBIS - SS2011 Beispiel für eine Klassenhierarchie (2) Kraftfahrzeug Typ, Farbe, kmh beschleunigen() bremsen() LKW anhängen() LKW ist eine Unterklasse von Kraftfahrzeug. Sie erbt alle Eigenschaften von ihrer Oberklasse, hat aber die zusätzliche Methode anhängen(). Es gibt auch Kraftfahrzeuge, die keine LKWs sind. 44 Grundlagen der Programmierung II DBIS - SS2011 Beispiel für eine Klassenhierarchie (3) Kraftfahrzeug Omnibus Stehplätze PKW Typ, Farbe, kmh beschleunigen() bremsen() LKW anhängen() Omnibus, PKW und LKW sind jeweils Unterklassen der Klasse Kraftfahrzeug. LKW hat eine zusätzliche Methode, Omnibus ein zusätzliches Attribut. Die drei Unterklassen erben alle Merkmale der Oberklasse Kraftfahrzeug. Aber es gibt es auch mehrere, verschiedene Arten von PKWs, die besondere Merkmale haben. 45 Grundlagen der Programmierung II DBIS - SS2011 Beispiel für eine Klassenhierarchie (4) Kraftfahrzeug Omnibus Stehplätze Limousine PKW Typ, Farbe, kmh beschleunigen() bremsen() LKW anhängen() Cabriolet Verdeck öffnen() Cabriolet und Limousine können zusätzliche Methoden bzw. Attribute haben. Beide erben alle Merkmale von PKW und damit auch von Kraftfahrzeug. 46 Grundlagen der Programmierung II DBIS - SS2011 Beispiel für eine Klassenhierarchie in UML 47 Grundlagen der Programmierung II DBIS - SS2011 Mehrfach-Vererbung Fahrzeug Typ, Farbe, kmh beschleunigen() bremsen() Schiff PKW LKW anhängen() AmphibienFahrzeug Mehrfach-Vererbung ist in Java nicht möglich … in Python schon! 48 Grundlagen der Programmierung II DBIS - SS2011 Identität eines Objektes • Objekte sind mittels Referenz eindeutig identifizierbar. • Objekte haben eine Identität und meistens einen oder mehrere Namen bzw. Referenzen. • Der Zustand eines Objektes kann sich ändern, nicht seine Identität. • Gleicher Zustand (also der gleiche Wert) bedeutet nicht gleiche Identität! Dies ist besonders bei Vergleichsoperationen zu beachten. … das ist bei Haskell anders! 49 Grundlagen der Programmierung II DBIS - SS2011 Identität eines Objektes deinAuto meinAuto Referenz 1 keine Referenzen Referenz 2 Objekt mit zwei Namen und zwei Referenzen Objekt ohne Namen Ein Objekt ohne Namen besitzt zwar eine Identität, ist aber nicht (mehr) erreichbar … 50 Grundlagen der Programmierung II DBIS - SS2011 Lebenszeit von Objekten Die Lebenszeit eines Objektes ist die Zeit zwischen • der Kreierung des Objektes und • dem Löschen des Objektes (bzw. der Löschung der letzten Referenz) mit anschließender Garbage Collection. Garbage Collection Java gibt automatisch den Speicher unbenutzter Objekte frei! Das expliziete setzen von Referenzen auf NULL unterstützt die Garbage Collection. Mit System.gc() kann man die Garbage Collection explizit anstoßen. 51 Grundlagen der Programmierung II DBIS - SS2011 Beispiel JavaScript 52 Grundlagen der Programmierung II DBIS - SS2011 JavaScript = Java ??? • Sieht aus wie Java - ABER • wird anders verarbeitet (reine Skript-Sprache), • bietet nicht so viele Möglichkeiten wie Java, wird mit HTML vermischt und dient meist nur zur Erweiterung der Web-Seiten-Funktionalität • dynamisch Typisiert • läuft in einer Art Sandbox (Sandkasten) – kein direkter Dateizugriff oder Aufruf von Programmen • … also JavaScript ≠ Java 53 Grundlagen der Programmierung II DBIS - SS2011 Applets Beispiel: package simpleapplet; import java.awt.Graphics; class HelloWorld extends java.applet.Applet { public void paint (Graphics g) { g.drawString(“Hallo Welt!”, 10, 10); } } 54 Grundlagen der Programmierung II DBIS - SS2011 Einbindung des Applet in HTML <html> <body> <applet codebase = "." code = "simpleapplet.HelloWorld.class" width = "400" height = "300" > </applet> </body> </html> 55 Grundlagen der Programmierung II DBIS - SS2011 Ausführen des Applets 56 Grundlagen der Programmierung II DBIS - SS2011 Arten von Java-Programmen Applikationen: • „normale“ Programme (vergleichbar mit anderen Sprachen wie Modula-2, C) • eigenständig und ohne Sicherheitseinschränkungen • eine auszuführende Klasse muss eine main-Methode enthalten • Aufruf durch den Java-Interpreter java Applets: • Java-Programme für den Einsatz in einem WWW-Browser • Einbettung in eine HTML-Seite durch <applet>- oder <object>-Tag • keine main-Methode erforderlich; Erbt von java.applet.Applet – Methoden: init(), start(), paint(), stop(), … • Sandbox-Prinzip / Sicherheitseinschränkungen, z.B. können keine Programme gestartet und es kann nicht auf Dateien zugegriffen werden • nutzt JRE des Browsers Server-Anwendungen: • Servlets (Java Server Pages), Enterprise Java Beans 57 Grundlagen der Programmierung II DBIS - SS2011 Kommentare in Java In Java gibt es drei Möglichkeiten zur Kommentierung: JAVA Erklärung Python // Kommentar Alle Zeichen nach dem „//“ werden ignoriert. für „normale“ einzeilige Kommentare. # Kommentar /* Kommentar über mehrere Zeilen */ Alle Zeichen zwischen dem „/*“ und dem „*/“ werden ignoriert. auskommentieren von Programmteilen. Die Schachtelung der „Kommentarklammern“ ist nicht erlaubt. """ Kommentar über mehrere Zeilen """ Alle Zeichen zwischen dem „/**“ und dem „*/“ werden ignoriert. für das javadoc-Programm des JDK. Mit ihrer Hilfe wird eine einfache Online-Dokumentation erstellt. pythondoc /** * javadoc-Kommentar * @since JDK1.0 */ 58 Grundlagen der Programmierung II (ein String) DBIS - SS2011 Javadoc Beispiel /** * Returns an Image object that can then be painted on the screen. * The url argument must specify an absolute {@link URL}. The name * argument is a specifier that is relative to the url argument. * <p> * This method always returns immediately, whether or not the * image exists. When this applet attempts to draw the image on * the screen, the data will be loaded. The graphics primitives * that draw the image will incrementally paint on the screen. * * @param url an absolute URL giving the base location of the image * @param name the location of the image, relative to the url argument * @return the image at the specified URL * @see Image */ public Image getImage(URL url, String name) { try { return getImage(new URL(url, name)); } catch (MalformedURLException e) { return null; } } DBIS - SS2011 Java - API - Dokumentation http://download.oracle.com/javase/6/docs/api/ 60 Grundlagen der Programmierung II DBIS - SS2011 Javadoc Homepage: http://java.sun.com/j2se/javadoc/ Aufruf (unter dem „bin“-Ordner des JDK): javadoc [ options ] [ packagenames ] [ sourcefilenames ] [ -subpackages pkg1:pkg2:... ] [ @argfiles ] Tags @author; {@code}; {@docRoot}; @deprecated; @exception; {@inheritDoc}; {@link}; {@linkplain}; {@literal}; @param; @return; @see; @serial; @serialData; @serialField; @since; @throws; {@value}; @version 61 Grundlagen der Programmierung II DBIS - SS2011