Necesito una definición concisa del "estado de un objeto" en la programación orientada a objetos (para un artículo).
Durante aproximadamente medio día busqué un documento que pueda citar sobre este tema, pero no pude encontrar uno. Todos los documentos que encontré eran principalmente documentos generales sobre programación orientada a objetos y no definían el estado de un objeto.
No estoy seguro, pero mi mejor conjetura es algo como: El estado de un objeto está definido por el estado de las variables de instancia del objeto.
Estoy buscando una definición del estado de un objeto y / o una referencia sobre el tema.
(por cierto, ¿podría referirme al concepto como "estado del objeto" o es poco común?)
Respuestas:
Puede echar un vistazo (y citar) el libro "Análisis y diseño orientado a objetos" de G. Booch :
Y hay una subsección completa que describe el concepto de estado :
fuente
También debe tener en cuenta que el estado de un objeto es una entidad "abstracta", según lo determinado por los métodos observables. Por ejemplo, un objeto que implementa una tabla hash tiene como estado, la colección de valores almacenados en la tabla hash, no todos los detalles de representación interna.
fuente
El término " estado " puede usarse en varios sentidos, que pueden no ser susceptibles de una definición precisa. Por consiguiente, era importante que incluya una definición de su papel, para hacer evidente la forma en que estaba utilizando el término. A continuación, no ofrezco una definición única del estado de un objeto, sino que trato de esbozar varias formas de pensar sobre él, que pueden ser apropiadas en diferentes contextos.
Primero, sin embargo, debe pensar qué quiere decir con " objeto ": ¿está pensando en un objeto conceptual, es decir, en alguna entidad que está tratando de modelar, o en una instancia de una clase en un programa específico; quizás también desee pensar en el estado de una variable que podría referirse en diferentes momentos a diferentes objetos o en un sistema, tal vez como se accede a través de una determinada interfaz de usuario.
Parte de la dificultad para definir el estado de un objeto en OOP es que cuando modelamos entidades en un lenguaje particular, ese lenguaje a menudo no nos permite distinguir los atributos del objeto que son conceptualmente parte de la misma entidad de otros que no lo son. Por ejemplo, una lista vinculada de
Car
consistirá en una cantidad deLink
objetos, que contienen punteros al siguiente (y tal vez anterior)Link
aunque conceptualmente la lista es un solo objeto; los enlaces también pueden estar incrustados enCar
-objeta o contiene punteros a ellos, pero en este caso los objetos vinculados están conceptualmente separados en lugar de ser parte de la lista; en una lista de cambios recientes, sin embargo, los cambios solo pueden estar presentes en la lista y considerarse como parte de ella. En estos diversos casos, debemos decidir si consideramos que el estado de un objeto incluye el de los objetos vinculados. Además, unCar
puede tener un enlace a unRegistering_Authority
- probablemente no consideramos que cambie el estado del automóvil cuando su autoridad de registro cambia la URL de su sitio web. A menos que el lenguaje de implementación nos permita distinguir diferentes tipos de enlaces, no será posible hacer una definición general del estado de un objeto solo en términos del lenguaje.El ' externa o' ' funcional ' estado se podría definir como 'la forma en que se comporta', ee.g. cómo reacciona a las invocaciones de métodos o a una interfaz de usuario. Para un objeto como una instancia de clase, esta definición depende del tipo al que se considera que pertenece el objeto: visto como a
Circle
, el color de unColoured_Circle
no es visible, y por lo tanto irrelevante para su estado. Una dificultad con esto es que 'cómo reacciona' puede necesitar definirse en términos de valores devueltos, y estos 'valores' podrían ser los estados de otros objetos. Una forma de formalizar esto es decir que dos estados de un objeto son iguales si todas las posibles ejecuciones futuras de algún sistema en el que está incrustado dan como resultado la misma asignación de entradas a ese sistema a salidas de él. Puede requerirse que este sistema de cierre sea un sistema autónomo, capaz de ejecutarse independientemente de su entorno; Por otro lado, uno podría permitir que sea tan pequeño como el objeto en cuestión. En cualquier caso, un enfoque matemático es definir un estado como una clase de equivalencia deEl ' interna ' estado podría definirse como el estado de la representación. Un primer intento es aparentemente circular pero quizás útil: "El estado interno de un objeto es el estado de sus miembros". Aquí debemos tener cuidado de distinguir aspectos significativos de la representación de los insignificantes: en el nivel más bajo, la representación de un objeto puede incluir direcciones de otros objetos, pero es poco probable que sea útil considerar un cambio en dicha dirección como un cambio de estado Por otro lado, un cambio en el estado de una memoria caché para el resultado de una consulta, aunque no hace ninguna diferencia en el estado funcional (como se describió anteriormente), será importante al considerar las pruebas de rendimiento.
fuente
IBM tiene un glosario que define la palabra "estado" en varias definiciones diferentes que son muy similares entre sí. No afirman específicamente que están relacionados con la Programación Orientada a Objetos, pero uno puede extrapolarlos y usarlos en ese contexto.
El diccionario Webster's New World College define "estado" como:
El denominador común de todos estos es el tiempo. El estado cambia a medida que pasa el tiempo. Esa es la naturaleza de las variables. Si alguien preguntara: "¿Cuál es su estado actual?" Podría decir hoy que está casado y mañana podría estar soltero.
Teniendo en cuenta todas estas definiciones, se puede extrapolar que "estado" es la forma en que un objeto existe en un punto particular en el tiempo determinado por los valores de sus atributos, es decir, sus propiedades / variables.
No creo que sea más simple que eso.
fuente
Un sistema orientado a objetos integra los términos de código y datos utilizando el concepto de un "objeto". Un objeto tiene estado (datos) y comportamiento (código). Por lo tanto, los estados del objeto son las instancias (variables) dentro del objeto que contiene los datos.
fuente