
Kapitel 10 - Fortsetzung
Eine Kategorie hat zwar Zugriff auf Instanzvariablen der orginalen Klasse, kann aber selbst keine eigenen, neuen Instanzvariablen hinzufügen. Wenn Sie das wollen, müssen Sie eine Subklasse erzeugen. Sie können theoretisch auch mit einer Kategorie Methoden übersschreiben, stellt aber poor programming practice dar, da man nach dem Überschreiben keinen Zugang mehr hat zur original Methode der Klasse. Beim erzeugen einer Instanz und dem dortigen Überschreiben, hat man mit dem Befehl super noch Zugang zur ursprünglichen Instanz - beim Kategorisieren hat man diese Möglichkeit nicht, da ja keine Instanz erzeugt wird und alle Methoden die man hinzufügt - und auch wieder entfernt - zur Originalklasse gehören. Achten Sie auch darauf, dass eine Kategorisierung nicht nur einen Einfluss auf die bestehende Klasse hat, sondern auch auf die Subklassen vererbt werden. Würde man also der Object Klasse Methoden durch Kategorisierung hinzufügen, dann würden diese Methoden an alle Subklassen weitergegeben, was Sie vielleicht nicht wollen. Eine Kategorisierung kann zwar momentan eine bestimmte Lösung für ein Programmierproblem darstellen, sollte aber nicht im Widerspruch mit der ursprünglichen Intention der Klasse liegen - mit anderen Worten: ein Rechteck zu einer Kreis Klasse oder Äpfel zu einer Birnen Klasse hinzufügen ist wiederum poor programming practice.
Sie können dem Objective-C Compiler "überlisten", indem Sie ihm eine Klasse "vortäuschen" die gar keine ist. Dieser Vorgang wird posing genannt und wird von der poseAs: Methode unterstützt (Bei NSObject (anstatt Object!?) als root Klasse heisst die Methode poseAsClass: Wenn man diese Ergänzung anwenden will, muss man eine Subklasse von der Klasse sein, die man "maskieren" will. Ebenso müssen Sie die poseAs: Nachricht senden, bevor die Klasse allokiert wird oder bevor Ihr Nachrichten gesendet werden. Die Subklasse kann dann auch keine Instanzvariablen zuweisen.
Ein protocol ist eine Liste von Methoden, die sich verschiedene Klassen teilen. Die Methoden, die in einem protocol gelistet werden, haben keine korrespondierenden Implementationen: sie sind dazu gedacht, dass sie von jemand anders implementiert werden (das sind dann Sie als Programmierer!). Ein protocol gibt Ihnen die Möglichkeit, eine Reihe von Methoden zu setzen, mit einem spezifizierten Namen die irgendwie miteinander in Verbindung stehen. Diese Methoden sind so typisch dokumentiert, dass Sie sie für eine Ihrer Klassen verwenden und implementieren können. Wenn Sie sich entschieden haben, alle Methoden für ein bestimmtes Protokoll zu implementieren, spricht man von conform oder adopt des Protokolls. Ein Protokoll zu definieren ist relativ einfach: man nutzt dazu den @protocol Befehl gefolgt vom Namen des Protokolls. Danach werden Methoden genau so wie im Interface Abschnitt deklariert. Alle Methoden bis zum @end Befehl werden dann Teil dieses Protokolls. Im Foundation Framework werden Sie einige Protokolle bereits vorgefertigt finden. Eines davon ist z.B. NSCopying, und es deklariert eine Methode die Sie zum implementieren benötigen, wenn Ihre Klasse dass kopieren von Objekten durch die copy (oder copyWithZone:) Methode unterstützt.
weiter ---- Objective-C Index ---- Startseite----zurück
EINSTIEG
KAPITEL 1: SCHRITT FÜR SCHRITT ZUM ERSTEN PROGRAMM
KAPITEL 2: OBJEKTE, KLASSEN, INSTANZEN UND METHODEN
KAPITEL 3: DIE VERSCHIEDENEN DATENTYPEN
KAPITEL 4: DIE PROGRAMMSCHLEIFEN
KAPITEL 5: ENTSCHEIDE DICH, ENTWEDER ODER....
KAPITEL 6: UND NOCHMALS KLASSEN
KAPITEL 7: VERERBUNG
KAPITEL 8: POLYMORPHISMUS, DYNASCHISCHE TYPISIERUNG UND DYNAMISCHES BINDEN
KAPITEL 9: NOCH MEHR DATENTYPEN UND VARIABLEN
KAPITEL 10: CATEGORIES, POSING AND PROTOCOL
KAPITEL 11: DER PRÄPROZESSOR