Object-oriented software architectures, such as design patterns and frameworks, have found extensive use in software industry. As a design technique, these architectural structures have proven themselves very valuable. Their implementation in traditional object-oriented programming languages, however, is often difficult, since these languages provide no support for the explicit specification of software architectures. In this paper, we develop the notion of architectural fragments, i.e. reusable architectural specifications that describe a design pattern or a framework architecture. An architectural fragment describes the structure of an architecture in terms of its components (roles), the architecture-specific behaviour of the components and the architecture-specific interaction between the components. Fragments can be composed with each other and with reusable components. To illustrate the use of fragments, we describe the role and architecture language constructs in the laye..