Doofe Frage: delikate Delegates?

frauenPower

frauenPower

Aktives Mitglied
Thread Starter
Dabei seit
21.06.2011
Beiträge
287
Reaktionspunkte
75
Hallo in die Runde,

ich möchte gerne ein wenig für meinen iMac und mein iPhone programmieren und habe derzeit zwei Bücher, mit denen ich arbeite:
Mac Programmierung für Kids und Objective-C und Cocoa für Einsteiger und Experten.

Mein derzeitiges Lernziel ist das ich verstehen möchte, was ein Delegate ist und eben auch ein Beispiel dafür haben.

Habe mir auch diese Seite ergoogelt:
http://www.hinzberg.net/csharp/csharp/csharp/delegates.html

Hübsch aber gänzlich unverständlich.
Wenn ich doch zwei Methoden habe, wo stehen die eigentlich :confused:, wieso muss ich die dann über ein Delegate umständlich aufrufen :eek:

Klasse - Subklasse = logisch und nachvollziehbar. Subklasse kann die Methoden der Superklasse nutzen oder eben auch überschreiben.

Delegates :confused:

Ach ja, hier war ich auch schon:
http://cocoa-coding.de/sprache/delegates.html
Was Sie vielleicht nicht wissen, viele der Klassen im Cocoa Framework haben eine spezielle Instanzvariable mit Namen delegate. Über diese delegate-Objekt ist es einem Objekt möglich, sich mitzuteilen und Aufgaben an andere Objekte zu delegieren. Das delegate bestimmt wem, also welchem anderen Objekt, sich das Objekt mitteilt.

Gibt es das auch auf Deutsch? Da habe ich ein delegate-Objekt, was eigentlich eine Instanzvariable ist, und dies ist wohl irgendwas von einem anderen Objekt (von welchem eigentlich?), was wiederrum Aufgaben an ein anderes Objekt abgibt?

Helft einer armen Frau. Bitte. Vielleicht mit einem verständlichen Beispiel.

Daaanke
Karin
 
das C# delegate hat aber anscheinend nicht viel mit einem cocoa delegate zu tun...
bei deinem programmier versuchen wirst du es meist auch nur mit einem app delegate zu tun haben, welches quasi deine haupt-klasse ist, wo du den programm ablauf steuerst.
viel geschieht da aber auch über die bindings und controller klassen...
 
Aha :confused:

suche mal weiter...
 
Also, Subclass und Delegate sind der Unterschied zwischen Inheritance und Composition. Oder, wie Aaron Hillegass sagt, der Unterschied zwischen dem Sechs-Millionen-Dollar Mann und Michael Knight.

Wenn Du das Verhalten einer Klasse anpassen willst, kannst Du entweder mit Subclassing arbeiten (Java macht das normalerweise), oder mit Delegation. Ich empfehle hier bessere Objective-C Bücher, und die Gang Of Four: http://www.amazon.de/Design-Pattern...7306/ref=sr_1_1?ie=UTF8&qid=1308689929&sr=8-1

Alex
 
@Alex
Danke schön. Werde mir besagtes Buch holen und dachte nicht, dass die Erklärung für "Delegates" auf solche Schwierigkeiten stößt.

Wie ein Anfänger erkennen kann, ob ein Buch nun für ihn gut oder schlecht ist :kopfkratz:

Ich gebe nicht auf

Vielen Dank
Karin
 
@ marabaudes: Der letzte Link ist vielversprechend. Danke schön.

UIAccelerometerDelegate ist hier der Delegierer der an seinen Delegierten MainController meldet: Das iPhone hat sich gedreht, was soll getan werden.

Richtig?

Danke
Karin
 
Genau

Alex
 
Also muss mein Delegierer einen Satz an Delegiermethoden haben, die ich bei meinem Delegierten "MainController" abfangen kann?
Irgendwie noch nicht ganz klar. Da müsste doch permanent der Delegierte die Nachricht schicken: Hey UIAcceleromterDelegate: "Hat sich das iPhone gedreht"?

Oder läuft es so, dass irgendein Mechanismus, den ich nicht einsehen kann, wenn doch, dann wo, beim Delegierer feststellt, dass sich das iPhone gedreht hat und dann MainController gefragt wird, was zu tun ist?

Immer noch sehr verwirrend.

Grübel
Karin
 
Wenn Du das Verhalten einer Klasse anpassen willst, kannst Du entweder mit Subclassing arbeiten (Java macht das normalerweise), oder mit Delegation.

OT:
Einspruch euer Ehren! Viele arbeiten zwar mit Vererbung, wo opportun wird aber auch bei der Programmierung mit Java das Delegation-Pattern genutzt! Das hängt am Programmierer, nicht an der Sprache ;)
 
Die Definition von Delegate find ich eigentlich sehr gut: In software engineering the delegation pattern is a design pattern in object-oriented programing where an object instead of performing one of its stated tasks, delegates that task to an associated helper object. The helper object is called the delegate.

Es geht also darum, dass man nicht alle Funktionalität in der Klasse A hält sondern in einem Helper B kapselt - oder anders: Wenn in einer Klasse B Funktionalität vorhanden ist, die man nutzen möchte, das durch eine Referenz einer Instanz des Objekts der Klasse B vorhält und daran die Funktionen ruft. Subclassing wäre, dass man die Klasse A von der Klasse B ableitet.

PS: Nicht mit dem Observer verwechseln! Da wird eine Referenz der eigenen Klasse in eine andere indiziert und dort wird dann das Objekt der Klasse über Änderungen informiert.
 
Hallo _ebm_,

Danke für Deinen Beitrag.

Fast habe ich es nun, wenngleich dieser Teil:
das durch eine Referenz einer Instanz des Objekts der Klasse B vorhält
mir Schwierigkeiten macht. Erst instanziere ich Objekt B und dann referenziere ich Objekt B?

Ist nur eine leichte Begriffsverwirrung. Ich brauche ein Beispiel. Mal suchen gehen.

Daaaaaanke
Karin
 
Naja, ich hab das fachlich korrekt ausgedrückt. Natürlich brauchst du eine Instanz. Wenn MainController aber schon deine Instanz ist, musst du die nicht extra instanziieren (darfst du auch garnicht). Dann nimmst Du die.

Da mir ObjC noch immer nicht flüssig aus meinem Hirn quillt, schreib ich das mal in Java-ähnlichem Pseudocode:

Code:
class B { // delegator/helper

  void doX() { /* */ }

  void doY() { /* */ }

}

class A {

  B delegate;

  A() {
    delegate = new B();
  }

  A(B delegate) {
    this.delegate = delegate;
  }

  void doZ() {
    delegate.doX();
    delegate.doY();
  }
}

Sieht doch recht einfach aus, oder? ;)
 
Hi Karin,

also ich erkläre mir die Geschichte, und ich bin ebenfalls noch frisch in der Materie, so:
Objekte kommunizieren miteinander. Sie senden sich gegenseitig Nachrichten. Damit kann man beispielsweise Methoden aufrufen.

Nehmen wir mal ein Fenster (NSWindow) welches in dem Moment Nachrichten sendet, wenn seine Größe verändert wird. Der "delegate" dieses Fensters(?) oder wer auch immer für das Fenster verantwortlich ist, bestimmt nun, wohin die Nachricht gesendet werden, dass die Größe sich verändert hat und was jetzt zu tun ist. Ist kein Empfänger vorhanden, passiert auch nichts. Es müssen also in einem Programm zig Nachrichten nutzlos durch die Gegend geistern, die keine Response erhalten.

Im Detail verstehe ich es allerdings auch nicht und mir ist bis dato kein Literaturbeispiel untergekommen, das man/frau es auch nachvollziehen kann. Da wird dann munter Delegierer, Delegate durcheinander gewürfelt und selbst hier gibt es bereits der eine oder andere fachliche Unterschied.

Der Link, der Dir geholfen hat: http://www.hivestudio.cat/index.php...ne&catid=35:technical-note-category&Itemid=76

Ist so ein Beispiel.

In der Headerdatei des Delegator wird ein Protokoll deklariert.
Im Delegate wird es implementiert.

Nun macht der Delegator wohl folgendes: Das iPhone wurde gedreht, hört mich irgendjemand. Denn nirgendwo in der Headerdatei vom Delegator findet sich auch nur die Spur eines Hinweises auf das Delegate (MainController). Wenn Du dann 1000 Klassen hast, bekommen alle die Nachricht vom Delegator: "Magst du auf meine Nachricht reagieren". Da MainController die entsprechende Implementierung hat, reagiert dann halt MainController.
Was nun passieren würde, wenn 2 oder mehr Klassen das Protokoll implementieren, mag ich mir an dieser Stelle nicht vorstellen. Wer hat Recht? Wer bestimmt, was zu tun ist, oder gibt es dann ein Compiler-Error?

Mein Tipp: Weitermachen.

Viele Grüße
Andreas
 
  • Gefällt mir
Reaktionen: frauenPower
Danke _ebm_ und Danke cropfaktor.
Werde heute mal zu Hugendubel fahren und mir Literatur suchen. Das Buch, was "delegate" "frau" erklären kann, wird gekauft :jaja:

So, muss jetzt los und bis später. Sehr hilfreiches Forum hier mit netten Menschen.
Danke auch dafür.

Liebe Grüße
Karin
 
  • Gefällt mir
Reaktionen: frauenPower
Ich empfehle Aaron Hillegass. Das Beispiel mit dem 6-Millionen-Dollar Mann vs. Knight Rider finde ich gut

Alex
 
  • Gefällt mir
Reaktionen: frauenPower
Meine Herren:

Es werden alle beide gekauft und da ich zwar frei habe, aber lieber noch etwas tüftele, Amazooon Evening Express.

Heute Abend bzw. morgen im Laufe des Tages weiß ich hoffentlich mehr.

Danke nochmals und ich hoffe, ich nerve nicht zu sehr, aber ich will mich da ein wenig durchbeißen. Ich will keine App für den Store oder so schreiben, sondern ein paar Apps für meine berufliche Praxis, die mir die Arbeit erleichtern.

Hoffe, dass ich da auch mal was zurückgeben kann, werde mich auf jeden Fall bemühen.

Aufgeben ist allerdings keine Option.

Danke Euch :girlkiss:
Karin
 
Alex' Empfehlung wird, da es mehr auf Objective C bezogen ist, deutlich praxisbezogener sein. Da geht es auch allgemein um Apple Programmierung ;)

GoF und Holub sind beide eher abstrakt.
 
GoF ist aber trotzdem bestellt. Abstrakt, OK. Ich will wissen, was ich tue und da ich zeitlich nicht unter Druck stehe und meine erste Mini-App, nicht schön aber sehr selten, auch schon gut funktioniert, wird die Theorie nicht vernachlässigt.

Frau schafft das, jawohl :jaja:

Karin
 
Zurück
Oben Unten