Cosificación (ciencias de la computación)
Reificación es el proceso mediante el cual una idea abstracta sobre un programa de computadora se convierte en un modelo de datos explícito u otro objeto creado en un lenguaje de programación. Un objeto computable/direccionable, un recurso, se crea en un sistema como un proxy para un objeto no computable/direccionable. Por medio de la cosificación, algo que antes estaba implícito, no expresado y posiblemente inexpresable se formula explícitamente y se pone a disposición de la manipulación conceptual (lógica o computacional). Informalmente, la cosificación a menudo se conoce como "hacer que algo sea un ciudadano de primera clase" dentro del alcance de un sistema particular. Algún aspecto de un sistema puede materializarse en tiempo de diseño del lenguaje, que está relacionado con la reflexión en los lenguajes de programación. Se puede aplicar como un refinamiento gradual en tiempo de diseño del sistema. La reificación es una de las técnicas de análisis conceptual y representación del conocimiento más utilizadas.
Lenguajes de programación reflexivos
En el contexto de los lenguajes de programación, la cosificación es el proceso mediante el cual un programa de usuario o cualquier aspecto de un lenguaje de programación que estaba implícito en el programa traducido y el sistema de tiempo de ejecución, se expresa en el propio lenguaje. Este proceso lo pone a disposición del programa, que puede inspeccionar todos estos aspectos como datos ordinarios. En los lenguajes reflexivos, los datos de cosificación están conectados causalmente con el aspecto cosificado relacionado, de modo que una modificación en uno de ellos afecta al otro. Por lo tanto, los datos de cosificación son siempre una representación fiel del aspecto cosificado relacionado. A menudo se dice que los datos de reificación se convierten en un objeto de primera clase. La reificación, al menos parcialmente, se ha experimentado en muchos lenguajes hasta la fecha: en los primeros dialectos de Lisp y en los dialectos actuales de Prolog, los programas se han tratado como datos, aunque la conexión causal a menudo se ha dejado a cargo del programador. En Smalltalk-80, el compilador desde el texto fuente hasta el código de bytes ha sido parte del sistema de tiempo de ejecución desde las primeras implementaciones del lenguaje.
- El lenguaje de programación C reifica el detalle de las direcciones de memoria de bajo nivel.Muchos diseños de lenguaje de programación encapsulan los detalles de la asignación de memoria en el compilador y el sistema de tiempo de ejecución. En el diseño del lenguaje de programación C, la dirección de memoria es reificada y está disponible para la manipulación directa por otros constructos de lenguaje. Por ejemplo, el siguiente código se puede utilizar cuando se implementa un controlador de dispositivo con memoria. El puntero buffer es un proxy para la dirección de memoria 0xB8000000.
char* buffer = ()char*) 0xB8000000; buffer[0] = 10;
- Lenguas de programación funcional basadas en la lambda-calculus reify the concept of a procedure abstraction and procedure application in the form of the Lambda expression.
- El lenguaje de programación de Scheme relata las continuaciones (aproximadamente, la pila de llamadas).
- En C#, la reificación se utiliza para hacer el polimorfismo paramétrico implementado en forma de genéricos como característica de primera clase del lenguaje.
- En el lenguaje de programación Java, existen "tipos reconfiables" que están "completamente disponibles en el tiempo de ejecución" (es decir, su información no se borra durante la compilación).
- REBOL reifieste el código como datos y viceversa.
- Muchos idiomas, como Lisp, JavaScript y Curl, ofrecen un procedimiento de evalación o evaluación que revalúa eficazmente al intérprete de idiomas.
- El marco Logtalk para Prolog ofrece un medio para explorar la reificación en el contexto de la programación lógica.
- Los idiomas Smalltalk y Actor permiten la reificación de bloques y mensajes, que equivalen a expresiones de lambda en Lisp, y
thisContext
en Smallltalk, que es una reificación del bloque de ejecución actual. - Lenguas homogénicas reanifican la sintaxis del propio lenguaje en forma de un árbol de sintaxis abstracto, típicamente junto con
eval
.
Reificación de datos frente a refinamiento de datos
La cosificación de datos (refinamiento paso a paso) implica encontrar una representación más concreta de los tipos de datos abstractos utilizados en una especificación formal.
La cosificación de datos es la terminología del Método de desarrollo de Viena (VDM) que la mayoría de la gente llamaría refinamiento de datos. Un ejemplo es dar un paso hacia una implementación al reemplazar una representación de datos sin una contraparte en el lenguaje de implementación previsto, como conjuntos, por una que sí tiene una contraparte (como mapas con dominios fijos que pueden implementarse mediante matrices), o al menos uno que esté más cerca de tener una contraparte, como las secuencias. La comunidad VDM prefiere la palabra "reificación" sobre el "refinamiento", ya que el proceso tiene más que ver con concretar una idea que con refinarla.
Para usos similares, consulte Cosificación (lingüística).
En modelado conceptual
La reificación es ampliamente utilizada en el modelado conceptual. Cosificar una relación significa verla como una entidad. El propósito de cosificar una relación es hacerla explícita, cuando es necesario agregarle información adicional. Considere el tipo de relación IsMemberOf(member:Person, Committee)
. Una instancia de IsMemberOf
es una relación que representa el hecho de que una persona es miembro de un comité. La siguiente figura muestra un ejemplo de población de la relación IsMemberOf
en formato tabular. La persona P1 es miembro de los comités C1 y C2. La persona P2 es miembro del comité C1 únicamente.
Sin embargo, el mismo hecho también podría verse como una entidad. Al ver una relación como una entidad, se puede decir que la entidad cosifica la relación. Esto se llama cosificación de una relación. Como cualquier otra entidad, debe ser una instancia de un tipo de entidad. En el presente ejemplo, el tipo de entidad se ha denominado Membership
. Para cada instancia de IsMemberOf
, hay una y solo una instancia de Membership
, y viceversa. Ahora, es posible agregar más información a la relación original. Como ejemplo, podemos expresar el hecho de que "la persona p1 fue nominada para ser miembro del comité c1 por la persona p2". La relación cosificada Membresía
se puede utilizar como fuente de una nueva relación IsNopressedBy(Membership, Person)
.
Para usos relacionados, consulte Cosificación (representación del conocimiento).
En lenguaje de modelado unificado (UML)
UML proporciona una construcción de clase de asociación para definir tipos de relaciones cosificadas. La clase de asociación es un elemento de modelo único que es a la vez un tipo de asociación y un tipo de clase. La asociación y el tipo de entidad que cosifica son ambos el mismo elemento modelo. Tenga en cuenta que los atributos no pueden cosificarse.
Sobre la Web Semántica
RDF y BÚHO
En los lenguajes de la web semántica, como el marco de descripción de recursos (RDF) y el lenguaje de ontología web (OWL), una declaración es una relación binaria. Se utiliza para vincular dos individuos o un individuo y un valor. A veces, las aplicaciones necesitan describir otras declaraciones RDF, por ejemplo, para registrar información como cuándo se hicieron las declaraciones o quién las hizo, lo que a veces se denomina "procedencia" información. Como ejemplo, podemos querer representar las propiedades de una relación, como nuestra certeza sobre ella, la gravedad o la fuerza de una relación, la relevancia de una relación, etc.
El ejemplo de la sección de modelado conceptual describe a una persona en particular con URIref person:p1
, que es miembro del committee:c1
. El RDF triple de esa descripción es
persona:p1 Comité:isMemberOf Comité:c1 .
Considere almacenar dos hechos más: (i) para registrar quién nominó a esta persona en particular para este comité (una declaración sobre la membresía misma), y (ii) para registrar quién agregó el hecho a la base de datos (una declaración sobre la declaración).
El primer caso es un caso de cosificación clásica como la anterior en UML: cosificar la membresía y almacenar sus atributos y roles, etc.:
Comité:Miembros rdf:Tipo Owl:Clase . Comité:Miembros12345 rdf:Tipo Comité:Miembros . Comité:Miembros12345 Comité:ofPerson persona:p1 . Comité:Miembros12345 Comité:inCommittee Comité:c1 . persona:p2 Comité:nominado Comité:Miembros12345 .
Además, RDF proporciona un vocabulario integrado destinado a describir declaraciones RDF. Una descripción de una declaración usando este vocabulario se llama reificación de la declaración. El vocabulario de reificación RDF consiste en el tipo rdf:Statement
, y las propiedades rdf:subject
, rdf:predicate
, y rdf: objeto
.
Usando el vocabulario de cosificación, se daría una cosificación de la declaración sobre la membresía de la persona asignando a la declaración un URIref como committee:membership12345
para que las declaraciones descriptivas se puedan escribir como sigue:
Comité:Miembros12345 Stat rdf:Tipo rdf:Estado . Comité:Miembros12345 Stat rdf:sujeto persona:p1 . Comité:Miembros12345 Stat rdf:predicar Comité:isMemberOf . Comité:Miembros12345 Stat rdf:objeto Comité:c1 .
Estas declaraciones dicen que el recurso identificado por el URIref comité:membership12345Stat
es una declaración RDF, que el asunto de la declaración se refiere al recurso identificado por person:p1
, el predicado de la sentencia hace referencia al recurso identificado por committee:isMemberOf
, y el objeto de la sentencia hace referencia al recurso committee:c1
. Asumiendo que la declaración original es realmente identificada por committee:membership12345
, debe quedar claro al comparar la declaración original con la reificación que la reificación realmente la describe. El uso convencional del vocabulario de reificación RDF siempre implica describir una declaración usando cuatro declaraciones en este patrón. Por lo tanto, a veces se los denomina "quad de reificación".
Usando la cosificación de acuerdo con esta convención, podríamos registrar el hecho de que person:p3
agregó la declaración a la
base de datos por
persona:p3 Comité:añadidoToDatabase Comité:Miembros12345 Stat .
Es importante tener en cuenta que en el uso convencional de reificación, se supone que el sujeto de las ternas de reificación identifica una instancia particular de una terna en un documento RDF particular, en lugar de una terna arbitraria que tenga el mismo sujeto, predicado, y objeto Esta convención particular se usa porque la reificación está destinada a expresar propiedades como fechas de composición e información de origen, como en los ejemplos ya dados, y estas propiedades deben aplicarse a instancias específicas de triples.
Tenga en cuenta que el triple (sujeto predicado objeto)
descrito en sí mismo no está implícito en dicho cuádruple de cosificación (y no es necesario que realmente exista en la base de datos). Esto permite también utilizar este mecanismo para expresar qué triples no se cumplen.
El poder del vocabulario de reificación en RDF está restringido por la falta de un medio incorporado para asignar URIrefs a declaraciones, por lo que para expresar "procedencia" información de este tipo en RDF, uno tiene que usar algún mecanismo (fuera de RDF) para asignar URIs a declaraciones RDF individuales, luego hacer más declaraciones sobre esas declaraciones individuales, usando sus URIs para identificarlas.
En mapas de temas
En un mapa de temas XML (XTM), solo un tema puede tener un nombre o desempeñar una función en una asociación. Uno puede usar una asociación para hacer una afirmación sobre un tema, pero no puede hacer afirmaciones directamente sobre esa afirmación. Sin embargo, es posible crear un tema que cosifique una construcción sin tema en un mapa, lo que permite que la asociación sea nombrada y tratada como un tema en sí misma.
Relaciones N-arias
En los lenguajes de la Web Semántica, como RDF y OWL, una propiedad es una relación binaria utilizada para vincular dos individuos o un individuo y un valor. Sin embargo, en algunos casos, la forma natural y conveniente de representar ciertos conceptos es usar relaciones para vincular a un individuo con más de un individuo o valor. Estas relaciones se denominan relaciones n-arias. Los ejemplos son la representación de relaciones entre varias personas, como un comité, una persona que es miembro del comité y otra persona que ha nominado a la primera persona para convertirse en miembro del comité, o un comprador, un vendedor y un objeto que se compró al describir una compra de un libro.
Un enfoque más general para la reificación es crear una nueva clase explícita y n nuevas propiedades para representar una relación n-aria, creando una instancia de la relación que vincula el n individuos una instancia de esta clase. Este enfoque también se puede utilizar para representar información de procedencia y otras propiedades para una instancia de relación individual.
:p1 a :Persona ; :has_membership ¿Qué?:membresía_12345 . ¿Qué?:membresía_12345 a :Miembros ; :Comité :c1; :nominated_by :p2 .
Vs. cita
También es importante tener en cuenta que la cosificación descrita aquí no es lo mismo que "cita" encontrado en otros idiomas. En cambio, la cosificación describe la relación entre una instancia particular de un triple y los recursos a los que se refiere el triple. La reificación se puede leer intuitivamente diciendo 'este triple RDF habla de estas cosas', en lugar de (como en la cita) 'este triple RDF tiene esta forma'. Por ejemplo, en el ejemplo de reificación utilizado en esta sección, el triple:
Comité:Miembros12345 rdf:sujeto persona:p1 .
describiendo el rdf:subject
de la declaración original dice que el sujeto de la declaración es el recurso (la persona) identificado por el URIref person:p1
. No establece que el sujeto de la declaración es el URIref en sí mismo (es decir, una cadena que comienza con ciertos caracteres), como lo haría la cita.
Contenido relacionado
Turing (desambiguación)
Servicios integrados
EBurro2000