包含其他类作为属性的类

时间:2017-01-09 20:53:24

标签: matlab class oop

在MATLAB中我有不同的类A&amp; B。我想分配从类A创建的对象&amp; BA中的属性B classdef A < handle properties container end methods function object = A() end end end 。我的代码看起来像这样

classdef B < handle

   properties
      container
   end

   methods
      function object = B()
      end
   end
end

和这个

A

然后我分配了B课程中的两个对象。来自container&amp;类的A - 属性B object_from_class_A.container = object_from_class_A ,例如

object_from_class_A.container = object_from_class_B

A

这意味着,我使用相同的变量/属性来存储来自不同类的对象。这是一个糟糕的设计选择吗?我该怎样避免这个?我只是想把对象分配给对方,因为我试图在不同对象之间建立关系。

P.S。我是OOP的新手。

编辑以获得更好的解释:

班级B&amp; city根本不同,不应相互连接/继承。我有这样的想法:对象street包含对象house和对象house,对象street连接到对象street。因此,housecity应该从street继承,但housecity应该相互了解。但是,我应该如何理解许多物体(如标志,汽车,人,猫,狗等)之间的关系,这些物体都是从car继承但不共享/继承彼此之间的任何东西?

例如,我想在streetstreet对象之间建立连接,所以如果我查看特定的car1 - 对象,我想分配特定的对象{ {1}},car2car3street对象。

2 个答案:

答案 0 :(得分:2)

根据您的问题,您基本上希望模拟对象之间的一对多关系。

这样做的一种可能方法是将句柄存储在每个“很多”方的对象中的关系的“一”侧,然后使用findobj之类的东西来获取对象列表共享相同的“一个”对象引用。

如果是您的CarStreet示例。

classdef Car < handle
    properties
        name
        street      % A handle to the street you're on
    end

    methods
        function self = Car(name, street)
            self.name = name;
            self.street = street;
        end
    end
end

然后是你的Street班级

classdef Street < handle
    properties
        name
    end

    methods
        function self = Street(name)
            self.name = name;
        end
    end
end

然后你可以像

一样使用它
% Create some streets
streets = [Street('Street1'), ...
           Street('Street2')];

% Create some cars
cars = [Car('one', streets(1)), ...
        Car('two', streets(2)), ...
        Car('three', streets(1))];

% Now get cars that are on Street1
cars_on_street_1 = findobj(cars, 'street', streets(1));

这具有额外的优势,因为改变街道是微不足道的(因为你只需要更新汽车对象)

cars(1).street = streets(2);

缺点是您必须维护一个StreetCar个对象的列表以传递给findobj,这个搜索可能会成为一个非常大的数字的性能瓶颈对象。

现在,如果您不打算更改汽车所在的街道等,那么您可以随时创建工厂来构建类关系(在两个对象中添加引用)然后只需使用您创建的数据。

答案 1 :(得分:1)

如果我正确理解你的问题,这是我的建议。

继承允许新类接受另一个类的属性和方法。如果你继承了A类,你的案例中的B类就不需要额外的函数定义。