Programming that separates cross-cutting concerns, such as logging or security, from the main business logic.