With its tagged types and appropriate dynamic binding facilities, Ada95 has become a mighty language. Virtually ad libidum, you can add new components to given types of a class. This seems to imply some kind of arbitrariness in the choice of the starting point of a type hierarchy (the root of a class). However, this arbitrariness is only a seeming one and you rather have to exercise utmost care in choosing the root lest you might run into troubles at the end. This fact is highlighted by the following problem about controlled types I found some time ago in the Ada internet forum Chat@Gnat.com, which I thought might be of common interest.
/lp/association-for-computing-machinery/add-finalization-0ltyW138nq