Custom Class
Stanford大学のiPhoneアプリケーション開発講座が公開されているので、やってみようと思います。この中のLecture 3 - Custom Classes, PropertiesのAssignment2A。
iPhone Application Programming
さすがstanfordなのか資料を見るだけでも教え方がよさそうだなと感じます。ここの学生はうらやましいです。
PolygonShape.h
#import
@interface PolygonShape : NSObject {
int numberOfSides;
int minimumNumberOfSides;
int maximumNumberOfSides;
}
@property int numberOfSides;
@property int minimumNumberOfSides;
@property int maximumNumberOfSides;
@property (readonly) float angleInDegrees;
@property (readonly) float angleInRadians;
@property (readonly) NSString *name;
- (id)init;
- (id)initWithNumberOfSides:(int)sides minimumNumberOfSides:(int)min maximumNumberOfSides:(int)max;
- (NSString *)description;
- (void)dealloc;
@end
PolygonShape.m
#import "PolygonShape.h"
@implementation PolygonShape
@synthesize numberOfSides;
@synthesize minimumNumberOfSides;
@synthesize maximumNumberOfSides;
- (id)init
{
self = [self initWithNumberOfSides:5 minimumNumberOfSides:3 maximumNumberOfSides:10];
return self;
}
- (id)initWithNumberOfSides:(int)sides minimumNumberOfSides:(int)min maximumNumberOfSides:(int)max
{
if ( (self =[super init]) != nil) {
[self setMinimumNumberOfSides:min];
[self setMaximumNumberOfSides:max];
[self setNumberOfSides:sides];
NSLog(@"Initialized with min %d, max %d and number %d",
[self minimumNumberOfSides],
[self maximumNumberOfSides],
[self numberOfSides]
);
}
return self;
}
-(void)setMaximumNumberOfSides:(int)maxNum
{
if (maxNum > 12) {
NSLog(@"%d is larger than 12", maxNum);
return;
}
maximumNumberOfSides = maxNum;
}
-(void)setMinimumNumberOfSides:(int)minNum
{
if (minNum < 2) {
NSLog(@"%d is less than 2", minNum);
return;
}
minimumNumberOfSides = minNum;
}
- (void)setNumberOfSides:(int)numSides
{
if (numSides < minimumNumberOfSides) {
NSLog(@"Invalid number of sides: %d is larger than the minimum number of%d allowed", numSides, minimumNumberOfSides);
return;
}
if (numSides > maximumNumberOfSides) {
NSLog(@"Invalid number of sides: %d is less than the maximum number of %d allowed", numSides, maximumNumberOfSides);
return;
}
numberOfSides = numSides;
}
- (float)angleInDegrees
{
float angleInDegrees = (180 * (numberOfSides - 2) / numberOfSides);
return angleInDegrees;
}
- (float)angleInRadians
{
float angleInDegrees = (180 * (numberOfSides - 2) / numberOfSides);
return angleInDegrees * M_PI / 180.0;
}
- (NSString *)name
{
static NSString *names[] = {
nil,
@"Henagon",
@"Digon",
@"Triangle",
@"Quadrilateral",
@"Pentagon",
@"Hexagon",
@"Octogon",
@"Heptagon",
@"Enneagon",
@"Decagon",
@"Hendecagon",
@"Dodecagon"
};
return names[numberOfSides];
}
- (NSString *)description
{
return [NSString stringWithFormat:@"Hello I am a %d-sided polygon (aka a %@) with angles of %lf degrees (%lf radians)",
numberOfSides,
[self name],
[self angleInDegrees],
[self angleInRadians]
];
}
- (void)dealloc {
NSLog(@"PolygonShape dealloc");
[super dealloc];
}
@end
WhatATool.m
#import
#import "PolygonShape.h"
/* Section 1 */
void PrintPathInfo() {
NSString *path = @"~";
path = [path stringByExpandingTildeInPath];
NSLog(@"My home is at '%@'", [path pathComponents]);
}
/* Section 2 */
void PrintProcessInfo() {
NSProcessInfo *info = [NSProcessInfo processInfo];
NSLog(@"Process Name: '%@' Process ID: '%d'", [info processName], [info processIdentifier]);
}
/* Section 3 */
void PrintBookMarkInfo() {
NSMutableDictionary *bookmark = [NSMutableDictionary dictionary];
[bookmark setObject:[NSURL URLWithString:@"http://www.stanford.edu"]
forKey:@"Stanford University"];
[bookmark setObject:[NSURL URLWithString:@"http://www.apple.com"]
forKey:@"Apple"];
[bookmark setObject:[NSURL URLWithString:@"http://cs193p.stanford.edu"]
forKey:@"CS193P"];
[bookmark setObject:[NSURL URLWithString:@"http://itunes.stanford.edu"]
forKey:@"Stanford on iTunes U"];
[bookmark setObject:[NSURL URLWithString:@"http://stanfordshop.com"]
forKey:@"Stanford Mail"];
NSEnumerator *enumKey = [bookmark keyEnumerator];
NSString *key;
while ( key = [enumKey nextObject]) {
if ([key hasPrefix:@"Stanford"]) {
NSLog(@"Key: '%@' URL: '%@'", key, [bookmark objectForKey:key]);
}
}
}
/* Section 4 */
void PrintIntrospectionInfo() {
NSMutableArray *ary = [NSMutableArray array];
[ary addObject:@"Hello World!"];
[ary addObject:[NSURL URLWithString:@"http://www.apple.com"]];
[ary addObject:[NSDictionary dictionary]];
for (id tmp in ary) {
NSLog(@"Class name: %@", [tmp className]);
NSLog(@"Is Member of NSString: %d", [tmp isMemberOfClass:[NSString class]]);
NSLog(@"Is Kind of NSString: %d", [tmp isKindOfClass:[NSString class]]);
NSLog(@"Responds to lowercaseString: %d", [tmp respondsToSelector:@selector(lowercaseString)]);
if ([tmp respondsToSelector:@selector(lowercaseString)]){
NSLog([tmp performSelector:@selector(lowercaseString)]);
}
NSLog(@"===========================");
}
}
/* Section 6 */
void PrintPolygonInfo() {
NSMutableArray *array = [[[NSMutableArray alloc] init] autorelease];
PolygonShape *pol = [[PolygonShape alloc] initWithNumberOfSides:4 minimumNumberOfSides:3 maximumNumberOfSides:7];
[array addObject:pol];
[pol release];
NSLog(@"%@", [pol description]);
pol = [[PolygonShape alloc] initWithNumberOfSides:6 minimumNumberOfSides:5 maximumNumberOfSides:9];
[array addObject:pol];
[pol release];
NSLog(@"%@", [pol description]);
pol = [[PolygonShape alloc] initWithNumberOfSides:12 minimumNumberOfSides:9 maximumNumberOfSides:12];
[array addObject:pol];
[pol release];
// test the constraints
for (PolygonShape *tmp in array) {
[tmp setNumberOfSides:10];
}
}
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
PrintPolygonInfo();
[pool drain];
return 0;
}
Assignmentはちゃんと満たしてますでしょうか? //

No comments yet.
Leave a comment
This is the comment form.