En informática, un objeto puede ser una variable, una estructura de datos, una función o un método y, como tal, es un valor en la memoria referenciado por un identificador.
En el paradigma de la programación orientada a objetos, el objeto puede ser una combinación de variables, funciones y estructuras de datos; en particular, en las variaciones del paradigma basadas en clases, se refiere a una instancia particular de una clase.
En el modelo relacional de administración de bases de datos, un objeto puede ser una tabla o columna, o una asociación entre datos y una entidad de base de datos (como relacionar la edad de una persona con una persona específica).
Una distinción importante en los lenguajes de programación es la diferencia entre un lenguaje orientado a objetos y un lenguaje basado en objetos. Un lenguaje generalmente se considera basado en objetos si incluye las capacidades básicas para un objeto: identidad, propiedades y atributos. Un lenguaje se considera orientado a objetos si está basado en objetos y también tiene la capacidad de polimorfismo, herencia, encapsulación y, posiblemente, composición. El polimorfismo se refiere a la capacidad de sobrecargar el nombre de una función con múltiples comportamientos según los objetos que se le pasan. El paso de mensajes convencional discrimina solo en el primer objeto y considera que está "enviando un mensaje" a ese objeto. Sin embargo, algunos lenguajes de programación orientada a objetos como Flavours y Common Lisp Object System (CLOS) permiten discriminar en más del primer parámetro de la función. La herencia es la capacidad de subclasificar una clase de objeto, de crear una nueva clase que es una subclase de una existente y hereda todas las restricciones de datos y comportamientos de sus padres, pero también agrega nuevas y / o cambia una o más de ellas.
La programación orientada a objetos es un enfoque para diseñar sistemas de software reutilizables modulares. El enfoque orientado a objetos es una evolución de las buenas prácticas de diseño que se remontan a los inicios de la programación informática. La orientación a objetos es simplemente la extensión lógica de técnicas más antiguas, como la programación estructurada y los tipos de datos abstractos. Un objeto es un tipo de datos abstracto con la adición de polimorfismo y herencia.
En lugar de estructurar programas como código y datos, un sistema orientado a objetos integra los dos utilizando el concepto de "objeto". Un objeto tiene estado (datos) y comportamiento (código). Los objetos pueden corresponder a cosas que se encuentran en el mundo real. Entonces, por ejemplo, un programa de gráficos tendrá objetos como círculo, cuadrado, menú. Un sistema de compras en línea tendrá objetos como carrito de compras, cliente, producto. El sistema de compras admitirá comportamientos como realizar pedidos, realizar pagos y ofrecer descuentos. Los objetos están diseñados como jerarquías de clases. Entonces, por ejemplo, con el sistema de compras, puede haber clases de alto nivel como productos electrónicos, productos de cocina y libros. Puede haber más refinamientos, por ejemplo, en productos electrónicos: reproductor de CD, reproductor de DVD, etc. Estas clases y subclases corresponden a conjuntos y subconjuntos en lógica matemática.
Un concepto importante para los objetos es el patrón de diseño. Un patrón de diseño proporciona una plantilla reutilizable para abordar un problema común. Las siguientes descripciones de objetos son ejemplos de algunos de los patrones de diseño más comunes para objetos.
El enfoque orientado a objetos no es solo un modelo de programación. Se puede utilizar igualmente bien como un lenguaje de definición de interfaz para sistemas distribuidos. Los objetos en un modelo de computación distribuida tienden a ser más grandes, más duraderos y más orientados a servicios que los objetos de programación.
Un método estándar para empaquetar objetos distribuidos es mediante un lenguaje de definición de interfaz (IDL). Un IDL protege al cliente de todos los detalles del objeto de servidor distribuido. Detalles como en qué computadora reside el objeto, qué lenguaje de programación usa, qué sistema operativo y otros problemas específicos de la plataforma. El IDL también suele ser parte de un entorno distribuido que proporciona servicios como transacciones y persistencia a todos los objetos de manera uniforme. Dos de los estándares más populares para los objetos distribuidos son el Grupo de Gestión de Objetos 's CORBA estándar y Microsoft ' s DCOM.
Además de los objetos distribuidos, se han propuesto otras extensiones del concepto básico de un objeto para permitir la computación distribuida:
Algunas de estas extensiones, como los objetos distribuidos y los objetos de protocolo, son términos específicos de dominio para tipos especiales de objetos "ordinarios" utilizados en un contexto determinado (como la invocación de métodos remotos o la composición de protocolos ). Otros, como los objetos replicados y los objetos distribuidos en vivo, son menos estándar, ya que abandonan el caso habitual de que un objeto reside en una sola ubicación a la vez y aplican el concepto a grupos de entidades (réplicas) que pueden abarcar en varias ubicaciones, puede tener un estado de coherencia débil y cuya membresía puede cambiar dinámicamente.
La Web Semántica es esencialmente un marco de objetos distribuidos. Dos tecnologías clave en la Web Semántica son el Lenguaje de Ontología Web (OWL) y el Marco de Descripción de Recursos (RDF). RDF proporciona la capacidad de definir objetos básicos (nombres, propiedades, atributos, relaciones) que son accesibles a través de Internet. OWL agrega un modelo de objetos más rico, basado en la teoría de conjuntos, que proporciona capacidades de modelado adicionales, como la herencia múltiple.
Los objetos OWL no son como los objetos distribuidos de gran tamaño estándar a los que se accede a través de un lenguaje de definición de interfaz. Este enfoque no sería apropiado para Internet porque Internet está en constante evolución y es difícil lograr la estandarización en un conjunto de interfaces. Los objetos OWL tienden a ser similares a los tipos de objetos que se utilizan para definir modelos de dominio de aplicaciones en lenguajes de programación como Java y C ++.
Sin embargo, existen importantes distinciones entre los objetos OWL y los objetos tradicionales de programación orientada a objetos. Los objetos tradicionales se compilan en jerarquías estáticas generalmente con herencia única, pero los objetos OWL son dinámicos. Un objeto OWL puede cambiar su estructura en tiempo de ejecución y puede convertirse en una instancia de clases nuevas o diferentes.
Otra diferencia fundamental es la forma en que el modelo trata la información que actualmente no se encuentra en el sistema. Los objetos de programación y la mayoría de los sistemas de bases de datos utilizan el " supuesto de mundo cerrado ". Si el sistema no conoce un hecho, se supone que es falso. Los objetos de la Web semántica utilizan la suposición de mundo abierto, una declaración solo se considera falsa si hay información relevante real que es falsa; de lo contrario, se asume que es desconocida, ni verdadera ni falsa.
Los objetos OWL son en realidad más parecidos a los objetos en los lenguajes de marcos de inteligencia artificial como KL-ONE y Loom.
La siguiente tabla contrasta los objetos tradicionales de los lenguajes de programación orientados a objetos como Java o C ++ con los objetos web semánticos:
Objetos OOP | Objetos web semánticos |
---|---|
Las clases se consideran tipos de instancias. | Las clases se consideran conjuntos de individuos. |
Las instancias no pueden cambiar su tipo en tiempo de ejecución. | La membresía de la clase puede cambiar en tiempo de ejecución. |
La lista de clases se conoce completamente en tiempo de compilación y no puede cambiar después de eso. | Las clases se pueden crear y cambiar en tiempo de ejecución. |
Los compiladores se utilizan en el momento de la compilación. Los errores en tiempo de compilación indican problemas. | Los razonadores se pueden utilizar para la clasificación y la verificación de coherencia en tiempo de ejecución o en tiempo de construcción. |
Las clases codifican gran parte de su significado y comportamiento a través de funciones y métodos imperativos. | Las clases hacen explícito su significado en términos de declaraciones OWL. No se puede adjuntar ningún código imperativo. |
Las instancias son anónimas en la medida en que no se pueden abordar fácilmente desde fuera de un programa en ejecución. | Todos los recursos RDF y OWL con nombre tienen un URI único bajo el cual se pueden hacer referencia. |
Mundo cerrado: si no hay suficiente información para probar que un enunciado es verdadero, se asume que es falso. | Mundo abierto: si no hay suficiente información para probar que una declaración es verdadera, entonces puede ser verdadera o falsa. |