Java: Der Einstieg. Algorithmen und Datenstrukturen II 1

Ähnliche Dokumente
Java: Der Einstieg. Algorithmen und Datenstrukturen II 1

Java Einführung Methoden in Klassen

Repetitorium Informatik (Java)

Java Einführung Klassendefinitionen

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Java: Kapitel 1. Überblick. Programmentwicklung WS 2008/2009. Holger Röder Holger Röder

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Java für Bauingenieure

Einstieg in die Informatik mit Java

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

3 Objektorientierte Konzepte in Java

Einstieg in die Informatik mit Java

Objektorientierte Programmierung und Klassen

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Arten von Klassen-Beziehungen

Einstieg in die Informatik mit Java

Geschachtelte Klassen

Objektorientierte Programmierung Studiengang Medieninformatik

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Datenbankanwendungsprogrammierung Crashkurs Java

3 Objektorientierte Konzepte in Java

Einführung in die Programmierung mit Java

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Vererbung, Polymorphie

Einstieg in die Informatik mit Java

7. Übung Informatik II - Objektorientierte Programmierung

Programmieren in Java

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Objektorientierte Programmierung Studiengang Medieninformatik

Einstieg in die Informatik mit Java

Einführung in die Programmiersprache Java II

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Klassenvariablen, Klassenmethoden

Vorkurs Informatik WiSe 17/18

Geschachtelte Klassen

Programmierkurs. Manfred Jackel

Einstieg in die Informatik mit Java

12 Abstrakte Klassen, finale Klassen und Interfaces

Arten von Klassen-Beziehungen

Faustregeln zu Zusicherungen

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Objektorientierung (OO)

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Algorithmen und Programmierung II

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

Einstieg in die Informatik mit Java

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Algorithmen und Datenstrukturen II

Algorithmen und Datenstrukturen

Vorlesung Informatik II

Untertypen, Vererbung, Sichtbarkeit A01 OOP. Untertypen, Vererbung, Sichtbarkeit

Algorithmen und Datenstrukturen

Kapitel 4: Klassen und Unterklassen

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

6. Globalübung (zu Übungsblatt 8)

Ursprünge. Die Syntax von Java. Das Wichtigste in Kürze. Konsequenzen. Weiteres Vorgehen. Rund um Java

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

Java Einführung Methoden. Kapitel 6

Einstieg in die Informatik mit Java

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

Umsetzung einer Klassenkarte in einer Programmiersprache

Universität Bielefeld

Objekt-Orientierte Programmierung

Klassenmethoden. Klassenvariablen. Für das Auslesen des Studentenzählers definieren wir eine öffentliche Klassenmethode:

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

Objekt-Orientierte Programmierung

Methoden und Wrapperklassen

Klassen als Datenstrukturen

Grundlagen der Informatik 0

4. Vererbung Die Klasse Object. Die Klasse Object

JAVA - Methoden

14. Java Klassen. Klassen (Java) vs. Records (Pascal) Klassen - Konzeptuell. Klassen - Technisch

Einstieg in die Informatik mit Java

5 Vererbung. Subklassen, Superklassen, Pakete Zugriffsrechte

Vorlesung Programmieren

Einführung in die Programmierung für NF MI. Übung 07

Grundlagen der Programmierung Prof. H. Mössenböck. 15. Pakete

C# im Vergleich zu Java

2. Vererbung und Kapselung

Einstieg in die Informatik mit Java

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

1 Abstrakte Klassen, finale Klassen und Interfaces

Transkript:

Java: Der Einstieg Algorithmen und Datenstrukturen II 1

Grundlegendes zu Java: Historisches 1990-1991: Entwicklung der Programmiersprache OAK durch James Gosling von Sun Microsystems (zunächst für Toaster, Mikrowellen etc.; unabhängig vom Chip, extrem zuverlässig) Umbenennung in Java 1995: α und β Release von IBM, SGI, Oracle und Microsoft lizensiert Algorithmen und Datenstrukturen II 2

Grundlegendes zu Java: Eigenschaften durch den Bytecode (Zwischensprachencode) unabhängig von der Plattform Syntax an C und C++ angelehnt im Gegensatz zu C und C++ vollständig spezifiziert objektorientiert streng typisiert unterstützt parallele Abläufe (Nebenläufigkeit / Threads) Graphical User Interface (GUI) netzwerkfähig modularer Aufbau Nachteil: Effizienz leidet (ca. 5 10mal langsamer als C und C++) Algorithmen und Datenstrukturen II 3

Anwendungen Selbstständig laufende Anwendung Quellprogramm Java-Compiler Java-Bytecode auf dem Server Java-Interpreter Ablauf des Programms Algorithmen und Datenstrukturen II 4

Applets Applet Quellprogramm Java-Compiler Java-Bytecode auf dem Server Übertragung per Internet Bytecodes auf dem Rechner des Benutzers (Client) Java-Interpreter im Browser oder Applet-Viewer Ablauf des Programms Algorithmen und Datenstrukturen II 5

Sicherheit keine Pointerarithmetik wie in C Garbage Collection a Überprüfungen zur Laufzeit (Datentypen, Indizes, etc.) durch Mechanismen zur Verifizierung von Java-Bytecode bei der Übertragung dennoch ist die (Netz-)Sicherheit umstritten a Ein Garbage Collector entfernt automatisch Objekte, Felder und Variablen, auf die keine Referenz mehr vorhanden ist, aus dem Speicher (siehe Arnold & Gosling [?], S. 12, Kapitel 1.6). Algorithmen und Datenstrukturen II 6

1. Quellprogramm erstellen: Erstellen eines Java-Programms class Hello { public static void main(string[] args) { System.out.println("Hello World"); } } Algorithmen und Datenstrukturen II 7

1. Quellprogramm erstellen: Erstellen eines Java-Programms class Hello { public static void main(string[] args) { System.out.println("Hello World"); } } 2. Übersetzen eines Programms: > javac Hello.java Algorithmen und Datenstrukturen II 7

1. Quellprogramm erstellen: Erstellen eines Java-Programms class Hello { public static void main(string[] args) { System.out.println("Hello World"); } } 2. Übersetzen eines Programms: > javac Hello.java 3. Interpretation des Bytecodes: > java Hello Algorithmen und Datenstrukturen II 7

Grundzüge imperativer Sprachen Algorithmen und Datenstrukturen II 8

Das Behältermodell der Variablen Imperative Programmierung geht aus vom Modell eines Speichers, aufgegliedert in einzelne Variablen, in denen Werte abgelegt werden können. Der Speicher bzw. die Variablen werden verändert durch Befehle bzw. Anweisungen, die selbst vom aktuellen Speicherinhalt abhängen. Algorithmen und Datenstrukturen II 9

Das Behältermodell der Variablen Imperative Programmierung geht aus vom Modell eines Speichers, aufgegliedert in einzelne Variablen, in denen Werte abgelegt werden können. Der Speicher bzw. die Variablen werden verändert durch Befehle bzw. Anweisungen, die selbst vom aktuellen Speicherinhalt abhängen. Ein typisches Beispiel ist die Anweisung x = y + z. Sie bedeutet: Addiere die Variableninhalte von y und z und lege die Summe in der Variablen x ab. Algorithmen und Datenstrukturen II 9

Seiteneffekte nicht nur der Variableninhalt von x kann sich ändern, sondern auch der von y und z sowie aller möglicher anderer Variablen; falls x y oder y z, dann ist dies unmittelbar einsichtig. Also ist x = y + z keine Gleichheit, die zwischen den Werten (Inhalten) von x, y und z gilt, und mittels der wir über Programme nachdenken und Beweise führen können. Das Prinzip der referential transparency (Werttreue), das in der funktionalen Programmierung gilt, ist in der imperativen verletzt. Algorithmen und Datenstrukturen II 10

Konsequenzen 1. Der Nachweis von Programmeigenschaften wird viel schwieriger, ebenso das Verstehen von Programmen. 2. Die Semantik eines Programms hängt von einem strikten Nacheinander der Ausführung der einzelnen Anweisungen ab. 3. Wiederverwendung von Programmteilen in anderem Kontext bedarf besonderer Vorsicht. Algorithmen und Datenstrukturen II 11

Klassen, Objekte und Methoden im Überblick Java-Programme werden aus Klassen aufgebaut. Aus einer Klassendefinition lassen sich beliebig viele Objekte erzeugen, die auch Instanzen genannt werden (vgl. Arnold & Gosling [?], Kapitel 1.6 und 1.7). Eine Klasse enthält folgende Bestandteile: Objektvariablen (objektbezogene Datenfelder) objektbezogene Methoden Klassenvariablen (klassenbezogene Datenfelder) klassenbezogene Methoden Algorithmen und Datenstrukturen II 12

Klassen, Objekte und Methoden im Überblick Java-Programme werden aus Klassen aufgebaut. Aus einer Klassendefinition lassen sich beliebig viele Objekte erzeugen, die auch Instanzen genannt werden (vgl. Arnold & Gosling [?], Kapitel 1.6 und 1.7). Eine Klasse enthält folgende Bestandteile: Objektvariablen (objektbezogene Datenfelder) objektbezogene Methoden Klassenvariablen (klassenbezogene Datenfelder) klassenbezogene Methoden Algorithmen und Datenstrukturen II 12

Datenfelder (Synonym: Attribute) enthalten den Zustand des Objektes oder der Klasse. Methoden sind Sammlungen von imperativ formulierten Anweisungen, die auf den Datenfeldern operieren, um deren Zustand zu ändern. Algorithmen und Datenstrukturen II 13

Klassen Beispiel der Deklaration einer einfachen Klasse: class Point { double x, y; } Algorithmen und Datenstrukturen II 14

Das Erzeugen von Objekten Objekte werden mit dem Schlüsselwort new erzeugt. Neu geschaffene Objekte bekommen innerhalb eines Bereiches des Speichers (welcher Heap genannt wird) einen Speicherplatz zugewiesen und werden dort abgelegt. Auf alle Objekte in Java wird über Objektreferenzen zugegriffen jede Variable, die ein Objekt zu enthalten scheint, enthält tatsächlich eine Referenz auf dieses Objekt (bzw. auf deren Speicherplatz). Objektreferenzen haben den Wert null, wenn sie sich auf kein Objekt beziehen. Wir werden im folgenden Objekte und Objektreferenzen synonym verwenden, es sei denn, die Unterscheidung ist wichtig. Algorithmen und Datenstrukturen II 15

Erzeugung und Initialisierung Point lowerleft = new Point(); Point upperright = new Point(); Algorithmen und Datenstrukturen II 16

Erzeugung und Initialisierung Point lowerleft = new Point(); Point upperright = new Point(); 0.0.1 Wertzuweisung lowerleft.x = 0.0; lowerleft.y = 0.0; upperright.x = 1280.0; upperright.y = 1024.0; Algorithmen und Datenstrukturen II 16

Klassenvariablen class Point { double x, y; static Point origin = new Point(); } Algorithmen und Datenstrukturen II 17

Klassenvariablen class Point { double x, y; static Point origin = new Point(); } static final Point origin = new Point(); Algorithmen und Datenstrukturen II 17

Methoden Eine Methode ist eine Funktion bzw. Prozedur. Sie kann parameterlos sein oder Parameter haben. Sie kann einen Rückgabewert liefern oder als void deklariert sein, wenn sie keinen Wert zurückliefert. Methoden dürfen nicht geschachtelt werden. Innerhalb von Methoden dürfen lokale Variablen deklariert werden. Algorithmen und Datenstrukturen II 18

Methoden Eine Methode ist eine Funktion bzw. Prozedur. Sie kann parameterlos sein oder Parameter haben. Sie kann einen Rückgabewert liefern oder als void deklariert sein, wenn sie keinen Wert zurückliefert. Methoden dürfen nicht geschachtelt werden. Innerhalb von Methoden dürfen lokale Variablen deklariert werden. class Point { double x, y; } void clear() { x = 0.0; y = 0.0; } Algorithmen und Datenstrukturen II 18

Um eine Methode aufzurufen, gibt man ein Objekt und den Methodennamen, getrennt durch einen Punkt, an. lowerleft.clear(); upperright.clear(); Algorithmen und Datenstrukturen II 19

Methode distance double distance(point p) { double xdiff, ydiff; // Beispiel fuer lokale Variablen xdiff = x - p.x; ydiff = y - p.y; return Math.sqrt(xdiff*xdiff + ydiff*ydiff); } Aufruf: double d = lowerleft.distance(upperright); Algorithmen und Datenstrukturen II 20

Klassenbezogene Methoden Klassenbezogene Methoden werden durch das Schlüsselwort static deklariert, z.b. ist Math.sqrt() eine Klassenmethode der vordefinierten Klasse Math. 0.0.2 distance als Klassenmethode static double distance(point p1, Point p2) { double xdiff = p1.x - p2.x; double ydiff = p1.y - p2.y; return Math.sqrt(xdiff*xdiff + ydiff*ydiff); } Aufruf: double d = Point.distance(lowerLeft, upperright); Algorithmen und Datenstrukturen II 21

Vererbung, Pakete und Gültigkeitsbereiche Algorithmen und Datenstrukturen II 22

Vererbung Klassen in Java können um zusätzliche Variablen und Methoden erweitert werden. Dies wird durch das Schlüsselwort extends angezeigt. Die entstehende Unterklasse besitzt dann alle Eigenschaften der Oberklasse und zusätzlich die in der jeweiligen Erweiterung angegebenen Eigenschaften. Dieses Konzept wird auch als Vererbung bezeichnet, weil die Unterklasse alle Eigenschaften der Oberklasse erbt. Algorithmen und Datenstrukturen II 23

Vererbung Klassen in Java können um zusätzliche Variablen und Methoden erweitert werden. Dies wird durch das Schlüsselwort extends angezeigt. Die entstehende Unterklasse besitzt dann alle Eigenschaften der Oberklasse und zusätzlich die in der jeweiligen Erweiterung angegebenen Eigenschaften. Dieses Konzept wird auch als Vererbung bezeichnet, weil die Unterklasse alle Eigenschaften der Oberklasse erbt. Zum Beispiel ist ein farbiger Punkt eine Erweiterung eines Punktes: class ColoredPoint extends Point { String color; } Algorithmen und Datenstrukturen II 23

Pakete Bei größeren Softwareprojekten ist es häufig ratsam, diese in verschiedene, unabhängige Teile aufzuteilen. Solche Teile werden als Module oder Pakete bezeichnet. Java besitzt einige Eigenschaften, die es erlauben, Software modular aufzubauen: Verschiedene (i.d.r. logisch zusammengehörige) Klassen können in einem Paket zusammengefasst werden. Die Klassendefinitionen können in verschiedenen Dateien enthalten sein. Algorithmen und Datenstrukturen II 24

Der Paketname muss im Header jeder Datei angegeben sein: A.java C.java package abc; package abc; public class A { class C {...... } } class B {... } Algorithmen und Datenstrukturen II 25

Der Paketname muss im Header jeder Datei angegeben sein: A.java C.java package abc; package abc; public class A { class C {...... } } class B {... } Algorithmen und Datenstrukturen II 25

import abc.a; class test { A a; } Algorithmen und Datenstrukturen II 26

Gültigkeitsbereiche public default (package) protected priva zugreifbar für Nicht-Unterklassen im selben Paket zugreifbar für Unterklassen im selben Paket zugreifbar für Nicht-Unterklassen in einem anderen Paket zugreifbar für Unterklassen in einem anderen Paket ja ja ja nein ja ja ja nein ja nein nein nein ja nein ja nein Algorithmen und Datenstrukturen II 27