Design patterns are applied in software development to decouple individual concerns, so that a change in a design decision is isolated to one location of the code base. However, multidimensional concerns exist in software development and some concerns are even mutually exclusive. Therefore, no single design pattern offers a panacea toward addressing problems of change evolution. By analyzing the matrix of concerns during the development process, this dissertation abstract describes a paradigm for two-dimensional separation of concerns based on pattern transformation. In particular, it shows an example to transform code back and forth between an object-oriented implementation of the Inheritance pattern and an aspect-oriented implementation of the Visitor pattern. The approach allows the same software to be evolved along different dimensions, enabling developers to choose the most appropriate dimension for a given task. Categories and Subject Descriptors D.2.2 [Software Engineering] Des...