The construction and maintenance of large and complex software systems depend on the existence of global principles describing the structure and the interaction among its various components. Due to their critical nature, such principles have to be explicitly formulated and strictly verified and enforced throughout the lifetime of the software product. Aspect Oriented Software Development (AOSD) provides necessary tools for the formulation of such principles as aspects—called here structural aspects, and for their compile-time verification and dynamic enforcement. This enforcement, however, becomes problematic when aspects are also used as a vehicle for programming the components themselves, due to aspect interference. In this paper we show how the aspects embedded in system’s components—called here programming aspects—can interact unfavourably with other components thus invalidating the role of the structural aspects. We present a number of methods that address this problem,...
Constantin Serban, Shmuel S. Tyszberowicz