Shape class data: color (required) 1st point # points functions: constructor(color)? <- optional shape::shape(...) <- do this in child? copy constructor assignment operator destructor (virtual) draw <- pure virtual Shape::draw(Graphics context gc) gc->setColor(color) Shape * S1 = new Line(...) Shape * S2 = new Triangle(...) S1->draw(...) draw Line S2->draw(...) draw Triangle Image class