\begin{abstract}

Module interfaces in object-oriented languages hamper modularization of complex applications.  
Aspect-oriented programming tackles this problem by allowing module boundaries to span and partition classes in a flexible manner.  
However, not without a cost.  
In order to achieve this flexibility, common modularity mechanisms, such as encapsulation and external composition, are lost.  
The ability to separately compile or reason about a modular unit is also compromised.


We present the main features of Aspectual Collaborations, and show how these interact to combine modularity with aspectual behavior.
In restoring the properties, our programming units
become more verbose: encapsulation requires that all collaborations describe their interface to the rest of the application; and composition of collaborations similarly requires that each module's interface be reconciled with the other. 
\twelve{
We present a comparison study of AspectJ, Hyper/J, and Aspectual Collaborations in solving an AOP programming challenge.
From the performance of the three languages, we estimate the comparative cost of using encapsulation together with aspects.
}{
We compare AspectJ, Hyper/J, and Aspectual Collaborations, and
from the performance of the three languages, we estimate the comparative cost of using encapsulation together with aspects.
}

\end{abstract}


