La esquizofrenia de objetos o autoesquizofrenia es una complicación que surge de la delegación y técnicas relacionadas en la programación orientada a objetos , donde self
/this
puede referirse a más de un objeto. A modo de metáfora con la confusión pública del trastorno de identidad disociativo con el diagnóstico psiquiátrico de esquizofrenia , el primero asociado con "personalidades divididas", esta configuración se denomina esquizofrenia de objeto o autoesquizofrenia en la programación orientada a objetos. [1]
Descripción general
Un objeto puede definirse como un concepto informático que combina datos y comportamiento y tiene una identidad. En la programación basada en clases , los objetos se construyen en sistemas de clases, donde un objeto es una instancia de una clase. Las clases pueden, a su vez, estar relacionadas por herencia : una clase base proporciona el comportamiento fundamental o predeterminado de un objeto y actúa como una plantilla para crear objetos, mientras que una clase derivada se puede usar para anular los comportamientos de una clase base y se puede usar como plantilla para objetos cuyos comportamientos refinan los de la clase base.
Una alternativa a las clases y la herencia son los prototipos y la delegación , [2] que se utiliza en la programación basada en prototipos y es más dinámica. En lugar de usar una clase para refinar otra, la delegación permite que un objeto anule el comportamiento de otro. El objeto original a (análogo a los comportamientos de la clase derivada) puede delegar algunos de sus métodos a otro objeto b (análogo a los comportamientos de la clase base). Si a los delegados su foo método a la barra de método de b , entonces cualquier invocación de foo en una causará b' s barra de método a ejecutar. Sin embargo, la barra se ejecuta en el contexto de la un objeto, por ejemplo, su self
identificador se refiere a un lugar de b .
Cuando se usa la delegación, surge la pregunta: ¿Cuál es el valor self
al evaluar un método en el objeto a , que se delega a un método en el objeto b ? La identidad está dividida: puede referirse a a o b . Tenga en cuenta que, si bien los dos objetos están separados y tienen una identidad física separada, self
(ya sea que se usen explícita o implícitamente) es ambiguo.
Historia y discusión
Herrmann [3] informa que el término fue acuñado por William Harrison, IBM Research, alrededor de mayo de 1997 en un conjunto de páginas web, que discutían problemas en los que incurrían algunos de los patrones de diseño comunes (estas páginas web ya no están disponibles públicamente). En los ejemplos dados, el problema se agravó por el hecho de que las soluciones típicas usarían una forma más débil de delegación (a veces llamada reenvío ) donde el conocimiento sobre el objeto receptor original se pierde realmente durante la delegación. Aquí, el uso del reenvío se debe al hecho de que la mayoría de los lenguajes de programación orientados a objetos convencionales no admiten la forma más fuerte de delegación. Harrison et al propusieron la programación orientada al sujeto como una solución, que por composición estática evita cualquier problema de esquizofrenia de objetos. En el otro extremo del espectro, Herrmann muestra que un lenguaje que presenta roles contextuales puede diseñarse de tal manera que los problemas potenciales de esquizofrenia de objetos sean esencialmente irrelevantes a pesar de usar la delegación como un medio para compartir el comportamiento entre un objeto de rol y su objeto base asociado. .
Ver también
- Problema adjunto confuso : vulnerabilidad de seguridad informática
Referencias
- ^ Uwe Aßmann, Composición de software invasivo , Springer-Verlag, 2003, p. 39.
- ^ Lynn Andrea Stein, la delegación es herencia. Conferencia sobre lenguajes y aplicaciones de sistemas de programación orientados a objetos, Orlando, Florida, 1987, Estados Unidos, págs.138 - 146
- ^ Stephan Herrmann, Desmitificando la esquizofrenia de objetos , en Actas del taller MASPEGHI en ECOOP 2010