Bill writes: (2) The ability to declaratively specify a behavior pattern to be invoked on (what the AOP folks call quantification) is not only concise, convenient, and easy to read, but it's "open". If the behavior patterns are specified, new components can be seamlessly added without requiring further modifications. ========== It is the declarative specification of behavior patterns which calls strongly for aspect interfaces, in my view. The declarative specification needs to be written against an ideal model that captures the essence of the behavior pattern. And that ideal model needs to be mapped to the concrete model where the behavior pattern is used. The behavior patterns should specify applicability conditions that the mapping and concrete model need to satisfy. If the concrete model and mapping evolve (new components are added), no further modifications are required provided the applicability conditions hold. If they don't hold, then "the crosscut picks up an unintended join point" and further modifications are required. =========== Here is another reason why total obliviousness does not work: When you write a base program and you know that aspects will be applied to it, it is important to structure the base program very systematically. Otherwise there is not enough structure that supports nice crosscuts and the crosscut expressions would become less declarative. At least this minimum of aspect-awareness is needed for the approach to work. Those are issues we observed in the context of Adaptive Programming. The behavioral patterns are the adaptive methods or the propagation patterns in an earlier incarnation. -- Karl