Articulo de referencia

Esquizofrenia (programación orientada a objetos)

La esquizofrenia de objetos o esquizofrenia del yo es una complicación derivada de la delegación y técnicas relacionadas en la programación orientada a objetos , donde self / th...

La esquizofrenia de objetos o esquizofrenia del yo es una complicación derivada 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, debido a la confusión pública entre el trastorno de identidad disociativa y el diagnóstico psiquiátrico de esquizofrenia , ya que el primero se asocia con "personalidades divididas", esta configuración se denomina esquizofrenia de objetos o esquizofrenia del yo 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 que posee una identidad. En la programación basada en clases , los objetos se construyen sobre sistemas de clases, donde un objeto es una instancia de una clase. A su vez, las clases pueden estar relacionadas por herencia : una clase base proporciona el comportamiento fundamental o predeterminado de un objeto y actúa como plantilla para la creación de objetos, mientras que una clase derivada puede utilizarse para sobrescribir comportamientos de una clase base y 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 delega su método foo al método bar de b , entonces cualquier invocación de foo en a hará que se ejecute el método bar de b . Sin embargo, bar se ejecuta en el contexto del objeto a , por ejemplo, su identificador se refiere a a en lugar de a b .self

Cuando se utiliza la delegación, surge la pregunta: ¿Cuál es el valor de selfcuando se evalúa un método en el objeto a , que se delega a un método en el objeto b ? La identidad se divide: puede referirse a a o a b . Nótese que, si bien los dos objetos son independientes y tienen identidades físicas distintas, self(ya sea que se use explícita o implícitamente) es ambiguo.

Historia y debate

Herrmann [ 3 ] informa que el término fue acuñado por William Harrison, de IBM Research, alrededor de mayo de 1997 en un conjunto de páginas web que discutían problemas derivados de 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 agravaba 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 durante la delegación. Aquí el uso del reenvío se debe a 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 a sujetos como solución, que mediante composición estática evita cualquier problema de esquizofrenia de objetos. En el otro extremo del espectro, Herrmann muestra que un lenguaje con roles contextuales puede diseñarse de tal manera que los posibles problemas de esquizofrenia de objetos sean esencialmente irrelevantes a pesar de usar la delegación como medio para compartir el comportamiento entre un objeto rol y su objeto base asociado .

Véase también

Referencias

  1. Aßmann, Uwe (2003). Composición de software invasivo (1ª  ed.). Berlín / Heidelberg , Alemania : Springer Science+Business Media . pag.  39.ISBN 9783662050828.
  2. Stein, Lynn Andrea (1987-12-01). "La delegación es herencia" . ACM SIGPLAN Notices . 22 (12): 138– 146 vía Association for Computing Machinery .
  3. Herrmann, Stephan (22 de junio de 2010). "Desmitificando la esquizofrenia de los objetos" . MASPEGHI '10: Actas del 4.º Taller sobre Mecanismos para la Especialización, la Generalización y la Herencia ( 2): 1–5vía Association for Computing Machinery .