Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OOP:聚合的逆?_Oop - Fatal编程技术网

OOP:聚合的逆?

OOP:聚合的逆?,oop,Oop,在OOP中,当一个类与另一个类形成关系时,它被称为聚合,下面是一个简单的例子,其中汽车有一个引擎,但引擎可以在没有汽车的情况下存在: class Engine { start() { console.log('Engine started'); } } class Car { engine: Engine; constructor(engine: Engine) { this.engine = engine; } }

OOP中,当一个类与另一个类形成
关系时,它被称为
聚合
,下面是一个简单的例子,其中
汽车
有一个
引擎
,但引擎可以在没有汽车的情况下存在:

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共享聚合的例子——体育团队和成员学生之间的关系。成员学生可以同时成为不同团队的一部分。从一个团队到另一个学生成员,我将其称为聚合,团队将收集学生。从学生成员对于团队,我将其称为协会(学生与体育团队相关联),如果学生可以同时成为多个团队的成员,则学生将持有体育团队的简单参考资料或团队集合