Class Hierarchies As Tagged Unions
In a typical class hierarchy in object-oriented programming, each subclass can encapsulate data unique to that class. The metadata used to perform virtual method lookup (for example, the object's vtable pointer in most C++ implementations) identifies the subclass and so effectively acts as a tag identifying the particular data stored by the instance (see RTTI). An object's constructor sets this tag, and it remains constant throughout the object's lifetime.
Nevertheless, a class hierarchy involves true subtype polymorphism; it can be extended by creating further subclasses of the same base type, which could not be handled correctly under a tag/dispatch model. Hence, it is usually not possible to do case analysis or dispatch on a subobject's 'tag' as one would for tagged unions. Some languages such as Scala allow base classes to be "sealed", and unify tagged unions with sealed base classes.
Read more about this topic: Tagged Union
Famous quotes containing the words class and/or unions:
“There is ... a class of fancies, of exquisite delicacy, which are not thoughts, and to which, as yet, I have found it absolutely impossible to adapt language.... Now, so entire is my faith in the power of words, that at times, I have believed it possible to embody even the evanescence of fancies such as I have attempted to describe.”
—Edgar Allan Poe (18091849)
“When Hitler attacked the Jews ... I was not a Jew, therefore, I was not concerned. And when Hitler attacked the Catholics, I was not a Catholic, and therefore, I was not concerned. And when Hitler attacked the unions and the industrialists, I was not a member of the unions and I was not concerned. Then, Hitler attacked me and the Protestant churchand there was nobody left to be concerned.”
—Martin Niemller (18921984)