Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS 2002 1 Generisches Programmieren.

Slides:



Advertisements
Ähnliche Präsentationen
Ziele von EINI I + II Einführen in „Informatik“
Advertisements

der Universität Oldenburg
Objektorientierte Programmierung
der Universität Oldenburg
der Universität Oldenburg
Klassen - Verkettete Liste -
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Kritische Betrachtung
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
der Universität Oldenburg
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Programmieren mit JAVA
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Einführung in die Programmierung Datensammlung
Informatikunterricht mit Java
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
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
Einführung in die Programmierung Wintersemester 2009/10 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 (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2009/10 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 (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Equals, Hashcode und CompareTo Micha Kessler
Dynamische Datentypen
Variablenkonzept Klassisch, in Java Basistyp
Reinhard Stumptner Seminar Softwareentwicklung Dynamisches Laden und Binden in Java.
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger.
EPROG Tutorium #5 Philipp Effenberger
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Java-Kurs Übung Besprechung der Hausaufgabe
Dr. Wolfram Amme, Semantik funktionaler Programme, Informatik II, FSU Jena, SS Semantik funktionaler Programme.
Vererbung. Klassen - Vererbung  Eine Klasse kann von einer Basisklasse abgeleitet werden  Die abgeleitete Klasse erbt die Eigenschaften und Methoden.
Java Programme nur ein bisschen objektorientiert.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/06 Generische Programmierung in Java.
Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Auflösung von Konflikten bei Mehrfachvererbung Umbenennung mehrdeutiger Methoden.
Tutorium Software-Engineering SS14 Florian Manghofer.
1 Grundsätze objektorientierter Programmierung. Dr. Wolfram Amme, Grundsätze objektorientierter Programmierung, Informatik II, FSU Jena, SS Objektorientierte.
1 Eine Einführung in die objektorientierte Programmierung.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Arithmetik in Java Ganzzahl-Division Nulldivision führt zu einer ArithmeticException.
, PD Dr. Wolfram Amme, Tutorium zum Programmierpraktikum, FSU Jena, WS 2006/07 1 Objekte in Java.
PD Dr. habil. Wolfram Amme, Generisches Programmieren, Programmierpraktikum, FSU Jena, WS 2006/07 1 Generisches Programmieren.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Kapselung von Daten I Gründe für die Datenkapselung Datenkonsistenz leichtere.
Allgemeine Befehle für die allgemeine Liste
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
Raphael Fischer Informatik II - Übung 05 Raphael Fischer
1. Die rekursive Datenstruktur Liste 1
Implementieren von Klassen
1. Die rekursive Datenstruktur Liste 1.6 Die Datenstruktur Stapel
 Präsentation transkript:

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Generisches Programmieren

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Generisches Programmieren Generisches Programmieren dient der Wiederverwendbarkeit von Programmcode Generische Datenstrukturen können eine Vielzahl von eigentlichen verschiedenartigen Datentypen repräsentieren Generische Methoden parametrisieren einen abstrakten Vor- gang, derart dass er nur ein einziges Mal programmiert werden muss und trotzdem in vielen Fällen anwendbar ist Gemeinsamkeit von Datenstrukturen und Methoden werden auf einer hohen Abstraktionsebene herausgearbeitet Generisches Programmieren in Java wird unter der Verwendung der Klasse Objekt bewerkstelligt

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Die Wurzelklasse Object Methoden der Klasse Object werden von allen Objekten geerbt clone(), equals(), finalize(), getClass(), hashCode(), toString(), notify(), notifyAll(), sowie mehrere Versionen von wait(). Methoden in Object sind “Basismethoden”, die in abgeleiteten Klassen sinnvoll überschrieben werden sollten toString() konvertiert ein beliebiges Objekt in eine Zeichenkette MyObj myObject = newMyObj(); Answer theAnswer = new Answer(); System.out.println(myObject); String s = ´´The answer is: ´´ + theAnswer;

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Objektgleichheit Methode equals() bestimmt, ob zwei Objekte gleich sind Gleichheit zweier Zeichenketten String userName = ´´Joe´´... if ( userName.equals(suspectName) ) arrest(userName); Voreinstellung!!! Methode equals() vergleicht Referenzen Achtung!!!! Überladen anstelle von Überschreiben der Methode kann zu Fehlern führen public boolean equals(Point arg) {... } // Falsch !!! public boolean equals(Object arg) {... }// Richtig !!!

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Flaches Kopieren versus Tiefes Kopieren Methode clone() erzeugt eine identische Kopie eines Objektes flaches Kopieren Kopieren mit clone() ist nur dann zulässig, wenn die betreffende Klasse das Interface Cloneable implementiert Interface nicht implementiert => CloneNotSupportedException Achtung!! Methode clone() ist in Object als protected deklariert Kopieren von Objekten Flaches Kopieren Tiefes Kopieren Objekt 1 Objekt 2 Objekt 1´ Objekt 1´ Objekt 2

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Beispiel: Öffentliche Kopiermethode public class Buffer implements Cloneable { int [] buffer = new int[100];... public Object clone() { Object theClone = null; try{ theClone = super.clone(); } catch(CloneNotSupportedException e) { } return theClone; }

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Klassen der Standardtypen für jeden Standardtyp gibt es in Java eine Wrapperklasse Character, Short, Integer, Long, Boolean, Float und Double Transformation in ein Objekt int i = 1903; Integer intObj = new Integer(i); myVector.addElement(intObj); Konvertierung in einen String float f = 1.234f; String s = Float.toString(f); Konvertierung in einen anderen numerischen Datentyp Double aDouble = new Double(53.23E6); long l = aDouble.longValue();

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Generische Datenstrukturen in Java ist jede Klasse automatisch eine Unterklasse der Klasse Objekt allgemeinverwendbare Datentypen wie Listen, Stapel, etc. können in Java mit Elementen vom Typ Objekt definiert werden Datentypen, die über Elemente von der Klasse Objekt definiert sind, heißen generisch bzgl. der Elementtypen Paket java.util enthält eine Reihe generischer Datentypen Klasse Stack repräsentiert einen generischen Stapel Klasse Vector repräsentiert eine generische erweiterbare Reihung

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Beispiel: Liste als generische Datenstruktur public class Node{ Object data; // Datenelement Node next;// Zeiger auf nächste Listenzelle } public class List{ private Node head;// Kopf der Liste... }

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Generische Methoden Generische Methoden arbeiten auf allen Spezialisierungen des generischen Typs, müssen aber evtl. zur Laufzeit oder Übersetzungszeit spezialisiert werden public class List{ private Node head;// Kopf der Liste... void scan(){ for(Node cursor = head; cursor != null; cursor =cursor.next){ // Aktion zur Zeit leer }

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Beispiel: Längenbestimmung public class List{ private Node head;// Kopf der Liste... int length(){ int length = 0; for(Node cursor = head; cursor != null; cursor =cursor.next){ length++; } return length; }

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Beispiel: Elemente ausdrucken public class List{ private Node head;// Kopf der Liste... void print(){ for(Node cursor = head; cursor != null; cursor =cursor.next){ System.out.println(cursor.data.toString()); }

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Generische Vergleiche Such- und Sortieralgorithmen können als generische Algorithmen implementiert werden, die durch einen Vergleichsoperator parametrisiert sind in Java können hierzu Interfaces verwendet werden public interface Ordered{ /** Three value compare method. * Returns –1, if this is smaller than other * Returns 0, if this and other are equal * Returns +1, if this is greater than other. */ public int compareTo(Ordered other); } in den generischen Algorithmen werden dann Variablen vom Referenztyp Ordered verwendet

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Beispiel: Generische Vergleiche public class OrderedInteger implements Ordered{ protected int value; OrderedInteger(int i){ value = i; } int getValue() {return value;} void setValue(int i) {value = i;} public int compareTo(Ordered other){ OrderedInteger otherI = (OrderedInteger) other; if(value == otherI.value) return 0; if(value < otherI.value) return -1; else return 1; }

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Klassen-Muster andere OO-Sprachen bieten Klassen-Muster (Klassen- Schablonen) zur Generischen Programmierung an Generische Knotenklasse in C++ Template class Node{ T data;// generic data field Node *next; // pointer to the next Node public: T get_data() {return (data);} set_data(T d) {data = d;} } Konstruktion einer konkreten Klasse Node n;

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Generische Funktionsparameter bisher musste für jede Aktion die auf die Listenelemente der generisch definierten Liste eine neue Methode in die Klasse List eingefügt werden nun wollen wir den Listendurchlauf mit einer Funktion parametrisieren es entsteht eine Funktion höherer Ordnung, die eine Funktion als Parameter hat in Java verwenden wir ein Aktionsobjekt als Parameter für die Übergabe der Funktion verschiedene Aktionen brauchen Aktionsobjekte verschiedener Klassen

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Beispiel: Aufrufschnittstelle interface MapCarInterface{ /** * Abstract function whose realizations * operate on list nodes */ public void action(Node n); }

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Beispiel: Parametrisierung public class List{ private Node head;// Kopf der Liste... /** * Apply p.action on each data field of the list */ public void mapcar(MapCarInterface p){ for(Node cursor = head; cursor != null; cursor =cursor.next){ // apply function that works on the data part of the node p.action(cursor) }

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Beispiel: Eine Anwendung Deklaration public class PrintAction implements MapCarInterface{ /* * Print action on nodes */ public void action (Node n){ System.out.println(n.data.toString()); } Applikation list l = //... some list PrintAction p = new PrintAction(); l.mapcar(p);

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Beispiel: Eine weitere Anwendung public class SuccessorAction implements MapCarInterface{ /* * Change a data field which is of type integer to its successor */ public void action (Node n){ if(n.data instanceof Integer){ Integer tmp = (Integer) n.data; n.data = new Integer(tmp.intValue() + 1); }

Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Beispiel: Eine allerletzte Anwendung public class SumAction implements MapCarInterface{ int sum = 0; //accumulates the int values /* * Add the value of data fields to sum if the field is a Integer field */ public void action (Node n){ if(n.data instanceof Integer){ Integer tmp = (Integer) n.data; sum += tmp.intValue(); }