Praxis der Programmierung

Ähnliche Dokumente
Datenbankanwendungsprogrammierung Crashkurs Java

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

3 Objektorientierte Konzepte in Java

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Repetitorium Informatik (Java)

3 Objektorientierte Konzepte in Java

Einstieg in die Informatik mit Java

Javakurs für Anfänger

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Prof. W. Henrich Seite 1

Einführung in die Programmierung 1

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Kapitel 6. Vererbung

Einstieg in die Informatik mit Java

Java für Computerlinguisten

Kapitel 6. Vererbung

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

Deklarationen in C. Prof. Dr. Margarita Esponda

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

Einstieg in die Informatik mit Java

Ein erstes Java-Programm

Java Einführung Methoden in Klassen

Algorithmen und Programmierung II

1 Polymorphie (Vielgestaltigkeit)

Algorithmen und Datenstrukturen 07

Theorie zu Übung 8 Implementierung in Java

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Programmieren in Java

6 Speicherorganisation

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

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

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Objektorientierte Programmierung. Kapitel 12: Interfaces

Probeklausur: Programmierung WS04/05

Algorithmen und Datenstrukturen

Einstieg in die Informatik mit Java

Kapitel 6. Vererbung

C# im Vergleich zu Java

Java Vererbung. Inhalt

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003

Probeklausur: Programmierung WS04/05

Primitive Datentypen

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

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Objektorientierte Programmierung

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

AuD-Tafelübung T-B5b

Vererbung. Was versteht man unter dem Begriff Vererbung?

Javakurs 2013 Objektorientierung

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

4 Objektorientierte Programmierung mit Java 4.1 Java-Grundlagen

Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Programmierkurs C++ Abstrakte Klassen und Methoden

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

JAVA - Methoden

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Vorkurs C++ Programmierung

Java Einführung Methoden. Kapitel 6

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

5.6 Vererbung. Vererbung

Vorlesung Informatik II

5.4 Klassen und Objekte

Interfaces und Vererbung

Javakurs zu Informatik I. Henning Heitkötter

Methoden (fortgeschritten) in C# - 1

Informatik. Studiengang Chemische Technologie. Michael Roth Hochschule Darmstadt -Fachbereich Informatik- WS 2012/2013.

JAVA - Methoden - Rekursion

Software Engineering Klassendiagramme Einführung

1. Der Einstieg in Java. Was heißt Programmieren?

Faustregeln zu Zusicherungen

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

Klassen mit Instanzmethoden

JAVA-Datentypen und deren Wertebereich

Computeranwendung und Programmierung (CuP)

Java-Schulung Grundlagen

Einführung in die. objektorientierte Programmierung

Java Virtual Machine (JVM) Bytecode

Objektorientierte Programmierung OOP Programmieren mit Java

II.1.1. Erste Schritte - 1 -

Programmierkurs Java. Vererbung. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck

Welche Informatik-Kenntnisse bringen Sie mit?

Java I Vorlesung Vererbung und Sichtbarkeit

Wiederholung zur Vorlesung Programmieren

Einführung in die Programmierung

Programmieren in Java

Transkript:

Template-Funktionen und -Klassen Einführung in Java Institut für Informatik und Computational Science Universität Potsdam Henning Bordihn 1

Template-Funktionen 2

Minimumfunktion und offene Typen Aufruf min(x,y) sollte für möglichst alle Datentypen funktionieren, für die eine Ordnungsrelation definiert ist Keine Code-Verdopplung! Überladen der Funktion ungünstig Funktion mit offenem Typ definieren Template-Funktionen verwenden offene Typen definieren eine Schablone einer Funktion, die typunabhängiges Verhalten hat Typen werden beim Aufruf der Funktion festgelegt Compiler erzeugt aus der Schablone eine zu den Typen passende Funktion 3

template <typename T> T min(t a, T b) { Beispiel: Minimumfunktion // eine Schablone mit dem Typparameter T // T kann jetzt wie ein Typ verwendet werden } return (a < b)? a : b; int main() { int i = 19; int j = 66; int a = min(i,j); // Funktion mit T = int wird jetzt erzeugt } Statt typename kann synonym auch class verwendet werden. mehrere Typparameter durch Komma getrennt, z.b. <class T, class S> 4

Festlegung der Zieltypen entweder durch Parameterübergabe oder durch explizite Angabe der Zieltypen: template <typename T1, typename T2, typename T3> T3 foo(t1 x, T2 y) { //... } int main() { cout << foo<short,long,int>(23,11); // Rueckgabetyp int } 5

swap als Template template <typename T> void swap(t& a, T& b) { T tmp = a; a = b; b = tmp; } 6

Template-Klassen / generische Typen 7

Definition von Template-Klassen // Schablone einer Klasse mit einem Typparameter T template <typename T> class Cls { // jetzt kann T wie ein Datentyp verwendet werden, z.b.: T var; T foo(int n, T& t); }; template <typename T> T Cls<T>::foo(int n, T& t) { //... } int main() { Cls<int> instance; // Cls<int> ist ein generischer Typ // Compiler legt generischen Typ erst bei der //... // Definition eines Objekts an } 8

Einführung in Java 9

Java Applikation: eigenständiges Programm, das in Java geschrieben wurde und ohne Browser ausgeführt werden kann Applet : Java-Programm, das in eine HTML-Seite eingebunden wird und in einem Browser ausgeführt werden kann 10

Java und das Internet Idee: Übertragung von Programmcode vom Server zum Client, der im Internet- Browser ausgeführt wird = Anforderungen an die Programmiersprache: plattformunabhängiger Programmcode (Portabilität) gegen einfache Änderungen der Ablaufumgebung robuster Programmcode Sicherheit z.b. vor Viren sowie vor dem Zugriff auf das Dateisystem, die Hardware und den Browser Vielfältigkeit/Universalität modernes Programmier-Paradigma 11

Quellcode Bytecode Maschinencode Quellcode name.java Java-Compiler javac name.java Bytecode name.class Virtuelle Maschine Bytecode-Loader Bytecode-Verifier Java-Interpreter java name Maschinencode 12

Applets im Internet Quellcode name.java Java-Compiler javac name.java Bytecode name.class Internet Virtuelle Maschine Bytecode-Loader Bytecode-Verifier Java-Interpreter java name Maschinencode 13

Eigenschaften von Java portabel virtuelle Maschine plattformunabhängige Datentypen robust keine Pointer, Garbage Collector stenge Objektorientiertheit, relativ strikte Typenprüfung sicher virtuelle Machine, Bytecode-Verifizierung digitale Signaturen multithreaded parallele, kommunizierende Prozesse verteilt Remote Method Invocation (RMI) streng objektorientiert 14

Quellen Java-Entwicklungsumgebung: http://www.oracle.com/technetwork/java/index.html http://www.oracle.com/technetwork/java/javase/downloads/index.html http://www.oracle.com/ Literatur: http://docs.oracle.com/javase/8/docs/api/index.html http://www.javabuch.de/ http://openbook.galileocomputing.de/javainsel/ 15

Einfache Datentypen Datentyp mögliche Werte Wrapper-Klasse boolean true, false Boolean byte -128..127 (8 Bit) Byte short -32768..32767 (16 Bit) Short int -2147483648..2147483647 (32 Bit) Integer long -9223372036854775808..922 807 (64 Bit) Long float Gleitkommazahl (32 Bit) Float double Gleitkommazahl (64 Bit) Double char einzelne Unicode-Zeichen (16 Bit) Character 16

/* Name.java */ Quellcode einer Java-Applikation public class Name { // muss mit dem Dateinamen uebereinstimmen } public static void main (String[] args) { } // Name Anweisung; Anweisung;... Anweisung; 17

Beispiel Hello World public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World!"); } } System.out.println(s); zur Stringausgabe mit Zeilenvorschub System.out.print(s); erzeugt die Stringausgabe ohne Zeilenvorschub. 18

Java-Klassen und Applikationen Es gibt nur Klassen. (streng objektorientiert; nur wenige Spezialfälle) Alle Funktionen sind Methoden (ggf. statisch), alle globalen Variablen sind statische Datenelemente. Es gibt keine Header-Dateien. (Um Schnittstellen festzulegen, werden Interfaces benutzt.) Eine Java-Applikation benutzt genau eine Java-Klasse mit einer main-methode. Es gibt nur die main-methode mit einem String-Array als Parameter: public static void main(string[] args). String ist eine Klasse der Standardbibliothek. 19

Der Parameter der main-methode Parameterübergabe String[] args wird beim Programmstart mit jenen Zeichenketten initialisiert, die auf der Kommandozeile als Argumente nach dem Namen der Applikation angegeben sind. java BspApplikation das sind 4 Parameter bewirkt die Initialisierung args[0] = "das" args[2] = "4" args[1] = "sind" args[3] = "Parameter" 20

wie in C++, aber: Definieren und Initialisieren Modifikatoren für die Sichtbarkeit stehen in jeder Definition als erstes Schlüsselwort private int x; public static void methode() { } Konstruktoren werden immer mit new aufgerufen Objekte werden immer auf dem Heap angelegt Alle Variablen von einem Klassentyp sind Referenzvariablen. (Ohne dass Sie mit & als solche vereinbart werden müssen!) Es gibt keine Pointer! 21

Standardinitialisierung von Datenelementen Alle Datenelemente, die nicht durch die Parameter des Konstruktors initialisiert werden, erhalten standardmäßige Initialwerte wie folgt: byte, short, int 0 long 0L float 0.0f double 0.0d char boolean Verweistypen \u0000 false null 22

Aufruf überladener Konstruktoren Mittels this(parameterliste) können andere, überladene Konstruktoren (mit passender Parameterliste) aufgerufen werden. Vermeidung von Code-Verdopplung public Class Cls { // 400 Datenelemente int number; Cls() { /* Initialisierung der 400 Datenelemente */ } } Cls(int number) { this(); this.number = number; } 23

Nullpointer Standardinitialisierung Vermeidung von logischen Fehlern durch fehlende Initialisierung von Datenelementen Es entstehen Nullpointer! Es entstehem leicht Laufzeitfehler: NullPointerException bei Zugriff auf Datenelemente von Variablen mit Wert null bei Aufruf von Methoden mit Variablen mit Wert null 24

Zerstören von Objekten Es gibt keine Destruktoren. Objekte auf dem Heap, auf die keine Referenz mehr existiert, werden automatisch (von Zeit zu Zeit) vom Garbage Collector gelöscht. Der Speicherbereich ist dann wieder freigegeben. Vermeidung von Memory Leaks und Dangling Pointers 25

einfache Datentypen boolean byte, short, int, long float, double char Datentypen Referenz-/Verweisdatentypen String Point Integer... Wrapper-Klassen: Boolean Byte, Short, Integer, Long Float, Double Character haben KEINE Wrapper-Klassen 26

einfache Datentypen Referenz-/Verweisdatentypen int num1, num2; boolean b1, b2; num1 = -12; num2 = 4; b1 = true; b2 = false; num1 num2 b1-12 4 true Variablendeklaration Point p1, p2; String str1, str2; Variableninitialisierung p1 = null; p2 = new Point(); str1 = new String("Hallo!"); str2 = "Hallo?"; im Hauptspeicher: p1 p2 str1 null Adr. Adr. x y 0 0 Hallo! 27

p1 = new Point(); p1 Adr. 0 0 p2.moveto(2,3); p2 Adr. 2 3 p2 = p1; p1 p2 Adr. Adr. 0 0 2 3 p1.moveto(4,5); p1 p2 Adr. Adr. 4 5 num2 = num1; num1-12 num2-12 num1 = 99; num1 99 num2-12 28

Arrays (1) Arrays sind Verweisdatentypen. Arrays stehen alle Methoden zur Verfügung, die von allen Objekten (Instanzen beliebeiger Java-Klassen) benutzt werden können. (Arrays erben von der Klasse java.lang.object.) Array-Elemente werden (wie die Datenelemente von Objekten) automatisch initialisiert. Aber: Es gibt keine Klasse, von der Arrays Instanzen sind. Arrays haben keine Konstruktoren. Statt dessen gibt es eine spezielle Syntax des new-operators. 29

Arrays (2) Arrays sind immer eindimensional, können aber geschachtelt werden (d.h. Arrays als Elemente enthalten). Deklaration: int[] bsp; int bsp[]; String[][] astr; String astr[][]; Die Anzahl der Elemente wird erst bei der Initialisierung angegeben. 30

Initialisierung von Arrays direkte Initialisierung (gleichzeitig mit der Deklaration): int[] bsp = {5, 4, 3, 2, 1}; String[][] astr = {{"ja", "nein"}, {"yes", "no"}, {"?"}}; nachträgliche Initialisierung mit dem new-operator: bsp = new int[5]; // Standardinitialisierung der Elemente astr = new String[3][2]; Danach ist z.b. möglich: bsp[0] = 5; bsp[1] = 4; bsp[2] = 3; bsp[3] = 2; bsp[4] = 1; int laenge = bsp.length; // ergibt 5 31

Schlüsselwörter zur Zugriffsmodifikation Datenelemente/Methoden/Konstruktoren mit dem Modifier public private sind für alle Klassen sichtbar; sind nur für die Klasse sichtbar, in der sie vereinbart sind; ohne Modifier sind für Klassen aus demselben Paket (Verzeichnis) sichtbar protected für alle Unterklassen und Klassen aus demselben Paket sichtbar Der Modifier ist das erste Schlüsselwort in der Definition/ Signatur. Klassen dürfen auch Modifier haben. (public class...) Schlüsselwort final zur Vereinbarung von Konstanten 32

Vererbung keine Mehrfachvererbung Syntax: public class Unterklasse extends Oberklasse alle Methoden sind implizit virtuell Aufruf von Konstruktoren der Oberklasse: super(...) Aufruf von Methodenimplementierungen der Oberklasse (beim Überschreiben): super.method(...); alle Klassen erben (automatisch) von java.lang.object abstrakte Klassen und Methoden mit Schlüsselwort abstract definieren, z.b.: public abstract class { public abstract void method(); } 33

Quellcodes einer Unterklasse (Prinzip) public class Unterklasse extends Oberklasse { } // neue Datenelemente // Konstruktoren public Unterklasse(...) { super(...); // optional // weitere Anweisungen; } // neue Methoden // überschriebene Methoden public void methode(...) { super.methode(...); // optional // weitere Anweisungen } 34