Abstract :
Unanticipated software evolution requires powerful techniques for separation of concerns to cleanly integrate a new feature into a design which did not pre-plan for this feature. Aspect-oriented programming languages provide mechanisms by which such integration can be performed in noninvasive ways. This advantage is commonly achieved for the price of introducing invisible links and control flows in an application, which are perceived as an obstacle to understandability, analysability and safety. The resulting trade-off between flexibly structuring crosscutting concerns and rigorously pursuing program safety tends to endanger the usefulness of current AOSD approaches for long term evolution. The model of Object Teams combines ideas from many programming languages, providing greater expressiveness for flexible software composition than each of its predecessors. In the paper it is argued that Object Teams also provide strong concepts for encapsulation, which help for modular comprehension and analysis of aspect-oriented programs developed in this model. Combining the different concepts of Object Teams allows one to balance flexibility and strictness so as to provide exactly the openness that is needed for integrating unanticipated changes while sustaining a crisp architecture.