传感器信号采集系统中系统包的分析与设计
石永,祁耀斌,姜德生
(武汉理工大学光纤传感中心,湖北 武汉 430070)
摘要:文章介绍了极限编程的基本概念和其主张的包的设计原则,并在此基础上,详细阐述如何在传感器信号采集系统中进行系统包的分析和设计。
关键词:极限编程,包的设计原则,信号采集系统
中图分类号:TP311 文献标识码:A
1、引言
极限编程(Extreme Programming,XP)是Kent Beck于1999年提出的一个创新的过程方法论。
它是一种高度动态的过程,能通过非常短的迭代周期来应对需求的变化。
极限编程的特点是弱化针对未来需求的设计,特别注重当前需求的简化。
首先开发出目标系统最重要的特性,可以迅速向客户提供所需的功能。
然后随着代码的演进,通过重构来满足新的要求,从而使整个项目失败的风险降到最小。
基于极限编程的设计是一个持续的应用原则、模式和实践来改进软件的结构和可读性的过程。
它致力于保持系统设计在任何时候都尽可能的简单、干净以及富于表现力。
为了有助于设计人员在开发中使软件具有灵活性、可维护性以及可重用性等良好结构,极限编程思想提出了以下五个面向对象设计原则:
(1)、单一职责原则(SPR):对一个类而言,应该仅有一个能引起它产生变化的因素。
(2)、开放-封闭原则(OCP):软件实体应该是可以被扩展的,但不是被用来修改的。
(3)、Liskov替换原则(LSP):子类必须能替换它们的基类。
(4)、依赖倒置原则(DIP):具体应该依赖于抽象,但抽象不应该依赖于具体。
(5)、接口隔离原则(ISP):不应该强迫使用者依赖于他们使用的方法。
接口应该属于其使用者,而不是属于它所在的类的层次结构中。
2、包的设计原则
极限编程思想在系统包的设计方面提出了六个设计原则,涉及包的创建、相互关系的管理以及包的使用,前三个原则用来指导如何把类划
分到包中,后三个原则是用来处理包之间的相互关系的。
1、包的内聚性原则
(1)、重用发布等价原则(REP),重用发布等价原则主张重用的粒度等
于发布的粒度。
(2)、共同封闭原则(CCP),共同封闭原则主张包中的所有类对于同一
类性质的变化应该是共同封闭的。
一个变化若对一个包产生影响,则将
对该包中的所有类产生影响,而对于其他的包不造成任何影响。
(3)、共同重用原则(CRP),共同重用原则主张一个包中的所有类应该
是共同重用的。
如果重用了包中的一个类,那么就要重用包中的所有
类。
2、包的耦合性原则
(1)、无环依赖原则(ADP),无环依赖原则主张在包的依赖关系图中不
允许存在环。
(2)、稳定依赖原则(SDP),稳定依赖原则主张朝着稳定的方向进行依
赖。
(3)、稳定抽象原则(SAP)稳定抽象原则主张包的抽象程度应该和其
稳定程度一致。
3、基于包的设计原则的传感器信号采集系统系统包的设计
3.1案例说明:
武汉某大桥的长期健康监测及数字化管养系统是笔者正在参与的一
个特大型桥梁的信息采集与分析系统。
其中桥梁的各种信号通过现场的
传感器系统和相应的数据采集设备采集获得,主要包括控制截面的应力
信号,主梁及主塔的变形信号,主梁纵向位移信号,主梁震动特征信
号,关键斜拉索索力信号,各控制截面的温度信号等。
通过对数据采集
系统的功能分析,以应力传感器和温度传感器为例,给出系统的结构图
(图1)如下:
图1:传感器数据采集系统的结构图
首先,根据各部分的功能进行包的设计。
API以及它的每一个实现都
可以独立于应用程序的其他部分并进行重用;UI和传感器应该被分开,
这样他们就可以独立变化。
在图2中给出第一阶段的包图。
每一个平台
都有一个对应的包,这些包中的类都派生自API包中的类。
API包唯一的
一个客户是WHCJMonitoringSystem包,该包中包含了所有其他的类。
图2:第一阶段包图
3.2基于包的设计原则的系统包的设计
在上面的设计中,存在的问题是:用户界面(UI)和WHCJMonitoringSystem混合在一起,UI经常需要独立变化,把这个类放
在单独的包中会更好一些。
但把MonitoringScreen拿出来放到自己的UI 包中,那么这个包和StressMonitoringSystem包之间就会有一个环状的依赖关系(图3)。
这违反了无环依赖原则(ADP)并且会使这两个包不能相互独立地发布。
图3: 将UI独立出来,存在有环依赖
将主程序Main()从WHCJ1_0类中拿出来可以修正这个问题。
WHCJ1_0仍然创建StationToolkit和所有的传感器,但是它不创建MonitoringScreen。
主程序Main()会创建MonitoringScreen以及WHCJ1_0。
然后,主程序会把WHCJ1_0传递给MonitoringScreen,这样MonitoringScreen就可以把它的传感器增加中了。
这样,就可以重新绘制包图,在图4中,我们忽略了大部分的和MonitoringScreen没有关系的包,UI完全可以独立于WHCJMonitoringSystem而变化。
图4:解除了依赖环的包图
但是,由于UI依赖于WHCJMonitoringSystem,所以每当WHCJMonitoringSystem变化时都会UI发生变化。
UI和WHCJMonitoringSystem都是具体的。
当一个具体包依赖于另一个具体包时,就违反了依赖倒置原则(DIP)。
这个问题可以通过创建一个由MonitoringScreen使用,而WHCJStation从其派生的接口来修正。
图5:WHCJ Station Component抽象接口
这样就可以得到最后的传感器数据采集系统组件包图(图6)。
图6:传感器数据采集系统组件包图
接着我们可以对设计出来的包图的稳定性进行验证。
从图7中我们可以看
图7: 传感器数据采集系统包图的稳定性度量
到每个包度量I都大于它所依赖的包的I度量值,说明这个设计是满足稳定依赖原则的。
4、结束语
以上详细的介绍了如何运用极限编程思想及其主张的包的设计原则来解决实际中的问题,经实践表明,新的设计具有良好的效果,能节约软件开发时间,且软件的结构可以在今后相应的工程中被复用,可以对该软件的几个部分分别进行发布。
当然,极限编程思想和其主张的包的设计原则作为一种新颖的软件开发方法,还需要进行更多的研究和实践。
参考文献:
[1] Robert C Martin. Agile Software Development. Principles,
Patterns, and Practices[M]. P Educ,2003.
[2] BECK K Extreme Programming Explained [M] .Addison-Wesley P
Educ,2000
[3] Robert C Martin Object Oriented Analysis and Design with
Applications. Addison-
Wesley,2001.。