«Delegierter» Methoden Schablone Funktionszeiger

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Konstruktoren.
Polymorphie (Vielgestaltigkeit)
DO...WHILE Anweisung.
Einführung in die Programmierung mit Java
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
Zusammenfassung Vorwoche
int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0);
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Einführung in Java1 Einführung in JAVA.
DVG Methoden 1 Methoden. 2 int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0); dezi = Math.abs(dezi); String Bin = ""; do { } while.
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Java und Eclipse.
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 1 Folie 2 Microsoft.NET Framework: Quelle:
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Unterprogramme in JAVA
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Programmierung von Agenten in Java: Implementierung einer Supply-Chain
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Instanzmethoden
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
A Workshop About this chapter General description Units Time Schedule
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Einführung in die Programmierung mit Java
Java-Kurs Übung Besprechung der Hausaufgabe
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003.
Objektorientierte Programmierung (OOP)
Objektorientierte Programmierung (OOP)
OOP mit Java Oder: Java in 5 Tagen. 1. Tag Klassen und Methoden Hello World in Variationen Von Menschen und Geschlechtern Horden (Schlange stehen)
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Konstruktoren.
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
Aufgaben zu Rückgabewerten
Java-Kurs - 4. Übung weitere Kontrollstrukturen
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Wiederholungen mit Zähler
Java-Kurs - 5. Übung Das Paradigma der Objektorientierung (OO)
Einführung in die Programmierung mit Java
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Ein schematischer Kirschbaum in Java
Einführung in die Programmierung mit Java
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
Cäsar-Verschlüsselung
Cäsar-Verschlüsselung
Polymorphie Überladen
Ausnahmen Exceptions Definition Ausnahmen erzeugen Ausnahmen abfangen
Interfaces Definition von Interfaces Verwendung von Interfaces
2. Vererbung und Kapselung
Definition Felder Konstruktor Methoden Beispiel
Implementieren von Klassen
Grundlagen der OO-Programmierung in C#
Statische und Nichtstatische Methoden Properties / Eigenschaften
Polymorphie Überschreiben
Schleifen Datenfelder (Arrays) Verzweigungen
 Präsentation transkript:

«Delegierter» Methoden Schablone Funktionszeiger Delegates «Delegierter» Methoden Schablone Funktionszeiger Dr. Beatrice Amrhein

Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012 Überblick Definition eines Delegat Einfache Delegate Beispiele von Delegat-Anwendungen Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Definition

Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012 Definition Ein Delegat ist ein Typ, der eine Referenz (Zeiger) auf eine Methode beschreibt. Delegate entsprechen den Funktionszeigern in C++, sie sind jedoch typsicher und geschützt. Delegate ermöglichen es, Methoden als Parameter zu übergeben. Delegate können miteinander verkettet werden (nacheinander ausgeführt). Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012 Hinweis Delegate bilden die Grundlage für Ereignisse (wie z.B. für Benutzer-Eingaben). Durch das Verketten von Delegaten können mehrere Methoden an ein Ereignis angebunden werden. Alle miteinander verketteten Delegate werden gemeinsam (nacheinander) aufgerufen. Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012 Deklaration Die Deklaration von einem Delegat sieht ähnlich aus wie eine Methodensignatur. Sie benötigt das Schlüsselwort delegate Sie hat einen Rückgabewert und eine beliebige Anzahl Parameter: <sichtbarkeit> delegate <Resultat-Typ> <Delegat-Name> (<Parameter-Liste>) Zwei Beispiele: public delegate void meinDelegat1(int n, string message); public delegate int meinDelegat2(object m, double d); Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Benutzen von Delegates Der Einsatz von Delegates erfolgt in drei Schritten. Deklaration des Delegate public delegate int meinDelegate( string s, int i ) Definieren des Delegate-Objekt mit der entsprechenden Methode meinDelegate delegateName = methode; Aufruf des Delegate-Objekts und dadurch indirekter Aufruf der Methode int resultat = delegateName("Eingabe", 17); Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012 Erstes einfaches Beispiel: Verschiedene Ausgabe-Funktionen Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Ein C# Beispiel: Die Klasse Ausgabe Die Klasse Ausgabe hat zwei verschiedene Methoden zum Schreiben (auf die Konsole und in eine Datei) mit gleicher Signatur. using System; using System.IO; class Ausgabe { // Schreiben auf die Konsole public static void WriteToScreen(string s) { Console.WriteLine("Ausgabe: {0}", s); } //Schreiben in die Datei Test.txt const string fileName = "C:\\tmp\\Test.txt"; public static void WriteToFile(string s) { File.AppendAllText(fileName, s); } Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Ein C# Beispiel: Die Klasse Ausgabe // Deklaration des Delegaten mit gleicher Signatur // wie die beiden Methoden WriteToScreen und WriteToFile) public delegate void SchreibeDelegate(string s); Die static Bezeichnung wird weggelassen. Das Schlüsselwort delegate bezeichnet das Delegat. Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Ein C# Beispiel: Das Hauptprogramm public delegate void SchreibeDelegate(string s); //Benutze das Delegat static void Main(string[] args) { SchreibeDelegate psDelegate; string text = "Hier ist mein Text für dieses Beispiel"; //Zuweisen und ausführen der Methode «Schreibe auf den Schirm» psDelegate = WriteToScreen; psDelegate(text); // Zuweisen und ausführen der Methode «Schreibe ins File» psDelegate = WriteToFile; } Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012 Zweites Beispiel Rechner Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Ein C# Beispiel: Die Klasse Rechner Die Klasse Rechner hat vier verschiedene Rechnungs-Methoden mit gleicher Signatur. class Rechner { public static double Addition(double x, double y) { return x + y; } public static double Subtraktion(double x, double y) { return x - y; } public static double Multiplikation(double x, double y) { return x * y; } public static double Division(double x, double y) { return x / y; } } Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Ein C# Beispiel: Das Hauptprogramm class Program { // Deklaration des Delegate  gleiche Signatur wie die Methoden von Rechner public delegate double RechnungsOperation(double d1, double d2); static void Main(string[] args) // Initialisierung des Delegats RechnungsOperation berechne = Rechner.Addition; do // Einlesen der Operation Console.Write("Operation: +, -, * oder / "); char wahl = Console.ReadLine()[0]; Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Ein C# Beispiel: Das Hauptprogramm // Zuweisen der ausgewählten Operation  der richtigen Methode switch (wahl) { case '+': berechne = Rechner.Addition; break; case '-': berechne = Rechner.Subtraktion; break; case '*': berechne = Rechner.Multiplikation; break; case '/': berechne = Rechner.Division; break; } Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Ein C# Beispiel: Das Hauptprogramm // Aufruf der Operation '+', '-', '*' oder '/' über das Delegat double resultat = berechne(input1, input2); // Ausgabe des Resultats Rechner.Ausgabe(wahl, x, y, resultat); Console.WriteLine("Beenden mit q, weiter mit w: "); } while (Console.ReadLine() != "q"); } Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012 Verwenden von Delegaten als Parameter Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Ein C# Beispiel: Die Methode Ausgabe Wir wählen nochmals das ursprüngliche Delegat RechnungsOperation: public delegate double RechnungsOperation(double d1, double d2); Die Methode Ausgabe hat als vierten Parameter eine Rechnungs-Operation (also ein Delegat) public static void Ausgabe(double d1, double d2, char c, RechnungsOperation berechne) { . . . } Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Ein C# Beispiel: Die Methode Ausgabe Die so übergebene Funktion kann dann innerhalb der Methode verwendet werden: public static void Ausgabe(double d1, double d2, char c, RechnungsOperation berechne) { Console.WriteLine("{0} {1} {2} = {3}\n", d1, c, d2, berechne(d1, d2)); } Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Beispiel Geometrische Figuren

Wählen der Zeichenfunktion Das Geometrische Objekt, welches gezeichnet werden soll, soll durch Knopfdruck ausgewählt werden können.

Auswählen der Zeichen Funktion public delegate void ZeichnenDelegate(MainWindow window); public ZeichnenDelegate WaehleFigur(string s) { GeomFigur gf = new GeomFigur(); ZeichnenDelegate zeichne; switch (s) case "Rechteck": zeichne = gf.ZeichneRechteck; break; case "Kreis": zeichne = gf.ZeichneKreis; break; case "Ellipse": zeichne = gf.ZeichneEllipse; break; case "Dreieck": zeichne = gf.ZeichneDreieck; break; default: zeichne = gf.ZeichnePolygon;break; } return zeichne; Definition des Delegate WaehleFigur hat ein Delegate als Rückgabewert. Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Zeichenfunktionen müssen delegate Definiton «erfüllen» public class GeomFigur { public void ZeichneRechteck(MainWindow window) Rechteck r = new Rechteck(s1); r.Zeichne(window); } public void ZeichneEllipse(MainWindow window) Ellipse r = new Ellipse(s1); . . . public delegate void ZeichnenDelegate(MainWindow window); Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Verwenden des Delegate public delegate void ZeichnenDelegate(MainWindow window); public void Main(MainWindow window, string s) { ZeichnenDelegate zeichne = WaehleFigur(s); zeichne(window); } public ZeichnenDelegate WaehleFigur(string s) GeomFigur gf = new GeomFigur(); ZeichnenDelegate zeichne; switch (s) case "Rechteck": zeichne = gf.ZeichneRechteck; break; case "Kreis": zeichne = gf.ZeichneKreis; break; . . . . return zeichne; Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012