close Warning: Can't synchronize with repository "(default)" (/var/svn/mms does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 13 years ago

Closed 12 years ago

Last modified 12 years ago

#734 closed enhancement (fixed)

Permitir la adopción de objetos principales como objetos suplementarios

Reported by: Pedro Gea Owned by: Pedro Gea
Priority: critical Milestone: Development 1A
Component: General Keywords:
Cc:

Description

Para facilitar y agilizar la creación de un objeto por módulos se solicita la creación de un mecanismo para adoptar objetos previamente creados.

Por ejemplo, si se crea un dataset y a continuación se crea un modelo que éste puede utilizarlo (desapareciéndo éste del contenedor) sin tener que duplicarlo.

Esta mejora viene motivada desde los mecanismos de construcción de modelos definidos en archivos Excel.

Change History (3)

comment:1 Changed 13 years ago by Pedro Gea

(In [2600]) Se incorporan mecanismos para la adopción de objetos principales.
Se incorpora un mecanismo para modificar el padre de un objeto principal.
Se amplía el método duplicate para poder indicar el modo con el que se duplica: usa los mismos modos que GetSpecification.
Se amplía el método _DecodeInfo del contenedor principla para que los métodos GetObject y FindObject funcionen en el caso trivial en el que el propio objeto es el argumento.
Refs #734

comment:2 Changed 12 years ago by Pedro Gea

Resolution: fixed
Status: newclosed

Para un tratamiento más independiente de los objetos principales véase el tique #872.

comment:3 Changed 12 years ago by Pedro Gea

¿Cómo usar la adopción de objetos de MMS?

Cuando se crea un modelo usando un dataset, el modelo se hace una copia propia del dataset que él mismo contendrá y gestionará, dejando el dataset original para otros usos y la gestión desde el contenedor principal.

Por ejemplo:

#Require MMS;

MMS::@DataSet dataSet = MMS::Container::ReplaceDataSet([[
  Text _.name = "A"
]]);
Real dataSet::GetRoute(?); //-> "MMS::Container::GetDataSet(1)"

MMS::@Model model = MMS::Container::ReplaceModel([[
  Text _.name = "B";
  MMS::@DataSet _.dataSet = dataSet
]]);
Real model::GetRoute(?); //-> "MMS::Container::GetModel(1)"

// Tras la creación del modelo hay un nuevo dataset:
MMS::@DataSet dataSet2 = model::GetDataSet(?);
Real dataSet2::GetRoute(?); //-> "MMS::Container::GetModel(1)::GetDataSet(?)"
Real SameNameBlock(dataSet, dataSet2); //-> False

A menudo, la creación o carga del dataset, se hace con el único objetivo de crear un modelo con él. La adopción de objetos permite aprovechar el objeto, sin tener que pasar por hacer una copia, con la única desventaja de que el dataset, una vez adoptado deja de estar disponible en el contenedor principal.

Por ejemplo:

#Require MMS;

MMS::@DataSet dataSet = MMS::Container::ReplaceDataSet([[
  Text _.name = "A"
]]);
Real dataSet::GetRoute(?); //-> "MMS::Container::GetDataSet(1)"

MMS::@Model model = MMS::Container::ReplaceModel([[
  Text _.name = "B";
  MMS::@DataSet _.dataSet = dataSet;
  Real _.objectAdoption = True // <= argumento para indicar la adopción del objeto
]]);
Real model::GetRoute(?); //-> "MMS::Container::GetModel(1)"

// Tras la creación del modelo no hay un nuevo dataset,
// el dataset existente se ha reubicado:
Real dataSet::GetRoute(?); //-> "MMS::Container::GetModel(1)::GetDataSet(?)"
// El dataset contenido en el modelo y el que creamos es el mismo:
MMS::@DataSet dataSet2 = model::GetDataSet(?);
Real SameNameBlock(dataSet, dataSet2); //-> True

Esto mismo ocurre para otros pares de objetos principales que mantenga una relación de objeto principal y objeto suplementario, como por ejemplo: una estimación y un modelo.

Note: See TracTickets for help on using tickets.