OOP:聚合的逆?
在OOP中,当一个类与另一个类形成OOP:聚合的逆?,oop,Oop,在OOP中,当一个类与另一个类形成关系时,它被称为聚合,下面是一个简单的例子,其中汽车有一个引擎,但引擎可以在没有汽车的情况下存在: class Engine { start() { console.log('Engine started'); } } class Car { engine: Engine; constructor(engine: Engine) { this.engine = engine; } }
关系时,它被称为聚合
,下面是一个简单的例子,其中汽车
有一个引擎
,但引擎可以在没有汽车的情况下存在:
class Engine {
start() {
console.log('Engine started');
}
}
class Car {
engine: Engine;
constructor(engine: Engine) {
this.engine = engine;
}
}
问题:
如果我必须做聚合的逆运算,这样我就可以回答一个查询给我所有与这个引擎相关的汽车,在OOP中这叫什么?聚合(或组合,或关联)是一个概念:它允许说a有一个B。你可以反转组合(B有一个a)但这一概念本身并没有“逆”。或者是:A没有B 聚合(或组合,或关联)是一个概念:它允许说a有一个B。你可以反转组合(B有一个a),但概念本身没有“反转”。或者是:A没有B 具有-a,因为静态关系转换为聚合。在典型的面向对象建模中,在确定两个实体之间的静态关系之后,我们要问的下一个问题是,我们将在哪个方向上更频繁地提出查询
在您的示例中,对象之间是一对一的关系(车辆只有一个发动机,发动机在给定时刻仅安装在一辆车辆上)
如果大多数时候查询都是getMeThisVehiclesEngine()(container to contained),那么Vehicle会保留engine的引用,如果查询是相反的(我认为这是一种相反的情况),比如getMethEventHiclehithHoldingThisEngine()(内容到容器。这里容器和内容术语是从域的角度来看的),然后引擎将持有车辆的引用,我将称之为关联。如果我们需要双向导航,两个对象将保持彼此的引用。(通常我们避免双向关系)。一对一的关系并不明显,但想象一个与has共享聚合的例子——体育团队和成员学生之间的关系。成员学生可以同时成为不同团队的一部分。从一个团队到另一个学生成员,我将其称为聚合,团队将收集学生。从学生成员代表我称之为协会的团队(学生与运动队有联系)如果学生可以同时成为多个团队的成员,学生将持有田径团队的简单参考资料或团队集合。拥有-a,因为静态关系转化为聚合。在典型的面向对象建模中,在识别两个实体之间的静态关系后,下一个问题是我们要问的是,哪一个是我们提出问题的更频繁的方向
在您的示例中,对象之间是一对一的关系(车辆只有一个发动机,发动机在给定时刻仅安装在一辆车辆上)
如果大多数时候查询都是getMeThisVehiclesEngine()(container to contained),那么Vehicle会保留engine的引用,如果查询是相反的(我认为这是一种相反的情况),比如getMethEventHiclehithHoldingThisEngine()(内容到容器。这里容器和内容术语是从域的角度来看的),然后引擎将持有车辆的引用,我将称之为关联。如果我们需要双向导航,两个对象将保持彼此的引用。(通常我们避免双向关系)。一对一的关系并不明显,但想象一个与has共享聚合的例子——体育团队和成员学生之间的关系。成员学生可以同时成为不同团队的一部分。从一个团队到另一个学生成员,我将其称为聚合,团队将收集学生。从学生成员对于团队,我将其称为协会(学生与体育团队相关联),如果学生可以同时成为多个团队的成员,则学生将持有体育团队的简单参考资料或团队集合