摘要:Ideally, we would separate concerns by designing a program so that each concern is contained in a module. Unfortunately, we often have to deal with concerns that cannot be modularized, but instead cross-cut modules of our primary decomposition. Some of the cross-cutting concerns can be separated using compositional techniques such as Aspect-Oriented Programming (AOP) that weave code into modules at specified program points. Here, we focus on cross-cutting concerns that would not be easily separable with code weaving compositional techniques due to their frequent and complex interactions with the modules of primary decomposition. Separation of Concerns (SoC) and genericity are two important Software Engineering principles to better control software complexity during development, maintenance, and reuse. In this paper, we study the interplay between these two principles, showing that there is an overlapping area where the goals of SoC and genericity, as well as means to achieve these goals, are the same. We make a case that by integrating the principles of SoC and genericity we can achieve non-redundancy, and at the same time enhance the visibility of inseparable concerns, offering a weaker, but still useful form of SoC. We illustrate the points we make with examples of program representations built with the Adaptive Reuse Technique (ART) that supports both SoC and generic mechanisms.