Metaobjeto


De Wikipedia, la enciclopedia libre
  (Redirigido desde Meta-objeto )
Saltar a navegación Saltar a búsqueda

En informática , un metaobjeto es un objeto que manipula, crea, describe o implementa objetos (incluido él mismo). El objeto al que pertenece el metaobjeto se llama objeto base. Parte de la información que un metaobjeto podría definir incluye el tipo , interfaz , clase , métodos , atributos , árbol de análisis sintáctico , etc. del objeto base. Los metaobjetos son ejemplos del concepto de reflexión de las ciencias de la computación., donde un sistema tiene acceso (generalmente en tiempo de ejecución) a su propia estructura interna. La reflexión permite que un sistema se reescriba esencialmente a sí mismo sobre la marcha, para alterar su propia implementación a medida que se ejecuta. [1]

Protocolo de metaobjetos

Un protocolo de metaobjetos (MOP) proporciona el vocabulario ( protocolo ) para acceder y manipular la estructura y el comportamiento de los sistemas de objetos. Las funciones típicas de un protocolo de metaobjetos incluyen: [2]

  • Crea o elimina una nueva clase
  • Crea una nueva propiedad o método
  • Hacer que una clase herede de una clase diferente ("cambiar la estructura de la clase")
  • Genera o cambia el código que define los métodos de una clase.

El protocolo de metaobjetos es contrario al principio abierto / cerrado de Bertrand Meyer , que sostiene que los sistemas de objetos de software deben estar abiertos para extensión pero cerrados para modificación . Este principio establece efectivamente una distinción entre extender un objeto agregándole y modificar un objeto redefiniéndolo, proponiendo que el primero es una calidad deseable ("los objetos deben ser extensibles para cumplir con los requisitos de casos de uso futuros "), mientras que el este último no es deseable ("los objetos deben proporcionar una interfaz estable que no esté sujeta a revisión de resumenEl protocolo de metaobjetos, por el contrario, expone de forma transparente la composición interna de los objetos y todo el sistema de objetos en términos del propio sistema. En la práctica, esto significa que los programadores pueden utilizar objetos para redefinirse a sí mismos, posiblemente de formas bastante complejas.

Además, el protocolo de metaobjetos no es simplemente una interfaz para una implementación "subyacente"; más bien, a través del protocolo de metaobjetos, el sistema de objetos se implementa de forma recursiva en términos de un sistema de metaobjetos , que a su vez se implementa teóricamente en términos de un sistema de meta- metaobjetos, y así sucesivamente hasta un caso base arbitrario (un estado consistente del sistema de objetos ), siendo el protocolo como tal la relación funcional recursiva entre estos niveles de implementación.

La implementación de los sistemas de objetos de esta manera abre la posibilidad de un rediseño discrecional radical, proporcionando una gran flexibilidad pero introduciendo problemas de metaestabilidad posiblemente complejos o difíciles de entender (por ejemplo, el sistema de objetos no debe actualizar destructivamente su propio protocolo de metaobjetos, su propio protocolo interno). representación, pero la potencial destructividad de algunas actualizaciones no es trivial de predecir y puede ser difícil de razonar), dependiendo de la profundidad recursiva a la que se propagan las modificaciones deseadas. [3] Por esta razón, el protocolo de metaobjetos, cuando está presente en un lenguaje, generalmente se usa con moderación y con fines especializados, como el software que transforma otro software o él mismo de manera sofisticada, por ejemplo, en ingeniería inversa. [4]

Tiempo de ejecución y tiempo de compilación

Cuando la compilación no está disponible en tiempo de ejecución, existen complicaciones adicionales para la implementación del protocolo de metaobjetos. Por ejemplo, es posible cambiar la jerarquía de tipos con dicho protocolo, pero hacerlo puede causar problemas para el código compilado con una definición de modelo de clase alternativa. Algunos entornos han encontrado soluciones innovadoras para esto, por ejemplo, manejando problemas de metaobjetos en tiempo de compilación. Un buen ejemplo de esto es OpenC ++ . [5] El modelo orientado a objetos de la Web Semántica es más dinámico que la mayoría de los sistemas de objetos estándar y es coherente con los protocolos de metaobjetos en tiempo de ejecución. Por ejemplo, en el modelo de Web Semántica se espera que las clases cambien sus relaciones entre sí y hay un motor de inferencia especialconocido como un clasificador que puede validar y analizar modelos de clases en evolución. [6]

Uso

El primer protocolo de metaobjetos estaba en el lenguaje de programación orientado a objetos Smalltalk desarrollado en Xerox PARC . El Common Lisp Object System (CLOS) llegó más tarde y fue influenciado por el protocolo Smalltalk así como por los estudios originales de Brian C. Smith sobre 3-Lisp como una torre infinita de evaluadores. [7] El modelo CLOS, a diferencia del modelo Smalltalk, permite que una clase tenga más de una superclase ; esto genera una complejidad adicional en cuestiones como resolver el linaje de la jerarquía de clases en alguna instancia de objeto. CLOS también permite el envío dinámico de múltiples métodos , que se maneja a través de funciones genéricasen lugar de pasar el mensaje como en el envío único de Smalltalk . [8] El libro más influyente que describe la semántica y la implementación del protocolo de metaobjetos en Common Lisp es The Art of the Metaobject Protocol de Gregor Kiczales et al. [9]

Los protocolos de metaobjetos también se utilizan ampliamente en aplicaciones de ingeniería de software. En prácticamente todos los entornos comerciales CASE, reingeniería y de desarrollo integrado existe alguna forma de protocolo de metaobjetos para representar y manipular los artefactos de diseño. [10] [11] [12]

Un protocolo de metaobjetos es una forma de implementar la programación orientada a aspectos . Muchos de los primeros fundadores de los MOP, incluido Gregor Kiczales , se han convertido desde entonces en los principales defensores de la programación orientada a aspectos. Kiczales y col. de PARC fueron contratados para diseñar AspectJ para Java , un lenguaje que no posee un protocolo nativo de metaobjetos.

Ver también

  • Tipo (teoría de tipos)
  • Metaclase
  • Javassist
  • Sistema de metaobjetos de JavaScript de Joose
  • Sistema de metaobjetos de Moose Perl
  • OpenC ++
  • OpenJava
  • Lenguaje de modelado unificado : UML
  • Groovy

Referencias

  1. Smith, Brian C (1 de enero de 1982). "Reflexión procedimental en lenguajes de programación" . Informe técnico del MIT (MIT-LCS-TR-272). Archivado desde el original el 13 de diciembre de 2015 . Consultado el 16 de diciembre de 2013 .
  2. ^ Foote, Brian; Ralph Johnson (1 a 6 de octubre de 1989). "Instalaciones reflectantes en Smalltalk-80" . Oopsla '89 : 327–335. doi : 10.1145 / 74877.74911 . ISBN 0897913337. Consultado el 16 de diciembre de 2013 .
  3. ^ El arte del protocolo de metaobjetos , Apéndice C - Viviendo con circularidad
  4. ^ Favre, Lilliana; Liliana Martinez; Claudia Pereira (2009). Ingeniería inversa de código orientado a objetos basada en MDA . Saltador. doi : 10.1007 / 978-3-642-01862-6_21 . ISBN 978-3-642-01861-9.
  5. ^ Chiba, Shigeru (1995). "Un protocolo de metaobjetos para C ++" . Oopsla '95 : 285–299. doi : 10.1145 / 217838.217868 . ISBN 978-0897917032. Consultado el 27 de diciembre de 2013 .
  6. ^ Knublauch, Holger; Oberle, Daniel; Tetlow, Phil; Wallace, Evan (9 de marzo de 2006). "Una cartilla de Web semántica para desarrolladores de software orientados a objetos" . W3C . Consultado el 30 de julio de 2008 .
  7. ^ Daniel P. Friedman; Varita Mitchell (1988). "El misterio de la torre revelado" . El misterio de la torre revelado: una descripción no reflectante de la torre reflectante . págs. 298-307. doi : 10.1145 / 319838.319871 . ISBN 978-0897912006.
  8. ^ "Integración de la programación funcional y orientada a objetos" (PDF) . Consultado el 7 de julio de 2016 .
  9. ^ Kiczales, Gregor; Jim des Rivieres; Daniel G. Bobrow (30 de julio de 1991). El arte del protocolo de metaobjetos . La prensa del MIT. ISBN 978-0262610742.
  10. ^ Johnson, Lewis; David R. Harris; Kevin M. Benner; Martin S. Feather (octubre de 1992). "Aries: la faceta de requisitos / especificación para KBSA". Informe técnico final del laboratorio de Roma . RL-TR-92-248.
  11. ^ "El origen de refinar" (PDF) . www.metaware.fr . Libro blanco de Metaware. Archivado desde el original (PDF) el 7 de enero de 2014 . Consultado el 6 de enero de 2014 .
  12. ^ "Instalación de MetaObject de OMG" . omg.org . Grupo de gestión de objetos . Consultado el 7 de enero de 2014 .

enlaces externos

  • La especificación Guile MOP (GOOPS, basada en Tiny CLOS)
  • Metaobjetos y el protocolo de metaobjetos
  • Protocolo de metaobjetos Common Lisp Object System (contiene dos capítulos de The Art of the Metaobject Protocol )
  • Python 2.6 Metaprogramación
Obtenido de " https://en.wikipedia.org/w/index.php?title=Metaobject&oldid=1004127041 "