Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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
Matlab 包含其他类作为属性的类_Matlab_Class_Oop - Fatal编程技术网

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 及 这意味着,我使用相同的变量/属性来存储来自不同类的对象。这是一个糟糕的设计选择吗?我应该如何避免这种情况?我只是尝试将对象分配给彼此,因为我尝试在

在MATLAB中,我有不同的类
A
&
B
。我想将从类
A
B
创建的对象指定为
A
B
中的属性。我的代码如下所示

classdef A < handle

   properties
      container
   end

   methods
      function object = A()
      end
   end
end

这意味着,我使用相同的变量/属性来存储来自不同类的对象。这是一个糟糕的设计选择吗?我应该如何避免这种情况?我只是尝试将对象分配给彼此,因为我尝试在不同对象之间建立关系

另外,我是OOP新手

编辑以获得更好的解释:


A
B
是根本不同的,不应相互连接/继承。我的想法是这样的:Object
city
包含Object
street
和Object
house
,Object
house
连接到Object
street
。因此,
街道
房屋
应该继承自
城市
,但是
街道
房屋
应该相互了解。但是,我应该如何认识到许多对象(如标志、汽车、人、猫、狗等)之间的关系,这些对象都是从城市继承的,但彼此之间不共享/继承其他任何东西


例如,我想在
汽车
街道
对象之间建立连接,因此如果我查看特定的
街道
-对象,我想指定特定的对象
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);