|
shapes |
An OOP sample, showing the definition of a class hierarchy.
package shapes;
import basic;
import array;
public class Shape extends basic.Object
{
// instance variables
local name;
local color;
// methods
// a method with keywords
method setName: shapeName andColor: shapeColor
{
name = shapeName;
color = shapeColor;
}
// a method with function-like name
method print()
{
basic.print( [[self isA] name], "\n",
" name : ", name, "\n",
" color: ", color, "\n",
" area : ", [self getArea], "\n" );
}
}
public class Rectangle extends Shape
{
local w, h;
// initializer (called by new)
method init( name, color, width, height )
{
[super setName: name andColor: color];
w = width;
h = height;
}
method getArea()
{
return w * h;
}
}
public class Circle extends Shape
{
local r;
// initializer (called by new)
method init( name, color, radius )
{
[super setName: name andColor: color];
r = radius;
}
method getArea()
{
return 3.1415 * r * r;
}
}
public class Square extends Rectangle
{
// initializer (called by new)
method init( name, color, side )
{
[super init name, color, side, side];
}
}
// a Shape container
public class ShapeBag extends basic.Object
{
local bag;
// initializer (called by new)
method init()
{
// an empty array
bag = #[];
}
method addShape( shape )
{
array.push( bag, shape );
}
method print()
{
basic.print( "*** Shape Bag: ***\n\n" );
local shape;
local totalArea = 0;
for (shape in bag)
{
[shape print];
totalArea = totalArea + [shape getArea];
}
basic.print( "Total area: ", totalArea, "\n" );
}
}
// main code
private bag = [ShapeBag new];
[bag addShape [Rectangle new "r1", "red", 30, 20]];
[bag addShape [Rectangle new "r2", "green", 10, 15]];
[bag addShape [Square new "s1", "blue", 10]];
[bag addShape [Circle new "c1", "brown", 10]];
[bag addShape [Circle new "c2", "yellow", 15]];
[bag print];