
Kapitel 2 - Fortsetzung
Der printf Befehl und die Datenkapselung:
Blicken wir nochmals auf den printf Befehl. Der printf Befehl wird verwendet um die beiden Instanz-Variablen zaehler und nenner anzuzeigen. Innerhalb der print / printf - Methode beziehen Sie sich auf einen zaehler und nenner. Ja, Sie tun das wirklich, schauen Sie hin:
printf (" %i/%i ", zaehler, nenner);
Aber auf welchen zaehler und nenner nehmen Sie da eigentlich Bezug? Sie beziehen sich auf die Instanz-Variablen zaehler und nenner innerhalb des von Ihnen entworfenen Objekts, welches in diesem Fall der Empfänger der Nachricht ist. Mit der Methode printf haben Sie direkten Zugang zu den Instanz-Variablen zaehler und nenner. Das mag Sie vielleicht in diesem Moment nicht sonderlich beeindrucken. Sie werden sagen: „Im @interface Abschnitt habe ich ja deklariert:
@interface Bruch: Object
{
int zaehler;
int nenner;
}
Innerhalb des @interface und @implementation Abschnittes haben Sie ungeschränkten Zugang zu den Instanz-Variablen, außerhalb davon nicht mehr. „Wirklich nicht?“, werden Sie fragen. Nun, dann ändern Sie doch Ihr Programm einfach und schreiben Sie einen neuen Programm Abschnitt und wundern Sie sich nicht, eine Fehlermeldung ist vorprogrammiert.
Fehlerhaftes Programm 2.2
-----------------------------------------------------------------------------------------------------------------
// ----Programm Abschnitt------
int main (int argc, char *argv[])
{
printf ("Der Wert von zaehler und nenner ist:", zaehler, nenner);
return 0;
}
-----------------------------------------------------------------------------------------------------------------
Fehlermeldung von Programm 2.2 output
-----------------------------------------------------------------------------------------------------------------
main.m:58: error: 'nenner' undeclared (first use in this function)
main.m:58: error: 'zaehler' undeclared (first use in this function)
-----------------------------------------------------------------------------------------------------------------
Erkennen Sie den Unterschied. Noch innerhalb des @implementation haben Sie jederzeit Zugriff auf die Variablen zaehler und nenner gehabt. Die Methode:
-(void) ausdrucken
hat im @implementation über den printf Befehl jederzeit Zugang zu den Variablen zaehler und nenner gehabt.
{
printf (" %i/%i ", zaehler, nenner);
}
Jetzt, außerhalb davon - und innerhalb der main Funktion - haben Sie keinen direkten Zugang mehr auf die Variablen zahler und nenner. Auch der Versuch z.B. Instanz-Variablen aufzurufen ist nicht erlaubt, also Programmzeilen wie die Folgenden:
printf ("Der Wert von meinBruch ist:");
[meinBruch zaehler], [meinBruch nenner];
sind nicht erlaubt. Damit hätten Sie nicht Methoden aufgerufen, sondern würden versuchen direkt den Instanz Variablen zaehler und nenner eine Nachricht schreiben. Auch das geht nicht.
Durch die Datenkapselung werden Implemtierungsdetails quasi geheim gehalten. Andere Klassen, andere Instanzen haben keine Ahnung vom Inneren, von den Instanz Variablen eines anderen Objekts. Dadurch können Sie jederzeit die Instanz Variblen ändern, der Rest vom Programm ist dadurch nicht betroffen. Sie haben dem Objekt quasi eine Schale gegeben, die den Kern schützt. Datenkapselung soll Sie also nicht einschränken, es macht ein Programm weitaus stabiler, ein immenser Vorteil gegenüber nicht-objektorientierten Porgrammiersprachen. Es gibt noch ein paar andere Vorteile, die ich hier nicht aufzählen will. Vielleicht noch einmal ein Beispiel. Es ist ja möglich, dass Sie an Ihrem Computer zwei Drucker anschließen wollen, z.B. einen Belegdrucker für Rechnungen und einen Drucker für Textdokumente. Es ist leicht möglich, dass die Programmierer dieser beider Drucker den Instanz-Variablen den gleichen Namen gegeben haben. Wären diese nicht geschützt, könnte es leicht ein heilloses Durcheinander geben und dazu führen, dass beide Drucker nicht korrekt funktionieren. Der Nachteil der Datenkapselung übrigens ist eine - in Abhängigkeit von der Programmgröße und den Systemanforderungen – Geschwindigkeitseinbuße, da nicht direkt auf die Daten zugegriffen werden kann.
Damit wären einige grundlegenden Dinge der objektorientierten Programmierung besprochen, Sie werden nun ein erstes "richtiges" Cocoa Projekt programmieren.
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