Objeto (informática)
En informática, un objeto puede ser una variable, una estructura de datos, una función o un método. Como regiones de memoria, contienen valor y están referenciadas por identificadores.
En el paradigma de la programación orientada a objetos, 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 una columna, o una asociación entre los datos y una entidad de la base de datos (como relacionar la edad de una persona con una persona específica).
Lenguajes basados en objetos
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 en función de los objetos que se le pasan. El paso de mensajes convencional discrimina solo el primer objeto y considera que está "enviando un mensaje" a ese objeto. Sin embargo, algunos lenguajes de programación orientados a objetos como Flavors y Common Lisp Object System (CLOS) permiten discriminar más que el primer parámetro de la función. La herencia es la capacidad de subclasificar una clase de objeto, para 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 nuevos y/o cambia uno o más de ellos.
Programación orientada a objetos
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 comienzos 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 los programas como código y datos, un sistema orientado a objetos integra los dos usando el concepto de un "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 pedido, realizar pago y ofrecer descuento. 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 producto electrónico, producto de cocina y libro. Puede haber mejoras adicionales, 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.
Objetos especializados
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.
- Objeto de función: un objeto con un método único (en C++, este método sería el operador de función, "operador()") que actúa mucho como una función (como un puntero C/C+++ a una función).
- Objeto inmutable: un objeto establecido con un estado fijo en el momento de la creación y que no cambia después.
- Objeto de primera clase: un objeto que se puede utilizar sin restricción.
- Objeto de contenedor: un objeto que puede contener otros objetos.
- Objeto de fábrica: un objeto cuyo propósito es crear otros objetos.
- Metaobjeto: un objeto del que se pueden crear otros objetos (compare con una clase, que no es necesariamente un objeto).
- Objeto prototipo: un metaobjeto especializado del que se pueden crear otros objetos copiando
- Dios objeto: un objeto que sabe o hace demasiado (es un ejemplo de un anti-pattern).
- objeto Singleton: un objeto que es la única instancia de su clase durante la vida del programa.
- Objeto filtrante: un objeto que recibe un flujo de datos como su entrada y lo transforma en la salida del objeto. A menudo las corrientes de entrada y salida son corrientes de caracteres, pero también pueden ser corrientes de objetos arbitrarios. Estos se utilizan generalmente en envolturas ya que ocultan la implementación existente con la abstracción requerida en el lado desarrollador.
Objetos distribuidos
El enfoque orientado a objetos no es solo un modelo de programación. Se puede utilizar igualmente como lenguaje de definición de interfaz para sistemas distribuidos. Los objetos en un modelo de computación distribuida tienden a ser más granulares, más duraderos y más orientados al servicio que los objetos de programación.
Un método estándar para empaquetar objetos distribuidos es a través de 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 formar 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 objetos distribuidos son el estándar CORBA de Object Management Group y el DCOM de Microsoft.
Además de los objetos distribuidos, se han propuesto otras extensiones del concepto básico de un objeto para permitir la computación distribuida:
- Objetos de protocolo son componentes de una pila de protocolo que encierra la comunicación de red dentro de una interfaz orientada al objeto.
- Objetos replicados son grupos de objetos distribuidos (llamados réplicas) que ejecuta un protocolo multipartidista distribuido para lograr una alta consistencia entre sus estados internos, y que responde a solicitudes de manera coordinada. Ejemplos incluyen objetos CORBA tolerantes a fallas.
- Objetos distribuidos en vivo (o simplemente objetos vivos) generalizar el objeto replicado concepto a grupos de réplicas que podrían utilizar internamente cualquier protocolo distribuido, tal vez dando lugar a una consistencia débil entre sus estados locales.
Algunas de estas extensiones, como objetos distribuidos y objetos de protocolo, son términos específicos de dominio para tipos especiales de objetos "ordinarios" objetos utilizados en un determinado contexto (como la invocación de métodos remotos o la composición de protocolos). Otros, como objetos replicados y 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 aplicar el concepto a grupos de entidades (réplicas) que pueden abarcar múltiples ubicaciones, pueden tener solo un estado débilmente consistente y cuya membresía puede cambiar dinámicamente.
La Web Semántica
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) a los que se puede acceder 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 estándar distribuidos de grano grande a los que se accede a través de un lenguaje de definición de interfaz. Tal enfoque no sería apropiado para Internet porque Internet está en constante evolución y la estandarización en un conjunto de interfaces es difícil de lograr. Los objetos OWL tienden a ser similares a los tipos de objetos utilizados para definir modelos de dominio de aplicación en lenguajes de programación como Java y C++.
Sin embargo, existen distinciones importantes 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 crítica es la forma en que el modelo trata la información que actualmente no está en el sistema. Los objetos de programación y la mayoría de los sistemas de bases de datos utilizan la "suposición de mundo cerrado". Si el sistema no conoce un hecho, se supone que ese hecho 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 de que es falsa; de lo contrario, se asume que es desconocida, ni verdadera ni falsa.
Los objetos OWL en realidad se parecen más a los objetos en 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 de la web semántica:
OOP Objects | Objetos Web semánticos |
---|---|
Las clases se consideran tipos de casos. | Las clases se consideran conjuntos de individuos. |
Las instancias no pueden cambiar su tipo a tiempo de ejecución. | La membresía puede cambiar a tiempo de ejecución. |
La lista de clases es completamente conocida en tiempo de compilación y no puede cambiar después de eso. | Las clases se pueden crear y cambiar a tiempo de ejecución. |
Los compiladores se utilizan en tiempo de construcción. Los errores en tiempo real indican problemas. | Los razonadores se pueden utilizar para la clasificación y verificación de consistencia en tiempo de ejecución o 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 que su significado sea explícito 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 de ejecución. | Todos los recursos llamados RDF y OWL tienen un URI único bajo el cual pueden ser referidos. |
Mundo cerrado: Si no hay suficiente información para probar una declaración verdadera, entonces se supone que es falsa. | Mundo abierto: Si no hay suficiente información para probar una declaración verdadera, entonces puede ser verdadera o falsa. |
Contenido relacionado
Carbón
Unicode
Isotipo (diseño)