
In diesem Kapitel geht es darum Methoden zu einer Klasse in einer modularen Form hinzufügen indem man Kategorien verwendet. Ebenso wie eine Klasse eine andere Klasse vertreten kann und wie man eine standartisierte Liste von Methoden für andere zum implementieren erstellen kann.
Kategorien
Manchmal, wenn Sie mit einer Klasse arbeiten wollen Sie eine neue Methode hinzufügen. Beispielsweise wollen sie die Methoden Subrathieren, Multiplizieren etc. zu dem bereits oftmals verwendeten Beispiel mit den Brüchen hinzufügen. Oder Sie arbeiten mit dem Framework (ein Begriff der bisher noch nicht definiert wurde) und wollen einer Klasse eine neue Methode hinzufügen. Sie können natürlich - das haben Sie bereits gelernt - eine neue Subklasse erzeugen und dann dieser Subklasse neben all den vererbten Methoden noch neue hinzufügen. Aber es gibt noch eine andere Möglichkeit. Das Zauberwort heisst: Kategorien (Categories). Eine Kategorie ermöglicht Ihnen einen einfachen Weg um eine Klasse mit Methoden zu erweitern ohne auf den Quellcode der Klasse zugreifen zu müssen und ohne eine Subklasse zu erzeugen. Gehen wir also wieder zurück zum Programmbeispiel mit den Brüchen. Der Interface Abschnitt sah so aus.
// ------- @interface Abschnitt ----------
@interface Bruch: Object
{
int zaehler;
int nenner;
}
- (void) setzeZaehler: (int) z;
- (void) setzeNenner: (int) n;
- (void) setze: (int) z durch: (int) n;
- (int) zaehler;
- (int) nenner;
- (Bruch *) add: (Fraction *) f;
- .......
@end
Als nächstes wird die add: Methode aus dem Interface Abschnitt entfernt und einer neuen Kategorie hinzugefügt.
# import "Bruch.h"
@interface Bruch (MatheOperatoren)
- (Bruch *) add: (Bruch *) f;
- (Bruch *) mul: (Bruch *) f;
- (Bruch *) sub: (Bruch *) f;
- (Bruch *) div: (Bruch *) f;
@end
Sie haben also nach dem "eigentlichen" Interface Abschnitt einen zweiten derartigen Abschnitt eingefügt. Es handelt sich also beim zweiten Interface Abschnitt um eine Erweiterung des ersten. Nach dem Import von "Bruch.h" haben Sie den Interface Abschnitt mit folgendem Befehl begonnen:
@interface Bruch (MatheOperatoren)
Damit teilen Sie dem Compiler mit, dass Sie eine neue Kategorie (nicht Klasse) für die Bruch Klasse definieren. Der Kategoriennamen wird in geschwungene Klammern gesetzt. Auf diese Art und Weise haben Sie dem Compiler mitgeteilt, dass sie neue Methoden hinzufügen möchten.
Sie können jetzt gleich den Implementation Abschnitt beginnen. Optional können Sie auch eine neue Datei für den Implementation Abschnitt anlegen, dann müssen Sie diesen so beginnen:
@implementation Bruch (MatheOperatoren)....
..........
@end
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