Section: Scientific Foundations
Patterns provide a kind of abstraction that is complementary to the modularization mechanisms discussed above. They have been used, in particular, to define general architectural styles either by defining entire computation and communication topologies  , connectors between (complex) software artifacts  , or (based on, possibly concretizations of, design patterns  ) as building blocks for object-oriented software architectures. The resulting pattern-based architectures are similar to common component-based architectures and are frequently used to implement the latter, see, for instance, Sun's J2EE patterns.
Patterns have also been used to implement architectural abstractions. This is the case, for instance, for the numerous variants of the publish/subscribe pattern  as well as the large set of so-called skeletons  , that is, patterns for the implementation of distributed and concurrent systems. While these patterns are essentially similar to architecture-level patterns, their fine-grained application to multiple code entities often results in crosscutting code structures.
Patterns thus enable certain types of large-scale applications to be concisely and declaratively defined at different levels of abstraction. However, their integration with other modularization mechanisms, especially aspects, has not yet been explored. Furthermore, there have been few approaches using pattern-based representations in the context of the transformational development of general distributed applications — in sharp contrast to their use for the derivation of massively parallel programs.