【问题标题】:Setting inter-dependant properties设置相互依赖的属性
【发布时间】:2013-07-19 22:03:05
【问题描述】:

在我看来,我的问题的答案可能是一个补救级别 - 我刚刚开始使用 OOP - 但它并没有跳出可用的文献。

我想为蒸汽的特性构建一个 VB 类(水也用于饱和条件)。对于那些不太熟悉蒸汽表的人来说,蒸汽有几个关键特性:压力、温度、焓、熵、比容、等压/等压热容量和质量(定义了饱和条件下的蒸汽/水混合物的特殊子集)。建立这些属性中的任何两个都可以完全定义流体的状态,尽管每个属性都可以说是它们自己的属性。

从任何其他两个属性中确定任何这些属性的数值方法已经很成熟,因此在数学上 v=f(T,p) 等很容易编码(本身就是一个复杂的求和但很容易)

我正在努力理解在我的 Steam 类中定义和设置对象属性的正确方法是什么。将输入上述任意两个值并计算其余值。

非常感谢任何帮助。示例代码更是如此。

【问题讨论】:

  • 好问题——我做了一个小修改:技术——VB——属于标签(而 not 在标题中,它将被视为多余的谷歌搜索);此外,“vbasic”这个名称并不常用,因此令人困惑(实际上我只是假设你的意思是 VB,我不确定)。
  • 是的,我的意思是 VB。谢谢。

标签: vb.net oop properties


【解决方案1】:

我已经通过示例代码进行了更多阅读和倾注,以下是我正在开发的解决方案(我很确定这是 tinstaafl 推荐的第二个选项):

将所有蒸汽“属性”(以下称为 SteamProps,不要与类属性混淆)声明为类中的私有变量。

使用 Get 为每个蒸汽属性创建只读属性过程以返回适当的 SteamProp 值。

使用“Sub New()”构造函数来实例化一个新对象。将两个或三个参数传递给构造函数。我从压力和温度开始,因为它是最简单的。

Sub New(ByVal NewPressure As Double, ByVal NewTemperature As Double)
    'Subroutine for determining other SteamProps from pressure and temperature
End sub

一旦我解决了这个问题,我将重载构造函数以允许将任意两个值传递给适当的 SteamProps 以及一个标识哪些值的字符串:

Sub New(ByVal Var1, ByVal Var2 As Double, ByVal VarString as String)
'Evaluate VarString apply correct method for backcalculating P&T
'Subroutine for determining other SteamProps from pressure and temperature
End sub

字符串选项将是 "p,T" ; “p,h”; "T,s";等(p、T、v、h、u、s、Cp、Cv 和 w 是相关蒸汽属性的标准变量名称)

我的 Steam 类的对象将能够在构造后返回所有属性值。 SteamProps 只能通过构造函数使用的子程序以及用于特殊类型的工厂操作(例如,恒压加热、等温膨胀等)的一些附加子程序来更改。我不会为这些方法的丰富性而烦恼,因为拥有此类的更大优势将是能够创建两个表示过程中不同点的对象并比较它们的属性。

这是我完成的第一个 OOP,我非常感谢对这种方法的任何批评。

【讨论】:

    【解决方案2】:

    其实这里有不止一个选项。

    一种选择是创建一个包含所有属性的构造函数作为可选添加。那么您的代码可以填写未提供的属性。

    您还可以将所有属性设为私有,并使用特定方法根据提供的参数获取或设置属性。

    我相信还有更多的选择,并且每个都有其优点和缺点。不过,这应该会给你一个开始。

    【讨论】:

    • 但是您实际上如何巧妙地计算 缺失值?我在这里看到了组合爆炸。
    • 有些事情需要弄清楚,因为我明确表示我的建议只是一个开始。一种方法是在对象中设置属性之前使用文本框和复选框来获取最少的数据量
    • 计算其他值并不难。有 IAPWS 发布的公式可以理解
    猜你喜欢
    • 2016-04-13
    • 1970-01-01
    • 2013-08-04
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 2018-08-11
    相关资源
    最近更新 更多