Info B VL 2: Java und Objekt-Orientierung



Ähnliche Dokumente
Objektorientierte Programmierung

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Objektorientierte Programmierung. Kapitel 12: Interfaces

Prinzipien Objektorientierter Programmierung

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Java: Vererbung. Teil 3: super()

Programmieren in Java

Javakurs 2013 Objektorientierung

Einführung in die Java- Programmierung

Vorkurs C++ Programmierung

Java Virtual Machine (JVM) Bytecode

Einführung in Eclipse und Java

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Selbstbestimmtes Lernen. Proinformatik III Objektorientierte Programmierung. Format. Inhalt. Buzzwords

4 Objektorientierte Programmierung mit Java 4.1 Java-Grundlagen

1. Java ist Stammbaum der Programmiersprachen 3. Die "Softwarekrise"

Grundlagen von Python

C# im Vergleich zu Java

Java Kurs für Anfänger Einheit 5 Methoden

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Objektorientierte Programmierung OOP

Java Einführung Methoden in Klassen

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Innere Klassen in Java

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

5.5.8 Öffentliche und private Eigenschaften

Vererbung & Schnittstellen in C#

J.5 Die Java Virtual Machine

Java Einführung Packages

3. Konzepte der objektorientierten Programmierung

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

SEP 114. Design by Contract

Assoziation und Aggregation

Software Engineering Klassendiagramme Einführung

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Objektbasierte Entwicklung

Erreichbarkeit von Klassenelementen. Daten verstecken und kapseln

Java Kurs für Anfänger LMU SS09 Einheit 1 Javaumgebung

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

5. Abstrakte Klassen

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Vorlesung Objektorientierte Softwareentwicklung. Kapitel 0. Java-Überblick

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Typumwandlungen bei Referenztypen

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Einführung in die Programmierung

Einführung in die Java- Programmierung

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Info B VL 11: Innere Klassen/Collections

Computeranwendung und Programmierung (CuP)

3 Objektorientierte Konzepte in Java

Algorithmen und Datenstrukturen

Factory Method (Virtual Constructor)

Programmierkurs Java

Vorkurs Informatik WiSe 15/16

JAVA als erste Programmiersprache Semesterkurs

OO Softwareentwicklung

Java Einführung Programmcode

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Gesicherte Prozeduren

Javakurs zu Informatik I. Henning Heitkötter

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

4D Server v12 64-bit Version BETA VERSION

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2

Programmieren I. Prinzipieller Ablauf. Eigenschaften von JAVA. Source-Code Javac Bytecode. Java Virtual Machine (Java, Browser, Appletviewer)

Java lernen mit BlueJ

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Objektorientierte Programmierung

Klassendefinitionen verstehen

Programmierkurs Java

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Programmierkurs Java

Effiziente Java Programmierung

Objektorientierung: Klassen und Objekte

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

BEISPIELKLAUSUR Softwareentwicklung:

Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny

Abschnitt 12: Strukturierung von Java-Programmen: Packages

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Javakurs für Anfänger

Klassenbeziehungen & Vererbung

Einführung in die. objektorientierte Programmierung

Grundzüge der Programmierung. Konzepte der objektorientierten Programmierung (oop) OBJEKTE - KLASSEN

Kapitel 6. Vererbung

Scala & Lift. Ferenc Lajko

Vorlesung Informatik II

Diplomvorprüfung in Datenverarbeitung EBS Sommersemester 2002

4 Vererbung, Polymorphie

Übung: Verwendung von Java-Threads

SWE5 Übungen zu Software-Engineering

Transkript:

Info B VL 2: Java und Objekt-Orientierung Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 2: Java und Objekt-Orientierung p.24

Eigenschaften von OO-Sprachen (1) Alles ist ein Objekt (in Smalltalk, in Java gibt es auch primitive Datentypen) Datentyp eines Objekts: Klasse, mit der es erzeugt wurde Objekte können Daten (Felder) und Operationen (Methoden), die auf diesen Daten agieren, enthalten. Ein Programm ist eine Menge interagierender Objekte Objekt kann (via Methode) Botschaften an ein anderes Objekt schicken (z.b. Aufforderung eine Methode auszuführen) Info B VL 2: Java und Objekt-Orientierung p.25

Eigenschaften von OO-Sprachen (2) Objekte können zu komplexen Objekten kombiniert werden Komplexe Objekte können aus einfachen Bausteinen aufgebaut werden, indem Objekte Referenzen auf andere Objekte enthalten. Alle Objekte eines Typs können dieselben Botschaften erhalten Jedes Objekt einer Klasse kann alle Methoden, die in dieser Klasse definiert sind, ausführen, plus ererbte Methoden von Oberklassen. Info B VL 2: Java und Objekt-Orientierung p.26

Prinzipien der OO-Programmierung Kapslung (encapsulation) und Wiederverwendbarkeit (reuse) Info B VL 2: Java und Objekt-Orientierung p.27

Kapslung Organisation von Daten und Methoden in Klassen information hiding: Verstecken von Implementierungsdetails Kapslung ist guter Programmierstil: Gliederung eines Problems in kleinere, unabhängige Komponenten (Klassen), Prinzip der strukturierten Programmierung Durchschaubarkeit, Testbarkeit, weniger Fehleranfälligkeit Pakete als Strukturierungsmittel für Klassen Zugriffsrechte: z.b. Einschränkung von Zugriff auf Felder, kann helfen Informationen konsistent zu halten Verstecken von Implementationsdetails unterstützt Austauschbarkeit von Code Info B VL 2: Java und Objekt-Orientierung p.28

Wiederverwendbarkeit möglich, weil Klassen unabhängig von konkreten Daten definierbar Spezialisierung durch Vererbung Schreibe Code und Dokumentation so, dass Funktionalität der Klasse transparent ist Arbeite mit Interfaces Guter Stil: Verwendung der vordefinierten Java Klassen APIs (Application Program Interfaces) sind üblicherweise gut designed und getested Info B VL 2: Java und Objekt-Orientierung p.29

Entstehungsgeschichte von Java Start 1990 bei Sun, Gruppe von James Gosling, ursprünglicher Namen Oak Angelehnt an C++, Elemente aus Smalltalk (Bytecode, Garbage Collection) via Objective C objekt-orientiert. Ziel: Entwicklung einer Hochsprache für hybride Systeme im Consumer-Electronic Bereich: Steuerung von Waschmaschinen, Telefonanlagen,... Boom des WWW 1993 Internet-Anwendungen Einsatz für Java-Applets: kleine Programme, die in HTML-Seiten eingebunden werden können (Sun Demo Web-Browser HotJava in den 90-ern) Durchbruch 1995: Netscape Navigator 2.0 mit integrierter Java Virtual Machine Info B VL 2: Java und Objekt-Orientierung p.30

Java Versionen Java 1: bezeichnet Versionen 1.0 und 1.1 Java 2: alle Versionen ab 1.2 1.2: viele neue Features 1.3: Verbesserung von APIs (z.b. Corba), Geschwindigkeitsverbesserung (just in time compiler) 1.4: neue APIs (assertions, regular expressions, XML-Parser,...) Version # Klassen # Pakete Ersch. Anmerkungen 1.0 212 8 Jan. 1996 1.1 504 23 Feb. 1997 1.2 1520 59 Dez. 1998 auch Java 2, Release 1.2 1.3 1840 76 Mai 2000 "Java 2, Release 1.3, Standard Ed." 1.4 2977 135 Feb. 2002 (1.4.0) Info B VL 2: Java und Objekt-Orientierung p.31

Java Buzzwords (1) Objekt-Orientiert: Kapslung in Klassen, Vererbung Robust: kein explizites Arbeiten mit Zeigern, Speicherverwaltung wird von Java gehandhabt (Garbage Collection) Portabel: JVM (virtuelle Maschine ist bewährtes Prinzip); alle Datentypen sind unabhängig von der Implementierung festgelegt (Standards) Dynamisch, Erweiterbar: Organisation des Programmcodes in Klassen, in verschiedenen Dateien gespeichert, load when needed Internationalisierung: 16-bit Unicode (statt ASCII) Info B VL 2: Java und Objekt-Orientierung p.32

Java Buzzwords (2) Multithreaded: Zerlegung in einzelne Prozesse (Threads), die unabhängig voneinander ablaufen können Verteilt: Remote Method Invocation (RMI), Netzwerk-Programmierung basierend auf Client-Server Architekturen Sicher: Plattform erlaubt Laden von unbekanntem Code, der in einer sicheren Umgebung abläuft (kein Lesen und Schreiben von Festplatte,...) Info B VL 2: Java und Objekt-Orientierung p.33

3 Ebenen von Java Programmiersprache Virtuelle Maschine (Interpreter) Plattform (APIs) Info B VL 2: Java und Objekt-Orientierung p.34

8-Damen Problem 8-Damen Problem: Platziere 8 Damen so auf einem Schachbrett, dass keine eine andere schlagen kann Allgemein: Damen Problem Standard-Beispiel für generate and test Algorithmen, Tiefensuche mit Backtracking Problem mit exponentieller Komplexität Imperative Lösung, Programm: QueensIM Klassenfeld: Array queens[1..max-1] Index: Spalte der Dame, Index-Eintrag (änderbar): Zeile der Dame Globale Kontrolle über alle Damen (in der main-methode) Info B VL 2: Java und Objekt-Orientierung p.35

8-Damen Problen in OO OO Lösung, Programm QueensOO 1 Queen #row: int #column: int +findsolution(): boolean #advance(): boolean #predeccanattack(queen:queen): boolean +printsolution() creates creates QueensOO +MAX: int +main() left neighbor NeighborQueen #neighbor: Queen Info B VL 2: Java und Objekt-Orientierung p.36

Erinnerung: OO Konzepte Programm als Menge interagierender Objekte: 8 Queen-Objekte Kombination zu komplexen Objekten: eine NeighborQueen enthält eine Queen Botschaften: sag der Nachbarin, dass sie sich versetzen soll Info B VL 2: Java und Objekt-Orientierung p.37

Klassen in Java Java als OO-Sprache Struktur Klassen sind fundamentale Jedes Java Programm ist als Klasse definiert; alle Java Programme benutzen Objekte. Eine Klasse ist die kleinste Einheit an Java-Code, die für sich allein stehen kann und vom Java-Compiler und -Interpreter erkannt wird Jede Klasse definiert einen neuen Datentyp! primitiver Datentyp Wert (int 42) Klasse Objekt (Circle Kreis mit Radius 2 ) Klasse: Sammlung von Attributen (typisierte Platzhalter für Daten) und von Programmcode (gespeichert in benannten Methoden, die auf diesen Daten arbeiten) Info B VL 2: Java und Objekt-Orientierung p.38

Klassendefinition Klassendefinition: Im einfachsten Fall class Name Members Konvention: Erster Buchstabe des Klassennamens wird gross geschrieben. Die erste Zeile der Klassendefinition repräsentiert die Klassen-Signatur (vgl. erste Zeile einer Methodendefinition) Der Java-Interpreter lädt Klassen dynamisch (dynamic loading): Wenn das erste Mal ein Objekt dieser Klasse erzeugt bzw. eine statische Komponente benötigt wird. Info B VL 2: Java und Objekt-Orientierung p.39

Members/Komponenten einer Klasse Drei Arten von Members: Felder Methoden innere Klassen class members: als static deklariert, assoziiert mit der Klasse selbst instance members: assoziiert mit individuellen Instanzen der Klasse (Objekten!) Beispielprogramm: Circle Info B VL 2: Java und Objekt-Orientierung p.40

Klassen-Felder (1) public static final double PI = 3.14159; Assoziiert mit Klasse selbst durch static modifier: Klassen-Feld (static field) Es existiert nur eine einzige Kopie eines statischen Feldes! Feld vom Typ double mit Namen PI und zugewiesenem Wert 3.14159 final modifier: Wert des Feldes ändert sich nach erster Zuweisung nicht mehr (Konstante) public modifier: jeder kann das Feld benutzen (visibility modifier) Info B VL 2: Java und Objekt-Orientierung p.41

Klassen-Felder (2) Lokale Variable/Konstante: innerhalb einer Methode oder eines Blocks Felder: Komponenten einer Klasse! ähnlich einer globalen Variable in einem Programm Innerhalb der Klasse Circle kann PI mit seinem einfachen Namen referenziert werden; ausserhalb: Circle.PI (eindeutige Spezifikation: das PI, das in Klasse Circle definiert ist ) Info B VL 2: Java und Objekt-Orientierung p.42

Klassen-Methoden (1) public static double radianstodegrees(double rads) return rads * 180/PI; Assoziiert mit Klasse selbst durch static modifier: Klassen-Methode (static method) Aufruf (invocation) von ausserhalb der Klasse: Circle.radiansToDegrees(2.0) oft guter Stil Klassennamen auch innerhalb der Klasse mitanzugeben, um klar zu machen, dass eine Klassen-Methode benutzt wird Klassen-Methoden sind globale Methoden (in anderen Programmiersprachen sind alle Prozeduren/Funktionen global), imperativer Programmierstil kann in Java realisiert werden, wenn nur Klassen-Methoden benutzt werden. Info B VL 2: Java und Objekt-Orientierung p.43

Klassen-Methoden (2) radianstodegree() ist eine utility -Methode, die in Circle definiert ist, weil sie beim Arbeiten mit Kreisen nützlich sein kann. benutzt das Klassen-Feld PI Klassen-Methoden können alle anderen Klassen-Komponenten der eigenen Klasse (oder auch anderer Klassen) benutzen. Klassen-Methoden können nicht direkt (mit this) auf Instanz-Felder oder -methoden zugreifen! (weil die Klassen-Methoden nicht mit einer Instanz assoziiert sind) Info B VL 2: Java und Objekt-Orientierung p.44

Instanz-Felder (1) public double r; Jedes Feld, das nicht static deklariert ist, ist ein Instanz-Feld. Instanz-Felder sind mit den Objekten der Klasse assoziiert. Jedes Objekt der Klasse Circle hat seine eigene Kopie des Felds r. Jeder Kreis hat seinen eigenen Radius. Innerhalb von Klassen werden Instanz-Felder durch ihren Namen referenziert. In Code ausserhalb wird der Name über eine Referenz zu dem Objekt, das das Feld enthält, angegeben. Info B VL 2: Java und Objekt-Orientierung p.45

Instanz-Felder (2) Instanz-Felder sind der Kern des objekt-orientierten Programmierens: Mit Instanz-Feldern wird ein Objekt (über seine Eigenschaften) definiert. Die Werte dieser Felder machen Objekte zu unterschiedlichen Identitäten. Circle c = new Circle(); // Create a new Circle object // store it in variable c c.r = 2.0; // Assign a value to its instance field r Circle d = new Circle(); // Create a different Circle object d.r = c.r * 2; // Make this one twice as big Info B VL 2: Java und Objekt-Orientierung p.46

Objekt-Erzeugung/Initialisierung Erzeugung von Objekten mit new Circle c = new Circle(); Konstruktor Ein Objekt mit Namen name vom Typ des Konstruktors (Klasse oder Unterklasse der Klasse) wird erzeugt und durch Aufruf eines Konstruktors für diese Klasse initialisiert. Konstruktoren können selbst definiert werden. (Kapitel Konstruktoren und Vererbung ) Wenn eine Klasse keinen eigenen Konstruktor definiert, dann bekommt sie automatisch einen Default-Konstruktor ohne Parameter. Info B VL 2: Java und Objekt-Orientierung p.47

Instanz-Methoden (1) public double circumference() return 2 * PI * r; Jede Methode, die nicht static deklariert ist, ist eine Instanz-Methode. Instanz-Methoden arbeiten auf einer Instanz einer Klasse (auf einem Objekt) und nicht auf der Klasse selbst. Instanz-Methoden sind der zweite wesentliche Kern der Objektorientierung. Um eine Instanz-Methode ausserhalb der Klasse, in der sie definiert ist, zu verwenden, muss zunächst ein entsprechendes Objekt erzeugt werden. Info B VL 2: Java und Objekt-Orientierung p.48

Instanz-Methoden (2) Objekte nicht Funktionen stehen im Mittelpunkt! (a = area(c) vs. a = c.area()) An die Methode area() muss kein Parameter übergeben werden, weil alle Informationen über das Objekt implizit in der Instanz c vorhanden sind. Instanz-Methoden können auf Klassen- und Instanz-Members zugreifen. In circumference() ist r mit dem Wert aus der gerade betrachteten Instanz belegt. Circle c = new Circle(); // Create a new Circle object; // store it in variable c c.r = 2.0; // Assign a value to its instance field r double a = c.area(); // Invoke an instance method of the object Info B VL 2: Java und Objekt-Orientierung p.49