Aspect Oriented Programming (AOP) nedir? Sağladığı avantajlar nelerdir? Ne tür uygulamalarda kullanılır?