我已经阅读了一些关于这三种关系之间差异的帖子,我想我明白了.
我只是想知道,编码时所有这些都写得一样吗?
问题1:所有3只是实例变量中对象类型的值?
class A {
public $b = ''
public function __construct($object) {
$this->b = $object // <-- could be a association, aggregation or a composition relation?
}
}
Run Code Online (Sandbox Code Playgroud)
问题2:它必须是实例变量还是静态变量?
class A {
public static $b = '' // <-- nothing changed?
public function __construct($object) {
$this->b = $object
}
}
Run Code Online (Sandbox Code Playgroud)
问题3:对象的创建位置是否存在差异?
我倾向于认为组合对象是在对象内创建的:
class A {
public $b = ''
public function __construct() {
$this->b = new Object // is created inside the object
}
}
Run Code Online (Sandbox Code Playgroud)
和聚合/关联通过构造函数或其他方法传递:
class A {
public $b = ''
public function __construct($object) { // passed through a method
$this->b = $object
}
}
Run Code Online (Sandbox Code Playgroud)
问题4:为什么/什么时候知道这一点很重要.我是否必须在另一个对象内部评论它的关系,或者你在UML图中做什么?
有人可以解释这些问题吗?
小智 6
你是对的,这些通常被实现为对象引用,当然这通常只是某些类的成员字段.这只是因为它在面向对象的系统中很自然,它可以映射到不同上下文中的其他内容,例如关系数据库中的外键.
正如@erisco所提到的,关系的细节只能在整体模型的背景下进行.例如,我们可以读取采购订单和订单行之间的组合关系(例如):采购订单包含一个或多个订单行.
我通常会解释你给出的三个如下:
也就是说,我已经看到这些曾经意味着几乎所有可以想到的东西(并且很可能是SO上的人会不同意我的评估!)所以在解释别人的图时要小心:-)上述惯例有我很好,但是YMMV.
问题2:静态引用将产生跨实例的公共关联,但它只是实现它的一种方式,并且可能令消费者感到惊讶.
| 归档时间: |
|
| 查看次数: |
6055 次 |
| 最近记录: |