GenVoca is a methodology and technology for generating
product-lines, building variants of the same program. The primitive components from which applications are constructed are
refinements or
layers, which are modules that implement a feature that many programs of a product-line can share. Unlike conventional components (e.g., COM, CORBA, EJB), a layer encapsulates fragments of multiple classes. Sets of fully-formed classes can be produced by composing layers. Layers are modu-lar, albeit unconventional, building blocks of programs.
But what are the building blocks of layers? We argue that
facets is an answer. A facet encapsulates fragments of multiple layers, and compositions of facets yields sets of fully-formed layers. Facets arise when refinements scale from producing variants of
individual programs to producing variants of multiple integrated programs, as typified by
product families (e.g., MS Office).
We present a mathematical model that explains relationships between layers and facets. We use the model to develop a generator for tools (i.e., product-family) that are used in language-extensible Integrated Development Environments (IDEs).