Grundbegriffe der objektorientierten Programmierung Übersicht Objektorientierte Programmiertechnik Kapitel 1 – Grundbegriffe der objektorientierten Programmierung Basis ist das Skript von Prof. Dr. Oliver Lazar 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 1 Grundbegriffe der objektorientierten Programmierung Übersicht 1. Grundbegriffe der Programmierung Inhalte 2. Einfache Beispielprogramme 3. Datentypen und Variablen Grundbegriffe der OO-Programmierung 4. Ausdrücke und Operatoren 5. Kontrollstrukturen Objektorientierte Konzepte I 6. Blöcke und Methoden 7. Klassen und Objekte UML 8. Vererbung und Polymorphie 9. Pakete Objektorientierte Konzepte II 10. Ausnahmebehandlung 11. Schnittstellen (Interfaces) Einführung in der Programmiersprache Java 12. Geschachtelte Klassen 13. Ein-/Ausgabe und Streams 14. Applets / Oberflächenprogrammierung 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 2 Grundbegriffe der objektorientierten Programmierung Das erste Programm Übersetzen (Kompilieren) des Programms mit javac Der Interpreter java verlangt den Klassennamen, nicht den Dateinamen Java ist case sensitive In Java kann nur objektorientiert programmiert werden 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 3 Grundbegriffe der objektorientierten Programmierung Vom Problem zum Programm I Bestandteile und Eigenschaften von Algorithmen Eine Menge von Objekten Eine Menge von Operationen Ein definierter Anfangszustand Ein gewünschter Endzustand Programm Besteht aus einer Reihe einzelner Anweisungen, die sequenziell ausgeführt werden Abarbeitungsreihenfolge wird auch als Kontrollfluss bezeichnet Kontrollstrukturen steuern Anweisungen Bei sequenziellen Abläufen gibt es Kontrollstrukturen für Selektion, Iteration und Sequenz Unter einer Kontrollstruktur versteht man eine Anweisung, welche die Abarbeitungsreihenfolge von Anweisungen beeinflusst 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 4 Grundbegriffe der objektorientierten Programmierung Vom Problem zum Programm II Grafische Darstellung einer Verzweigung Sequenz mit single entry und single exit nur 1 Eingang Anweisung nur 1 Ausgang Anweisung ein zweiter Ausgang bzw. Eingang ist nicht möglich 4. März 2015 Anweisung Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 5 Grundbegriffe der objektorientierten Programmierung Nassi-Shneidermann-Diagramme I Natürliche Sprache vs. Formale Sprache Nassi-Shneiderman-Diagramm zur Visualisierung Strukturierte Programmierung: Zerlegen eines Gesamtproblems in Teilprobleme, z.B.: sin(0,1)*(34+sqrt(16))=> 0,0017*(34+sqrt(16))=> 0,0017*(34+4)=> 0,0017*38=> 0,066 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 6 Grundbegriffe der objektorientierten Programmierung Nassi-Shneidermann-Diagramme II V1 Blockname V2 Boolescher Ausdruck TRUE V1 c1 FALSE V1 Arithmetischer Ausdruck cn-1 4. März 2015 TRUE V2 c2 V1 Boolescher Ausdruck V2 .... Vn-1 cn Vn Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 7 Grundbegriffe der objektorientierten Programmierung Nassi-Shneidermann-Diagramme III Solange Bedingung V V V Solange Bedingung BREAK V1 Bedingung TRUE BREAK V2 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 8 Grundbegriffe der objektorientierten Programmierung Zeichen Ein Zeichen ist ein von anderen Zeichen unterscheidbares Objekt, welches in einem bestimmten Zusammenhang eine definierte Bedeutung trägt. Von einem Alphabet spricht man, wenn der Zeichenvorrat eine strenge Ordnung aufweist. Im Rechner werden Zeichen codiert dargestellt, z.B. als ASCII (American Standard Code for Information Interchange) Zeichen 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 9 Grundbegriffe der objektorientierten Programmierung Variable Eine Variable ist eine benannte Speicherstelle. Über den Variablennamen kann der Programmierer auf die entsprechende Speicherstelle zugreifen. Speicherstellen können nicht direkt physikalisch adressiert werden. Besitzt in Java drei Kennzeichen: Name, Datentyp/Typ Wert/Inhalt Bildhafter Vergleich: Schublade mit Beschriftung (Name), die nur bestimmte Dinge aufnehmen kann (Typ) und enthält irgendwas (Inhalt). 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 10 Grundbegriffe der objektorientierten Programmierung Datentypen I Höhere Programmiersprachen sind streng typisiert Einfache Datentypen (int) bedeutet, das sein Wert atomar ist Standardtypen werden vom Compiler zur Verfügung gestellt int: in Java 32 Bit, Wertebereich von -231 bis +231-1 float: reelle Zahlen, Darstellung als Exponentialzahl (Mantisse * Basis Exponent). Mit höherer Rechengenauigkeit ist der Datentyp double. 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 11 Grundbegriffe der objektorientierten Programmierung Datentypen II Operationen auf einfachen Datentypen Operator Operanden Ergebnis Vorzeichenoperatoren +, - (unär) int int Binäre arithmetische Operatoren +, -, *, /, % (int, int) int Vergleichsoperatoren ==, <, <=, >, >=, != (int, int) boolean (Wahrheitswert) Wertzuweisungsoperator = int int 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 12 Grundbegriffe der objektorientierten Programmierung Datentypen III Datentypen können auch selbst definiert werden, z.B. zusammengesetzte Datentypen Erweiterung durch Hinzufügen von Methoden zu reinen Daten Klasse 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 13 Objektorientierte Konzepte I Übersicht 1. Grundbegriffe der Programmierung Inhalte 2. Einfache Beispielprogramme 3. Datentypen und Variablen Grundbegriffe der OO-Programmierung 4. Ausdrücke und Operatoren 5. Kontrollstrukturen Objektorientierte Konzepte I 6. Blöcke und Methoden 7. Klassen und Objekte UML 8. Vererbung und Polymorphie 9. Pakete Objektorientierte Konzepte II 10. Ausnahmebehandlung 11. Schnittstellen (Interfaces) Einführung in der Programmiersprache Java 12. Geschachtelte Klassen 13. Ein-/Ausgabe und Streams 14. Applets / Oberflächenprogrammierung 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 14 Objektorientierte Konzepte I Objekte I Schnelleinstieg Quelle: Skript Prof. Dr. O. Lazar 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 15 Objektorientierte Konzepte I Objekte II Schnelleinstieg Quelle: Skript Prof. Dr. O. Lazar 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 16 Objektorientierte Konzepte I Objekte III Schnelleinstieg Quelle: Skript Prof. Dr. O. Lazar 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 17 Objektorientierte Konzepte I Objekte IV Schnelleinstieg Klasse Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte. Sie ist eine Vorlage (Schablone, Template) für die Objekte. Objekt Ein Objekt ist ein Exemplar (Instanz, konkrete Ausprägung) einer Klasse, das sich entsprechend der Definition der Klasse verhält. 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 18 UML Übersicht 1. Grundbegriffe der Programmierung Inhalte 2. Einfache Beispielprogramme 3. Datentypen und Variablen Grundbegriffe der OO-Programmierung 4. Ausdrücke und Operatoren 5. Kontrollstrukturen Objektorientierte Konzepte I 6. Blöcke und Methoden 7. Klassen und Objekte UML 8. Vererbung und Polymorphie 9. Pakete Objektorientierte Konzepte II 10. Ausnahmebehandlung 11. Schnittstellen (Interfaces) Einführung in der Programmiersprache Java 12. Geschachtelte Klassen 13. Ein-/Ausgabe und Streams 14. Applets / Oberflächenprogrammierung 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 19 UML Problem- und Lösungsbereich Zu Beginn eines Projektes befindet man sich im Problembereich (Anwendungsbereich) also in der Begriffswelt des Kunden Vorteil: der Kunde versteht die Projektunterlagen Kunde und Entwickler sprechen dieselbe Sprache: Man versteht sich! Systemanalyse Untersuchung der Geschäftsprozesse Abbildung der Geschäftsprozesse auf Objekte 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 20 UML Systemanalyse Mittels Systemanalyse wird der Problembereich (die Begriffswelt des Kunden) zerlegt Eine Klasse entspricht einem Typ eines Gegenstandes der realen Welt Der Ansatz der Objektorientierung basiert darauf, Objekte der realen Welt mit Hilfe softwaretechnischer Mittel abzubilden Beim Systementwurf betritt der Entwickler den Lösungsbereich Klassen stellen Baupläne für Objekte dar. Klassen sind die Datentypen, die Objekte die Variablen (Instanzen) dieser Datentypen. Die Objekte werden gemäß den in den Klassen abgelegten Bauplänen erzeugt. 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 21 UML Unified Modelling Language Unified Modelling Language (UML) ist eine graphische Modellierungssprache zur Spezifikation, Konstruktion und Dokumentation von Teilen von Software und anderen Systemen Sie wird von der Object Management Group (OMG) entwickelt und ist sowohl von ihr als auch von der ISO standardisiert UML ist heute eine der dominierenden Sprachen für die Modellierung von Softwaresystemen. UML definiert 14 verschiedene Diagrammarten Anwendungsfalldiagramm Interaktionsdiagramme (Sequenzdiagramm) Klassendiagramm Zum Verständnis und zur Darstellung von Geschäftsprozessen eignen sich Anwendungsfalldiagramme 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 22 UML Use Case UML – Anwendungsfalldiagramm (use case diagram) Anwendungsfälle dienen bei der Anforderungsermittlung zur Repräsentation extern sichtbarer Funktionalität Anwendungsfallmodellierung ist eine rudimentäre und abgewandelte Form von Datenflussmodellierung, die in der objektorientierten Analyse (OOA) verwendet wird Akteure repräsentieren Rollen, in denen Benutzer und externe Systeme dem System gegenübertreten Anwendungsfall (use case, Geschäftsprozess) repräsentiert Folge von Interaktionen, die den beteiligten Akteuren einen gewissen Nutzen bringen Anwendungsfallmodell: Menge aller Anwendungsfälle. Beschreibt die Funktionalität des Systems aus Sicht des Benutzers auf sehr abstrakter Ebene vollständig 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 23 UML Akteure Akteure 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 24 UML Anwendungsfall Anwendungsfall (AF) Ein Anwendungsfall repräsentiert eine Funktionalitätsklasse, die vom System erbracht wird. Für jeden Anwendungsfall wird eine textuelle Anwendungsfallbeschreibung erstellt (siehe nächste Folie) Zusätzlich wird ein UML- AF-Diagramm erstellt, um den Überblick zu erleichtern. Beachte: Die Anwendungsfallbeschreibungen sind wichtiger als das AF-Diagramm ! 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 25 UML Extends Die <<extends>>-Beziehung <<extends>>-Beziehung dient der Repräsentation von Ausnahmefällen und selten aufgerufenen Sonderfällen. Diese werden als eigene AFs herausgezogen, um die Beschreibung klarer zu machen. Ihr Ereignisfluss ersetzt ggf. den Ereignisfluss des erweiterten AFs Wenn Systemfehler Erweiternde Anwendungsfälle können auch mehr als einen AF erweitern. Der <<extends>>-Pfeil zeigt vom erweiternden zum Kein Wechselgeld erweiterten AF Beziehung des Akteurs zum erweiternden AF wird nicht explizit eingezeichnet 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 26 UML Includes Die <<includes>>-Beziehung Die <<includes>> -Beziehung repräsentiert Teilverhalten, das aus dem AF herausgezogen wird Zweck: gleiche Beschreibung des Teilverhaltens bei anderen AFs wiederverwenden Dient NICHT zur Beschreibung von Ausnahmefällen Abbruch Der <<includes>>-Pfeil zeigt vom benutzenden AF auf den Benutzten. Hinweis anzeigen 4. März 2015 Kein Wechselgeld Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik Bestätigen und Neustart 27 UML Generalisierung Generalisierungsbeziehung Zwischen Anwendungsfällen und zwischen Akteuren können Generalisierungsbeziehungen spezifiziert werden Notation dafür durch Pfeil mit unausgefülltem Dreieck als Spitze vom spezielleren zum generelleren AF/Akteur (analog zu Vererbung in Klassendiagrammen ...) Speziellerer AF (bzw. Akteur) kann in der Rolle des generelleren AFs (bzw. Akteurs) an allen Beziehungen des generelleren AFs (bzw. Akteurs) teilnehmen, ohne, dass dies explizit eingezeichnet wird (Vermeiden von Redundanz). 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 28 UML Systemgrenze Systemgrenze AF-Modell dient insbesondere auch der Abgrenzung des Systems: Was tut das System und was nicht ? Systemgrenze wird als Kasten gezeigt. Akteure stehen immer außerhalb, AFs immer innerhalb der Systemgrenze. 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 29 UML UML Zusammenfassung Anwendungsfalldiagramm: Zusammenfassung Zentrales Instrument beim Einstieg in die Anforderungsanalyse (Requirements Engineering) Graph mit folgenden Knoten: Akteur: (actor) Rolle eines Benutzers im System (ggf. mehrere Rollen pro Benutzer) Ausgangspunkt für Bestimmung der Anwendungsfälle auch nicht-menschliche Akteure möglich (z.B. anderes System) dargestellt als Strichmännchen Anwendungsfall: dargestellt durch Ellipse Kanten: ungerichtete Kante zwischen Akteur und zugehörigem Anwendungsfall gerichtete Kante (gestrichelt) und Beschriftung <<includes>> oder <<extends>> zwischen AFs gerichtete Kanten (Pfeile) zur Erfassung von Generalisierungsbeziehungen Ein Kasten veranschaulicht die Systemgrenze 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 30 UML UML Werkzeug ArgoUML http://argouml.tigris.org 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 31 UML Aufgabe Aufgabe 1.3 Anwendungsfalldiagramm Stellen Sie die nachfolgend textuell beschriebene Situation mittels eines Anwendungsfalldiagramms nach UML 2.0 grafisch korrekt dar: Ein Kunde möchte mit der Geldkarte am Automaten "Geld abheben". Der Akteur "Kunde" ist eine Generalisierung von "Kunde der eigenen Bank" und "Kunde fremder Banken". Die beiden spezialisierten Akteure kommunizieren über die Rolle Kunde mit dem Anwendungsfall „Geld abheben", der für beide Kundenarten gleichermaßen abläuft. Dieser Anwendungsfall enthält den Anwendungsfall "Konto- und Pin-Kontrolle", bei dem die Berechtigung des Kunden zur Kartennutzung überprüft wird. Wurde mehrfach eine falsche PIN eingegeben, wird die Karte eingezogen. Um dies zu modellieren wird der Anwendungsfall " Konto- und Pin-Kontrolle " mit dem Anwendungsfall "Karte einziehen" erweitert. Dieser wird nur unter der Bedingung abgearbeitet, dass der Kunde sich mehrfach nicht identifizieren konnte. Quelle: Skript Prof. Dr. O. Lazar 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 32 UML Aufgabe Aufgabe 1.4 Anwendungsfalldiagramm (5 Min.) Finden Sie die Fehler, die bezüglich der UML-Notation gemacht wurden? Notieren (Beschreiben) Sie die Fehler, die Sie finden kurz: Quelle: Skript Prof. Dr. O. Lazar 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 33 UML Aufgabe Aufgabe 1.5 Anwendungsfalldiagramm Für die folgende Problembeschreibung ist der Use-Case mittels Template zu spezifizieren. Für eine Seminarverwaltung ist eine Anmeldung zu bearbeiten. Ist es ein neuer Kunde, dann sind die Daten zu erfassen. Existiert der Kunde bereits, dann ist zu prüfen, ob die Daten aktualisiert werden müssen. Weiterhin ist zu prüfen, ob das gewünschte Seminar angeboten wird und ob noch ein Platz frei ist. Wenn die Anmeldung durchgeführt werden kann, erhält der Kunde eine Anmeldebestätigung. Wenn kein Platz mehr frei ist, oder das angegebene Seminar nicht angeboten wird, dann muss beim Kunden nachgefragt werden, ob ein alternatives Seminar in Frage kommt. (15 Min.) Use-Case-Bezeichnung: Anmeldung bearbeiten Ziel: Vorbedingung: Nachbedingung Erfolg: Nachbedingung Fehlschlag: Akteure: Auslösendes Ereignis: Beschreibung (Ablauf): Erweiterungen: Alternativen: 4. März 2015 Quelle: Skript Prof. Dr. O. Lazar Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 34 UML Aufgabe Aufgabe 1.6 Anwendungsfalldiagramm (20 Min.) Für die Stadtbibliothek soll ein Softwaresystem entwickelt werden. Beschreiben Sie die typischen Arbeitsabläufe zur Ausleihe und Verwaltung von Büchern in einem Anwendungsfalldiagramm. Beteiligte Akteure sind Bibliothekaren, die Bibliotheksverwaltung und die Leser. Berücksichtigen Sie auch das Mahnwesen (durch die Verwaltung). In der Bibliothek können Leser mittels der Mitgliederkarte an Selbstbedienungs-Terminals selbst die eigene Adresse ändern, Bücher suchen und vorbestellen. a. Stellen Sie die zuvor textuell beschriebene Situation mittels eines Anwendungsfalldiagramms nach UML 2.0 grafisch korrekt dar. b. Beschreiben Sie den Prozess "Ausleihen eines Buches" mittels des vorgestellten Templates für Use Cases (aus Aufg. 1.5). Quelle: Skript Prof. Dr. O. Lazar 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 35 Objektorientierte Konzepte II Übersicht 1. Grundbegriffe der Programmierung Inhalte 2. Einfache Beispielprogramme 3. Datentypen und Variablen Grundbegriffe der OO-Programmierung 4. Ausdrücke und Operatoren 5. Kontrollstrukturen Objektorientierte Konzepte I 6. Blöcke und Methoden 7. Klassen und Objekte UML 8. Vererbung und Polymorphie 9. Pakete Objektorientierte Konzepte II 10. Ausnahmebehandlung 11. Schnittstellen (Interfaces) Einführung in der Programmiersprache Java 12. Geschachtelte Klassen 13. Ein-/Ausgabe und Streams 14. Applets / Oberflächenprogrammierung 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 36 Objektorientierte Konzepte II Modellierung mit Klassen und Objekten I Eine Klasse trägt einen Klassennamen und enthält Datenfelder und die Methoden, um auf diese Datenfelder zuzugreifen Objekt, also konkrete Instanz einer Klasse p1:Punkt wäre ein anonymes Objekt der Klasse Punkt 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 37 Objektorientierte Konzepte II Modellierung mit Klassen und Objekten II Zugriff auf die Datenfelder erfolgt in der Regel über Zugriffsmethoden Methoden erfüllen die Aufgaben: Werte der Datenfelder eines Objektes auszugeben Datenfelder zu verändern Neue Ergebnisse zu berechnen (mit Hilfe der gespeicherten Werte) Datenfelder definieren die Datenstruktur der Objekte, die Methoden bestimmen das Verhalten der Objekte Jede Kombination von Datenfeldern stellt einen Zustand dar, der als mikroskopischer Zustand eines Objektes bezeichnet wird Makroskopische Zustände haben eine Bedeutung für die Anwendung des Objektes. 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik Methoden sind die Schnittstellen des Objektes. Daten sind gekapselt. Sie können nur von den eigenen Methoden des Objektes manipuliert werden. 38 Objektorientierte Konzepte II Modellierung mit Klassen und Objekten III Eine funktionale Leistung, die ein System zur Verfügung stellt, wird als Anwendungsfall (Use Case) bezeichnet. Ein Use Case stellt einen (Teil) eines Geschäftsprozesses dar, der durch ein EDV-System unterstützt wird. Kommunikation zwischen Objekten mittels Nachrichten (Aufruf von Methoden): Mit dem Aufruf einer Methode (schwache Kopplung) wird die Kontrolle an das Objekt, an das die Nachricht gerichtet ist, übergeben. Wie das Objekt handelt, ist Sache des Objekts. Prozedurale Programmierung mit starker Kopplung (z.B. globale Variablen) schlechter erweiterbar. Nachrichten 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 39 Objektorientierte Konzepte II Modellierung mit Klassen und Objekten IV Instanzvariablen sind für die jeweilige Instanz gültig und können in jeder Instanz eine individuelle Ausprägung annehmen. Instanzmethoden greifen nur bei ihrer p2 : Punkt x=3 y=5 x=1 y=1 zeichne() verschiebe() loesche() zeichne() verschiebe() loesche() p3 : Punkt jeweiligen Instanz. Klassenvariablen stellen globale Variablen für alle Objekte einer Klasse dar. Instanzmethode kann auch auf p1 : Punkt x=2 y=4 zeichne() verschiebe() loesche() Punkt punktAnzahl = 3 … Instanzvariablen Instanzmethoden Klassenvariable Klassenmethode getPunktAnzahl() … Klassenvariablen zugreifen. 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 40 Objektorientierte Konzepte II Das Konzept der Kapselung Information Hiding oder Geheimnisprinzip Die inneren Eigenschaften sollen vor der Außenwelt verborgen sein Nur die Aufrufschnittstelle der Schnittstellenmethoden soll exportiert werden Dadurch können Teile des Systems modifiziert werden, ohne einen Einfluss auf andere Teile zu nehmen, solange die Schnittstellen konstant bleiben. Kapselung: Nach außen sind nur die definierten Schnittstellen sichtbar. Eigenschaften die intern bleiben sollen, bleiben verborgen. 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 41 Objektorientierte Konzepte II Abstraktion und Brechung der Komplexität I Komplexer Sachverhalt aus der realen Welt wird in einem Programm auf das Wesentliche konzentriert und damit vereinfacht dargestellt. Die Kunst der Abstraktion ist es das Wesentliche zu erkennen das Unwesentliche wegzulassen Problembereich Reale Welt Zum Finden der Objekte des Problembereichs Zum Erkennen der Datenfelder und Methoden eines Objekts Zur Festlegung der Schnittstellen eines Objektes Zur Bildung von Hierarchien 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 42 Objektorientierte Konzepte II Abstraktion und Brechung der Komplexität II Vererbungshierarchie (auch „kind-of“ – Hierarchie) Klassen werden in Abstraktionsebenen angeordnet Generalisierung: wenn man in der Hierarchie von unten nach oben geht Spezialisierung: wenn man in der Hierarchie von oben nach unten geht (die jeweils tiefer stehende Klasse ist eine Spezialisierung der Oberklasse) Spinnentier A B C D Skorpion Milbe ... ... Kreuzspinne 4. März 2015 Spinne Hausspinne ... Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik Springspinne 43 Objektorientierte Konzepte II Abstraktion und Brechung der Komplexität III Zerlegungshierarchie (auch „part-of“ – Hierarchie) Ein Objekt kann als Datenfelder andere Objekte enthalten in Form von einer Komposition oder einer Aggregation Komposition: Objekte haben die gleiche Lebensdauer, sind „verschweißt“ Aggregation: Lebensdauern von zusammengesetztem Objekt und den Komponenten ist entkoppelt. Beispiel: Auch wenn A zerstört wird, existieren B, C und D weiter. Eine Referenz auf ein Objekt enthält als Wert die Adresse des Objektes, auf das die Referenz zeigt. Die Adresse gibt an, an welcher Stelle das Objekt im Arbeitsspeicher liegt. Software-Umsetzung mittels Referenzen, in Java nur Aggregation (C++ auch Komposition) 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 44 Objektorientierte Konzepte II Klassen und Objekte I Klassen und Objekte Klassen sind die Baupläne für Objekte Klassen sind Datentypen, Objekte sind Instanzen dieser Datentypen Objekte werden gemäß den in den Klassen abgelegten Bauplänen erzeugt 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 45 Objektorientierte Konzepte II Klassen und Objekte II Klassendiagramme repräsentieren die Struktur eines Systems Multiplizität Generalisierung/ Spezialisierung Klasse Attribute Operationen/ Methoden 4. März 2015 Assoziation Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 46 Objektorientierte Konzepte II Klassen und Objekte III Zusammenarbeit von Objekten Damit ein Objekt seine Umwelt und damit andere Objekte wahrnehmen kann, muss es auf Nachrichten reagieren können. Diese Nachrichten führen beim Empfängerobjekt entweder dazu einen Auftrag selbst zu erfüllen oder eine Anfrage zu beantworten. mit Rückgabe: z.B. boolean Ohne Rückgabe: void mit Rückgabe: String 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 47 Objektorientierte Konzepte II Aufgabe Aufgabe 1.7 Klassendiagramm (20 Min.) Gegeben sei der folgende Sachverhalt: Jede Person hat einen Namen, eine Telefonnummer und E-Mail. Jede Wohnadresse wird von nur einer Person bewohnt. Es kann aber sein, dass einige Wohnadressen nicht bewohnt sind. Den Wohnadressen sind je eine Strasse, eine Stadt, eine PLZ und ein Land zugeteilt. Alle Wohnadressen können bestätigt werden und als Beschriftung (für Postversand) gedruckt werden. Es gibt zwei Sorten von Personen: Student, welcher sich für ein Modul einschreiben kann und Professor, welcher einen Lohn hat. Der Student besitzt eine Matrikelnummer und eine Durchschnittsnote. Modellieren Sie diesen Sachverhalt mit einem UML Klassendiagramm. Quelle: Skript Prof. Dr. O. Lazar 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 48 Objektorientierte Konzepte II Aufgabe Aufgabe 1.8 Klassendiagramm (10 Min.) Gegeben sei der folgende Sachverhalt: In einem Grafiksystem bilden beliebig viele Grafikobjekte eine Gruppe. Eine Gruppe enthält Informationen über den Gruppennamen und die zugehörige Farbe zum Zeichnen seiner Grafikobjekte. Grafikobjekte sind Kreise und Rechtecke. Jedes Grafikobjekt hat eine bestimmte x- und y-Koordinate, Kreise haben einen Radius und Rechtecke eine Länge und Breite. Definieren Sie für alle Attribute Methoden zum Lesen und Setzen der Werte. Modellieren Sie diesen Sachverhalt mit einem UML Klassendiagramm. Quelle: Skript Prof. Dr. O. Lazar 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 49 Objektorientierte Konzepte II Erstes Programmbeispiel mit Objekten Klassenvariablen und Klassenmethoden erhalten bei Java das Schlüsselwort static Methoden sind in der Regel public Datenfelder sind in der Regel private Klassenbeschreibung ist das Schema zur Bildung von Objekten dieser Klasse und enthält den Namen der Klasse die Datenfelder dieser Klasse die Methoden dieser Klasse 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 50 Einführung in die Programmiersprache Java Übersicht 1. Grundbegriffe der Programmierung Inhalte 2. Einfache Beispielprogramme 3. Datentypen und Variablen Grundbegriffe der OO-Programmierung 4. Ausdrücke und Operatoren 5. Kontrollstrukturen Objektorientierte Konzepte 6. Blöcke und Methoden 7. Klassen und Objekte UML 8. Vererbung und Polymorphie 9. Pakete Objektorientierte Konzepte 10. Ausnahmebehandlung 11. Schnittstellen (Interfaces) Einführung in der Programmiersprache Java 12. Geschachtelte Klassen 13. Ein-/Ausgabe und Streams 14. Applets / Oberflächenprogrammierung 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 51 Einführung in die Programmiersprache Java Sprachkonzepte von Java Die Väter von Java Die Urversion von Java wurde vom Frühjahr 1991 bis Sommer 1992 unter dem Namen The Green Project von 13 Entwicklern im Auftrag des US-amerikanischen Computerherstellers Sun Microsystems entwickelt. Ein Überbleibsel aus dem Green-Projekt ist der Duke von Joe Palrang, der zum bekannten Symbol bzw. Maskottchen geworden ist. 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 52 Einführung in die Programmiersprache Java Eigenschaften von Java Einfachheit und Stabilität gegenüber C/C++ wurden verschiedene Sprachkonstrukte (z.B. Zeigerarithmetik) weggelassen Objektorientiertheit echte Objektorientierte Sprache es ist nicht möglich Methoden/Attribute von den Klassen/Objekten zu trennen Verteilbarkeit (Client/Server, Applets) optimal für Client/Server-Programmierung geeignet z.B. Applets oder Java-Webstart Sicherheit z.B. Verwendung von Zertifikaten, Sandbox Portierbarkeit ( siehe Java Virtuelle Maschine) Java ist plattformunabhängig (also unabhängig von Betriebssystem und Rechner- Hardware) 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 53 Einführung in die Programmiersprache Java Die Java-Plattform I Zur Java-Plattform gehören: die Programmiersprache Java Werkzeuge/Tools (z.B. Java-Compiler → javac) die Java Virtuelle Maschine (JVM) → Bytecode-Interpreter umfassende Klassenbibliothek JavaFX (seit Java 7 Update 6) Es gibt drei Varianten der Java-Plattform: Standard Edition (Java SE) Enterprise Edition (Java EE) → Server Anwendungen Micro Edition (Java ME) → mobile Endgeräte 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 54 Einführung in die Programmiersprache Java Die Java-Plattform II Die Java Virtuelle Maschine (JVM) Bei der Kompilierung von Java wird aus dem Quellcode nicht Maschinencode, sondern ein Zwischencode (Bytecode) erzeugt dieser Bytecode ist nun für alle Plattformen gleich Jede Rechner-Plattform besitzt eigenen Bytecode-Interpreter (JVM) …ist die Laufzeitumgebung und übernimmt verschiedene Aufgaben Speicherverwaltung des Programms Ein-/Ausgabeoperationen setzt den Bytecode in Maschinencode des jeweiligen Prozessors um Interaktionen mit dem Betriebssystem Das Laden der JVM erfolgt über die main()-Methode der Startklasse Aufruf: java Klassenname 4. März 2015 JavaProgramm Bytecode JVM Solaris JVM JavaOS JVM Windows JVM Mac JVM ... BytecodeInterpreter Solaris JavaOS Windows Mac ... RechnerPlattform Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 55 Einführung in die Programmiersprache Java Die Java-Plattform III Java Klassenbibliothek das Programmieren von Java-Anwendungen wird durch eine umfangreiche Klassenbibliothek vereinfacht Java-API (Application Programming Interface) Unterteilung in die Bereiche Java Base Libraries (grundlegende Funktionalitäten, z.B. string Verarbeitung) Java Integration Libraries (systemübergreifende Funktionalität, z.B. RMI, DB) Java User Interface Libraries (Schnittstellen z.B. für Drucker, Audio, GUI) 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 56 Einführung in die Programmiersprache Java Programmerzeugung und -ausführung I In Java wird kein ausführbares Programm erzeugt Es wird Bytecode interpretiert, statt einer ausführbaren Datei gestartet. Klassen, die eine main()-Methode haben, können zum Starten einer Java-Anwendung verwendet werden 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 57 Einführung in die Programmiersprache Java Programmerzeugung und -ausführung II Vier Schritte des Kompilierens Lexikalische Analyse: Erkennung von Symbolen/Wörtern in der Zeichenkette des Programms, z.B. Schlüsselwörter, Operatoren usw. Syntaxanalyse: Sind bei der lexikalischen Analyse erkannte Wörter formal zulässig geschrieben? Semantikanalyse: Verwendung von Namen im Rahmen ihrer Gültigkeitsbereiche, Typverträglichkeit bei Ausdrücken Codeerzeugung: Erzeugung des Bytecode aus dem analysierten Source Code Virtuelle Maschine stellt die Laufzeitumgebung für das auszuführende Programm: Laden in die VM: java Startklasse, restlich benötigte Klassen werden nachgeladen Ausführen des Bytecodes (Prozessor und OS abhängig) 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 58 Einführung in die Programmiersprache Java Programmerzeugung und -ausführung III Eigenschaften des Bytecodes: Besteht aus Instruktionen für die VM. Instruktion ist je ein Byte lang. Unabhängig von Hardware und Betriebssystem. Ist maschinennah. Wird mittels Bytecode-Interpreter ausgeführt. Wegen Optimierung ist der Code sehr kompakt. Portabilität. Interpreter kann mit einer Sicherheitsschicht ausgestattet werden. 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 59 Einführung in die Programmiersprache Java Das Java Development Kit Java Runtime Environment (JRE) beinhaltet nur solche Bestandteile, die zum Ausführen von Java-Programmen benötigt werden Bytecode-Interpreter für die jeweilige Plattform Java Klassenbibliothek Java Development Kit (JDK) Beinhaltet neben dem JRE auch Java-Entwicklungswerkzeuge Java-Compiler (javac) Java Dokumentationswerkzeug (javadoc) Java Archiver (Erzeugung von JAR-Dateien) Signieren von JAR-Dateien (jarsigner) Visuelle Anzeige von Speicherverbrauch, Anzahl Threads, Java Heap-Space (jconsole) … 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 60 Einführung in die Programmiersprache Java Java-Anwendungen und Internet-Programmierung Nicht verwechseln: Java-Anwendung/Applikation: Programme die auf einer lokalen Maschine laufen. Java-Applets: Im Normalfall in eine Website eingebunden und aus dem Internet auf einen lokalen Rechner geladen um dort ausgeführt zu werden. Java-Servlets: Erzeugen dynamisch html-Seiten für einen Web Browser, serverseitige Ausführung. JavaServer Pages: Einbinden von Java in html-Seiten zur dynamischen Seitengenerierung. JavaScript: Scriptsprache ohne direkten Zusammenhang zu Java als objektorientierte Sprache. 4. März 2015 Prof. Dr. Michael Frie | Objektorientierte Programmiertechnik 61