„Kommando (Entwurfsmuster)“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
[gesichtete Version][ungesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
In der [[Objektorientierte Programmierung|objektorientierten Programmierung]] ist '''Kommando''' (auch Befehl; englisch ''Command'') ein [[Entwurfsmuster]], bei dem das Kommando-[[Objektorientierung|Objekt]] alle zum Aufruf einer [[Methode (objektorientierte Programmierung)|Methode]] notwendigen Informationen enthält, sowie den Empfänger der Methode. Es ist eines der [[Viererbande (Softwareentwicklung)|GoF]]-Muster, das zur Kategorie der Verhaltensmuster (''Behavioral Patterns'') gehört.
In der [[Objektorientierte Programmierung|objektorientierten Programmierung]] ist '''Kommando''' (auch Befehl; englisch ''Command'') ein [[Entwurfsmuster]], bei dem das Kommando-[[Objektorientierung|Objekt]] alle zum Aufruf einer [[Methode (objektorientierte Programmierung)|Methode]] notwendigen Informationen enthält, sowie den Empfänger der Methode. Es ist eines der [[Viererbande (Softwareentwicklung)|GoF]]-Muster, das zur Kategorie der Verhaltensmuster (''Behavioral Patterns'') gehört.


HAHHAHAHA
== Verwendung ==
== Verwendung ==
Wenn z. B. eine Schaltfläche in einer [[Grafische Benutzeroberfläche|GUI]] mit einer Aktion verknüpft werden soll, dient das Kommando dazu, die auszuführende Aktion zu parametrisieren. Es stellt somit die objektorientierte Entsprechung zu den [[Rückruffunktion]]en (''callback function'') dar. Dabei können das Erstellen des Kommandos und die tatsächliche Ausführung zu verschiedenen Zeiten oder in einem anderen Kontext (Thread, Prozess, Rechner) stattfinden.
Wenn z. B. eine Schaltfläche in einer [[Grafische Benutzeroberfläche|GUI]] mit einer Aktion verknüpft werden soll, dient das Kommando dazu, die auszuführende Aktion zu parametrisieren. Es stellt somit die objektorientierte Entsprechung zu den [[Rückruffunktion]]en (''callback function'') dar. Dabei können das Erstellen des Kommandos und die tatsächliche Ausführung zu verschiedenen Zeiten oder in einem anderen Kontext (Thread, Prozess, Rechner) stattfinden.

Version vom 14. April 2011, 09:08 Uhr

In der objektorientierten Programmierung ist Kommando (auch Befehl; englisch Command) ein Entwurfsmuster, bei dem das Kommando-Objekt alle zum Aufruf einer Methode notwendigen Informationen enthält, sowie den Empfänger der Methode. Es ist eines der GoF-Muster, das zur Kategorie der Verhaltensmuster (Behavioral Patterns) gehört.

HAHHAHAHA

Verwendung

Wenn z. B. eine Schaltfläche in einer GUI mit einer Aktion verknüpft werden soll, dient das Kommando dazu, die auszuführende Aktion zu parametrisieren. Es stellt somit die objektorientierte Entsprechung zu den Rückruffunktionen (callback function) dar. Dabei können das Erstellen des Kommandos und die tatsächliche Ausführung zu verschiedenen Zeiten oder in einem anderen Kontext (Thread, Prozess, Rechner) stattfinden.

Implementierung eines Rückgängig-Mechanismus (Undo): Bei jeder Ausführung werden die zur Umkehrung nötigen Daten im Objekt gespeichert und das Objekt selber auf einem Stapel gesichert. Um das Gegenteil Wiederherstellen (Redo) zu implementieren, genügt ein zweiter Stapel für die rückgängig gemachten Befehle.

Akteure

UML-Klassendiagramm
UML-Klassendiagramm

Der Befehl ist die Basisklasse aller Kommandos. Ein Konkreter Befehl speichert den zum Ausführen nötigen Zustand, darunter typischerweise auch einen Verweis auf den Empfänger und implementiert die Befehlsschnittstelle.

Der Klient erzeugt einen konkreten Befehl und versieht ihn mit einem Verweis auf den Empfänger und allen anderen nötigen Informationen. Er gibt dem Aufrufer eine Referenz auf den konkreten Befehl.

Der Aufrufer besitzt einen oder mehrere Verweise auf Befehle und fordert diese bei Bedarf auf, ihre Aktion auszuführen. An den Empfänger werden keine besonderen Anforderungen gestellt. Er muss nichts über die anderen Akteure wissen. Somit kann jede Klasse als Empfänger dienen. Der konkrete Befehl ruft Methoden des Empfängerobjektes auf, um seine Aktion auszuführen.

Vor- & Nachteile

Auslösender und Ausführender sind entkoppelt. Befehlsobjekte können wie andere Objekte auch manipuliert werden (Verändern, Filtern, Zwischenspeichern, …). Befehlsobjekte können zu komplexen Befehlen kombiniert werden (Makros, realisiert als Kompositum).

Da für jedes Kommando eine neue Klasse benötigt wird, kann deren Anzahl schnell groß und die Implementierung damit unübersichtlich werden.

Beispiel

Die Verknüpfung von GUI-Elementen stellt ein einfaches Beispiel mit Schaltflächen oder Menüpunkten dar:

  • Konkrete Befehle realisieren dann Aktionen wie Datei öffnen, Rückgängig oder Schreibmarke nach rechts
  • Klienten sind die Applikation oder Dialoge.
  • Aufrufer sind Schaltflächen, Menüpunkte oder Hotkeys.
  • Empfänger sind die Applikation (Datei öffnen) oder das Dokument (Rückgängig, Einfügemarke nach rechts)

Weblinks

Vorlage:Navigationsleiste Entwurfsmuster der Viererbande