Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS 2002 1 Generisches Programmieren."—  Präsentation transkript:

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

2 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

3 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;

4 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 !!!

5 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

6 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; }

7 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();

8 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

9 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... }

10 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 }

11 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; }

12 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()); }

13 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

14 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; }

15 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;

16 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

17 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); }

18 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) }

19 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);

20 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); }

21 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(); }


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

Ähnliche Präsentationen


Google-Anzeigen