作者采用的规则是:将具有相同性质,包括相同外部性质和内部处理能力的对象归为一类作为最低层次,然后采用自下而上逐步抽象的方法,将具有共性的类的公共性质再并人一个相对于被抽取共性的类的基类中;被抽取共性的类便为导出类,抽取成形的类为基类。如此类推,不断产生更多的基类,最终建立了类的层次结构。在对所有梯形图元件进行共性抽象之前,做了如下处理:
(1)梯形图元件除元件自身信息外,还应包含其连接线的信息;
(2)把梯形图的空格和水平连接线作为特殊元件;
(3)在梯形图中,常开触点、常闭触点等元件有一个操作参数;定时器、计数器等元件有两个操作参数;空格和水平连接线等元件没有操作参数。为了对所有梯形图元件进行共性的抽象表示,作者为每个元件设置了两个操作参数。例如常开触点只有一个操作参数时,另外一个操作参数设置为空。
抛开梯形图的图像表象,梯形图中每个元件包含的共同属性如图1所示。元件基类定义元件的所在位置、持久化和事件处理等操作,其定义描述如下:
(1)标识信息:元件唯一的功,类型及元件的操作参数;
(2)位置信息:元件的顶点位置、长度等;
(3)绘制行为:绘制元件图符,绘制元件包含的线型;
(4)命中测试行为:鼠标的位置是否命中图元以及具体部位;
(5)持久化行为:存盘和读取。
梯形图元件基类的关键代码如下:
4 结束语
以整体设计为基础,有了元件基类,就可以以其为父类,根据每个元件的不同特性,为每个元件设计一个子类。作者把各元件类以相应的英文单词来命名,如常开触点类(Normally Open Contact)命名为CContactNO。每一种元件都在该程序的工程组当中单列一个单元,并把相应元件类的定义写进去,为编辑器的具体实现打下基础。