Kann jemand in einfachen Worten das Muster "Signale und Schlitze" erklären?
Antwort
Zu viele Anzeigen?Es gibt ein weit verbreitetes Missverständnis, dass Klassen Substantive wie Person, Hund, Fahrrad und so weiter sind. Dann macht es Sinn, zu denken, dass eine Person (Instanz) einen Hund und ein Fahrrad hat.
Beginnen wir damit, was Objekte sind (sein sollen). Objekte sind Daten und Prozeduren. Was sind Programme? Daten und Prozeduren. Objekte sollen (relativ) "kleine" unabhängige Unterprogramme sein. Da die oo-Programmierung sehr vage gelehrt und missbraucht wird (Zitat erforderlich), denken die Leute, alles müsse eine Klasse oder ein Objekt sein. Das ist nicht so, Objekte sind "kleine" unabhängige Programme mit einer "kleinen" API (öffentliche Unterprogramme). Manche Programmierer zerlegen ihr Projekt nicht einmal in Unterprogramme und verwenden einfach Objekte, wo Daten und Prozeduren besser geeignet sind.
Wenn wir nun davon ausgehen, dass Objekte Programme sind, können wir uns darauf einigen, dass Programme in den meisten Fällen keine Kopien anderer Programme ähnlicher Größe und Komplexität benötigen (d.h. ein Objekt braucht keinen Zeiger auf ein anderes Objekt), es braucht vielleicht kleinere Programme zur Verwaltung von Daten (wie Datenstrukturen), aber imho braucht es kein anderes Objekt.
Warum? Weil die Kopplung von Objekten sie abhängig macht. Warum ist das schlecht? Wenn Objekte unabhängig sind, können Sie sie testen und anderen Programmierern und Kunden versprechen, dass das Objekt (ein kleines unabhängiges Programm) in der Lage ist, bestimmte Aufgaben mit hoher Sicherheit auszuführen. Man kann auch sicher sein, dass es weiterhin funktioniert, solange keine Änderungen an dem Objekt vorgenommen werden.
Was sind also Schlitze und Signale? Wenn Sie verstehen, dass Objekte wie Programme sind und idealerweise keine Kopien oder Zeiger auf andere Objekte haben sollten, dann brauchen Sie eine Möglichkeit für ihre Kommunikation. Prozesse, die auf Ihrem Computer ablaufen, können zum Beispiel Sockets, IP-Adressen und Ports zur Kommunikation verwenden. Objekte können etwas sehr ähnliches verwenden wie RPC Signale und Zeitnischen genannt. Dabei handelt es sich um eine Datenstruktur, die als Vermittler zwischen zwei größeren Objekten gedacht ist und die Unterprogramme des Objekts speichert ( slots
) und erlauben anderen Objekten den Aufruf ( signal
) diese Subroutinen ( slots
) mit geeigneten Parametern, ohne etwas anderes über diese anderen Objekte zu wissen als die Parameter, die sie benötigen.
Die zugrunde liegende Struktur sind also Mengen (möglicherweise Arrays) von (möglicherweise) stark typisierten Prozedurzeigern, die andere Objekte mit geeigneten Parametern aufrufen können, ohne einen Zeiger auf diese Objekte zu haben. Die Aufrufer benötigen stattdessen nur Zugriff auf das Signalobjekt (das keine Implementierungsdetails enthält), das die erwarteten Parameter definiert.
Dies ist auch deshalb flexibel, weil es einige spezielle Anwendungsfälle zulässt, z. B. Slots, die nur einmal auf das Signal reagieren, mehrere Slots für ein Signal und andere ähnliche Anwendungsfälle wie Entprellung.
- See previous answers
- Weitere Antworten anzeigen