骆鹏傲
徐州医学院医学信息学院,江苏 徐州 221004
医院信息系统(hospital information system,HIS)是目前最为复杂的软件系统之一,开发此系统时进行可视化建模十分重要。在我们构建软件项目的开发周期中,系统建模是整个软件开发中重要和关键的一步。
UML(unified modeling language)又称统一建模语言或标准建模语言,是一种面向对象的建模语言,它是运用统一的、标准化的标记和定义实现对软件系统进行面向对象的描述和建模。UML是一个支持模型化和软件系统开发的图形化语言,它为软件开发的所有阶段提供模型化和可视化支持。该课题的开发正是采用基于UML的面向对象的开发技术。
UML是面向对象分析和设计(OOA&D)的方法,它统一了Booch、Rumbaugh、Jacobson的表示方法,而且对其作了进一步的发展,其优势可以归结为以下三点[1-2]:
①UML统一了Booch、OMT和OOSE等方法中的基本概念;
②UML还吸取了面向对象技术领域中其他流派的长处,其中也包括非OO方法的影响;
③UML在演变过程中还提出了模板(Stereotypes)、职责(Responsibilities)、扩展机制(Extensibility mechanisms)、分布式(Distribution)、并发(Concurrency)等概念。
1.1.1 建模机制 任何建模语言都以静态建模机制[1,3-4]为基础,UML 也不例外。UML 的静态建模机制包括用例图(Use Case diagram)、类图(Classdia gram)、对象图(Object diagram)、组件图(Component diagram)和配置图(Deployment diagram)。
系统建模不仅要描述静态结构,同时要描述系统的行为,也就是描述所建立的模型是否可以执行或者执行时的时序状态和其交互关系。其中,主要用状态图(State diagram)、活动图(Active diagram)、顺序图(Sequence diagram)、协作图(Collaboration diagram)四个图形来表现,亦把此称为标准建模语言UML的动态建模机制[1,3-4]。
1.1.2 建模方法 UML首先通过建立一系列的用例图,对系统功能进行分析,并以活动者与用例之间的关系表示系统用户对系统功能的要求,从而以图形化的方式简洁明了地分析系统的要求。UML使用活动图对此进行建模[5-6]。
在详细设计阶段,UML根据交互视图、状态视图以及活动图内的系统详细信息,在概要设计的基础上,设计出各个类应具有的属性以及方法,并进一步确定各个类之间的关系。最后,在编码实现阶段,只要选择一种面向对象的语言,按照这种语言的要求将详细设计的结果模型实现。其分析过程主要模型及相互关系如图1所示(虚线框图表示分析结果,实线框图表示设计过程中的结果,箭头表示驱动关系)。
图1 分析过程主要模型及相互关系图
因为该系统采用的是Oracle关系数据库[7],而我们的模型是基于面向对象的,因此要解决对象—关系数据库之间的映射问题。正如前面所讨论的,对于简单的对象,我们可以直接把属性映射为数据库中的域,同时对域加入约束。例如:门诊排班、划价明细等对象,就可采用此方法一一映射为数据库的表。如果对于存在继承关系的复杂类,我们所采用的映射方式是将整个类层次映射为单个表。例如:存在病员类、医保类和自费病员类,其中医保和自费病员类均为继承病员类,这时我们所采用的映射方法为把病员类、自费、医保类中的所有属性映射为病员表中的域,同时增加一个费用类别字段,以区别病员类别。
医院管理信息系统是一个典型的7×24小时连续不间断系统,系统一旦运行,整个医院的业务将依赖于该系统,基于管理及信息量大及实时数据传递等特殊要求,对系统及网络的性能有较高的要求。系统设计时按照软件工程学的范畴严格遵循以下原则:
①开放性和可扩充性;②先进性;③高可靠性、安全性;④可维护性。
医院网络是一套综合的信息系统,而且医院的需求和各种数据在不停地变化,因此要求整个系统具有良好的可管理性,在界面上做到直观清晰,并提供详尽完善的技术手册,方便系统维护。
针对医院对HIS的系统要求,根据卫生部“医院信息系统基本功能规范”,经过仔细分析调研与论证,我们将HIS分为业务管理模块和临床信息模块。其中,业务管理模块包括:门诊患者管理挂号划价收费模块、药库药房管理模块、住院管理模块、护士信息管理工作站模块、财务管理与医院经济核算模块和院长办公综合查询与辅助决策支持模块;临床信息模块包括:医学影像图片信息模块、检查检验信息模块、电子病历模块和远程专家模块。
HIS系统功能模块如图2所示。
图2 HIS系统功能模块图
通过对医院医护人员和相关行政人员调研,根据医院有关门诊管理的业务流程,基于UML使用面向对象分析方法对门诊系统进行分析,得出系统的初步用例模型如图3所示。
图3 系统分析初期用例模型
用例图很好地描述了系统功能或是目标,但是却很难描述系统中存在对象及其对象的交互,而UML中的顺序图则在这方面给予补充描述。挂号用例场景中我们已经提到进行门诊挂号的角色是门诊操作员,病员只有通过他才能与系统交互。操作员向边界类(窗口)发出消息,进行查看病员信息或是添加病员信息,然后返回门诊挂号信息及病员主要信息,操作员再向边界类发出查看坐诊记录信息,坐诊记录对象完成查询任务返回,根据病员的意见进行挂号并创建挂号单,同时根据设置的挂号费用对病员进行收费,创建发票对象,发票对象向后台数据库发出记帐消息,后台数据库进行记帐,成功后返回成功信息,打印出发票及挂号单返回操作员,然后交给病员。挂号用例场景顺序图如图4所示。
图4 挂号用例场景顺序图
数据服务层通常是应用程序中静态特性最强的层,与逻辑业务层相比,数据结构很少受到改变的影响,因此对此层我们考虑的较少,当然我们也必须建立表单和设计表。但是,与数据相关的数据访问经常发生,此类数据通常放在数据库中。为了实现的便捷,我们有时会把数据服务层进一步的划分,将对数据的逻辑请求从物理访问技术中分离处理。使用良好面向对象的设计概念来构建应用程序可以进一步分离这些层[8-9]。
中间层就是应用逻辑层,这一层动态性很强。在本开发中,中间层开发主要采用基于组件开发模式。组件是软件、模块包或子系统的一个重要部分,它是概要设计在物理上的实现,组件的开发与面向对象的开发是密不可分的[10]。
在这一层中包含了前面所讨论的多数实体类。开始时,每个执行结构将对类图中定义的属性作镜像,对每个属性将有Get和Set操作,并且所有的属性都将声明为私有的属性,并为每个实体类将提供一些服务,例如请求检索自身的信息[11]。同时,这些类还必须能够响应更新的请求,因此对一些表单的永久管理可以由应用程序中的其他层完成。因此,在此层中不仅有和用户界面层的通信,而且还有与数据库访问层间的通信。
此层的实现也称为用户界面设计。用户界面层的设计,一般采用的是原型法。原型作为对项目参与者来说是一个非常好的演示工具。用户界面的设计是一项复杂的任务,需要广泛的技能来支持。用户界面设计需要遵循如下的设计原则[12]:①结构原则;②简化原则;③可见性原则;④反馈原则;⑤设计标准并坚持使用;⑥合理使用颜色;⑦不要创建拥挤的用户界面。
我们将类型层次化,前面的类和接口的建模其本质就是对业务/领域类和处理类进行建模。对于该系统来说,用户界面由可视化很强的软件开发,因此,完全可以使用用户界面流程图来说明,如图5所示。
图5 用户界面流程图
2.6.1 病员信息录入界面 在病员信息录入界面为便于用户录入,日期、民族、费别、市县、省份等字段为有限可选,因此提供下拉按钮进行选择。对于病员如果不想提供详细信息,那么只需点击基本信息按钮则屏蔽掉。病员信息录入界面如图6所示。
图6 病员信息录入界面图
2.6.2 挂号界面 在挂号界面中,首先选择病员:若为自费患者,按快捷键F6自动选择病历卡,在卡号栏中录入正确的病历卡号就会自动从病员信息库中检索出病员信息;若为医保患者则单击F7,自动读取医保卡,检索出医保患者的信息。选择初诊复诊状态:选择初诊自动加收病历工本费。对于科室和医师的选择:在科室栏中录入科室的拼音码或五笔码回车,右部列表中会自动显示当班科室和专家的信息,使用上下箭头选择。选择完毕,会自动根据不同的科室或专家生成相关的费用。在左侧栏中显示挂号名称和费别,当点击右下方挂号按钮时,在界面下方显示总合计。挂号界面如图7所示。
图7 挂号界面图
2.6.3 划价收费界面 在划价收费界面中,若选择的“卡类别”是病历卡,输入卡号,按回车键,如果病员存在,显示患者姓名、费别;若不存在则显示错误信息,对于科室和医师,则根据下拉菜单进行选择。界面中部为药品明细输入窗口,同样可在“类别”和“名称”输入栏输入拼音码或五笔码快速选择。根据药品的名称则自动弹出单价,单价不可输入和更改,当输入数量时,则自动产生金额。划价收费界面如图8所示。
图8 划价收费界面
2.6.4 病员发票查询界面实现 在病员发票查询界面中,可根据用户的需求进行定向查询,如根据病员ID、根据卡类别、卡号、姓名及其使用姓名五笔码或拼音码进行简单查询,同时根据查询结果选择是否查看详细信息还是进行信息修改。
基于UML的面向对象建模是该软件开发的一个亮点。使用.NET平台的可视化开发界面友好且控件丰富。医院管理信息系统的成功运行证明了统一建模语言可以满足医院系统的复杂要求,在开发过程中,进一步体会到了面向对象技术复用性高、可维护性好的特点。但在系统设计中也存在一定的问题,这就需要我们在以后的应用中不断改进和提高。
[1]刘超,张莉.可视化面向对象建模技术-标准建模语言UML教程[M].北京:航空航天大学出版社,1999:39-44
[2]Roff J.UML 基础教程[M].北京:清华大学出版社,2008:131-139
[3]蒋慧,吴礼发.UML Programming Guide设计核心技术[M].北京:希望电子出版社,2011:149-161
[4]Joseph Schmuller.UML 基础、案例与应用[M].北京:人民邮电出版社,2002:81-85
[5]欧阳明.Client/Server体系结构发展[J].计算机系统应用,1997,12(11):50-52
[6]王灿辉.用三层模式开发计算机等级考试系统[J].福州大学学报,2010,(5)::87-90
[7]冯凯,刘占书,崔毅.谈医院数据库从8i到10g升级的步骤和方法[J].中国医学教育技术,2010,24(1):45-46
[8]宗梅,马小平.基于.NET的三层Client/Server结构及其应用[J].计算机工程与设计,2011,(1):37-41
[9]李学军,审瑞民.构建基于Windows DNA的三层应用[J].计算机系统应用,2011,(8):31-33
[10]李东红,董春丽.多层次 Client/Server结构及其应用[J].信息工程大学学报,2010,4(1):73-76
[11]Scott W.Ambler.The Object Primer The Application Developer'sGuide to Object Orientation and the UML(Second Edition)[M].北京:机械工业出版社,2010:99-110
[12]邵维忠,杨芙清.面向对象的系统分析设计[M].北京:清华大学出版社,2011:137-151