A good reusable framework, pattern or module interface usually is repr
esented by abstract classes. They form an abstract design and leave th
e implementation to concrete subclasses. The abstract design is instan
tiated by naming these subclasses, Unfortunately, this exposes impleme
ntation details like class names and class tree structures. The paper
gives a rationale and a general metaobject protocol design that encaps
ulates whole class trees, Clients of an abstract design retrieve class
es and create objects based on class semantics specifications. Using a
bstract classes as the only interface enhances information hiding and
makes it easier both to evolve a system and to configure system varian
ts.