Software design must resolve the conflict between clarity and modularity, and thus software productivity and cost, on one side and system performance on the other side. This conflict manifests itself widely in software systems, from the design and implementation of collection classes, to applications in virtual reality, databases, network simulation, distributed systems, access control, and many other areas.
While achieving clarity and modularity requires building up abstractions, achieving efficiency requires breaking through abstractions. This talk describes a systematic design method based on analysis and transformations that supports building up and breaking through abstractions. We show how the method is applied in the design and implementation of object-oriented programs. Our applications and experiments demonstrate the effectiveness and benefit of the method.