Las propiedades comunes a alguna combinación aleatoria de una instancia de Person
y Company
pueden modelarse utilizando una "clase de asociación".
Hay una notación para esto en UML, y no es difícil crear dicho concepto en un lenguaje de programación extensible.
La idea es que cualquier par aleatorio de objetos que consta de un Person
y Company
tiene una relación, y esa relación es ella misma un objeto. No es ni Person
ni Company
, sino las cosas asociadas con la conexión entre una instancia particular de Person
y Company
.
Ese material (propiedades, métodos) constituye una clase: la clase de asociación Person-Company
.
Hice este trabajo en Lisp antes, con algunas macros para definir una clase de asociación para un par de clases dado, y una tabla hash débil global para mapear pares de objetos a su objeto de clase de asociación (para que una persona y compañía fue posible recuperar la asociación, y esa asociación desaparecería cuando estos objetos se convirtieran en basura).
El vínculo real entre empresas y personas es fácil, utilizando, p. listas u otras estructuras de datos asociativos. Un objeto persona puede tener una lista de empresas, y viceversa. La idea de clase de asociación aborda el problema de dónde poner las cosas de la persona-compañía. Por ejemplo, cada Person
tiene un rol dentro de un Company
(digamos). No podemos tener una variable role
en un Person
porque puede tener muchos roles en muchas empresas. Ciertamente no podemos tener un role
en la compañía porque ni siquiera es una persona; tiene personas asociadas que tienen roles. El rol puede ir a la asociación: problema resuelto.
posible duplicado de [Modelos relaciones padre-hijo con clases] (http://stackoverflow.com/questions/4089582/modelling- relaciones padre-hijo-con-clases) –