Object Orientation

Object instances are like data with user-defined types. Methods are like user-defined operators.

But the only way to add support for your new type is to override a method. There is no way to get code that previously didn't know about your type to deal with it.

Imagine a bunch of existing functionality that worked with file handles. And you want to write a new type that behaves like a file handle. You can not go and modify all that code to deal with your new type.

Or imagine you wanted to implement a new strange type of number. And you wanted to make sure that "*" behaved differently for your new type, regardless of where multiply was used.