Java: Der Einstieg. Algorithmen und Datenstrukturen II 1



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

Algorithmen und Datenstrukturen II

Kapitel 2. Java: Der Einstieg. 2.1 Grundlegendes zu Java Historisches Eigenschaften von Java

Repetitorium Informatik (Java)

Java Einführung Klassendefinitionen

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

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Java Einführung Methoden in Klassen

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

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

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Objektorientierte Programmierung und Klassen

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

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

Objektorientierte Programmierung Studiengang Medieninformatik

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

Propädeutikum Programmierung in der Bioinformatik

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

Einstieg in die Informatik mit Java

Arten von Klassen-Beziehungen

Vererbung, Polymorphie

Objektorientierte Programmierung Studiengang Medieninformatik

Algorithmen und Datenstrukturen II

Datenbankanwendungsprogrammierung Crashkurs Java

Praxis der Programmierung

Java für Bauingenieure

Einstieg in die Informatik mit Java

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

Java Referenzdatentypen genauer betrachtet

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil

Tag 7 Repetitorium Informatik (Java)

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

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

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

Programmierung Nachklausurtutorium

Probeklausur: Programmierung WS04/05

Software Entwicklung 1

Einführung in die Programmierung Blockkurs Java

Hashing. Algorithmen und Datenstrukturen II 1

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Einstieg in die Informatik mit Java

Einführung in die Programmiersprache Java II

Implementieren von Klassen

Klassenvariablen, Klassenmethoden

Objekte und Klassen. INE2 M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert, E.

Teil 3 - Java. Grundlagen Klassen, Attribute Methoden

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

Geschachtelte Klassen

Erste Schritte in Java

Imperative Programmierung in Java. Algorithmen und Datenstrukturen II 1

Imperative Programmierung in Java. Algorithmen und Datenstrukturen II 1

Arten von Klassen-Beziehungen

Algorithmen und Datenstrukturen II

Programmieren in Java

Einstieg in die Informatik mit Java

Klassen und Konstruktoren in Java

Klassen mit Instanzmethoden

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Datenstrukturen und Algorithmen

3 Objektorientierte Konzepte in Java

Berner Fachhochschule Hochschule für Technik und Informatik HTI. Kapitel 1. Einstieg in Java. Dr. Elham Firouzi

Vorkurs Informatik WiSe 16/17

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

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

Algorithmen und Datenstrukturen II

Algorithmen und Programmierung II

Javakurs für Anfänger

Programmieren in Java

Einführung in die Programmierung Blockkurs Java

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Programmieren I. Kapitel 10. Spezielle Features

Theorie zu Übung 8 Implementierung in Java

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

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

Einführung in die Programmierung mit Java

Deklaration einer Klasse Innere innerhalb Klassen einer in Ja anderen v a Klasse

Faustregeln zu Zusicherungen

Programmieren in Java

Objektorientierung (OO)

Einstieg in die Informatik mit Java

Einführung in die Programmierung I. 10. Klassen und Objekte. Stefan Zimmer

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

7. Übung Informatik II - Objektorientierte Programmierung

Vorkurs Informatik WiSe 17/18

Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund

Kapitel 4: Klassen und Unterklassen

Java-Grundkurs für Wirtschaftsinformatiker

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

II.4.2 Abstrakte Klassen und Interfaces - 1 -

Einstieg in die Informatik mit Java

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

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

Vorlesung Programmieren

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 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 per Internet Übertragung 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 [1], S. 12, Kapitel 1.6). Algorithmen und Datenstrukturen II 6

Erstellen eines Java-Programms 1. Quellprogramm erstellen: 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. 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 [1], Kapitel 1.6 und 1.7). Eine Klasse enthält folgende Bestandteile: Objektvariablen (objektbezogene Datenfelder) objektbezogene Methoden Klassenvariablen (klassenbezogene Datenfelder) klassenbezogene Methoden 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 12

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

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 14

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 15

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

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 17

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

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 19

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 20

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

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 22

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 23

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

Gültigkeitsbereiche public default (package) protected private 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 25

Literatur [1] K. Arnold, J. Gosling: Java T M - Die Programmiersprache. Addison-Wesley, 1996. [2] T.H. Cormen, C.E. Leierson, R.L. Rivest: Introduction to Algorithms. MIT Press, 1990. [3] D. Flanagan: Java in a Nutshell. O Reilly & Associates Inc., 1996. [4] F. Jobst: Programmieren in Java. Hanser Verlag, 1996. [5] H. Klaeren: Vom Problem zum Programm. 2.Auflage, B.G. Teubner Verlag, 1991. [6] K. Echtle, M. Goedicke: Lehrbuch der Programmierung mit Java. dpunkt-verlag, 2000.