Свойства, общие для некоторой случайной комбинации экземпляра Person
и Company
, могут быть смоделированы с использованием «класса ассоциации».
Для этого есть обозначение в UML, и это не сложносоздать такую концепцию в расширяемом языке программирования.
Идея состоит в том, что любая случайная пара объектов, состоящая из Person
и Company
, имеет отношение, и это отношение само является объектом.Это не Person
и Company
, но материал, связанный со связью между конкретным Person
и Company
экземпляром.
Этот материал (свойства, методы) составляет класс: Person-Company
ассоциативный класс.
Я делал эту работу в Лиспе раньше, с некоторыми макросами для определения класса ассоциации для данной пары классов и глобальной слабой хэш-таблицей для отображения пар объектов в их объект класса ассоциации (такчто для данного человека и компании было возможно получить ассоциацию, и эта ассоциация исчезнет, когда эти объекты станут мусором).
Реальная связь между отдельными компаниями и людьми проста, например, с помощью списков или других ассоциативных структур данных.Объект-человек может иметь список компаний, и наоборот.Идея ассоциативного класса решает проблему размещения персонала компании.Например, каждый Person
играет роль в Company
(скажем).Мы не можем иметь переменную role
в Person
, потому что она может иметь много ролей во многих компаниях.У нас, конечно, не может быть role
в компании, потому что это даже не человек;с ним связаны люди, у которых есть роли.Роль может перейти в ассоциацию: проблема решена.