En el desarrollo de software orientado a aspectos , las preocupaciones transversales son aspectos de un programa que afectan a varios módulos , sin posibilidad de ser encapsulados en ninguno de ellos. Estas preocupaciones a menudo no pueden separarse claramente del resto del sistema, ni en el diseño ni en la implementación, y pueden dar lugar a la dispersión ( duplicación de código ), al enredo (dependencias significativas entre sistemas) o a ambas.
Por ejemplo, si se está desarrollando una aplicación para gestionar historiales médicos , la indexación de dichos historiales es una cuestión fundamental , mientras que el registro del historial de cambios en la base de datos de historiales o de usuarios, o un sistema de autenticación, serían cuestiones transversales, ya que interactúan con más partes del programa.
Fondo
Las preocupaciones transversales son partes de un programa que dependen de, o deben afectar a, muchas otras partes del sistema. Forman la base para el desarrollo de aspectos . [ 1 ] Estas preocupaciones transversales no encajan claramente en la programación orientada a objetos ni en la programación procedimental . [ 2 ]
Las preocupaciones transversales pueden ser directamente responsables de la interdependencia o enredos dentro de un programa . Dado que las construcciones de lenguajes procedimentales y funcionales consisten enteramente en llamadas a procedimientos, no existe una semántica que permita abordar simultáneamente dos objetivos (la capacidad a implementar y la preocupación transversal relacionada). [ 3 ] Como resultado, el código que aborda la preocupación transversal debe estar disperso o duplicado en las distintas ubicaciones relacionadas, lo que conlleva una pérdida de modularidad . [ 2 ]
La programación orientada a aspectos busca encapsular las preocupaciones transversales en aspectos para mantener la modularidad. Esto permite el aislamiento limpio y la reutilización del código que aborda la preocupación transversal. [ 4 ] Al basar los diseños en preocupaciones transversales, los beneficios de la ingeniería de software pueden incluir modularidad y mantenimiento simplificado. [ 5 ]
Ejemplos
Algunos ejemplos de preocupaciones que suelen ser transversales son:
- Reglas de negocio
- Almacenamiento en caché
- Movilidad de códigos
- Validación de datos
- Optimizaciones específicas del dominio
- Variables de entorno y otras configuraciones globales.
- Detección y corrección de errores
- Internacionalización y localización, que incluye la localización lingüística.
- seguridad de la información
- Explotación florestal
- Gestión de la memoria
- Escucha
- Persistencia
- Características del producto
- Restricciones en tiempo real
- Sincronización
- Procesamiento de transacciones
- Ayuda contextual
- Privacidad
- Seguridad informática
Véase también
- Separación de intereses
- Programación orientada a aspectos
- Refactorización de código (reestructuración de software)
- Normalización de la base de datos (minimizar los datos duplicados innecesariamente)
- Herencia múltiple
- Microservicios
- Ortogonalización (normalización matemática)
Referencias
- ^ Kiczales et al. 2002 , pág. 4
- ^ Kiczales et al. 1997 , pág. 1
- ^ Kiczales et al. 1997 , pág. 6
- ^ Kiczales et al. 1997 , pág. 2
- ^ Li, Krishnamurthi y Fisler 2002 , pág. 1
Bibliografía
- Kiczales, Gregor; Lamping, John; Mendhekar, Anurag; Maeda, John; Lopes, Cristina; Longtier, Jean-Marc; Irwin (1997). "Programación orientada a aspectos". Actas de la 11.ª Conferencia Europea sobre Programación Orientada a Objetos (ECOOP 1997) : 220–242 .
- Patente estadounidense 6467086 , Kiczales et al., " Programación orientada a aspectos ", emitida el 15 de octubre de 2002.
- Li, Harry; Krishnamurthi, Shriram; Fisler, Kathi (2002). "Verifying Cross-Cutting Features as Open Systems". ACM SIGSOFT Software Engineering Notes . 27 (6): 89– 98. CiteSeerX 10.1.1.8.9445 . doi : 10.1145/605466.605481 . S2CID 52835673 .
- Parnas, David L. (diciembre de 1972). "Sobre los criterios que se deben usar para descomponer sistemas en módulos". Communications of the ACM . 15 (12): 1053– 1058. CiteSeerX 10.1.1.90.8963 . doi : 10.1145/361598.361623 . S2CID 53856438 .
- Tarr, Peri; Ossher, Harold; Harrison, William; Sutton, Stanley M. Jr. (1999). «N grados de separación: Separación multidimensional de preocupaciones». Actas de la Conferencia Internacional de Ingeniería de Software de 1999 (IEEE Cat. No. 99CB37002) . Los Ángeles, California, EE. UU.: IEEE Computer Society Press . págs. 107–119 . CiteSeerX 10.1.1.89.1641 . doi : 10.1109/ICSE.1999.841000 . ISBN 978-1-58113-074-4.
Lecturas adicionales
- Laddad, R. (2003): AspectJ en acción, Programación práctica orientada a aspectos, Manning Publications Co.
Enlaces externos
- Glosario de términos orientados a aspectos de AOSD.net (a través de Internet Archive Wayback Machine ; AOSD.net se ha convertido en Modularity ).
- AspectoJ, una extensión orientada a aspectos del lenguaje de programación Java
- Bergmans, L., M. Aksit (2001): Composición de múltiples preocupaciones mediante filtros de composición, https://web.archive.org/web/20170909131212/http://trese.cs.utwente.nl/ (24 de julio de 2004)
- Berg, K. van den, Conejero, J. y Chitchyan, R. (2005). AOSD Ontology 1.0 - Ontología pública de orientación a aspectos. Red de excelencia de AOSD Europe, http://eprints.eemcs.utwente.nl/10220/01/BergConChi2005.pdf
- Aquí hay un ejemplo de cómo abordar una preocupación transversal: https://web.archive.org/web/20161220151503/https://www.captechconsulting.com/blogs/a-persistence-pattern-using-threadlocal-and-ejb-interceptors
- Desarrollo de software orientado a aspectos
- Programación orientada a aspectos