I. Introduction
Programming paradigms date back to the advent of modern computers. Even as early as the 1960s, computer scientists, among them Edsger Dijkstra, gave guidelines on how to do programming [1], [2]. These imperative programming postulates were extended by the popular object-oriented programming (OOP) and influenced the positioning of other programming paradigms, such as declarative programming, in the world of modern software engineering. Software engineering has the dynamism and flexibility to allow for the emergence of new paradigms targeted at filling the gaps in the day-to-day use of imperative, object-oriented, and declarative paradigms. The aspect-oriented programming (AOP) paradigm [3] was introduced as a complement to the object-oriented paradigm in order to improve the overall quality of programs. Logging, exception handling, and authorization checks are examples of tasks that are difficult to solve with OOP, but which can be elegantly solved with the AOP.