Matlab 包含其他类作为属性的类
在MATLAB中,我有不同的类Matlab 包含其他类作为属性的类,matlab,class,oop,Matlab,Class,Oop,在MATLAB中,我有不同的类A&B。我想将从类A和B创建的对象指定为A和B中的属性。我的代码如下所示 classdef A < handle properties container end methods function object = A() end end end 及 这意味着,我使用相同的变量/属性来存储来自不同类的对象。这是一个糟糕的设计选择吗?我应该如何避免这种情况?我只是尝试将对象分配给彼此,因为我尝试在
A
&B
。我想将从类A
和B
创建的对象指定为A
和B
中的属性。我的代码如下所示
classdef A < handle
properties
container
end
methods
function object = A()
end
end
end
及
这意味着,我使用相同的变量/属性来存储来自不同类的对象。这是一个糟糕的设计选择吗?我应该如何避免这种情况?我只是尝试将对象分配给彼此,因为我尝试在不同对象之间建立关系
另外,我是OOP新手
编辑以获得更好的解释:
类
A
和B
是根本不同的,不应相互连接/继承。我的想法是这样的:Objectcity
包含Objectstreet
和Objecthouse
,Objecthouse
连接到Objectstreet
。因此,街道
和房屋
应该继承自城市
,但是街道
和房屋
应该相互了解。但是,我应该如何认识到许多对象(如标志、汽车、人、猫、狗等)之间的关系,这些对象都是从城市继承的,但彼此之间不共享/继承其他任何东西
例如,我想在
汽车
和街道
对象之间建立连接,因此如果我查看特定的街道
-对象,我想指定特定的对象car1
,car2
,car3
到street
对象。如果我正确理解了你的问题,这里是我的建议
继承允许一个新类接受另一个类的属性和方法。在你的例子中,如果类B继承自类A,那么它就不需要额外的函数定义。如果我正确理解了你的问题,这里是我的建议
继承允许一个新类接受另一个类的属性和方法。如果将类B从类A继承,则在您的情况下,类B不需要额外的函数定义。基于您的问题,您基本上希望模拟对象之间的一对多关系 一种可能的方法是将句柄存储到每个“多”方对象中关系的“一”方,然后使用类似于
findobj
的方法获取共享相同“一”对象引用的对象列表
对于您的汽车
和街道
示例
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
然后你可以像这样使用它
% 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));
这还有一个额外的优点,就是更改街道非常简单(因为您只需要更新car对象)
缺点是您必须维护一个街道
和汽车
对象列表,才能传递到findobj
,而此搜索可能会成为大量对象的性能瓶颈
现在,如果您不打算更改汽车所在的街道等,那么您可以始终创建一个工厂来构建类关系(在两个对象中添加引用),然后只使用您创建的数据。基于您的问题,您基本上希望模拟对象之间的一对多关系 一种可能的方法是将句柄存储到每个“多”方对象中关系的“一”方,然后使用类似于
findobj
的方法获取共享相同“一”对象引用的对象列表
对于您的汽车
和街道
示例
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
然后你可以像这样使用它
% 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));
这还有一个额外的优点,就是更改街道非常简单(因为您只需要更新car对象)
缺点是您必须维护一个街道
和汽车
对象列表,才能传递到findobj
,而此搜索可能会成为大量对象的性能瓶颈
现在,如果您不打算更改汽车所在的街道等,那么您可以始终创建一个工厂来构建类关系(在两个对象中添加引用),然后只使用您创建的数据。如果要将两个类中的对象指定给同一个变量,这两门课有什么不同?这两个类是由一个超类关联的(或可关联的),还是这两个类根本不同但需要共享信息?目前看来,这并不是最好的设计,但我认为我们需要更多关于课程本身的信息来帮助我们。A和B两个课程从根本上是不同的(是的,我应该更具体一些……。“
street
和house
应该继承自city
”。我不同意。这三个项目虽然相互关联,但本质上是不同的实体。我会说,让它们成为自己的类,并拥有city
contain,或者用面向对象的术语“由”、street
数组和house
数组组成。参见vs..AH,这很有用。谢谢我想我正在寻找一种“聚合关系”(没有所有权的关系)。你有一个如何在MATLAB中实现的例子吗?如果你将两个类中的对象分配给同一个变量,那么这两个类之间的区别是什么?这两个类是由一个超类关联的(或可关联的),还是这两个类根本不同但需要共享信息?目前看来,这并不是最好的设计,但我认为我们需要更多关于课程本身的信息来帮助我们。A和B两个课程从根本上是不同的(是的,我应该更具体一些……。“street
和house
应该继承自city
”。我不同意。这三个项目虽然相互关联,但本质上是不同的实体。我会说让他们自己上课,让他们有city
c
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);