1、软件工程软件工程1 1软件工程软件工程第八章第八章 设计工程设计工程8 8.1 1 软件设计的概念软件设计的概念8 8.2.2 设设计模型计模型8 8.3 3 基基于模式的软件设计于模式的软件设计软件工程软件工程2 28.1 8.1 软件设计的概念软件设计的概念n软件设计的基本目标是软件设计的基本目标是用比较抽象概括的方式用比较抽象概括的方式确定目标系统如何完成预定的任务确定目标系统如何完成预定的任务,即软件设,即软件设计是确定系统的物理模型。计是确定系统的物理模型。n从技术观点来看,软件设计包括从技术观点来看,软件设计包括数据设计数据设计、体体系结构设计系结构设计、接口设计接口设计、构件设计
2、构件设计。n数据设计数据设计将实体关系图中描述的对象和关系,将实体关系图中描述的对象和关系,以及数据字典中描述的详细数据内容转化为数以及数据字典中描述的详细数据内容转化为数据结构的定义。据结构的定义。软件工程软件工程3 3 体系结构设计体系结构设计定义软件系统各主要成份之间的定义软件系统各主要成份之间的关系。关系。接口设计接口设计根据信息流图定义软件内部各成份之根据信息流图定义软件内部各成份之间、软件与其它协同系统之间及软件与用户之间、软件与其它协同系统之间及软件与用户之间的交互机制。间的交互机制。构件设计构件设计则是把结构成份转换成软件构件的过则是把结构成份转换成软件构件的过程性描述。程性描
3、述。软件工程软件工程4 4将分析模型转换为设计将分析模型转换为设计Anal ysi s M odeluse-cases-text use-case di agram s acti vi ty di agram s swi m l ane di agram sdata fl ow di agram s control-fl ow di agram s processi ng narrati vesf fl lo o w w-o o r ri ie e n n t te e d d e e l le e m m e e n n t ts sb b e e h h a a v v i io o r
4、ra a l le e l le e m m e e n n t ts sc c l la a s ss s-b b a a s se e d de e l le e m m e e n n t ts ss sc c e e n n a a r ri io o-b b a a s se e d de e l le e m m e e n n t ts scl ass di agram s anal ysi s packages CRC m odel s col l aborati on di agram s state di agram s sequence di agram sD D a a
5、 t ta a/C C l la a s ss s D D e e s si ig g n nA A r rc c h h i it te e c c t tu u r ra a l l D D e e s si ig g n nI In n t te e r rf fa a c c e e D D e e s si ig g n nC C o o m m p p o o n n e e n n t t-L L e e v v e e l l D D e e s si ig g n nDesi gn M odel软件工程软件工程5 5n从工程管理角度来看,软件设计分两步完成:从工程管理角度来看
6、,软件设计分两步完成:概要设计和详细设计。概要设计和详细设计。n概要设计概要设计将软件需求将软件需求转化为软件体系结构转化为软件体系结构确定系统级接口确定系统级接口全局数据结构或数据库模式。全局数据结构或数据库模式。n详细设计详细设计确立每个模块的实现算法和局部数据结构确立每个模块的实现算法和局部数据结构用适当方法表示算法和数据结构的细节用适当方法表示算法和数据结构的细节软件工程软件工程6 6n软件设计是后续开发步骤及软件维护工作的基软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系础。如果没有设计,只能建立一个不稳定的系统结构。统结构。设计设计编码编码测试测试维
7、护维护测试测试编码编码维护维护有软件设计有软件设计 没有软件设计没有软件设计软件工程软件工程7 7n软件设计既是过程又是模型。软件设计既是过程又是模型。n设计过程设计过程是一系列的迭代步骤,使设计人员能是一系列的迭代步骤,使设计人员能够描述目标系统的各个侧面。够描述目标系统的各个侧面。n设计模型设计模型首先描述目标系统的整体架构,然后首先描述目标系统的整体架构,然后逐步细化架构得到构造每个细节的指导原则,逐步细化架构得到构造每个细节的指导原则,从而得到系统的一系列不同的视图。从而得到系统的一系列不同的视图。n良好的设计原则可为设计过程导航。良好的设计原则可为设计过程导航。n衡量衡量设计过程设计
8、过程的技术原则:的技术原则:设计必须实现分析模型中描述的所有显式需设计必须实现分析模型中描述的所有显式需求,必须满足用户希望的所有隐式需求。求,必须满足用户希望的所有隐式需求。衡量软件设计的原则衡量软件设计的原则软件工程软件工程8 8 对于开发者和未来的维护者而言,对于开发者和未来的维护者而言,设计必须设计必须是可读的、可理解的,使得将来易于编程、是可读的、可理解的,使得将来易于编程、易于测试、易于维护。易于测试、易于维护。设计应该给出软件的全貌,包括从实现角度设计应该给出软件的全貌,包括从实现角度可看到的数据、功能、行为。可看到的数据、功能、行为。n衡量衡量设计模型设计模型的技术原则的技术原
9、则 设计模型应该是一个分层结构。该结构:设计模型应该是一个分层结构。该结构:使用可识别的使用可识别的设计模式设计模式搭建系统结构。搭建系统结构。用显示良好设计特征的用显示良好设计特征的构件构件构成。构成。可以用可以用演化的方式演化的方式实现。实现。设计应当模块化。设计应当模块化。软件工程软件工程9 9 设计应当包含数据、体系结构、接口和构件设计应当包含数据、体系结构、接口和构件(模块)的清晰的视图。(模块)的清晰的视图。设计应当根据将要实现的对象和数据模式导出设计应当根据将要实现的对象和数据模式导出合适的数据结构。合适的数据结构。设计应当建立具有独立功能特征的构件。设计应当建立具有独立功能特征
10、的构件。设计应当建立能够降低模块与外部环境之间复设计应当建立能够降低模块与外部环境之间复杂连接的接口。杂连接的接口。设计模型应当通过使用软件需求信息所驱动的设计模型应当通过使用软件需求信息所驱动的可重复的方法导出。可重复的方法导出。nDavis的软件设计原则的软件设计原则 设计应具有设计应具有可跟踪性可跟踪性,能回溯到软件需求,能回溯到软件需求;软件工程软件工程1010 设计不必每次都从头做起,可以复用已有的设计不必每次都从头做起,可以复用已有的设计模式和数据模式。设计模式和数据模式。设计应当缩小软件与现实世界中问题的设计应当缩小软件与现实世界中问题的“智智力距离力距离”,尽量逼近问题领域的结
11、构,尽量逼近问题领域的结构;设计应具有一致性和集成性。整个系统应具设计应具有一致性和集成性。整个系统应具有统一的风格和格式,具有良好的接口。有统一的风格和格式,具有良好的接口。设计结果应能适应未来可能的变更设计结果应能适应未来可能的变更;设计不是编码,编码也不是设计。设计模型设计不是编码,编码也不是设计。设计模型的抽象级别比源代码高。在编码级别上唯一的抽象级别比源代码高。在编码级别上唯一的设计决策是补充一些实现细节。的设计决策是补充一些实现细节。软件工程软件工程11 11 设计应具有容错性和异常处理能力。对于异设计应具有容错性和异常处理能力。对于异常数据、事件、操作条件等能够平滑处理。常数据、
12、事件、操作条件等能够平滑处理。在建立设计方案时就应能评估设计质量,而在建立设计方案时就应能评估设计质量,而不是在系统编码之后。不是在系统编码之后。应坚持设计评审,减少概念性(语义性)的应坚持设计评审,减少概念性(语义性)的错误。错误。1)设计应遵循设计应遵循抽象化抽象化的原则,的原则,数据抽象数据抽象软件设计的主要手段软件设计的主要手段软件工程软件工程1212 过程抽象过程抽象 是指在软件设计中将处理过程的是指在软件设计中将处理过程的实现细节隐藏在过程抽象中,可以直接通过实现细节隐藏在过程抽象中,可以直接通过模块接口使用这些处理操作模块接口使用这些处理操作。数据抽象数据抽象 是指采用抽象数据类
13、型表示数据,是指采用抽象数据类型表示数据,实现数据封装,使得使用者可通过接口使用实现数据封装,使得使用者可通过接口使用数据而不必关心数据结构的实现。数据而不必关心数据结构的实现。软件工程软件工程1313 抽象案例 1993年,美国微软公司推出了它的90年代操作系统Windows NT。在它的许多特色中,有一个特点是它的一体化的“输入/输出系统”的设计。设计者们利用抽象原则,把操作系统的文件管理、网络管理、设备管理和高速缓冲存储器这四个十分不同的事物进行分析,抽取其共性,最后将其统一为“对虚拟文件的字节流,虚拟文件可以为任何设备和实体”,从而设计出具有统一外貌、统一处理模式和规范一体化的输入/输
14、出系统,获得极大成功。软件工程软件工程14142)设计应遵循设计应遵循自顶向下自顶向下、逐步细化逐步细化的原则,建立的原则,建立一个层次的结构。一个层次的结构。将软件体系结构自顶向下,对过程细节和数将软件体系结构自顶向下,对过程细节和数据细节从抽象到具体,逐层细化,直到用编据细节从抽象到具体,逐层细化,直到用编程语言的语句能够实现为止。程语言的语句能够实现为止。3)设计设计模式模式描述了在某个特定场景中解决某个特描述了在某个特定场景中解决某个特定问题的设计结构。定问题的设计结构。模式是否适合当前的工作模式是否适合当前的工作 模式是否能够复用模式是否能够复用 模式是否能够用于指导开发一个类似但是
15、功模式是否能够用于指导开发一个类似但是功能或结构不同的模式能或结构不同的模式软件工程软件工程15154)设计应当遵循设计应当遵循模块化模块化的原则的原则。每个模块可独立地开发、测试,最后组装成每个模块可独立地开发、测试,最后组装成完整的程序。完整的程序。其出发点是本着将一种复杂问题其出发点是本着将一种复杂问题“分而治之分而治之”的原则。其目的是使程序的结构清晰,容易的原则。其目的是使程序的结构清晰,容易阅读、理解、测试、修改。阅读、理解、测试、修改。Meyer的的良好模块设计方法的标准良好模块设计方法的标准a)模块可分解性模块可分解性 可将系统按问题子问题可将系统按问题子问题分解的原则分解成系
16、统的模块层次结构分解的原则分解成系统的模块层次结构;b)模块可组装性模块可组装性 可利用已有的设计构件组可利用已有的设计构件组装成新系统,不必一切从头开始。装成新系统,不必一切从头开始。软件工程软件工程1616 模块化的依据 规律一:如果问题P1的复杂性大于问题P2,则解决问题P1需要的工作量大于解决问题P2需要的工作量。C(P1)C(P2)显然 E(P1)E(P2)这个不等式导致“各个击破”的结论把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。这就是模块化的根据。规律二:如果一个问题Q分别由P1和P2组成而成,那么它的复杂程度大于分别考虑每个问题时的复杂程度之和。由此可以得
17、出,解决问题Q需要的工作量大于分别解决问题P1和P2需要的工作量之和。C(P1+P2)C(P1)+C(P2)也就是说,如果一个问题由和两个问题组合而成,那么它的复杂程序大于分别考虑每个问题时的复杂程度之和。综上所述,得到下面的不等式 E(P1+P2)E(P1)+E(P2)软件工程软件工程1717c)模块可理解性模块可理解性 一个模块可不参考其他模一个模块可不参考其他模块而被理解;块而被理解;d)模块连续性模块连续性 对软件需求的一些微小变更对软件需求的一些微小变更只导致对某个模块的修改而整个系统不只导致对某个模块的修改而整个系统不用大动用大动;e)模块保护模块保护 将模块内出现异常情况的影响将
18、模块内出现异常情况的影响范围限制在模块内部;范围限制在模块内部;5)设计应遵循设计应遵循信息隐蔽信息隐蔽的原则的原则。Patnas主张在开发时,将每个程序的成分隐主张在开发时,将每个程序的成分隐藏在模块内,定义每一个模块时尽可能少藏在模块内,定义每一个模块时尽可能少地显露其内部的处理。地显露其内部的处理。软件工程软件工程1818 每个模块的实现细节对于其它模块是隐蔽的,每个模块的实现细节对于其它模块是隐蔽的,将来修改软件时偶然引入错误所造成的影响将来修改软件时偶然引入错误所造成的影响就可以局限在一个或几个模块内部,不致波就可以局限在一个或几个模块内部,不致波及到软件的其它部分。及到软件的其它部
19、分。在可预见将来可能修改的场合,信息隐蔽可在可预见将来可能修改的场合,信息隐蔽可以提高软件的可修改性、可测试性和可移植以提高软件的可修改性、可测试性和可移植性。性。6)功能独立性是抽象、模块化和信息隐蔽的直接功能独立性是抽象、模块化和信息隐蔽的直接产物。如果一个模块能够独立于其他模块被编产物。如果一个模块能够独立于其他模块被编程、测试和修改,则该模块具有功能独立性。程、测试和修改,则该模块具有功能独立性。软件工程软件工程1919 19781978年年MyersMyers提出用两个准则来度量功能独提出用两个准则来度量功能独立性,即模块间的耦合和模块的内聚。立性,即模块间的耦合和模块的内聚。内聚性
20、内聚性:内聚是一个模块内部各个元素彼此:内聚是一个模块内部各个元素彼此结合的紧密程度的度量。结合的紧密程度的度量。耦合性耦合性:耦合是模块间互相连接的紧密程度耦合是模块间互相连接的紧密程度的度量,它取决于各个模块之间接口的复杂的度量,它取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口。度、调用方式以及哪些信息通过接口。软件工程软件工程2020 设计类设计类n设计类通过精化分析类获得,设计类的细节将促成类的实现;n创建一组新的设计类,设计类实现了软件的基础设施以支持业务解决方案;n五种不同设计类1.用户接口类2.业务域类3.过程类4.持久类5.系统类软件工程软件工程2121n设计模型
21、的元素很多都是在分析模型中使用的设计模型的元素很多都是在分析模型中使用的UML图。差别在于这些图被精化和细化为设计图。差别在于这些图被精化和细化为设计的一部分,并且提供了更多的与实现相关的特的一部分,并且提供了更多的与实现相关的特殊细节,突出了体系结构的结构和风格,体系殊细节,突出了体系结构的结构和风格,体系结构内的构件和外界之间的接口。结构内的构件和外界之间的接口。v数据设计元素数据设计元素v体系结构设计元素体系结构设计元素v接口设计元素接口设计元素v构件级设计元素构件级设计元素v部署级设计元素部署级设计元素8.2 8.2 设计模型设计模型软件工程软件工程2222数据设计元素数据设计元素数据
22、模型数据模型-数据结构,数据库数据结构,数据库体系结构设计元素体系结构设计元素将要构建的软件的应用域信息将要构建的软件的应用域信息分析模型元素,如数据流图、类图分析模型元素,如数据流图、类图体系结构的模式和风格体系结构的模式和风格接口设计元素接口设计元素用户界面(用户界面(UIUI)和其他系统、设备、网络或其他的信息生产者或使和其他系统、设备、网络或其他的信息生产者或使用者的外部接口用者的外部接口各种设计构件之间的内部接口各种设计构件之间的内部接口软件工程软件工程2323接口设计表示接口设计表示C o n tro lP a n e lL C D d is p la y L E D in d i
23、c a to rs k e y P a d C h a ra c te ris tic s s p e a k e r w ire le s s In te rfa c e re a d K e y S tro k e()d e c o d e K e y()d is p la y S ta tu s()lig h tL E D s()s e n d C o n tro lM s g()F ig u re 9.6 U M L in te rfa c e re p re se n ta tio n fo r C C o o n n t t r ro o l lP P a a n n e e l
24、lK e y P a dre a d K e y s tro k e()d e c o d e K e y()Wire le ssP D AK e y P a dM o b ile P h o n e软件工程软件工程2424构件图构件图SensorManagementSensor软件工程软件工程2525部署图部署图F i g u re 9.8 U M L d e p l o y m e n t d i a g ra m fo r S a fe H o m ePersonal com puterSecuri tyhom eM anagem entSurvei l l ancecom m uni
25、cati onC o n tro l P a n e lC P I se rv e rSecuri tyhom eow nerA ccessexternal A ccess软件工程软件工程2626n任何领域的顶级设计人员都有一种不可思议的任何领域的顶级设计人员都有一种不可思议的能力,他们能描述问题和其中的相应多个模式,能力,他们能描述问题和其中的相应多个模式,组合这些模式就可以形成问题的解决方案组合这些模式就可以形成问题的解决方案。n设计模式的模板设计模式的模板模式名和分类模式名和分类 模式名描述了模式的本质。模式名描述了模式的本质。意图意图 说明设计模式做什么?基本原理和说明设计模式做什么?
26、基本原理和意图是什么?它要解决什么特定设计问题?意图是什么?它要解决什么特定设计问题?别名别名 模式的其他名称。模式的其他名称。8.3 8.3 基于模式的软件设计基于模式的软件设计软件工程软件工程2727动机动机 说明设计问题以及如何用模式中的说明设计问题以及如何用模式中的类、对象来解决该问题的特定情景。类、对象来解决该问题的特定情景。适用性适用性 什么情况下可使用该设计模式?什么情况下可使用该设计模式?该模式可用来改进哪些不良设计?该模式可用来改进哪些不良设计?结构结构 采用采用UMLUML描述模式中的类,并使用顺描述模式中的类,并使用顺序图说明对象间的请求序列和协作关系。序图说明对象间的请
27、求序列和协作关系。参与者参与者 设计模式中的类和设计模式中的类和/或对象以及它或对象以及它们各自的职责。们各自的职责。效果效果 模式怎样支持它的目标?使用模式模式怎样支持它的目标?使用模式的效果和所需做的权衡取舍?系统结构的哪的效果和所需做的权衡取舍?系统结构的哪些方面可以独立改变?些方面可以独立改变?软件工程软件工程2828实现实现 实现模式时需要知道的一些提示、实现模式时需要知道的一些提示、技术要点及应避免的缺陷,以及是否存在某技术要点及应避免的缺陷,以及是否存在某些特定于实现语言的问题。些特定于实现语言的问题。代码示例代码示例 说明怎样用说明怎样用 C+C+或或 SmallTalkSma
28、llTalk 实现该模式的代码片段。实现该模式的代码片段。已知应用已知应用 实际系统中发现的模式的例子,实际系统中发现的模式的例子,每个模式应至少包括两个不同领域的实例。每个模式应至少包括两个不同领域的实例。相关模式相关模式 与这个模式紧密相关的模式有与这个模式紧密相关的模式有哪些?其间重要的不同之处是什么?这个模哪些?其间重要的不同之处是什么?这个模式应与哪些其他模式一起使用?式应与哪些其他模式一起使用?软件工程软件工程2929课堂讨论问题nMini-library系统的部署图可能是什么样的,请尝试画出。软件工程软件工程3030课后作业n优秀设计的特征是什么?书上P149n设计人员可以创建什么类型的设计类?书上P156