Often we have to deal with several data structures (objects),
that have to be treated similarly in some respects, but differ in
others. Graphical objects are the textbook example: circles,
triangles, dinosaurs, icons, and others, and we may want to add more
during program development. We want to apply some operations to any
graphical object, e.g., draw for displaying it on the
screen. However, draw has to do something different for
every kind of object.

We could implement draw as a big CASE
control structure that executes the appropriate code depending on the
kind of object to be drawn. This would be not be very elegant, and,
moreover, we would have to change draw every time we add
a new kind of graphical object (say, a spaceship).

What we would rather do is: When defining spaceships, we would tell
the system: "Here's how you draw a spaceship; you figure
out the rest."

This is the problem that all systems solve that (rightfully) call
themselves object-oriented, and the object-oriented package I present
here also solves this problem (and not much else).