Objektorientierte Programmierung am Beispiel von Java

Slides:



Advertisements
Ähnliche Präsentationen
C Sharp (C#) Martin Saternus Senior Student Partner
Advertisements

Imperative Programmierung
Imperative Programmierung
der Universität Oldenburg
Objektorientierte Programmierung
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Einführung in die Programmierung Zusammenfassung
Kapitel 4 Datenstrukturen
der Universität Oldenburg
Objektorientierte Programmierung Definition von Klassen
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Abstrakte Klassen.
Konstruktoren.
Polymorphie (Vielgestaltigkeit)
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 4 Vererbung Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Programmieren mit JAVA
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
DVG Klassen und Objekte
Einführung in die Programmierung Klassendefinition und Objekte
Einführung in die Programmierung
Objektorientiertes Programmieren
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Objektorientierte Konzepte/UML Geoinformation I Vorlesung 2 WS 2000/2001.
1. Verhalten der Objekte: Operationen Werden in den Klassen definiert Werden (i.d.R.) auf einem Objekt aufgerufen Wird das Empfängerobjekt genannt Weitere.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Eine Präsentation von Peter Rasser
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Objektorientiertes Konstruieren
Objektorientierte Programmierung
EPROG Tutorium #4 Philipp Effenberger
EPROG Tutorium #5 Philipp Effenberger
Objektorientierung.
Objektorientierte Modellierung mit UML
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
HG13_ Herzgen, Jung & Lorkowski1 Java Programmierung BlueJ Workshop.
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Einführung in die Programmierung mit Java
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 9. Vorlesung WS 2001/2002.
Java-Kurs - 9. Übung Besprechung der Hausaufgabe
Abstrakte Klassen und das Interface-Konzept
Objektorientierte (OO) Programmierung
C++ FÜR cOMPUTERSPIELENTWICKLER
1 Grundsätze objektorientierter Programmierung. Dr. Wolfram Amme, Grundsätze objektorientierter Programmierung, Informatik II, FSU Jena, SS Objektorientierte.
OOP II.
Grundkurs Informatik 11-13
Implementieren von Klassen
 Präsentation transkript:

Objektorientierte Programmierung am Beispiel von Java Wesentliche Teile zur OOP mit Java sind aus dem folgenden Dokument entnommen: Objektorientierte Programmierung in Java, Mark Giereth, www.iis.uni-stuttgart.de/lehre/ws03-04/info3/java.pdf

Was ist Objektorientierung? Datenorientierte Sichtweise Gruppierung von Daten zu komplexen Typen (Strukturierung) Definition von Operationen, die Daten verarbeiten Daten vor inkonsistenten Veränderungen schützen, indem Zugriff beschränkt wird Daten und Funktionen bilden Einheit (Klasse bzw. Objekt) Letzter Aspekt ist zentral, Blackbox-Prinzip, Verbergen der Implementierung

Warum Objektorientierung? Softwarekrise I 1994: Eröffnung des Denver International Airport um 9 Monate verzögert wegen Softwareproblemen im Gepäcktransport-System 1989-1998: Entwicklung eines Systems zur Unterstützung der Polizeiarbeit in Hamburg abgebrochen (120 Mio. DM) 1996: Verlust der Ariane 5 (>1,65 Mrd. DM) 2003-2006: Toll Collect (> 1 Mrd. EUR) Komplexität des Problems und der Software wurde erheblich unterschätzt Flugbahn der Rakete wird durch ein „Inertial Reference System“ (SRI) gemessen, dessen Software teilweise von der Ariane-4 stammt. Wirkung: 37 Sekunden nach Zünden der Rakete (30 Sekunden nach Liftoff) erreichte Ariane 5 in 3700 m Flughöhe eine Horizontal-Geschwindigkeit von 32768.0 (interne Einheiten). Dieser Wert lag etwa fünfmal höher als bei Ariane 4. Die Umwandlung in eine ganze Zahl führte daher zu einem Überlauf, der jedoch nicht abgefangen wurde. Der Ersatzrechner (Redundanz !) hatte das gleiche Problem schon 72 msec vorher und schaltete sich sofort ab. Daraus resultierte, daß Diagnose-Daten zum Hauptrechner geschickt wurden, die dieser als Flugbahndaten interpretierte. Daraufhin wurden unsinnige Steuerbefehle an die seitlichen, schwenkbaren Feststoff-Triebwerke, später auch an das Haupttriebwerk gegeben, um die großen Flugabweichungen (über 20 Grad) korrigieren zu können. Die Rakete drohte jedoch auseinanderzubrechen und sprengte sich selbst (39 sec). Ein intensiver Test des Navigations- und Hauptrechners wurde nicht unternommen, da die Software bei Ariane 4 erprobt war. Toll-Collect: Gepl. Einführung 31. August 2003, technisch reduzierte Form am 1. Januar 2005, volle Funktionalität 1.1.2006 Liste kann sehr lang fortgesetzt werden

Warum Objektorientierung? Softwarekrise II Studie der Standish Group International 1999: 26 % aller Software-Projekte werden erfolgreich abgeschlossen 46 % leiden unter erheblicher Kosten- und Terminüberschreitung oder reduzierter Funktionalität. 28 % aller Software-Projekte endet ohne Auslieferung eines Produkts Standish Group International: Beratungsfirma für Softwareprojekte 1979: 75% der Ergebnisse von Softwareprojekten nie eingesetzt

Warum Objektorientierung? Softwarekrise III Software ist fehlerhaft Laut INTEL: 80-90 Bugs in Pentium Normale Software: 25 Fehler pro 1000 Programmzeilen. Gute Software: 2-3 Fehler pro 1000 Zeilen. Space Shuttle Software: weniger als 0.1 Fehler pro 1000 Zeilen (laut NASA) Handy: 200 000 Zeilen Programm ca. 500 Fehler Windows 2000: 27 Mio. Zeilen ca. 50 000 Fehler

Warum Objektorientierung? Softwarekrise IV Ursachen der Softwarekrise Wachsende Komplexität technische Ressourcen und Möglichkeiten wachsen sehr schnell Mooresches Gesetz Das Mooresche Gesetz (engl. Moore's Law) sagt aus, dass sich die Komplexität integrierter Schaltkreise mit minimalen Komponentenkosten etwa alle zwei Jahre verdoppelt. 1981: Sinclair ZX 81, 1 KB RAM, 8 KB ROM, Prozessor Z80, 1,25 MHZ, ca. 800 Byte freier Speicher Selbst mit dem aus heutiger Sicht unglaublich kleinen Hauptspeicher von 1 kB war bereits in der Basisversion die Ausführung interessanter Programme möglich: So existierte beispielsweise ein Schach-Programm. 2008: 1 GB RAM, Arbeitsspeicher um den Faktor 1 Mio. größer Welche Art von Funktion liegt dem Mooreschen Gesetz zugrunde?

OOP mit Java: Objekte (Software-)Objekte besitzen einen internen Zustand und haben ein festgelegtes Verhalten Ein Objekt • verwaltet seinen Zustand durch Variablen, Attribute genannt • implementiert sein Verhalten durch Funktionen, Methoden genannt Beispiele für Objekte: Personen, PKW, Verträge, Universitäten, Ereignis In Java werden Attribute als Felder bezeichnet

UML Notation Die Unified Modeling Language (UML) ist eine Notation zur Spezifikation und Visualisierung von Modellen für Softwaresysteme In den folgenden Folien werden Klassen- diagramme zur Beschreibung von Klassen und deren Beziehungen untereinander verwendet

Klassen und Objekte (Instanzen) Klassen sind Vorlagen für die Erzeugung von Objekten Jedes Objekt gehört einer Klasse an. Die Attribute und Methoden der Objekte werden in der zugehörigen Klasse definiert Alle Objekte einer Klasse besitzen dasselbe Verhalten, da sie dieselbe Implementierung der Methoden besitzen Objekte einer Klasse werden auch als Instanzen (instance) oder Exemplare bezeichnet Klassen können auch Methoden und Attribute besitzen, die für die Klasse selbst und nicht für jede Instanz gelten. Diese werden als Klassen-Methoden/-Attribute bezeichnet (im Gegensatz zu Instanz-Methoden/-Attribute) Attribute werden in Java Felder genannt Beispiel für Klassen-Methode Funktion sin im Paket Math

Erzeugung von Objekten Es wird Speicherplatz für das Objekt auf dem Heap allokiert (abhängig von den Datentypen der Attribute) Bei der Erzeugung wird ein Konstruktor (spezielle Methode) ausgeführt, der die Initialisierung des Objekts vornimmt Es werden den Attributen Werte zugeordnet, wodurch der Zustand des Objekts definiert wird • entweder definiert durch den Konstruktor • oder Default-Werte (0 für Zahlen, null für Referenzen, etc.) Die Erzeugung eines Objekts erfolgt in den meisten Programmiersprachen mit dem new-Operator Objekte sind dynamisch, in Java wird die Speicherverwaltung automatisch durch das Java-Laufzeitsystem durchgeführt

Beispiel: Eine Klasse und zwei Instanzen (Objekte) der Klasse GeomApp1.java zeigen und von S. erklären lassen 2. Konstruktor einführen Zugriffsmodifer: public in allen Paketen sichtbar, protected: innerhalb des eigenen Paketes und in abgeleiteten Klassen, ohne: innerhalb des eigenen Paketes, private: nur in der eigenen Klasse Zentraler Begriff der OOP: Datenkapselung (Daten werden nur durch Methoden manipuliert)

Vererbung Vererbung (inheritance) ist ein Konzept, wodurch Attribute und Methoden der Oberklasse auch den Unterklassen zugänglich gemacht werden Vererbungsbeziehungen zwischen Klassen stellen Generalisierungs- bzw. Spezialisierungsbeziehungen dar

Vererbung

Vererbung: Die Klasse Square Die Klasse Square soll nun durch Vererbung von der Klasse GeomFigure abgeleitet werden. Wir benötigen einen Konstruktor, der neben der x- und y-Koordinate die Seitenlänge des Quadrates erhält. Weiterhin solle eine Methode zur Berechnung des Flächeninhaltes implementiert werden sowie die toString-Methode überschrieben werden. Konstruktor bzw. toString-Methode sollte mit super arbeiten Möglich: Lösung von Schüler, GeomApp1.java erweitern oder GeomApp2L.java vorstellen

Überschreiben von Methoden Hat eine Methode einer Subklasse die gleiche Signatur einer Methode der Superklasse, so wird die Superklassenmethode überschrieben (overriding) GeomFigure definiert eine Methode toString(): String tmp="[“ + myX + ",“ + myY + "]"; return tmp; Square überschreibt die Methode toString(): String tmp=super.toString(); tmp=tmp+" "+seitenL; return tmp; Methodenname + Anzahl, Reihenfolge und Typen der Parameter bezeichnet man als Signatur der Methode, eine Klasse darf keine zwei Methoden mit derselben Signatur enthalten

Überladen von Methoden Gibt es mehrere Methoden mit demselben Namen aber mit unterschiedlichen Signaturen, so spricht man von Überladen (overloading). Beispiel: void println() ... void println (String s) ... void println (int i) ...

Abstrakte Klassen Abstrakte Klassen sind Klassen, die mindestens eine abstrakte Methode haben Abstrakte Methoden besitzen keine Implementierung. Von abstrakten Klassen können keine Instanzen erzeugt werden Unterklassen müssen entweder die abstrakten Methoden implementieren oder sind ebenfalls abstrakt Interfaces sind abstrakte Klassen, die nur aus abstrakten Methoden bestehen. Sie repräsentieren eine definierte Schnittstelle als eine Menge von Methoden welche die jeweilige Klasse implementieren muss.

Beispiel: Abstrakte Klassen Java Syntax: abstract class GeomFigure {... Man kann eine Methode als abstract deklarieren (ohne Methodenrumpf) und so erzwingen, dass sie in der abgeleiteten Klasse überschrieben werden muss Mehrfachvererbung ist in Java micht möglich, höchstens über Interfaces, die aber nur die Vererbung von Schablonen, nicht aber von Implementierungen erlauben

Zusammenfassung Objekte besitzen Attribute und Methoden gehören einer Klasse an Klassen legen Methoden und Attribute der Objekte fest (Bauplan) können Klassen-Methoden/-Attribute besitzen können abstrakt sein Objekte werden auf dem Heap erzeugt den Attributen werden Werte zugeordnet Konstruktoren werden ausgeführt Vererbung: Attribute und Methoden der Oberklasse werden den Unterklassen zugänglich gemacht

Vorteile von OOP Wiederverwendung von Code Einfachere Anpassbarkeit von Code, damit auch bessere Wartbarkeit Objektorientierte Systeme ermöglichen einen strukturierten Systementwurf Software Engineering: OOA, OOD, OOP Nachteile: Lernaufwand, bei einfachen Programmen evt. mehr Code

Eigenschaften von Java (1) Java ist plattformunabhängig Java-Code wird mit einem Java-Compiler (javac) in plattformunabhängigen Bytecode überführt Bytecode wird von einer Java Virtual Machine (JVM) teils interpretiert teils zur Laufzeit in Maschinencode kompiliert (Just-In-Time-Compiler in JVM integriert) Für jede unterstützte Plattform muss es eine JVM geben

Eigenschaften von Java (2) Java wurde auf Sicherheit und Robustheit hin entwickelt: Fehleranfällige Sprachkonstrukte fehlen: • keine Pointer und Pointerarithmetik • keine Destruktoren sondern automatische Garbage Collection • keine Mehrfachvererbung • kein Operator-Overloading Bytecode Verification Exception Handling Thread-Sicherheit in die Sprache integriert L: Was ist eine Speicherleck (memory leak)? Kann es in Java auch auftreten? Wie erkennt die Speicherbereinigung (garbage collector), dass Objekte nicht mehr benötigt werden? Speicherleck (englisch memory leak, gelegentlich auch Speicherloch oder kurz memleak) werden Fehler in einem Computerprogramm genannt, die es ermöglichen, dass ein laufender Prozess einen Speicherbereich belegt, diesen jedoch im Zuge der Ausführung weder freigeben noch nutzen kann.

Ohne Kommentar ...

Quellen Objektorientierte Programmierung in Java, Mark Giereth (wesentliche Teile), www.iis.uni-stuttgart.de/lehre/ws03-04/info3/java.pdf Softwaretechnik für Ingenieure, Dr. Michaela Huhn, winf5.in.tu-clausthal.de/winf/ ss05/SEfI/SEfI1.pdf