软件工程课件:第6章 软件设计新_第1页
软件工程课件:第6章 软件设计新_第2页
软件工程课件:第6章 软件设计新_第3页
软件工程课件:第6章 软件设计新_第4页
软件工程课件:第6章 软件设计新_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第6章 软件设计2软件设计设计设计是研究系统的软件实现问题,即在分析模型的基础上形成实现环境下的设计模型。36.1 软件设计过程软件设计活动:46.2 软件设计原则:模块化模块化( Modularity )将一个复杂的大系统分解成若干个相对简单的较小部分,称 为子系统( Subsystem )。常见的模块层次5设计原则-模块化的层次 6为什么要模块化设待求解的问题为X,则C(X)和E(X)分别为X相应的复杂性和解决问题所需要的工作量。设对于问题P1,P2,若有C(P1) C(P2)则有E(P1) E(P2)而另一方面,人类实践表明:当P= P1+P2,实践证明C(P)C(P1)+C(P2)因

2、此:E(P)E(P1)+E(P2)将一个复杂的大系统模块化(Modularity),即将大系统分解成若干个相对简单的子系统(Subsystem),分解后系统的复杂性和工作量比一个大系统要小,实现更为容易。 7模块化的误区但模块的分解并非越多越好,模块之间存在着交互接口,当模块过多时,将会增加接口的代价。86.2.1 模块化和信息隐蔽系统的模块化设计过程应遵循信息隐蔽的原则每个模块对其他模块都隐蔽自己的设计决策。 在设计时列出将来可能发生变化的因素,并在模块划分时将这些因素放到个别模块的内部 。这样,在将来由于这些因素变化而需修改软件时,只需修改这些个别的模块,其它模块不受影响。 信息隐蔽原则可

3、以更好支持模块的并行开发以及系统的后期维护,使得对一个模块的设计和代码的修改对其他模块的影响降低。96.2.2内聚和耦合内聚( Cohesion )内聚是子系统内部的相关程度。当子系统中彼此相关的多个对象执行类似的任务时,则认为 该子系统是高内聚的;反之,当子系统内的多个对象彼此不相关时,则认为是低内聚的。内聚越高越好高内聚的方法做且仅做一件事,这会很容易理解与维护。举例:如果使用一个方法 changeItem ( ) 完成书目的读取、增加、 修改和删除等若干方法的功能,有什么问题吗?高内聚的类表示且仅表示一种类型的对象。举例:在大学系统中使用 Professor 而不用 Employee,为

4、什么?106.2.2内聚和耦合内聚度标志一个模块内部各成分彼此结合的紧密程度。内聚度按其高低程度可分为7级,从低至高分别为偶然内聚(Coincidental cohesion)逻辑内聚(Logical cohesion)时间内聚(Temporal cohesion)过程内聚(Procedural cohesion)通信内聚(Communicational cohesion)顺序内聚(Sequential cohesion)功能内聚(Functional cohesion)内聚度越高越好。低级内聚 ,设计时尽量避免中级内聚 高级内聚 11偶然内聚 指一个模块内容是为了节约空间,将并无多少逻辑关联

5、的代码和数据组合在一起模块内各部分之间没有联系,或者即使有联系也很松散 常见的偶然内聚:写程序时如一些没有任何联系的语句可能在许多模块中重复多次,程序员为了节省存储,把它们抽出来组成一个新的模块,这个模块就是偶然内聚模块12逻辑内聚、时间内聚和过程内聚逻辑内聚是指个模块完成的多个任务逻辑上相关这种模块把几种功能组合在一起,每次调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。 例如,一个模块完成所有类型的数据输出,这类模块调用时需要传送控制信息,以便控制输出什么类型的数据如果一个模块包含的多个任务必须在同一时间段内执行,则称之为时间内聚例如一个系统的初始化模块和终止模块 过程内聚则是

6、指模块内成分彼此逻辑相关,并且必须按特定的次序执行 例如我们把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块13通信内聚模块中各成分引用共同的输入数据或产生相同的输出数据则称为通信内聚,这意味着一个模块可能包含多个功能,但却是对相同的数据进行操作 14顺序内聚如果个模块内的各处理成分均与同功能相关,且这些处理必须顺序执行,即模块中某个成分的输出是另一成分的输入则称顺序内聚15功能内聚如果模块完成单个功能且不易再分解,则称功能内聚,如求平方根、计算利息等。功能内聚是最高程度的内聚 166.2.2内聚和耦合:耦合耦合( Coupling )耦合表示两个子系统(或类)

7、之间的关联程度。当一个子系统(或类)发生变化时对另一个子系统(或类) 的影响很小,则称它们是松散耦合的;反之,如果变化的影响很大时,则称它们是紧密耦合的。 耦合也可分为7级,从低至高为:非直接耦合(Nondirect coupling)数据耦合(Data coupling)标记耦合(Stamp coupling)控制耦合(Control coupling)外部耦合(External coupling)公共耦合(common coupling)内容耦合(Content coupling)耦合度应越低越好。17耦合1:若两模块间彼此无任何交互,则称之为非直接耦合 在非直接耦合中 ,两个模块之间的联

8、系完全是通过主模块的控制和调用来实现的例如在实数的运算中,有两个模块分别完成几个实数的求和,求乘积功能,这两个模块之间没有直接联系,只有在主模块调用中有执行的前后顺序而已,这个例子即属于非直接耦合18耦合2:若两模块间仅通过参数交换输入,输出信息则为数据耦合 如有两个模块,其中A模块产生的输出数据作为模块B的某个操作B1的输入参数即模块A的运算结果作为一个参数参加B的运算,这两个模块之间即发生数据耦合。数据耦合是松散的耦合,模块间的独立性比较强。19耦合3:如果模块间传送的参数包含着复合数据结构,则为标记耦合,例如含有若干数据项的数据记录即模块间共享了这个记录,它是某一数据结构的子结构,而不是

9、简单变量4:若传递的参数中含有控制信息则上升为控制耦合, (见图6.6);20耦合5:当若干模块与同一个外部环境关联,则模块间存在着外部耦合。如I/O处理使所有I/O模块与特定的设备、格式和通信协议相关联;6:公共耦合则是指模块间存在着全局变量、公共数据区或可共享的文件等 7:内容耦合1)一个模块访问另一个模块数据;2)一个模块不通过正常入口而转到另一个模块的内部;3)两个模块有一部分代码重叠;4)一个模块有多个入口21耦合一般来说,设计时应尽量使用数据耦合,减少控制耦合,限制外部环境耦合和公共耦合,绝对禁止内容耦合。226.2.3抽象和求精抽象是对问题的简化和概括,它忽略了问题的某些细节,有

10、助于把握问题的本质。抽象是分层次的高层的抽象是概念性的,例如用例模型较低层次的抽象则是具体解决方案和细节,例如类的定义。抽象是自底向上的,是从细节到概要的过程。求精(Refine)是抽象的逆过程,是对问题自顶向下逐步分解、细化逐渐至细节的过程。236.2.4 复用复用( Reuse )对于建立软件系统而言,所谓复用就是利用某些已开发的、 对建立新系统有用的软件元素来生成新的软件系统。 在一个系统中,通常大部分内容是成熟的,小部分内容是创新的。复用的好处在于提高生产效率,提高软件质量,改善软件系统的可维护性。复用策略工具包强调在类级别的代码复用,如类库;组件强调组件级的复用,如 CORBA、EJ

11、B、DCOM 等;设计强调设计级的复用,如复用设计模式,复用体系结构等246.3.1 什么是体系结构 软件系统的体系结构主要是指软件中相对独立的模块、这些模块接口之间的交互机制以及一系列组织管理这些操作的规则。软件体系结构的设计是整个软件开发过程中一个关键的环节不同类型的系统要求需要不同类型体系结构,甚至同一个系统中的子系统也可能需要不同的体系结构。体系结构模型主要描述以下属性:系统的组件,包括功能组件和数据组件;系统组件间的连接,包括数据流和控制流;组件和连接的约束,包括组件间的通信协议,组件间的同步等;以及用组件和连接表示的系统整体结构的拓扑关系。因而组件和连接是软件体系结构的两大构成部分

12、。 256.3.1 什么是体系结构 :组件组件(Component)是软件系统的结构块单元,每个软件组件都承担着一定的功能并发挥着一定的作用,组件可以看作是模块、类、对象等一个相关功能的集合。组件大都作为一个封装的实体每个组件至少有个接口(Port)。接口是组件与外界发生交互的窗口。其他组件与其交互时,只需了解此组件对外的接口和提供的操作服务。266.3.1 什么是体系结构 :组件根据组件在系统中的作用,组件可以大致分为5类:负责系统运行管理的控制组件;负责组件之间协作关系的协调组件;为其他组件提供特定服务功能的服务组件;负责安全检查和信息转接传递的信息控制组件;负责组件间连接和转换功能的连接

13、组件。276.3.1 什么是体系结构 :连接连接(Connect):建立和维护组件间行为关联,和组件间信息传递。连接需要两方面的支持:一是连接发生和维持的机制;二是连接能够正确地、无二义、无冲突地进行信息交换的规则,称为连接的“协议”。因此,连接的本质是实现连接机制和信息交换协议,简称机制和协议。286.3.1 什么是体系结构 :连接计算机硬件提供了实现连接的基础。 在硬件提供连接机制的基础上,可以实现不同层次上的连接比如在体系结构模式层,应用层等无论哪层连接,都是基于硬件提供的基本连接机制连接协议是连接的规约,是实现有意义连接的保证。 比如网络七层连接协议296.3.1 什么是体系结构 :连

14、接当组件间联系关系复杂时,除了基本连接方法外,需要建立专门的连接组件以调用和协调组件间的关联关系,实现组件间联系的特殊组件称为连接器(connector)最简单的连接器可表现为组件之间的直接连接,如功能调用。当情况复杂时,则有专门的连接器,类似于连接硬件设备的特定连接装置,软部件之间也需要连接器,如进程间通信所构成的连接器 306.3.2 体系结构设计策略体系结构设计:建立起一个系统的子系统和子系统间通信的基本的结构框架体系结构设计时通常采用现有的体系结构设计策略 常见的体系结构设计策略:管道过滤器结构分层体系结构 仓库系统结构 客户/服务器模式 MVC模式 316.3.3 管道过滤器结构管道

15、过滤器结构是由过滤器和管道组成的。代表数据加工处理的过滤器是具有一组输入和一组输出的部件,它们被代表数据传送的管道连接在一起过滤器从输入数据源接收输入,经过内部加工处理后送到输出的数据池,并被传送到输出连接的过滤器。数据源、过滤器、数据池通过管道顺序地连接起来。每个管道只处理临近过滤器之间的数据流。326.3.3 管道过滤器结构过滤器的活动可以通过以下方法激活:(1)后续的部件从过滤器中取出数据;(2)前续的部件向过滤器推入新输入数据;(3)过滤器处于活跃状态,不断地从前续部件取出并向后续部件推入数据。前两种情况产生的是被动式过滤器(passive filter),最后的是主动式过滤器(act

16、ive filter)。被动式过滤器是通过函数或过程调用激发的,而主动式过滤器是作为独立的程序或线程任务激发工作的。336.3.3 管道过滤器结构管道是过滤器之间的连接器。如果两个主动式过滤器连接在一起,管道将对它们实施同步控制。管道是一个先进先出的数据缓冲。数据源是系统的输入,它提供了同一结构类型的数据序列。例如,由文本行组成的文件,提供采集数值的探测器。数据源可主动地把数据推向过滤器,或当过滤器需要时被动地提供数据。数据池从过滤器收集计算结果,有两类变种,主动式数据池从过滤器中“拉”出数据,被动式数据池允许其前续的过滤器向其推入或写入结果。346.3.3 管道过滤器结构管道过滤器(Pipe

17、 and Filter)的体系结构最早产生于程序语言的编译操作和操作系统的进程间通信和任务处理。早期程序语言的编译被分解为符号扫描、句法分析、语义分析、中间代码生成、代码优化、代码生成、连接的多个独立的处理源程序依次经过各个处理最后得到可执行的程序。其中,对于输入数据,各种处理是过滤器,它的输出到下个处理的输入形成了中间数据的传送管道。356.3.3 管道过滤器结构管道过滤器结构结构在信号处理、分布式计算等处理中获得广泛使用 366.3.4 分层体系结构层次化是一种概念,它将软件设计组织成为类或组件的层次或集合,在同一个层次上的类或组件完成一个特定的目的。除了最上层和最下层外,系统中的每一层都

18、要承担两个角色。首先,它为结构中的上层提供服务;其次,它调用下层提供的功能函数。 良好的层次结构可以易于系统的扩展与维护,不同的层次之间通过接口进行通信。三层体系结构( Three-tier Architecture )表示层:窗口、报表等用户界面元素应用逻辑层:管理业务过程的任务和规则存储层:持久化存储机构376.3.4 分层体系结构386.3.5仓库系统结构仓库或知识库结构( Repository architecture )仓库结构是一种以数据为中心的体系结构,它包含一个中心数据库和一组相互独立的处理中心数据的子系统,主要适合 于数据由一个子系统产生而由其他子系统使用的情形。396.3.

19、5仓库系统结构406.3.6 客户/服务器模式客户机服务器结构( Client/Server Architecture )适用于分布式环境下的系统结构, 在客户机服务器体系结构中,作为服务器的子系统为其他 客户机的子系统提供服务,作为客户机的子系统负责与用户的交互。瘦客户机模型所有的应用处理和数据管理都是在服务器上执行,客户机只是负责数据表示部分。由于繁重的处理负荷全部集中在服务器和网络上,有可能造成性能上的问题。416.3.6 客户/服务器模式胖客户机模型服务器只负责对数据的管理,客户机上的软件实现应用逻辑与用户的交互。系统管理更加复杂,因为应用程序的改变必须在客户机上重 新安装。三层的客户

20、机服务器体系结构426.3.7 模型视图控制器结构(MVC)模型/视图/控制器结构(Model/View/Controller Architecture)该结构是为同样的数据提供多个视图的应用程序而设计的,它将交互系统的组成(子系统)分解成模型、视图、控制器三种部件。视图是应用程序中用户界面相关的部分,即用户看到并与之交互 的界面。控制器工作就控制整个业务流程,实现View层跟Model层的协同工作。模型是应用程序的主体部分,用于封装业务逻辑和数据模型。该结构适合于交互式系统,特别是同一个模型需要多个视图的情况。436.3.7 模型视图控制器结构44MVC视图(View)代表用户交互界面,对于

21、Web应用来说,可以概括为HTML界面(JSP,ASPX),但有可能为XML、WML和Excel。随着应用的复杂性和规模性,界面的处理也变得具有挑战性。45MVC控制器(Controller)可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求。控制器并不做任何的数据处理。例如,用户点击一个连接(发送请求),控制器接受请求后, 并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给用户。因此,一个模型可能对应多个视图,一个视图可能对应多个模型。 46MVC模型(Model):就是业务流程/状态的处理以及数据模型的制定。业务流程的处理过程对其它层

22、来说是黑箱操作,模型接 受视图请求的数据,并返回最终的处理结果。模型的设计可以说是MVC最主要的核心。47jsp+servlet+javaBean实现MVCJSP作为视图,只用于显示 Servlet作为控制器,所有的请求,跳转都由servlet完成业务逻辑部分由javabean完成48jsp+servlet+javaBean实现MVC49BookList(Servlet)bookManage.jsp请求(Book/List)requestrequest(books)例:图书列表功能MVC实现50OpenModifyBook(Servlet)changeBookInf.jsp请求1(Book/OpenModify)request1request1(book)ModifyBook(Servlet)请求2(Book/Modify)changeBookInfoSucce

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论