1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Die Fragen eines Lernenden

Dieses Thema im Forum "OS X-Developer" wurde erstellt von Ch-Macuser, 12.03.07.

  1. Ch-Macuser

    Ch-Macuser Roter Delicious

    Dabei seit:
    26.11.06
    Beiträge:
    93
    Hallo zusammen

    Ich bin im Moment dabei, mit der Hilfe des Buches Objective-C und Cocoa programmieren zu lernen. Manche werden mir zu einem anderen Einstieg raten, aber so wie ich hier im Forum gelesen habe, gibt es die wie Sand am Meer;).

    So, nun das eigentliche Problem. Ich habe das Buch gelesen, ohne gross nachzuprüfen und
    selber zu coden. Jetzt will ich das in einem zweiten Anlauf nochmal lesen und auch verstehen, dass ich es selbst nutzen kann. Deshalb will ich auch einen Code verstehen, bevor ich weitergehe. Daher poste ich jetzt mal zwei Codestücke und stelle dann Fragen dazu:

    Code:
    @interface Instrument : NSObject {
        NSString *Name;
        int Preis;
        int Alter;
    }
    - (void)setName:(NSString *)[COLOR=Blue]cName[/COLOR];
    - (int)setPreis:(int)[COLOR=Blue]cPreis[/COLOR];
    - (int)setAlter:(int)[COLOR=Blue]cAlter[/COLOR];
    - (NSString *)printData;
    @end
    
    Code:
    #import "Instrument.h"
    
    @implementation Instrument
    - (void)setName:(NSString *)cName
    {
        NSLog(@"Methode %@ von Objekt [COLOR=Red]\"%@\"[/COLOR] aufgerufen", NSStringFromSelector(_cmd), cName);
        [COLOR=Blue]Name = cName;
    [COLOR=Black] }[/COLOR][/COLOR]
    
    - (int)setPreis:(int)cPreis;
    {
        NSLog(@"Methode %@ von Objekt [COLOR=Red]\"%@\"[/COLOR] aufgerufen", NSStringFromSelector(_cmd), Name);
        [COLOR=Blue]Preis = cPreis[/COLOR];
    }
    
    - (int)setAlter:(int)cAlter;
    {
        NSLog(@"Methode %@ von Objekt [COLOR=Red]\"%@\"[/COLOR] aufgerufen", NSStringFromSelector(_cmd), Name);
        [COLOR=Blue]Alter = cAlter;[/COLOR]
    }
    
    - (NSString *)printData
    {
        NSLog(@"Methode %@ von Objekt [COLOR=Red]\"%@\"[/COLOR] aufgerufen", NSStringFromSelector(_cmd), Name);
        NSLog(@"[COLOR=Red]\"%@\"[/COLOR] - Preis: %i", Name, Preis);
        NSLog(@"[COLOR=Red]\"%@\"[/COLOR] - Alter: %i", Name, Alter);
    }
    
    @end
    
    Jetzt die Fragen:
    1. Sehe ich das richtig, das oben im Interface zuerst die Variablen und die Funktionen (welche Methoden heissen, oder?) definiert werden, die in einer Klasse benutzt werden sollen?

    2. Was hat es mit den Stellen cPreis, cAlter auf sich; wie kommt das zu Stande. Der NSLog gibt eben einen Log aus, und wenn ich den weglasse, dann ist die Implementation der Methode setPreis doch nur noch Preis = cPreis. Ich stelle die wildesten Vermutungen darüber an, aber es will sich mir nicht so ganz erschliessen.

    3. Wie zum Teufel kommt man auf diese roten Monster? Ich weiss, %@ bedeutet Objekt und %i bedeutet integer, also eine Zahl (oder?) aber das sprengt bei mir den Rahmen

    4. Könnt ihr mir noch weitere Onlineliteratur über Ojective-C empfehlen? Im Moment bin ich leider knapp bei Kasse, so dass ich mir leider kein neues Buch anschaffen kann.

    In dem Sinne bedank ich mich jetzt schonmal für Hilfestellungen und hoffe, dass das einigermassen verständlich formuliert ist.

    Gruss Johannes
     
  2. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
  3. Peter Maurer

    Peter Maurer Carmeliter-Renette

    Dabei seit:
    16.03.04
    Beiträge:
    3.274
    Das sind eben die Parameter (lokale Variablen) der jeweiligen setEigenschaft-Funktionen. Vielleicht fragst Du Dich, warum man nicht einfach die Eigenschaft-Variablen direkt setzt, ohne ueber eine setEigenschaft-Funktion zu gehen; und dafuer gibt es viele Gruende. Zwei davon sind:

    • Abkapselung von Klasseninterna gegenueber anderen Klassen, die diese Interna nichts angehen
    • Einfachere Abwandlung bestimmter Verhaltensweisen in Subklassen (betrifft vor allem auch "Ausles"-Methoden wie z.B. - (NSString*)name, die in Deinem Beispiel zwar fehlen, oft aber sehr von Nutzen sind.
    Siehe auch hier. %@ ist genauer gesagt ein Platzhalter fuer das Ergebnis der descriptionwithLocale/description-Methode eines Objekts.

    Die \"\"-Zeichen drumrum sind nichts weiter als ge-escape-te Anfuehrungszeichen, d.h. Anfuehrungszeichen, die den Format-String der NSLog-Funktion nicht beenden, sondern Teil desselben werden sollen. Mann kann das auch anders machen: Ich z.B. schreibe gerne <%@> statt \"%@\" -- das sieht gleich ein bisschen weniger wild aus. :D

    Ausserdem bist Du ohnehin nicht verpflichtet, solche abgrenzenden Zeichen um Deine %@ herum zu setzen; aber manchmal hilft das eben, die Objektbeschreibung vom restlichen NSLog-Text zu unterscheiden.

    CocoaDev, CocoaDevcentral.
     
  4. Ch-Macuser

    Ch-Macuser Roter Delicious

    Dabei seit:
    26.11.06
    Beiträge:
    93
    Ach so, das mit der setEigenschaft läuft also so ab, dass zuerst eine cWasauchimmer-Variable erzeugt wird und diese dann mit der globalen Variablen abgeglichen wird, mit dem Sinn und Zweck, dass nur diese Klasse diese Variablen nur mit dem Aufruf der setEigenschaft-Methode ändern können und nicht direkt manipulieren. Das heisst, wenn man z. B. den Preis
    aus einer andern Klasse heraus ändern möchte, dann geht das über die setPreis methode der Inhaberklasse dieser Variablen.

    Ich denke, ich habe das jetzt verstanden. Und es ist ja bekanntlich Übung, die den Meister macht :p.

    Und die Anführungszeichen...
    Das ist mir jetzt auch klar. Das läuft so ähnlich wie in der Mathematik:
    (a*(b+c)*d) ≠ (a*b)+(c*d)
    und entsprechend:
    NSLog:mad:"asdf \"%@\" jklö" ≠ NSLog:mad:"asdf "%@" jklö"
    oder so ähnlich :innocent:

    Auf jedne Fall bedanke ich mich ganz herzlich für eure Hilfe.

    Gruss Johannes
     
  5. ChrisDD

    ChrisDD Gloster

    Dabei seit:
    21.02.04
    Beiträge:
    64
    Würde mir auf jeden Fall Bücher zum Thema: "objektorientierter Entwurf und Design" besorgen. Auch wenn sie nicht direkt was mit Programmierung an sich zu tun haben. Dir werden viele Dinge (wie set... und get...) wesentlich klarer werden.

    Beispiel wären:
    Lehrbuch der Objektmodellierung
    von Heide Balzert

    Praxisbuch Objektorientierung
    von Bernhard Lahres und Gregor Raýman
    gibts auch kostenlos unter: openbook

    Ich denke, dass zweite ist zumindest für den Anfang ganz ok.

    Gruß
    Chris
     
  6. Tengu

    Tengu Apfel der Erkenntnis

    Dabei seit:
    05.02.07
    Beiträge:
    721

Diese Seite empfehlen