在MATLAB中我有不同的类A
& B
。我想分配从类A
创建的对象& B
和A
中的属性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
。因此,house
和city
应该从street
继承,但house
和city
应该相互了解。但是,我应该如何理解许多物体(如标志,汽车,人,猫,狗等)之间的关系,这些物体都是从car
继承但不共享/继承彼此之间的任何东西?
例如,我想在street
和street
对象之间建立连接,所以如果我查看特定的car1
- 对象,我想分配特定的对象{ {1}},car2
,car3
到street
对象。
答案 0 :(得分:2)
根据您的问题,您基本上希望模拟对象之间的一对多关系。
这样做的一种可能方法是将句柄存储在每个“很多”方的对象中的关系的“一”侧,然后使用findobj
之类的东西来获取对象列表共享相同的“一个”对象引用。
如果是您的Car
和Street
示例。
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);
缺点是您必须维护一个Street
和Car
个对象的列表以传递给findobj
,这个搜索可能会成为一个非常大的数字的性能瓶颈对象。
现在,如果您不打算更改汽车所在的街道等,那么您可以随时创建工厂来构建类关系(在两个对象中添加引用)然后只需使用您创建的数据。
答案 1 :(得分:1)
如果我正确理解你的问题,这是我的建议。
继承允许新类接受另一个类的属性和方法。如果你继承了A类,你的案例中的B类就不需要额外的函数定义。