在我看来,我的问题的答案可能是一个补救一级 - 我刚刚开始使用OOP - 但它并没有跳出现有文献。
我想为蒸汽的属性(水也是饱和条件)构建一个VB类。对于那些不太熟悉蒸汽表的人来说,蒸汽有几个关键特性:压力,温度,焓,熵,比容,等压/热容量和质量(在饱和条件下定义一组特殊的蒸汽/水混合物)。建立这两个属性中的任何两个都完全定义了流体的状态,尽管每个属性本身都可以说是属性。
从任何其他两个属性中确定任何这些属性的数值方法已经很好地建立,因此在数学上v = f(T,p)等等很容易编码(复杂的sumation本身但很容易)
我正在努力的是正确理解在我的Steam类中定义和设置对象属性的正确方法是什么。将输入上述任何两个值,并计算其余值。
非常感谢任何帮助。示例代码加倍。
答案 0 :(得分:0)
实际上你在这里有多个选项。
一个选项是使构造函数具有要添加为可选的所有属性。然后你的代码可以填写哪些属性没有提供。
您还可以将所有属性设为私有,并使用特定方法根据提供的参数获取或设置属性。
我确信有更多的选择,每个选项都有其优点和缺点。这应该会给你一个开始。
答案 1 :(得分:0)
我已经做了一些阅读并通过示例代码,以下是我正在开发的解决方案(我很确定它是tinstaafl推荐的第二个选项):
将所有steam“属性”(以下称为SteamProps,不要与类属性混淆)声明为类中的私有变量。
使用Get为每个steam属性创建ReadOnly属性过程以返回适当的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,我非常感谢对这种方法的任何批评。