The terms architecture, design, and implementation are
typically used informally in partitioning software specifications
into three coarse strata of abstraction. But these
strata are not well-defined in either research or practice
and often overlap causing confusion and needless discussion.
To remedy this problem we formally define two criteria:
the Intension and the Locality Criteria, and show that
the intuitive discrimination between the three terms architecture,
design, and implementation is qualitative and not
merely quantitative. We demonstrate that architectural
styles are intensional and non-local; that design patterns
are intensional and local; and that implementations are
extensional and loca