书城计算机网络综合应用软件设计
8724600000017

第17章 软件设计(3)

2.接口说明

列出通过参数表传递的数据、外界的输入输出、从全程数据区取得的数据项、上级模块名和下级模块名。

3.局部的和全局的数据结构说明

包括采用数据结构的数据名、数据结构的类型、是局部的还是全局的等。

4.所有设计约束和限制说明

包括数据类型或数据格式的限制、内存容量或时间的限制、数据结构的边界值、没有考虑的特定情况及某个模块的专门特性等。

最终所得到的程序模块应具有以下基本属性:名字;明确的功能;内部使用的数据或局部数据;与其他模块相联系的输入或输出数据;实现其特定功能的算法;可被其上级模块调用;也可在其工作过程中调用下属模块。

例如,大学教务管理系统中“检索课程”模块的说明如下。

模块名:检索课程

功能:根据上层模块传送过来的课程号和选课学期在数据库中检索满足条件的课程,如果检索到了,则返回课程号,否则给出“无此课”信息并返回“空值(NULL)”。

函数接口:Searching Course(Course ID,Semester)

数据接口:课程档案

局部数据:CourseID——课程号,输入

Semester——选课学期,输入/输出

上级模块:选课登记

从属模块:无

程序模块可用在程序设计语言中非常熟悉的子程序、分程序、函数等实现。

4.4面向对象设计

在第3章中已经就ATM取款机进行了分析,以下再以此例进行面向对象的设计。

4.4.1对象结构—类图

显示系统中类与类之间的交互,分析员用类图显示系统细节。类图可以显示每个用例中类的相互作用,也可以显示整个系统或子系统。通过分析和综合交互图内各对象的交互,可以得出软件系统应具备的基本结构及各基本结构元素(类、接口等)之间的联系。当得到了用例图里的交互图后,从交互图推导出类图是十分自然的。为了在类图上描述类及其关系,首先,分析对象之间的交互和为实现这些交互对象之间建立的连接关系。这可以用交互图中的协作图来实现,之后,为这些对象指定实现类及其之间的关系。

时序图上,有4个对象,其中:

①读卡机(CardReader)对象负责接收客户传来的插卡消息,并读出卡里的信息;

②ATM屏幕(ATMScreen)对象负责接收客户输入的消息,反馈系统消息;

③客户的账户(Account)对象负责验证客户输入的密码、验钱和扣钱;

④取款机(CashDispenser)对象负责提供钱和清单。

4.4.3组织建模元素——包

一个包形成一个命名空间,通过包组织大系统模型,减少复杂性。结构良好的包是低耦合,高内聚的,对其内容的访问具有严密的控制。

任何一个软件系统,在其设计和建造的过程中,都会产生大量的类和其他建模元素,不同的类依其语义的不同和其对象参与交互的不同,可被划分为不同的子集。属于同一个子集的类,其语义上的内聚性较强,而和子集之外的类的耦合则较为松散。如果在此软件系统的模型中,不对其中的类按照相应的语义进行组织,而是简单地将所有的类罗列在模型图上,那将是不可想象的。这将导致一个无用的模型,因为它无法被人理解,更不用说对其进行整理、修改和更新了。为了有效地控制和管理模型的设计、表达和更改,达到有效地说明、视化、建档和建造,必须对模型元素进行组织。在UML里,这种组织是用包实现的。

在该例中,把ATM分成4层:表现层(UIPackage)、业务逻辑层(Business)、数据访问层(Database)、功能层(Utility)。

4.4.4对象行为——状态图

显示一个对象从生成到删除的生命周期中相应事件所经历的状态序列及它们对哪些事件的相应。分析人员和开发人员通过状态图更好地了解类的动态行为,使编码前能讨论和建立复杂逻辑。在软件系统中有这样一类对象,它们一方面需要处理各种随机发生的事件序列,通过相应的动态行为产生对事件的响应。另一方面,其特定时刻的动态行为,取决于此对象在早些时刻的行为结果。

例如,ATM系统中Account对象在交互中就是这种情形。客户取钱和存款时都必须在Account打开状态(状态是软件对象在其生存期内满足特定条件的存在,在此条件下,对象能执行特定的动作或等待事件的发生)时才能进行。Account对象创建时,其处于用实心圆形表示的称为初始状态(是状态机的所在对象被创建时刻所处的状态)。当客户输入密码,得到确认后,Account对象进入打开状态,如果客户取钱时所取钱数大于账户余额,这时Account状态机进入透支状态。如果客户只是查询账户,便退出,则Account对象进入关闭状态,如果客户不做其他操作,Account对象便进入用带实心圆的圆环,圆环表示的状态称为状态机的终止状态(状态机处于终止状态表明此状态机的执行已经完成)。

4.4.5构造程序——组件图

①表示一组组件之间的组织和依赖关系。

②编译和部署系统的人员需要使用组件图。显示了类与实现组件之间的映射,组件按什么顺序编译,编译时生成哪些运行组件。

③构件图对于通过正向工程和逆向工程构造可执行系统是重要的。

设计人员是把组件作为系统可替换的部分进行设计的,所以必须有良好定义的接口。每个组件中包含了系统设计中某些类的实现,只要组件的接口不变,可以随时对组件进行升级替换。在该例中,在客户端可执行程序ATM.exe实现与服务器端通信,并与读卡器、ATM取款机、屏幕等物理组件进行交互。可以把它抽象为组件,称之为可执行组件。当ATM的通信方式发生变化时,只要替换ATM.exe文件即可。在实际的软件设计中把以往设计良好的组件保留下来,并纳入到组件库中进行统一管理,当设计人员再构建新的系统时,可以充分利用组件库中已有的组件,从而实现组件的复用。

4.4.6ATM系统的实施图

建模系统的实际部署,它是描述处理器、设备、软件组件在运行时的架构,它是系统拓扑的最终物理描述,即描述硬件单元和运行在硬件单元上的软件。项目管理员,用户,分析员和部署人员通过实施图了解,显示网络的实际布局和网络节点上组件的配置。在实际的ATM系统中,用户存钱、取钱的所有记录都保存在银行的数据库服务器上,而银行的操作系统多为UNIX系统,数据库系统一般采用Oracle,各个地区的ATM服务器通过专线连接到服务器上,组成一个ATM局域网。一般的ATM内部都带有打印机,提供打印收条功能,因此可以把打印机当作单独一个物理节点。

4.4.7回顾ATM项目的开发过程

1.初始阶段

对需求有了详细的了解,抽象出系统体系结构,细化到主要子系统即可,识别角色和用例,构建用例图。

2.细化阶段

更新用例模型,细化用例。建立交互图、类图和状态图。开始构建实施图以建模系统体系结构。此阶段,需要对模型不断迭代、细化,并最终和用户达成共识。

3.构造阶段

由类图完成代码,在代码完成后,要保证其符合标准和设计规则,并要进行质量检查,最终生成组件图。

4.移交阶段

这阶段,使用实施图进行软件部署,维护软件与模型的同步,并完成最后的软件产品和最后的验收测试,并完成用户文档编制及用户培训等工作。(注:在实际的项目中,应考虑项目中的各种风险、时间、经费、技术、项目规模和效益等因素,并制订出详细开发计划。)

5.UML与Case工具

现在有大量的Case(Computer Aided Software Engineering)工具,可以进行UML设计,在不同层次上提供对UML的支持。支持UML的系统应该包括创建和管理UML图,各种语言的代码生成,以及将源代码通过反向工程加入到UML中等。

思考题

1.软件设计分为几个方面,请简述其内容。

2.常见的软件架构有哪几个,简述C/S,B/S,B/A/S,C/A/S的区别和各自特点。

3.请简述怎样选取软件体系结构。

4.简述结构化设计的内容和过程。