OOP und JAVA (Vorlesung 11-13) Modul: Programmierung B-PRG Grundlagen der Programmierung II Prof. Dot.-Ing. Roberto Zicari unter Mitarbeit von N. Hoebel und C. Schefels Professur für Datenbanken und Informationssysteme (FB 12) 27.06 / 04.07 / 11.7 2007 1 Teil 1 - Java Grundlagen Klassen, Attribute Methoden 2 Java 2 - 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 3 Grundlagen der Programmierung II DBIS - SS2007 Schlagwörter • „Objektorientiert“ • „Einfach“ • „Verteilt“ • „Sicher“ • „Dynamisch“ • „Robust“ • „Multithreaded“ • „Interpretiert“ & „Plattformunabhängig“ 4 Grundlagen der Programmierung II DBIS - SS2007 Java 2 - Varianten • Micro Edition (J2ME) für eingebettete Systeme, PDAs, Smart Phones etc. • Standard Edition (J2SE) „normales“ JDK - Java Development Kit • Enterprise Edition (J2EE) EJBs, Servlets Ab der Version Java 1.2 spricht man von Java 2! Die zur Zeit neuste Version ist Java 1.6 und ist bekannt als Edition 6, ‘Mustang‘-Release. Online: Die Varianten können heruntergeladen werden unter: http://java.sun.com 5 Grundlagen der Programmierung II DBIS - SS2007 JDK Paket Das JDK enthält Compiler, Interpreter, Debugger und Klassenbibliotheken, aber keinen Editor ! Verzeichnisstruktur \jdk \docs \bin \demo \include \lib \src 6 Stammverzeichnis Dokumentation in HTML Compiler und Tools Beispieldateien Dateien für native Methoden Bibliotheksdateien Quellcode der Bibliotheken Grundlagen der Programmierung II DBIS - SS2007 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 Ausführung Ergebnis Nr. i Maschinencode Programm (Quellcode) • Interpreter (bei Basic, Lisp usw.): 10 INPUT n$ 20 FOR i=1 TO 10 30 PRINT “Hi”,n$ 40 NEXT Anweisung Nr. i 7 Interpreterer 00010110010 11001001001 Maschinencode Grundlagen der Programmierung II DBIS - SS2007 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 8 Grundlagen der Programmierung II DBIS - SS2007 Plattformunabhängigkeit von Java Eigenschaften der Java Virtual Machine • Die Virtuelle Maschine ist eine Art „Universaltranslater“. (vgl. mit Raumschiff Enterprise) • Der Bytecode ist der „Maschinencode“ der Virtuellen Maschine. von der Virtuellen Maschine direkt ausführbar • Die Virtuelle Maschine ist für alle gängigen Systeme verfügbar. (Windows, Solaris, Linux usw.) • Die Virtuelle Maschine ist z.B. auch in WWW-Browsern integriert. Einsatz von sog. „Applets“ möglich. 9 Grundlagen der Programmierung II DBIS - SS2007 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 das <applet>- oder das <object>-Tag • nicht eigenständig • keine main-Methode erforderlich; spezielle Schnittstelle • Sandbox-Prinzip / Sicherheitseinschränkungen • JRE (Java Runtime Environment) Server-Anwendungen: • Servlets (Java Server Pages), Enterprise Java Beans 10 Grundlagen der Programmierung II DBIS - SS2007 Dateinamen (Endung) • Quellcode auf *.java • Compilierter Code auf *.class • case sensitive Java unterscheidet zwischen Groß- und Kleinschreibung (auch im Quellcode)! 11 Grundlagen der Programmierung II DBIS - SS2007 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!”); } } 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!“ 12 Grundlagen der Programmierung II DBIS - SS2007 Entwicklungsprozess Problem, die auftreten könnten beim Compilieren • die Umgebungsvariablen PATH und CLASSPATH müssen gesetzt werden. Z.B. durch path=%path%;c:\jdk\bin set CLASSPATH=c:\jdk\lib – Win95/98 in der Datei autoexec.bat – WinNT in der Systemsteuerung -> System -> Umgebung – WinXP in der Systemsteuerung -> System -> Erweitert -> Umgebungsvariablen - Linux-Bash: export=$PATH:/usr/share/jdk 13 Grundlagen der Programmierung II DBIS - SS2007 Entwicklungsprozess • bei der Verwendung von Paketen (package) muß der Compiler und der Interpreter über dem Verzeichnis aufgerufen werden. c:\javacode> javac c:\javacode\paket1\datei.java c:\javacode> java paket1.datei das Paket (=Verzeichnis) ist hier paket1. 14 Grundlagen der Programmierung II DBIS - SS2007 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; } 15 Grundlagen der Programmierung II DBIS - SS2007 Klassen, Methoden und Variablen Objekt student1 erzeugen: Student student1 = new Student(); Methode aufrufen und Rückgabewert speichern: int semanzahl = student1.getSemester(); Konstruktor: Student() { … } Student(int semester) { … } 16 Grundlagen der Programmierung II DBIS - SS2007 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); } } 17 Grundlagen der Programmierung II DBIS - SS2007 Einbindung des Applet in HTML <html> <body> <applet codebase = "." code = "simpleapplet.HelloWorld.class" width = "400" height = "300" > </applet> </body> </html> 18 Grundlagen der Programmierung II DBIS - SS2007 Ausführen des Applets 19 Grundlagen der Programmierung II DBIS - SS2007 Java Entwicklungsumgebungen Eine Entwicklungsumgebung (Integrated Development Environment – IDE) hilft dem Entwickler beim Erstellen und Debuggen von Programmen. Beispiele für Java Entwicklungsumgebungen: • Web Sphere von IBM (basiert auf Eclipse) • JBuilder von Borland • Sun ONE Studio von Sun Microsystems (basiert auf NetBeans) • ... und viele mehr! 20 Grundlagen der Programmierung II DBIS - SS2007 OpenSource: Eclipse 3.1 21 Grundlagen der Programmierung II DBIS - SS2007 Eclipse • Eclipse 3.x unter: www.eclipse.org • PlugIn Omondo für UML www.omondo.de „Eclipse UML free Edition“ !!! 22 Grundlagen der Programmierung II DBIS - SS2007 Java - API - Dokumentation http://java.sun.com/j2se/1.5.0/docs/api/ 23 Grundlagen der Programmierung II DBIS - SS2007 Java – API: Klasse Applet 24 Grundlagen der Programmierung II DBIS - SS2007 Java – API: Klasse Applet 25 Grundlagen der Programmierung II DBIS - SS2007 Java – API: Klasse Applet 26 Grundlagen der Programmierung II DBIS - SS2007 Literatur zu Java • Java Homepage Sun: http://java.sun.com • Java API Specification: http://java.sun.com/javase/6/docs/api/ • Java Compiler JDK 5.0 und Virtuelle Maschine JRE 5.0: http://java.sun.com/javase/downloads/index.jsp • Java Tutorial: http://java.sun.com/developer/onlineTraining/new2java/index.html • Horstmann, Cornell: "Core Java 2, Band 1", Addison-Wesley • Java News: http://www.onjava.com/ • Reading: „Thinking in Java 3“ von Bruce Eckel !!! 27 Grundlagen der Programmierung II DBIS - SS2007 Teil 2 – OO Einführung in die Objektorientierung 28 Objektorientierung Das Objektmodell beschreibt „die Welt“ als eine Menge interagierender Objekte. 29 Grundlagen der Programmierung II DBIS - SS2007 Kurze Wiederholung von: • Objekt • Klasse • Attribute • Methoden • Identität eines Objektes • Lebenszeit eines Objektes • Vererbung 30 Grundlagen der Programmierung II DBIS - SS2007 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. 31 Grundlagen der Programmierung II DBIS - SS2007 Klasse Eine Klasse (Typ, Schablone) ist • die Spezifikation einer Menge von Objekten mit gleicher Struktur und gleichem Verhalten („Schablone“). • eine Realisierung eines abstrakten Datentyps (ADT). • ein benutzerdefinierter Typ in einer objektorientierten Programmiersprache. • eine zur Compilezeit des Programms notwendige Typspezifikation. 32 Grundlagen der Programmierung II DBIS - SS2007 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 33 Grundlagen der Programmierung II DBIS - SS2007 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 34 Grundlagen der Programmierung II DBIS - SS2007 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 35 Grundlagen der Programmierung II DBIS - SS2007 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() 36 Grundlagen der Programmierung II DBIS - SS2007 Identität eines Objektes • Objekte sind mittels Referenz eindeutig identifizierbar. • Objekte haben eine Identität und meistens einen oder mehrere Namen bzw. Referenzen. • Objekte belegen einen Teil des Speichers. • 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. 37 Grundlagen der Programmierung II DBIS - SS2007 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 Garbage Collection. 38 Grundlagen der Programmierung II DBIS - SS2007 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! Hat man die Referenzen vieler Objekte auf NULL gesetzt, kann man mit System.gc() der Virtuellen Maschine den Einsatz des GarbageCollectors empfehlen. System.gc() sollte jedoch nur sehr sparsam verwendet werden! 39 Grundlagen der Programmierung II DBIS - SS2007 Vererbung (Inheritance) in der OOP Eigenschaften der Vererbung von einer Oberklasse zu seinen Unterklassen Die Unterklasse hat 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 und Erweiterung ihrer Oberklasse. Eine Unterklasse befindet sich auf einem niedrigeren Abstraktionsgrad als die Oberklasse. Die Vererbung ist transitiv. Eine Unterklasse kann selbst wieder Oberklasse sein. Dadurch ergibt sich eine Baumstruktur, die so genannte Vererbungsstruktur oder Klassenhierarchie. 40 Grundlagen der Programmierung II DBIS - SS2007 Ein Beispiel für die Vererbung aus der Praxis... 41 Grundlagen der Programmierung II DBIS - SS2007 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. 42 Grundlagen der Programmierung II DBIS - SS2007 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. 43 Grundlagen der Programmierung II DBIS - SS2007 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. 44 Grundlagen der Programmierung II DBIS - SS2007 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. Eine solche Hierarchie lässt sich beliebig fortsetzen. 45 Grundlagen der Programmierung II DBIS - SS2007 Mehrfach-Vererbung Fahrzeug Typ, Farbe, kmh beschleunigen() bremsen() Schiff PKW LKW anhängen() AmphibienFahrzeug Mehrfach-Vererbung ist in Java nicht möglich! 46 Grundlagen der Programmierung II DBIS - SS2007 Study By Yourself! Beschäftigen Sie sich insbesondere mit allen Stellen, die im Skript mit diesem Symbol markiert sind. 47 Grundlagen der Programmierung II DBIS - SS2007 Teil 3 - UML Einführung in UML Anwendungsfalldiagramme 48 Was ist ein Modell? • Ein Modell ist eine Vereinfachung der Realität. • Wir könne ein komplexes System in seiner Gesamtheit nicht erfassen. Wir bauen deshalb Modelle, um das zu entwickelnde System besser zu verstehen. • Prinzip „teile und herrsche“ 49 Grundlagen der Programmierung II DBIS - SS2007 Warum modellieren? Beispiel: Der Bau einer Hundehütte Man braucht nur einen Hammer, Nägel und ein paar Bretter, baut diese zusammen und der Hund ist glücklich. Kein Modellieren nötig! 50 Grundlagen der Programmierung II DBIS - SS2007 Warum modellieren? Beispiel: Der Bau eines Hochhauses • Ohne Planung und Arbeitsteilung unmöglich • Viele Auflagen • Sehr hohe Kosten • Ansprüche der Mieter Modellieren unumgänglich! 51 Grundlagen der Programmierung II DBIS - SS2007 Ziele der Modellierung • Modelle helfen, ein System zu visualisieren, so wie es ist oder wie wir es wünschen. • Modelle ermöglichen uns, die Struktur oder das Verhalten eines Systems zu spezifizieren. • Modelle liefern uns eine Schablone, die uns beim Konstruieren eines Systems anleitet. • Modelle dokumentieren die getroffenen Entscheidungen. UML (Unified Modeling Language) ist eine Standardsprache zum Entwerfen von Softwaremodellen. 52 Grundlagen der Programmierung II DBIS - SS2007 Modellieren mit UML • UML ermöglicht objektorientiertes Modellieren. • Da UML standardisiert ist, können die Modelle von anderen Anwendern verstanden werden. • UML ermöglich „Forward-Engineering“: Aus einem UML-Modell kann der Code einer Programmiersprache erzeugt werden (Java, C++...). • UML ermöglich „Reverse-Engineering“: Aus dem Code einer Implementierung kann ein entsprechendes UML-Modell erzeugt werden. 53 Grundlagen der Programmierung II DBIS - SS2007 Modell-Typen in UML Es ist sinnvoll, für die verschiedenen Sichtweisen auf ein System unterschiedliche Modelle zu verwenden. Programmierer Hier: Statiker Kunden Klassendiagramm 54 Anwendungsfalldiagramm Grundlagen der Programmierung II DBIS - SS2007 Sichtweisen auf das System In UML können verschiedene Sichtweisen auf ein System anschaulich modelliert werden. Für den Anwender (Kunde) existiert das Anwendungsfalldiagramm. Das Klassendiagramm repräsentiert ein Model für den Code eines Systems und ist somit sehr hilfreich für den Programmierer. Aber es ist sehr technisch und deshalb nicht für alle Anwender geeignet. 55 Grundlagen der Programmierung II DBIS - SS2007 Multiple Diagramme in UML 2.0 56 Grundlagen der Programmierung II DBIS - SS2007 Einführendes Beispiel • Wir wollen ein einfaches Modell für eine Flaschen-Pfandmaschine erstellen. • Die Maschine soll eine Flasche aufnehmen, die Flasche prüfen und falls diese akzeptiert wurde, den Pfand ausgeben. • Beispiel für eine reale Pfandmaschine z.B. im Aldi-Supermarkt. 57 Grundlagen der Programmierung II DBIS - SS2007 Flaschen-Pfandmaschine Grundlegende Funktionsweise: Leergut Kunde 58 Geld oder Bon Grundlagen der Programmierung II Pfandmaschine DBIS - SS2007 Klassendiagramm Pfandmaschine geld: int zahle(betrag: int) Flasche Flaschen-Pfandmaschine anzFlaschen: int nimm_Flasche() 59 0...* 0,1 groesse: float nimmt auf Grundlagen der Programmierung II DBIS - SS2007 Anwendungsfalldiagramm Beispiel Pfandmaschine Pfandmaschine Technikerin Kunde 60 Grundlagen der Programmierung II DBIS - SS2007 Zustandsdiagramm (START) bereit (ZUSTAND) Flasche am Sensor Flasche aufnehmend Flasche abgearbeitet Fehler aufgetreten Fehler aufgetreten Fehler behoben (ÜBERGANG) (ENDE) Fehler nicht behebbar 61 Fehler bearbeitend Grundlagen der Programmierung II DBIS - SS2007 Sequenzdiagramm Pfandmaschine Flaschenmechanik ZEIT nimmEineFlasche() habeFlasche() (acknowledgement) 62 Grundlagen der Programmierung II DBIS - SS2007 Informationen zu UML UML wurde aus mehreren Modellierungssprachen von Grady Booch, Jim Rumbaugh und Ivar Jacobson entwickelt und ist seit dem Jahr 1997 von der OMG (Object Management Group) standardisiert. Momentan ist die Version 2.1.1 aktuell: http://www.omg.org/technology/documents/formal/uml.htm Einige interessante Links zu UML: • UML Resource Page: www.uml.org • Rational: http://www-306.ibm.com/software/rational/uml/ • OMG Homepage: www.omg.org 63 Grundlagen der Programmierung II DBIS - SS2007 Literatur zu OO und UML • Heide Balzert: „Lehrbuch der Objektmodellierung“, Spektrum AV • B. Oestereich, C. Weiss, : „Objektorientierte Geschäftsprozessmodellierung mit der UML“ dpunkt.verlag • Grady Booch, Jim Rumbaugh, Ivar Jacobson: „Das UML Benutzerhandbuch“, Addison-Wesley • Grechenig, Zuser: „SE mit UML und dem Unified Process“, Pearson 64 Grundlagen der Programmierung II DBIS - SS2007 Tools für Diagramme in UML 2 Übersicht 100 UML Tools: • www.jeckle.de/umltools.htm Generierung von Code aus UML: • z.B. Eclipse Omondo www.omondo.de 65 Grundlagen der Programmierung II DBIS - SS2007 Study By Yourself! Beschäftigen Sie sich insbesondere mit allen Stellen, die im Skript mit diesem Symbol markiert sind. 66 Grundlagen der Programmierung II DBIS - SS2007