【问题标题】:Correct way to define a class in matlab在matlab中定义类的正确方法
【发布时间】:2012-03-16 12:33:28
【问题描述】:

我一直在 matlab 中构建许多类,最近发现某些函数在我的类中表现不佳。我所有的对象都继承自句柄超类

例如:

  • finobj:我找不到任何对象,我的基础对象是否需要是 matlab Root 的子对象?我该如何设置?

  • clear : 如果我更改了较低对象的属性,则清除环境并重新实例化我的对象树会产生警告,可能我需要一个销毁方法?

我在这里看到http://blogs.mathworks.com/videos/2008/07/07/advanced-matlab-class-system-for-oop-in-matlab-introduction/ 预计会重载某些操作,但我肯定不希望对每个对象都这样做?

我的主要问题是我必须为我的代码定义什么才能以合理的方式运行?

【问题讨论】:

  • 尝试清除类而不是仅仅清除可能?
  • 我有一个树结构,如果我清除所有,修改其中一个叶子对象并重建树我收到通知说对象已修改,所以我想知道是否需要实现我自己的删除方法与否。
  • 事实证明,关闭所有的伎俩,mathworks.com/help/techdoc/matlab_oop/brzqjky.html

标签: matlab


【解决方案1】:

findobj 用于处理图形对象,而不是您的用户定义对象。因此,它不会找到您的对象(您为什么要首先找到它们?)。

clear 影响变量,clear classes 也影响类定义。请注意,在早期版本的 Matlab 中,clear classes 也清除了所有断点。

子类从超类继承一切(包括静态方法)。如果您不想修改子类中的特定功能,则无需重载任何内容。

如果您想让您的代码以合理的方式运行,您必须将其设计好。您必须如何设计它在很大程度上取决于您的代码应该解决的问题。

【讨论】:

  • 感谢您的回复,我主要想知道大多数类是否有任何默认方法,我总是觉得我错过了我应该内置的东西。
  • @Carel:这在很大程度上取决于您的课程。然而,面向对象编程的好处在于,在不破坏所有内容的情况下扩展类通常很容易,因此您可以随时添加内容。当然,您可能必须 clear classes 然后重新加载它们,但这就是您实现保存/加载功能的原因(以防默认设置不适合您)。
  • 非常正确。我总是到了一个开始怀疑我是否错过了什么的地步,顺便感谢您的帮助:)
【解决方案2】:

事实证明,我们可以继承许多类。

  • hgsetget :提供我在原始问题中想要的功能,这是一个比普通句柄更大的类。
  • handle:Bare Bones 类,不适用于 findobj、get 或 set。
  • Dynamic Props : 不太了解,稍后再更新。

我不知道我是否遗漏了什么,但似乎没有一个可以继承的 matlab 中可能的类的完整列表,表明每个类的优缺点。

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 2016-04-07
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    相关资源
    最近更新 更多