Verantwortungsgetriebenes Design
Verantwortungsgetriebenes Design ist eine Designtechnik in Objekt orientierte Programmierung, was die Kapselung durch Verwendung der verbessert Client -Server -Modell. Es konzentriert sich auf die Vertrag durch Betrachtung der Handlungen, dass die Objekt ist verantwortlich für und die Informationen, die das Objekt teilt. Es wurde vorgeschlagen von Rebecca Wirfs-Brock und Brian Wilkerson.
Verantwortungsgetriebenes Design steht im direkten Gegensatz zum datengesteuerten Design, wodurch das Verhalten einer Klasse zusammen mit den von ihr gehaltenen Daten definiert wird. Das datengesteuerte Design ist nicht das gleiche wie datengesteuerte Programmierung, was sich darum befasst, Daten zu verwenden, um die zu bestimmen Steuerfluss, nicht Klassengestaltung.
In dem Client -Server -Modell Sie beziehen sich auf, sowohl der Client als auch der Server sind Klassen oder Instanzen von Klassen. Zu einem bestimmten Zeitpunkt repräsentiert entweder der Client oder der Server ein Objekt. Beide Parteien verpflichten sich zu a Vertrag und Informationen austauschen, indem Sie sich daran einhalten. Der Client kann nur die im Vertrag angegebenen Anfragen stellen und der Server muss diese Anfragen beantworten.[1] Daher versucht das verantwortungsgetriebene Design, mit Details umzugehen, z. B. die Art und Weise, wie Anfragen durchgeführt werden, indem stattdessen nur die Absicht einer bestimmten Anfrage angegeben wird. Der Nutzen wird erhöht VerkapselungDa die genaue Art und Weise, wie eine Anfrage durchgeführt wird, für den Server privat ist.
Um die Einkapselung des Servers zu fördern, fordern WIRFS-Brock und Wilkerson Sprachmerkmale, die den Einfluss des Außeneinflusses auf das Verhalten einer Klasse beschränken. Sie fordern, dass die Sichtbarkeit von Mitgliedern und Funktionen fein körnig sein sollte, wie in Eiffel Programmiersprache. Selbst feinere Kontrolle über die Sichtbarkeit gleichmäßiger Klassen ist in der verfügbar Zeitungen Programmiersprache.
Überblick
Verantwortungsgetriebenes Design konzentriert sich auf die Objekte als Verhaltensabstraktionen die durch ihre Verantwortlichkeiten gekennzeichnet sind. Das CRC-Karte Die Modellierungstechnik wird verwendet, um diese Verhaltensabstraktionen zu generieren. Der Rest der Objektstruktur einschließlich Datenattribute wird später nach Bedarf zugewiesen.[2] Dies führt dazu, dass das Design die Typhierarchie für die Vererbung befolgt, die die Kapselung verbessert und die Identifizierung erleichtert Abstrakte Klassen. Es kann auch die Klassen basierend auf ihren Kunden zusammenarbeiten, was als einzigartige Fähigkeit angesehen wird.
Ein gutes objektorientiertes Design beinhaltet einen frühen Fokus auf Verhaltensweisen, um die Fähigkeiten zu realisieren, die die angegebenen Anforderungen erfüllen, und eine verspätete Bindung der Implementierungsdetails an die Anforderungen. Dieser Ansatz hilft insbesondere zur Dezentralisierung der Steuerung und zur Verteilung des Systemverhaltens verteilte Systeme. In ähnlicher Weise kann es helfen, Erklärungseinrichtungen für zu entwerfen und aufrechtzuerhalten Kognitive Modelle, intelligente Agenten, und andere Wissensbasierte Systeme.[3]
Bausteine
In ihrem Buch Objektdesign: Rollen, Verantwortlichkeiten und Kooperationen,[4] Die Autoren beschreiben die folgenden Bausteine, aus denen das Verantwortungssteuerdesign besteht.
- Anwendung: Eine Softwareanwendung wird als Reihe interagierender Objekte bezeichnet.[5]
- Kandidaten: Kandidaten oder Kandidatenobjekte sind Schlüsselkonzepte in Form von Objekten, die auf CRC -Karten beschrieben werden. Sie dienen als erste Erfindungen im Prozess des Objektdesigns.[6]
- Zusammenarbeit: Eine Zusammenarbeit wird als Interaktion von Objekten oder Rollen (oder beides) definiert.[5]
- CRC -Karten: CRC steht für Kandidaten, Verantwortlichkeiten, Mitarbeiter. Sie sind Karteikarten, die im frühen Design für die Aufnahme von Kandidaten verwendet werden.[7] Diese Karten werden in eine nicht ausgekleidete und eine ausgekleidete Seite aufgeteilt.
- Inhalt der gesäumten Seite: Auf dieser Seite werden der Name des Kandidaten, seine Verantwortlichkeiten und seine Mitarbeiter aufgezeichnet.[7]
- Inhalt der unbegrenzten Seite: Auf dieser Seite der Name des Kandidaten, sein Zweck in der Anwendung, Stereotypenrollen und alles, was sich lohnt, wie die Namen von Rollen in Mustern, an denen sie teilnehmen, werden aufgezeichnet.[7]
- Hot Spots: Hotspots sind Punkte in der Anwendung, an denen Variationen auftreten. Sie werden mit Hot Spot -Karten aufgenommen.[8]
- Hot -Spot -Karten: Hotspot -Karten werden zum Aufnehmen von Variationen mit gerade ausreichend Details verwendet, damit Sie wichtige Unterschiede unterscheiden können. Ähnlich wie bei CRC -Karten werden diese auch aus erstellt Karteikarten.[8] Diese Karten bestehen aus:
- Hotspot Name
- Allgemeine Beschreibung der Variation
- Mindestens zwei spezifische Beispiele, bei denen die Variation auftritt
Objekte
Objekte werden als Dinge beschrieben, die maschinenähnliche Verhaltensweisen haben, die zusammengefügt werden können, um zusammen zu arbeiten. Diese Objekte spielen gut definierte Rollen und verkapseln Sie Skriptantworten und Informationen.[5]
- Objektviertel: Ein weiterer Begriff für Subsystem.[9] Es ist eine logische Gruppierung von Mitarbeitern.[9]
- Verantwortlichkeiten: Eine Verantwortung ist eine Verpflichtung, eine Aufgabe auszuführen oder Informationen zu kennen.[5] Diese werden weiter nach ihrem Nutzungsszenario eingeteilt.
- Öffentliche Aufgaben: Öffentliche Verantwortung sind die Verantwortlichkeiten, die ein Objekt als Dienstleistungen für andere und die Informationen für andere anbietet.[10]
- Private Verantwortlichkeiten: Private Verantwortlichkeiten sind die Maßnahmen, die ein Objekt zur Unterstützung der öffentlichen Verantwortung ergriffen.[10]
- Unterrespektivitäten: Manchmal wird eine große oder komplizierte Verantwortung in kleinere als Unterreaktion aufgeteilt.[11] Sie werden weiter basierend auf dem, was sie tun, kategorisiert.
Rollen
Die Objektrolle bezieht sich auf eine äußere Sichtweise dessen, was der allgemeine Dienst vom Objekt angeboten wird. Es ist eine Reihe verwandter Verantwortlichkeiten.[5] Es kann als Klasse oder Schnittstelle implementiert werden. Die Schnittstelle ist jedoch die bevorzugte Implementierung, da sie die Flexibilität erhöht, indem sie die konkrete Klasse versteckt, was letztendlich die Arbeit erledigt.[12]
Rollenstereotypen: Rollenstereotypen sind vereinfachte Rollen, die mit vordefinierten Verantwortlichkeiten verbunden sind.[13] Es gibt verschiedene Kategorien.
- Controller: Objekt, das diese Rolle implementiert, trifft Entscheidungen und leitet die Aktion anderer Objekte genau.[13]
- Koordinator: Diese Rolle reagiert auf Ereignisse, indem sie Aufgaben an andere delegieren.[13]
- Informationsinhaber: Informationsinhaber kennt und bietet Informationen.[13]
- Informationsanbieter: Eine geringfügige Variation eines Informationsinhabers ist der Informationsanbieter, der eine aktivere Rolle bei der Verwaltung und Aufrechterhaltung von Informationen spielt. Diese Unterscheidung kann verwendet werden, wenn ein Designer genauer werden muss.[14]
- Interfacer: Diese Rolle verwandelt Informationen und Anfragen zwischen verschiedenen Teilen einer Anwendung.[13] Es ist weiter in spezifischere Rollen unterteilt.
- EXTERNAL INTERFACER: Der externe Interfacer kommuniziert eher mit anderen Anwendungen als mit seinen eigenen.[14] Es wird hauptsächlich zur Einkapselung von nicht objektorientierten APIs verwendet und arbeitet nicht viel zusammen.[15]
- Interner Interfacer: Auch Intersystem -Interfacer genannt.[14] Es fungiert als Brücke zwischen Objektvierteln.[15]
- Benutzer interfacer: Der Benutzer interfacer kommuniziert mit Benutzern, indem er auf Ereignisse reagiert, die in der Benutzeroberfläche generiert werden, und sie dann an entsprechendere Objekte weitergeben.[14][15][16]
- Dienstleister: Diese Rolle führt Arbeit durch und bietet Computerdienste an.[14]
- Strukturer: Diese Rolle hält die Beziehungen zwischen Objekten und Informationen über diese Beziehungen auf.[14]
Kontrollstil
Ein wichtiger Teil des Verantwortungssteuerungsprozesses ist die Verteilung der Kontrollverantwortung, die zur Entwicklung eines Kontrollstils führt. Ein Kontrollstil ist besorgt über den Kontrollfluss zwischen Subsystemen.
- Kontrollkonzept: Die Verantwortlichkeiten und Zusammenarbeit zwischen den Klassen.[17]
- Kontrollzentren: Ein wichtiger Aspekt der Entwicklung eines Kontrollstils ist die Erfindung sogenannter Kontrollzentren. Dies sind Orte, an denen Objekte, die mit der Kontrolle und Koordinierung geladen sind, wohnen.[18]
- Variationen des Kontrollstils: Ein Kontrollstil ist in drei unterschiedlichen Variationen erhältlich. Dies sind jedoch keine genauen Definitionen, da ein Kontrollstil als zentraler oder delegierter als ein anderer bezeichnet werden kann.
Zentralisierter Kontrollstil
Dieser Kontrollstil fügt ein prozedurales Paradigma für die Struktur der Anwendung zu und sorgt für die Verantwortung der Hauptabschlüsse in nur wenigen Objekten oder einem einzelnen Objekt.
- Typen
- Call-Return-Modell: Die Kontrolle der Objekte in der Anwendung ist in hierarchischer Weise. Die Kontrolle beginnt bei Wurzel und bewegt sich nach unten. Es wird in einem sequentiellen Modell verwendet.
- Manager -Modell: Die Steuerung der Objekte in der Anwendung ist nur mit einem Objekt. Im Allgemeinen wird es in gleichzeitigen Modellen implementiert. Es kann auch im sequentiellen Modell verwendet werden Fallerklärung.
- Vorteile
- Die Anwendungslogik befindet sich an einem Ort.
- Nachteile
- Kontrolllogik kann zu komplex werden
- Controller können vom Inhalt der Informationsinhaber abhängig werden
- Objekte können indirekt durch die Handlungen ihres Controllers gekoppelt werden
- Die einzige interessante Arbeit wird im Controller erledigt
- Wann zu verwenden
Wenn Entscheidungen zu treffen sind, sind nur wenige, einfache und mit einer einzelnen Aufgabe bezogen.
Delegierter Kontrollstil
Ein delegierter Kontrollstil liegt zwischen einem zentralisierten und dispergierten Kontrollstil. Es gibt einige der Entscheidungsfindung und einen Großteil der Aktion an Objekte, die ein Kontrollzentrum umgeben. Jedes benachbarte Objekt spielt eine bedeutende Rolle. Es kann auch als ereignisgesteuertes Modell bezeichnet werden, wobei die Steuerung an das Objekt delegiert wird, das es auffordert, das Ereignis zu verarbeiten.
- Typen [Referenz]
- Rundfunkmodell: Ein Ereignis wird an alle Objekte in der Anwendung übertragen. Das Objekt, das das Ereignis verarbeiten kann, kann die Kontrolle erwerben.
- Interruptgetriebenes Modell: Es wird das geben unterbrechen Handler, um den Interrupt zu verarbeiten, und übergeben an ein Objekt, um ihn zu verarbeiten.
- Vorteile
- Es ist leicht zu verstehen.
- Obwohl es einen externen Koordinator gibt, können Objekte intelligenter gemacht werden, um zu wissen, was sie tun sollen, und in anderen Anwendungen wiederverwendet werden.
- Delegierende Koordinatoren neigen dazu, weniger Objekte zu kennen als dominierende Controller.
- Dialoge sind höher.
- Es ist einfach zu ändern, da Änderungen normalerweise weniger Objekte betreffen.
- Es ist einfacher, Designarbeit unter Teammitgliedern zu teilen.
- Nachteile
- Zu viel Verteilung der Verantwortung kann zu schwachen Objekten und schwachen Zusammenarbeit führen
- Wann zu verwenden
Wenn man Arbeit an Objekte delegieren möchte, die spezialisierter sind.
Clustered Control Style
Dieser Kontrollstil ist eine Variation des zentralisierten Kontrollstils, bei dem die Kontrolle unter einer Gruppe von Objekten berücksichtigt wird, deren Aktionen koordiniert werden.[19] Der Hauptunterschied zwischen einem Cluster- und einem delegierten Kontrollstil besteht darin, dass sich die Entscheidungsobjekte im Cluster -Kontrollstil in einem Kontrollzentrum befinden, während sie sich in einem delegierten Kontrollstil größtenteils außerhalb von außen befinden.[20]
Verteilter Kontrollstil
Ein dispergierter Kontrollstil enthält keine Kontrollzentren. Die Logik wird über die gesamte Bevölkerung von Objekten verteilt, wodurch jedes Objekt klein ist und so wenige Abhängigkeiten zwischen ihnen wie möglich aufbaut.[21]
- Vorteile
- Keiner
- Nachteile
- Wenn Sie herausfinden möchten, wie etwas funktioniert, müssen Sie die Abfolge von Anfragen nach Diensten in vielen Objekten verfolgen
- Nicht sehr wiederverwendbar, weil kein einzelnes Objekt viel beiträgt
- Wann zu verwenden
Niemals.
Bevorzugter Kontrollstil
Nach umfangreichen Ergebnissen der durchgeführten Experimente verfügt nur über die Senior Management über die erforderlichen Fähigkeiten, um Programmierer des delegierten Kontrollstils und zentralisierten Kontrollstils zu nutzen. Es wird kein Kontext über die Mitarbeiter mit mittlerer Ebene erwähnt.[17]
Verweise
- ^ Wirfs-Brock, Rebecca; Wilkerson, Brian (1989). "Objektorientiertes Design: Ein verantwortungsgetriebener Ansatz". ACM Sigplan nennt. 24 (10): 74. doi:10.1145/74878.74885.
- ^ Anthony J. H. Simons; Monique Snoeck; Kitty Hung (1998). "Entwurfsmuster als Lackmuspapier, um die Stärke objektorientierter Methoden zu testen". Oois'98. S. 129–147. Citeseerx 10.1.1.130.8713. doi:10.1007/978-1-4471-0895-5_10. ISBN 978-1-85233-046-0.
- ^ Steven R. Haynes; Isaac G. Councill; Frank E. Ritter (2004). "Verantwortungsgetriebene Erklärung Engineering für kognitive Modelle".
- ^ Wirfs-Brock, Rebecca; McKean, Alan (2003). Objektdesign: Rollen, Verantwortlichkeiten und Kooperationen. Indianapolis, in: Addison-Wesley. ISBN 978-0201379433.
- ^ a b c d e Wirfs-Brock & McKean 2002, S. 3
- ^ Wirfs-Brock & McKean 2002, S. 58
- ^ a b c Wirfs-Brock & McKean 2002, S. 61
- ^ a b Wirfs-Brock & McKean 2002, S. 72
- ^ a b Wirfs-Brock & McKean 2002, S. 17
- ^ a b Wirfs-Brock & McKean 2002, S. 126
- ^ a b c Wirfs-Brock & McKean 2002, S. 168
- ^ Wirfs-Brock & McKean 2002, S. 340
- ^ a b c d e Wirfs-Brock & McKean 2002, S. 4
- ^ a b c d e f Wirfs-Brock & McKean 2002, S. 93
- ^ a b c Wirfs-Brock & McKean 2002, S. 165
- ^ Wirfs-Brock & McKean 2002, S. 164
- ^ a b Eric, Arisholm; Dag I.K., Sjoberg (2004). "Bewertung des Effekts eines delegierten versus zentralisierten Kontrollstils auf die Wartbarkeit objektorientierter Software". IEEE -Transaktionen auf Software -Engineering. 30 (8): 521–534. doi:10.1109/tse.2004.43. S2CID 6396127.
- ^ Wirfs-Brock & McKean 2002, S. 196
- ^ Wirfs-Brock & McKean 2002, S. 197
- ^ Wirfs-Brock & McKean 2002, S. 213
- ^ Wirfs-Brock & McKean 2002, S. 30
Literaturverzeichnis
- Objektorientiertes Design: Ein verantwortungsgetriebener Ansatz. In Konferenzverfahren zu objektorientierten Programmiersystemen, Sprachen und Anwendungen (New Orleans, Louisiana, USA, 2. bis 06.-06. Oktober 1989). Oopsla '89. ACM Press, New York, NY, 71-75.
- Wirfs-Brock, Rebecca; McKean, Alan (November 2002). Objektdesign: Rollen, Verantwortlichkeiten und Kooperationen. Addison Wesley. ISBN 978-0-201-37943-3.