Delegierte - Was sind sie wirklich?

7

Kann irgendjemand da draußen erklären, dass sie Analogien zu realen Prozessen verwenden - wie zum Beispiel Baseball-Teams, Cafés oder Automechaniker-Läden - alles, was Sinn macht? Wie können wir nicht einmal CODE, SYNTAX oder Programmierung sprechen - ich habe viele dieser Beiträge gesehen und keiner von ihnen tut es wirklich für mich - können wir nur Konzepte zuerst sprechen?

Ich verstehe nicht einmal, WARUM wir sie haben, wie sie vorteilhaft sind, usw.

Zeigen Sie mir die reale Analogie eines Prozesses mit und ohne Delegierte, damit ich sehen kann, was sie so nützlich und großartig macht.

Dann können wir es codieren.

(Zuzüglich, mein spezielles Interesse ist die Implementierung der Objective-C / iPhone App-Entwicklung - aber ich denke wirklich, dass das zuerst begriffen zu verstehen viel wichtiger ist.)

Danke im Voraus!

    
Sirab33 27.05.2011, 05:23
quelle

6 Antworten

5
  

Was sind sie wirklich?

Spezialisten

Kunde: Hallo - hast du mein Auto repariert?

Mitarbeiter: Ich schätze, dass wir es in weniger als einer Stunde sehen können. Ich werde dich anrufen, wenn es fertig ist.

Kunde: Ich habe schon 30 Minuten gewartet, und ich bin wirklich in Eile!

Mitarbeiter: Wir sind zu dieser Jahreszeit sehr beschäftigt.

Kunde: Sie scheinen nicht beschäftigt zu sein; Sie waren die ganze Zeit an der Rezeption!

Mitarbeiter: Ich bin kein Mechaniker. Ich bin der Manager. Willst du immer noch, dass ich deine Bremsen repariere?

Der Manager ist gut bei dem, was er tut; er schildert Probleme für die Kunden, Bestellungen Blinkerflüssigkeit, macht den Zeitplan und erledigt die Gehaltsabrechnung. Obwohl er Autos mag und viel über sie weiß, ist er kein Spezialist, um sie zu reparieren. Der Manager ist in der Lage, viele Dinge im Laden zu erledigen, aber es sind die Mechaniker, die das Know-how haben, um die Bremsen des Kunden zu reparieren.

Einer der häufigsten Gründe für die Delegierung ist, Unterklassen zu vermeiden (das wäre so, als würde man den Manager in die Schule schicken, um ein Mechaniker zu werden - eine Analogie, die viel wie eine Mehrfachvererbung aussieht). Wenn Unterklassen zur Spezialisierung verwendet werden können, wird häufig eine Delegierung verwendet. Die Delegation ist eine lockere Bindung, bei der (in einem guten Design) ein Objekt alle oder die meisten Aufgaben erfüllt, aber häufig spezialisierte Teile seiner Aufgaben anderen Implementierungen (den Delegierten) überlassen.

    
justin 27.05.2011, 06:55
quelle
8

Nicht alle Codierungsabstraktionen haben ein reales Äquivalent. Zum Beispiel wäre es schwierig, eine echte Analogie für die Seitenspeicherung zu finden. Anstatt also eine Analogie aus dem wirklichen Leben zu machen, werde ich Ihnen nur einen realen Fall geben, warum Sie sie brauchen.

Zuerst die erste Definition des Verbs zum Delegieren (aus dem Oxford Dictionary):

  

anvertrauen (eine Aufgabe oder Verantwortung)   eine andere Person, typischerweise jemand, der ist   weniger Senior als er selbst: Er   delegiert Routineaufgaben | die Macht   an ihn delegiert darf nie sein   missbraucht.

Delegierte sind Objekte, an die eine Verantwortung delegiert wird, weil es aus einer Design-Perspektive keinen Sinn ergab, dass eine einzige Klasse alle Aufgaben erledigt.

Nehmen wir an, Sie haben eine UI-Tabellenklasse. Sie möchten es wiederverwendbar machen, um viele Arten von Daten anzuzeigen: das heißt, dass Sie es größtenteils nicht an Ihr Modell selbst binden können. Wenn Sie beispielsweise Ihre UI-Tabelle speziell für die Anzeige von Albumobjekten (mit einem Namen, einem Interpreten usw.) konfiguriert haben, können Sie sie nicht erneut verwenden, um z. B. Dateiobjekte (mit einem Eigentümer oder einem Dokumenttyp) anzuzeigen usw.): Sie müssten die Klasse bearbeiten, um sie anzupassen. Dies wird eine Menge Code duplizieren, also sollten Sie einen anderen Mechanismus finden. Dies führt zu einem Problem: Wie kann es irgendwelche Arten von Daten anzeigen, wenn es nicht erlaubt ist, an die Datenklassen anzuknüpfen?

Die Lösung besteht darin, die Verantwortung für das Abrufen der Daten und das Anzeigen der Daten zu teilen. Da Ihre Tabelle die Daten benötigt, um sie anzuzeigen, sie aber nicht selbst ermitteln kann, weil sie nichts über Ihr Modell weiß, sollte sie diese Verantwortung an eine andere Klasse delegieren, die genau zu diesem Zweck erstellt wurde, und sie griffbereit haben die Informationen zurück in einer allgemeinen Form, die die Tabelle verwenden kann.

Dies bedeutet, dass Sie eine andere Klasse haben, die auf eine bestimmte Anzahl von Methoden reagiert, die das Tabellenobjekt verwendet, als ob es Teil seines Kernverhaltens wäre (z. B. eine Methode auf dem Delegaten, um den Namen des Spalten, ein anderer, um eine bestimmte Zeile zu erhalten, usw.). Ein konkretes Beispiel finden Sie in der NSTableViewDelegate Protokollreferenz: Dies sind die Methoden, die NSTableView ihren Delegaten aufrufen kann, um Informationen über verschiedene Dinge oder individuelles Verhalten zu erhalten. (Das tableView: -Argument im Grunde jede Methode identifiziert die Tabellenansicht, die die Methode aufruft. Sie wird oft ignoriert, da viele Table View-Delegate-Klassen existieren, um eine einzelne Tabellenansicht zu unterstützen.)

Delegierte sind Objekte, die einfach "besser wissen". Ihre UI-Tabelle hat keine Ahnung, wie sie das erhält, was sie benötigt, aber sie hat einen Delegierten, der "sich besser auskennt", damit sie die Daten von ihr anfordern kann.

Sie können dieses Muster auch verwenden, um mit Ereignissen umzugehen: Wenn zum Beispiel auf eine Ansicht geklickt wird, weiß sie nicht, was zu tun ist, aber vielleicht hat sie einen Delegaten, der weiß, was zu tun ist.

Mit anderen Worten, Delegaten sind eine der wenigen Möglichkeiten, das Verhalten einer Klasse zu erweitern, ohne sie zu verändern oder zu untergliedern.

    
zneak 27.05.2011 05:41
quelle
2

Ein Delegierter ist so etwas wie ein Assistent. Ihr Assistent wird Ihr Telefon / Ihre E-Mail beantworten und Nachrichten zwischen Ihnen und anderen Personen hin und her senden. Er / Sie könnte auch Dinge sammeln, die Sie benötigen, wie etwa Vorräte oder Informationen. In der Programmierung sind Delegierte noch nützlicher. Die Menschen können selbst neue Fähigkeiten erlernen, Programme jedoch nicht. Stattdessen erstellen Sie ein Objekt, das die allgemeine Funktion ausführt, und verwenden Delegaten, um die spezialisierte Arbeit auszuführen. Auf diese Weise können Sie so viel Code wie möglich wiederverwenden und dabei so viele Anwendungsfälle wie möglich abdecken. Der Delegat erhält Nachrichten vom Objekt, die ihn über den Status der Operation informieren, und er gibt und empfängt Daten nach Bedarf.

    
ughoavgfhw 27.05.2011 05:42
quelle
2

Delegation ist ein Entwurfsmuster. In Cocoa und Cocoa Touch implementieren bestimmte Framework-Klassen dieses Muster, sodass Sie keine Unterklassen erstellen müssen, um ihr Verhalten zu ändern.

Ein typisches Beispiel für die Delegierung ist die Entscheidung, ob ein Fenster geschlossen werden soll oder nicht. Wenn der Benutzer die Schließen-Schaltfläche drückt, erhält der Stellvertreter des Fensters -windowShouldClose: und kann entweder YES zurückgeben, wenn das Fenster keine Änderungen enthält, die gespeichert werden sollen, oder NO, wenn Sie dem Benutzer eine Chance geben möchten Speichern Sie ein Dokument, bevor Sie das Fenster schließen.

In einem anderen Beispiel empfängt das Objekt NSStream Daten, aber es implementiert kein Verhalten, um etwas mit diesen Daten zu tun. Es verwendet das Delegierungsmuster; Wenn Daten zum Lesen verfügbar sind, sendet es eine Nachricht an seinen Stellvertreter, um ihm mitzuteilen, dass Daten verfügbar sind. Der Delegat kann dann die eingehenden Daten bearbeiten und die NSStream dazu veranlassen, weiter auf weitere Daten zu warten oder die Verbindung zu schließen.

    
NSResponder 27.05.2011 05:40
quelle
2

Kurz gesagt, ein Delegierter ist Spezialist für eine bestimmte Aufgabe.

Betrachten Sie als Analogie in der realen Welt jemanden, der eine Bäckerei mit mehreren Mitarbeitern besitzt und betreibt. Die Person, die die Bäckerei leitet, hat ein hohes Verständnis von Backen und macht die grundlegenden Kuchen nach dem speziellen Rezept, aber ihre Hauptaufgabe besteht darin, die Bestellungen für Kuchen und Patisserie zu verwalten und sicherzustellen, dass sie gut gehandhabt werden.

Wenn eine Bestellung für eine Hochzeitstorte eingeht, bereitet der Besitzer den Teig und den Basiskuchen entsprechend vor und delegiert das eigentliche Backen an den Patissier, der sich darauf spezialisiert hat, Hochzeitstorten zu backen, um alle Details herzustellen und die Vereisung.

In einem anderen Szenario kann der Läufer der Bäckerei eine Bestellung für einen Kuchen erhalten, der spezielle Anforderungen hat. Er weiß, dass sie mit all den grundlegenden Dingen umgehen kann, muss aber mit seinen Angestellten nachfragen, ob diese Bitte erfüllt werden kann: Zuerst fragt er ihren Patissier, ob er damit klarkommt und vielleicht was sie braucht. Er fragt dann ihren Buchhalter, ob sie all diese Zutaten auf Lager haben oder rechtzeitig bekommen können. Die Entscheidung, ob die Anfrage erfüllt werden kann, wird also an die Mitarbeiter delegiert.

Ersetze jetzt den Läufer der Bäckerei mit einem UITableView , den Patissier mit id <UITableViewDelegate> und den Buchhalter mit id <UITableViewDataSource> und wir sind zurück zum sprechenden Code.

    
danyowdee 27.05.2011 06:16
quelle
1

Sie können sich einen Delegierten als Sekretär eines Vorstandsmitglieds vorstellen. Sehen wir uns an, wie wir ans Telefon gehen und seine Agenda / Meetings einhalten.

Jeder Mensch (Superklasse?;)) kann auf eine Telefonanzeige einen Termin vereinbaren. Aber jeder einzelne Mensch wie du oder ich, macht es auf seine Weise. Das heißt, ich habe eine bessere Stimmung (HumanMood *); Funktion, die sich von Ihren unterscheidet.

Jetzt würden alle Vorstandsmitglieder das auch haben, aber sie können sich nicht darum kümmern, wenn sie bei der Arbeit sind, weil sie andere Dinge zu tun haben, wir wollen sie nicht mit diesen niederen Aufgaben belasten. Oft ist auch nicht klar, für wen der Anruf bestimmt ist, oder mehrere Personen müssen an demselben Meeting teilnehmen. Hier betreten wir die Sekretärin, sie weiß, wie man mit den verschiedenen Anrufen umgeht, Termine festlegt und den Überblick für das ganze Board hat.

Es ist nicht nur nützlich, dass sie das Telefon für uns beantwortet (Delegierte), sondern wir möchten, dass sie alle Anrufe beantwortet, damit sie den Überblick behält. Diese Anrufe sind Informationen, die sie benötigt, um ihre Arbeit richtig zu machen. Außerdem werden alle Anrufe für ein Vorstandsmitglied eher allgemein gehalten, so dass nicht jedes Vorstandsmitglied seinen eigenen Weg gehen muss.

In diesem Fall ist die Sekretärin offensichtlich die Delegierte.

Hoffe, das macht es für Sie klarer.

    
ophychius 27.05.2011 05:42
quelle

Tags und Links