Contributed by Chris Rathman
Module: shape Synopsis: OO Shape Polymorphism Author: Chris Rathman Copyright: (C) 2000, CUS. Permission granted to distribute freely. Version: 1.00 define module shape use functional-dylan; use simple-format; export <shape>; export getX; export getY; export setX; export setY; export moveTo; export rMoveTo; export draw; end module shape; // define the shape class slots define class <shape> (<object>) slot x :: <number>, required-init-keyword: x:; slot y :: <number>, required-init-keyword: y:; end class <shape>; // accessors for x & y define method getX(this :: <shape>) => rval :: <number>; x(this); end method getX; define method getY(this :: <shape>) => rval :: <number>; y(this); end method getY; define method setX(this :: <shape>, new-x :: <number>) => (); x-setter(new-x, this); end method setX; define method setY(this :: <shape>, new-y :: <number>) => (); y-setter(new-y, this); end method setY; // move the x & y coordinates define method moveTo(this :: <shape>, new-x :: <number>, new-y :: <number>) => ( ); setX(this, new-x); setY(this, new-y); end method moveTo; define method rMoveTo(this :: <shape>, delta-x :: <number>, delta-y :: <number>) => ( ); moveTo(this, getX(this) + delta-x, getY(this) + delta-y); end method rMoveTo; // virtual routine - draw the shape define generic draw(this :: <shape>) => ( ); |
Module: rectangle Synopsis: OO Shape Polymorphism Author: Chris Rathman Copyright: (C) 2000, CUS. Permission granted to distribute freely. Version: 1.00 define module rectangle use functional-dylan; use simple-format; use shape; export <rectangle>; export getWidth; export getHeight; export setWidth; export setHeight; end module rectangle; // define the rectangle class slots define class <rectangle> (<shape>) slot width :: <number>, required-init-keyword: width:; slot height :: <number>, required-init-keyword: height:; end class <rectangle>; // accessors for width & height define method getWidth(this :: <rectangle>) => rval :: <number>; width(this); end method getWidth; define method getHeight(this :: <rectangle>) => rval :: <number>; height(this); end method getHeight; define method setWidth(this :: <rectangle>, new-width :: <number>) => (); width-setter(new-width, this); end method setWidth; define method setHeight(this :: <rectangle>, new-height :: <number>) => (); height-setter(new-height, this); end method setHeight; // draw the rectangle define method draw(this :: <rectangle>) => (); format-out("Drawing Rectangle at:(%d,%d), width %d, height %d\n", getX(this), getY(this), getWidth(this), getHeight(this)); end method draw; |
Module: circle Synopsis: OO Shape Polymorphism Author: Chris Rathman Copyright: (C) 2000, CUS. Permission granted to distribute freely. Version: 1.00 define module circle use functional-dylan; use simple-format; use shape; export <circle>; export getRadius; export setRadius; end module circle; // define the circle class slots define class <circle> (<shape>) slot radius :: <number>, required-init-keyword: radius:; end class <circle>; // accessors for radius define method getRadius(this :: <circle>) => rval :: <number>; radius(this); end method getRadius; define method setRadius(this :: <circle>, new-width :: <number>) => (); radius-setter(new-width, this); end method setRadius; // draw the circle define method draw(this :: <circle>) => (); format-out("Drawing Circle at:(%d,%d), radius %d\n", getX(this), getY(this), getRadius(this)); end method draw; |
Module: polymorph Synopsis: OO Shape Polymorphism Author: Chris Rathman Copyright: (C) 2000, CUS. Permission granted to distribute freely. Version: 1.00 define module polymorph use functional-dylan; use shape; use circle; use rectangle; end module polymorph; define method main() => ( ); // set up some shape instances let scribble = make(<vector>, of: <shape>, size: 2); scribble[0] := make(<rectangle>, x: 10, y: 20, width: 5, height: 6); scribble[1] := make(<circle>, x: 15, y: 25, radius: 8); // iterate through the array and handle shapes polymorphically for (each :: <shape> in scribble) draw(each); rMoveTo(each, 100, 100); draw(each); end; // access a rectangle specific function let arec = make(<rectangle>, x: 0, y: 0, width: 15, height: 15); setWidth(arec, 30); draw(arec); end method main; begin main(); end; |
Module: dylan-user Synopsis: OO Shape Polymorphism Author: Chris Rathman Copyright: (C) 2000, CUS. Permission granted to distribute freely. Version: 1.00 define library polymorph use functional-dylan; export polymorph; end library polymorph; |
comment: This file is generated, please don't edit format-version: 2 library: polymorph files: dylan-user shape rectangle circle polymorph base-address: 0x63F20000 start-function: main major-version: 1 minor-version: 0 library-pack: 0 compilation-mode: loose target-type: executable comment: additional keywords |
Drawing Rectangle at:(10,20), width 5, height 6 Drawing Rectangle at:(110,120), width 5, height 6 Drawing Circle at:(15,25), radius 8 Drawing Circle at:(115,125), radius 8 Drawing Rectangle at:(0,0), width 30, height 15 |