﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	severity	resolution	keywords	cc
863	Object decompilation, when a object contains a reference to itself	pgea@…	Víctor de Buen Remiro	"El problema surge a la hora de gestionar objetos que contienen otros objetos y se desea que un objeto contenido conozca al objeto que lo contiene.

Para motivar esto podemos considerar una situación interesante que surge cuando se almacenan estructuras similares a grafos. Veamos un ejemplo:

Imaginemos una clase grafo ({{{@Graph}}}) que contiene un conjunto de vértices ({{{@Vertex}}}) y otro de aristas ({{{@Edge}}}). Los objetos aristas, a su vez contienen referencias a los dos vértices que unen.

Imaginemos ahora pues, que queremos desde un objeto vértice conocer todas las aristas que le apuntan. O incluso más queremos eliminarlas todas.
Parece lógico que esta acción implica la colaboración del objeto grafo.
Así si se llamara a un método del vértice {{{GetEdges()}}} éste llamaría a su padre preguntándoselas: algo como {{{parent::GetEdgesWithVertex(él_mismo)}}}.
O incluso: {{{parent::RemoveEdgesWithVertex(él_mismo)}}}.

El problema al tratar este tipo de referencias, donde el objeto contiene objetos que lo referencian, es que los objetos no se decompilan adecuadamente.

Adjunto un ejemplo sencillo, donde si no se limpia el contenedor (método {{{Clear}}}) no puede decompilarse y compilarse nuevamente.

En MMS esta cuestión se ha tratado usando direcciones de memoria ({{{GetAddressFromObject y GetObjectFromAddress}}}) aunque este modo además de artificial y poco elegante dificulta la copia de los objetos y en ocasiones genera algún error debido a la desaparición de la referencia del objeto cuya dirección se apuntó."	defect	closed	normal	OOP Implementation	OOP		major	remind		
