Stanford 02a

We blijven maar volharden in de boosheid en gaan nu maar voluit om een opdracht (2a) te maken.

De opdracht vind je hier.

Open XCode en maak een nieuw project aan met de naam “stanford02a”. We kiezen voor een “Windows-based application” uit het Application deel van de iPhone.

Main.m ziet eruit als:

#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}

Nu voeren we de nodige aanpassingen uit en voegen de lijnen als volgt in

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>

int main(int argc, char *argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

PrintPathInfo();
PrintProcessInfo();
PrintBookmarkInfo();
PrintIntrospectionInfo();
PrintPolygonInfo();
[pool release];
return 0;
}

Nu begint we aan section 5 – nl. we creëren een nieuwe class, zoals beschreven in de opgave.

We volgen hiervoor de beschrijving uit de opgave, maar dan moeten we properties toevoegen, die moeten daarenboven readonly zijn (zodat enkel getters worden gegenereerd).  We vonden de inspiratie om dit te implementeren in:

http://www.shrinkrays.net/code-snippets/csharp/objective-c-by-example-for-a-c-developer.aspx

Belangrijk hierbij is te onthouden dat je eerst de variabelen definieert binnen de class (in de interface) en dat je dan na de interface de @property (readonly) definieert. Ook moet je in het (.m) bestand de variabelen met @synthesize toevoegen.

De volgende vraag is om nu settermethodes te implementeren. Hiervoor gaan we ten rade op

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProperties.html

Voor de logging (fout melding) bekijken we

http://www.cocoadevcentral.com/d/learn_objectivec/

en

http://www.cocoadev.com/index.pl?NSLog

daarmee kunnen we de set-Methode schrijven voor numberOfSides, minimumNumberOfSides en maximumNumberOfSides

Het item 4 (- (id)initWithNumberOfSides:(int)sides minimumNumberOfSides:(int)min maximumNumberOfSides:(int)max;) gebeurt vervolgens. Bekijk hiervoor naar het voorbeeld op: http://www.otierney.net/objective-c.html

Door de initialisatie in te vullen bekomen we een warning! Zoeken op google naar de betekenis van de warning “PolygonShap may not respond to -numberOfSides:andminimumNumberOfSides …. ” leidt ons naar :

http://mosisa.wordpress.com/2009/02/17/objective-c-warning-class-may-not-respond-to-method/
en http://stackoverflow.com/questions/1064082/myobject-may-not-respond-to-message-foo-noob-objective-c-question

maar dit lost mijn probleem niet op. (Het is enkel maar een warning, maar toch heb ik dat liever niet) Ik heb de indruk dat dit komt doordat ik nog niet alles heb geïmplementeerd en dus ga ik gewoon wat verder implementeren en komen we op deze warning terug als alles afgewerkt is (en het zich nog steeds voordoet natuurlijk).

We doen verder…

Implement a custom init method (overriding the version implemented in NSObject) which calls your custom initializer with default values. For example, your generic -[PolygonShape init] method might create a 5 sided polygon with min of 3 sides and max of 10.

we kijken naar :

http://www.cocoadevcentral.com/d/learn_objectivec/

http://www.dreamincode.net/forums/lofiversion/index.php/t71010.html

Het eigenaardige hier is dat ‘initNumberOfSides’ niet herkend wordt. Je kan dus deze initializer niet gebruiken hier, of doe ik iets verkeerd?

Maar we gaan opnieuw verder:

The angleInDegrees and angleInRadians properties should not be stored in an instance variable since they are all properties derived by the numberOfSides. These properties do not need to be synthesized and you should implement methods for each of them which return the appropriate values. We’re being boring and using regular polygons so the angles are all the same.
Dat lijkt me nog ingewikkeld op het eerste zicht.

Door tijdsgebrek wordt deze poging hier niet verder afgewerkt.

De listing tot nu toe is:

PolygonShape.h

//
//  PolygonShape.h
//  stanford02a
//
//  Created by Johan Calu on 27/10/09.
//  Copyright 2009 KHBO. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface PolygonShape : NSObject {
int numberOfSides;
int minimumNumberOfSides;
int maximumNumberOfSides;
float angleInDegrees;
float angleInRadians;
NSString* name;

}

@property int numberOfSides;
@property int minimumNumberOfSides;
@property int maximumNumberOfSides;
@property (readonly) float angleInDegrees;
@property (readonly) float angleInRadians;
@property (readonly) NSString* name;

– (id)initWithNumberOfSides:(int)sides
minimumNumberOfSides:(int)min
maximumNumberOfSides:(int)max;
– (id) init;

@end

en ook :

//
//  PolygonShape.m
//  stanford02a
//
//  Created by Johan Calu on 27/10/09.
//  Copyright 2009 KHBO. All rights reserved.
//

#import “PolygonShape.h”

@implementation PolygonShape
@synthesize angleInDegrees, angleInRadians, name;

@dynamic minimumNumberOfSides;
– (void) setMinimumNumberOfSides:(int)aValue{
if (aValue >= 2){
minimumNumberOfSides = aValue;
}
}

@dynamic maximumNumberOfSides;
– (void) setMaximumNumberOfSides:(int)aValue{
if (aValue <= 12){
maximumNumberOfSides = aValue;
}
}

@dynamic numberOfSides;
– (void)setNumberOfSides:(int)aValue{
if (numberOfSides < minimumNumberOfSides || numberOfSides > maximumNumberOfSides){
NSLog ( @”Invalid number of sides: %d ligt buiten %d en %d@”, numberOfSides,  minimumNumberOfSides, maximumNumberOfSides);
} else {
numberOfSides = aValue;
}

}

– (id)initWithNumberOfSides:(int)sides
minimumNumberOfSides:(int)min
maximumNumberOfSides:(int)max{
self = [super init];

if (self){
[self numberOfSides : sides andminimumNumberOfSides : min andmaximumNumberOfSides : max];
}
return self;
}

– (id) init{
if (self = [super init]){
numberOfSides = 5;
minimumNumberOfSides = 3;
maximumNumberOfSides = 10;
}
return self;
}

@end

einde tot nu…. misschien werken we hier later verder aan.

Advertisements

Geef een reactie

Vul je gegevens in of klik op een icoon om in te loggen.

WordPress.com logo

Je reageert onder je WordPress.com account. Log uit / Bijwerken )

Twitter-afbeelding

Je reageert onder je Twitter account. Log uit / Bijwerken )

Facebook foto

Je reageert onder je Facebook account. Log uit / Bijwerken )

Google+ photo

Je reageert onder je Google+ account. Log uit / Bijwerken )

Verbinden met %s