This document defines key concepts related to aspect-oriented programming (AOP) such as concerns, core concerns, cross-cutting concerns, aspects, and separation of concerns. It explains that AOP is a technique that supports cleanly separating concerns through modularization and loosely coupling components. It also discusses that aspect-oriented software development is a combination of mechanisms and methodologies to separate concerns at different abstraction levels using a combination of language, environment, and methods.