Aspect oriented programming (AOP) allows developers to separate cross-cutting concerns from the main application code. This helps keep code organized and focused on single responsibilities. AOP works by defining points in the program execution, called join points, where additional behavior can be inserted. This additional behavior is defined through advice that runs before, after, or around join points. Pointcuts are used to identify which join points specific advice should apply to. Aspects group advice and pointcuts to encapsulate a concern.