stone in the object-oriented paradigm is the abstraction mechanisms transcending analysis, design, and implementation. The notions of class, object, behaviour, and inheritance are supported in both design notations and through programming language constructs in object-oriented languages. An association is a declarative mechanism to associate objects, and it is well known from analysis and design notations. However, associations are not matched by a programming language construct. This paper eliminates the semantic gap between design and implementation by proposing a programming language construct to support associations directly. An important issue in designing such a language construct is to make it as efficient and flexible as a manual translation to pointers and containers, and that it gives added benefits compared to a manual translation. Our association compiler can generate code that is as efficient as hand produced code, and it is our experience that it is easier to make change...