Contributed by Chris Rathman
#import "Rectangle.h" #import "Circle.h" main() { int i; id scribble[2]; id aRectangle; /* toss the different shapes into a collection */ scribble[0] = [Rectangle x:10 y:20 width:5 height:6]; scribble[1] = [Circle x:15 y:25 radius:8]; /* Use the shapes polymorphically */ for (i = 0; i < 2; i++) { [scribble[i] draw]; [scribble[i] rMoveToX:100 rMoveToY:100]; [scribble[i] draw]; } /* call a rectangle specific function */ aRectangle = [Rectangle x:0 y:0 width:15 height:15]; [aRectangle width:30]; [aRectangle draw]; } |
#import < objc/Object.h > interface Shape:Object { int x; int y; } /* get the origin x value */ - (int)x; /* get the origin y value */ - (int)y; /* set the origin x value */ - (int)x:(int)aNumber; /* set the origin y value */ - (int)y:(int)aNumber; /* shift the origin based on the (x,y) point */ - moveToX:(int)newX moveToY:(int)newY; /* shift the origin based on the delta (x,y) point */ - rMoveToX:(int)deltaX rMoveToY:(int)deltaY; @end |
#import "Shape.h" @implementation Shape /* get the origin x value */ - (int)x { return x; } /* get the origin y value */ - (int)y { return y; } /* set the origin x value */ - (int)x:(int)aNumber { x = aNumber; return x; } /* set the origin y value */ - (int)y:(int)aNumber { y = aNumber; return y; } /* shift the origin based on the (x,y) point */ - moveToX:(int)newX moveToY:(int)newY { [self x: newX]; [self y: newY]; } /* shift the origin based on the delta (x,y) point */ - rMoveToX:(int)deltaX rMoveToY:(int)deltaY { [self x:([self x] + deltaX)]; [self y:([self y] + deltaY)]; } @end |
#import "Shape.h" @interface Rectangle:Shape { int height; int width; } /* class method to construct a rectangle */ + (id)x:(int)xValue y:(int)yValue width:(int)aWidth height:(int)aHeight; /* get the height of the rectangle */ - (int)height; /* get the width of the rectangle */ - (int)width; /* set the height of the rectangle */ - (int)height:(int)aNumber; /* set the width of the rectangle */ - (int)width:(int)aNumber; /* draw the rectangle */ - draw; @end |
#import "Rectangle.h" @implementation Rectangle /* class method to construct a rectangle */ + (id)x:(int)xValue y:(int)yValue width:(int)aWidth height:(int)aHeight { id newInstance = [[Rectangle alloc] init]; [newInstance x:xValue]; [newInstance y:yValue]; [newInstance width:aWidth]; [newInstance height:aHeight]; return newInstance; } /* get the height of the rectangle */ - (int)height { return height; } /* get the width of the rectangle */ - (int)width { return width; } /* set the height of the rectangle */ - (int)height:(int)aNumber { height = aNumber; return height; } /* set the width of the rectangle */ - (int)width:(int)aNumber { width = aNumber; return width; } /* draw the rectangle */ - draw { printf("Drawing a Rectangle at:(%d,%d), width %d, height %d\n", [self x], [self y], [self width], [self height]); } @end |
#import "Shape.h" @interface Circle:Shape { int radius; } /* class method to construct a circle */ + (id)x:(int)xValue y:(int)yValue radius:(int)aRadius; /* get the radius value */ - (int)radius; /* set the radius of the circle */ - (int)radius:(int)aNumber; /* draw the circle */ - draw; @end |
#import "Circle.h" @implementation Circle /* class method to construct a circle */ + (id)x:(int)xValue y:(int)yValue radius:(int)aRadius { id newInstance = [[Circle alloc] init]; [newInstance x:xValue]; [newInstance y:yValue]; [newInstance radius:aRadius]; return newInstance; } /* get the radius value */ - (int)radius { return radius; } /* set the radius of the circle */ - (int)radius:(int)aNumber { radius = aNumber; return radius; } /* draw the circle */ - draw { printf("Drawing a Circle at:(%d,%d), radius %d\n", [self x], [self y], [self radius]); } @end |
Drawing a Rectangle at:(10,20), width 5, height 6 Drawing a Rectangle at:(110,120), width 5, height 6 Drawing a Circle at:(15,25), radius 8 Drawing a Circle at:(115,125), radius 8 Drawing a Rectangle at:(0,0), width 30, height 15 |