2.3.1 面向对象建模
2.3.1.1 组件与对象
组件(Component):Modelica语法规范中将“组件”定为专门术语,对应于工程建模中的零件/部件或者元件/器件。从面向对象的角度看,组件就是对象。
对象(Object):Modelica是面向对象的语言,在Modelica模型中,除了文字常量外,任何被声明的组件,其本质都是一个对象。对应地,组件包含了组件属性。
例如:
r1是一个组件,类型是Resistor(就像对象一样拥有自己的类型),属性包括v、i、R,这些属性自身也均为组件。
由此可见,任何一个组件,都是由更小的组件表示得来的,最小的组件则由Modelica内置的基本类型(包括Real、Integer、Boolean、String和enumeration)来定义。
2.3.1.2 类型定义
在面向对象的语言中,对象是类的实例,同样,Modelica中组件是类型的实例。上一例中,Resistor即类型,v、i、R是其属性,R*i=v是其行为,通过此类型定义一个组件r1,则r1拥有类型中的所有属性和行为。
Modelica语言预定义的基本类型见表2-3。
表2-3 Modelica基本类型
若内置类型无法满足需求,用户可以通过类型定义的方式扩展所需的类型,形式大致如图2-5所示(加粗文字为Modelica关键字)。
如上所述,Modelica类型定义的基本结构包括:
图2-5 类定义示意图
(1)元素定义:元素定义区域可以定义组件或者嵌套类型,并且可以导入其他类型或者组件,以及继承其他类型。
(2)行为定义:行为定义区域可以通过方程或算法的方式定义此类的行为,这些方程或算法将与其他存在数据交互的模型方程一起决定求解过程(线性/非线性、常微分/微分代数、连续/离散等)。
2.3.1.3 抽象类
抽象类相当于面向对象语言中的抽象基类,用于描述基本的共性属性和行为。抽象类不能用于定义组件,而应该被相似的类型继承。定义抽象类需使用关键词partial。
定义抽象类型并且继承使用,是实现模型重用的一种重要手段。例如许多控制元件都具有一个共性,即都具有两个端口:一端输入,一端输出。
例如:
通过继承,可以定义如下增益放大器:
或者,定义一个正弦运算器:
2.3.1.4 受限类
Modelica语言通过多个类定义关键字的方式来更精确地表达类的含义,增强易用性和可读性。
用于类定义的关键字限于model、connector、record、block、type、function、package和class。其中,利用非class的关键字定义的类型称为受限类。不同关键字的主要区别见表2-4。
表2-4 Modelica受限类
除此之外,Modelica还拥有多重继承、变型、导入、重声明等多种模型重用手段,更多的高级语义请参考Modelica规范手册。