¿Qué es la programación orientada a aspectos?

Resuelto Sophie asked hace 16 años • 8 respuestas

Entiendo la programación orientada a objetos y he estado escribiendo programas OO durante mucho tiempo. La gente parece hablar de programación orientada a aspectos, pero nunca he aprendido realmente qué es ni cómo utilizarla. ¿Cuál es el paradigma básico?

Esta pregunta está relacionada, pero no la formula del todo:

Programación orientada a aspectos versus programación orientada a objetos

Sophie avatar Oct 28 '08 10:10 Sophie
Aceptado

AOP aborda el problema de las preocupaciones transversales , que serían cualquier tipo de código que se repite en diferentes métodos y que normalmente no se puede refactorizar por completo en su propio módulo, como con el registro o la verificación. Entonces, con AOP puedes dejar esas cosas fuera del código principal y definirlas verticalmente así:

function mainProgram()
{ 
   var x =  foo();
   doSomethingWith(x);
   return x;
}

aspect logging
{ 
    before (mainProgram is called):
    { 
       log.Write("entering mainProgram");
    }

    after (mainProgram is called):
    { 
       log.Write(  "exiting mainProgram with return value of "
                  + mainProgram.returnValue);
    }
 } 

aspect verification
{ 
    before (doSomethingWith is called):
    { 
       if (doSomethingWith.arguments[0] == null) 
       { 
          throw NullArgumentException();
       }

       if (!doSomethingWith.caller.isAuthenticated)
       { 
          throw Securityexception();
       }
    }
 }

Y luego se usa un tejedor de aspectos para compilar el código en esto:

function mainProgram()
{ 
   log.Write("entering mainProgram");

   var x = foo();   

   if (x == null) throw NullArgumentException();
   if (!mainProgramIsAuthenticated()) throw Securityexception();
   doSomethingWith(x);   

   log.Write("exiting mainProgram with return value of "+ x);
   return x;
} 
Mark Cidade avatar Oct 28 '2008 03:10 Mark Cidade

Desafortunadamente, parece sorprendentemente difícil hacer que AOP sea realmente útil en una organización normal de tamaño medio-grande. (Apoyo al editor, sensación de control, el hecho de que comienzas con las cosas no tan importantes que conducen a la descomposición del código, la gente que regresa a casa con sus familias, etc.)

Pongo mis esperanzas en la programación orientada a compuestos , que es algo cada vez más realista. Se conecta con muchas ideas populares y te ofrece algo realmente interesante.

Vea una implementación prometedora aquí: qi4j.org/

PD. En realidad, creo que una de las ventajas de AOP es también su talón de Aquiles: no es intrusivo y permite que las personas lo ignoren si pueden, por lo que será tratado como una preocupación secundaria en la mayoría de las organizaciones.

Hugo avatar Oct 28 '2008 04:10 Hugo