在面向对象编程中哪个对象应该保持多对多的关系?(如果有的话)

Mat*_*att 8 php oop many-to-many class

我将用一个例子来说明这一点:

class Company {

}

class Person {

}
Run Code Online (Sandbox Code Playgroud)

CompanyPerson保持多对多的关系.A Person可以属于多个,Companies并且Company可以包含多个People.

那么我是否需要创建第三个类:

class CompanyPerson {

}
Run Code Online (Sandbox Code Playgroud)

或者公司应该处理它:

class Company {
    function add_person() {

    }
}
Run Code Online (Sandbox Code Playgroud)

或者是Person应该的?

class Person {
    function add_to_company() {

    }
}
Run Code Online (Sandbox Code Playgroud)

Kaz*_*Kaz 2

可以使用“关联类”对 aPerson和实例的某些随机组合所共有的属性进行建模。Company

UML 中对此有一个表示法,并且在可扩展的编程语言中创建这样的概念并不难。

Person这个想法是,任何由和组成的随机对象对都Company具有关系,并且该关系本身就是一个对象。它既不是Person也不是,而是与特定和实例Company之间的连接相关的东西。PersonCompany

这些东西(属性、方法)构成了一个类:Person-Company关联类。

我之前在 Lisp 中完成了这项工作,使用一些宏来为给定的一对类定义关联类,以及一个全局弱哈希表,用于将对象对映射到它们的关联类对象(这样对于给定的个人和公司来说,这是可能的)检索关联,当这些对象变成垃圾时,该关联就会消失)。

特定公司和个人之间的实际联系很容易,例如使用列表或其他关联数据结构。人员对象可以有公司列表,反之亦然。关联类的思想解决了将个人-公司的东西放在哪里的问题。例如,每个人在一个(比方说)Person中都有一个角色。我们不能在 a 中Company包含变量,因为它可以在许多公司中扮演许多角色。我们当然不能在公司里有一个,因为它甚至不是一个人;它是一个人。它有与其相关且具有角色的人。角色可以进入关联:问题解决了。rolePersonrole