Classes can be defined by inheritance, a mechanism less directly related to those of Algol-like languages. A class can be defined in terms of other classes; this derived class inherits all the properties of the base class-both its slots and functions. Class inheritance can be described by a graph, as shown in Fig. 1. The class describing a particular part, such as LSOO, is derived from a class for its circuit family (standard or LS) and a class for its function (gate, ALU, etc.); we show only one part per function, though in practice several parts would be derived from the same function class. The function classes are in turn derived from the TTL class; all part classes are indirectly derived from TTL. (Classes like LS that extend the definition of a base class are called mixins in Flavors.) The part class provides information unique to that part, such as the function it implements and its power consumption, and inherits other information, such as categories of performance specifications (address and enable time for a RAM, for example), from the derived classes. The TTL class provides information common to all parts: descriptions of packaging, temperature limitations, the addresses of sales offices, etc. The part descriptions are smaller than they would typically be in C or Pascal because many slots are shared among the parts by inheritance. Further, the language ensures that shared methods, like temperaturerange, can be executed on objects of all the derived classes; it can be difficult to create utility procedures in C or Pascal that work on a family of related structures.