LabVIEW OOP:从 child 初始化 parent

LabVIEW OOP: initializing parent from child

问题

如何在 LabVIEW 中设置我的 classes 以便我可以在 parent child classes 中保留不同 childes 之间的所有公共数据class 并仍然从 child class?

Initialize(data) 方法初始化该数据

背景

我有一个相当大的项目,我在其中使用 LabVIEW object-oriented 编程 (LVOOP) 工具来简化一些事情。我有一棵看起来像这样的 class 树:

理想情况下,我想做的是将所有 things 之间的公共数据保存在 GenericThing class 中,但随后在 ThingType1ThingType2 的独特 Initialize(data) 方法中将此数据与 class-specific 数据一起初始化。由于 class-specific 数据在两个 class 之间不同,并且此数据需要初始化,因此我不能对所有 Initialize(data) 方法使用相同的签名。

在Java我可以做这样的事情:

class abstract GenericThing {
  protected String name;
  public GenericThing(String name) {
    this.name = name;
  }
}

class ThingType1 extends GenericThing {
  private int awesomeness;  // additional data
  public ThingType1(String name, int awesomeness) {
    super(name);
    this.awesomeness = awesomeness;
  }
}

class ThingType2 extends ThingType2 {
  private Boolean isSuperCool;  // different additional data
  public ThingType2(String name, Boolean isSuperCool) {
    super(name);
    this.isSuperCool = isSuperCool;
}

但对于我来说,我无法弄清楚如何在 LabVIEW 中做类似的事情。

目前尝试次数

我试图从几个角度来探讨这个问题。首先,我尝试在我的 GenericThing class 中创建一个 Initialize(data) 动态调度方法,然后在 child classes 中覆盖它,但是如果你这样做会出错尝试更改方法的签名(不同 inputs/outputs):

好的,所以我不能那样做。接下来我尝试为 GenericThing class 创建数据成员访问方法并从 child class 调用它们,但我不知道如何以实际的方式调用它们持久地设置数据。我的尝试:

基本上使用 To More Generic Class VI 获取对 parent class 的引用,并使用我为 GenericThing 创建的成员访问方法设置其数据。这个版本运行得很好,但是当我尝试初始化 parent 和 child 数据然后读回该数据时(同样使用 To More Generic Class 和我的数据成员访问方法来读取 parent 的数据),我没有得到 parent 的数据。

我在写这篇文章的时候发现了一些有用的东西,但这让我很头疼,我不想放弃我的 post。我几乎就在那里提出问题。基本上当我在 ThingType1Initialize 方法中初始化 GenericThing 数据时,我需要将 GenericThing 的数据成员访问方法的输出重新转换为 ThingType1对象,也初始化它的数据,然后像这样传递出去(编辑:我不需要重铸这个数据。我可以直接将子类型引用传递给父类型方法。框图更新如下:

我可以类似地在 Get Data 方法中将子类型引用直接传递给我的父类型方法:

最后,我可以通过从 VI 调用这些方法来初始化和读取我的数据:

使用一些随机输入值 运行 的结果:

太棒了!如果您有更好的方法,请告诉我。

更新

我根据评论中的一些反馈更新了我的框图。这对我解决问题的尝试有很大改进:我可以直接将子项的引用连接到父类方法中,而无需处理使我的图表混乱的 up-casting/down-casting 语法!