您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > 第8章-结构化系统设计(总体设计)
第8章结构化系统设计——总体设计本章主要内容8.1软件架构的设计(achitecture)8.2结构化软件结构设计的基本概念(structure)8.3结构化软件结构设计方法(structure)8.1软件架构的设计(achitecture)8.1.1什么是软件架构8.1.2架构设计8.1.1.软件架构的概念建筑、文学、音乐、机械、电子、计算机软硬件等领域都会使用“架构(architecture)”这一概念。架构都提供了系统最高层的设计方案,以确保建筑、小说、乐曲、设备、计算机等系统满足期望的特性。‒好的建筑应该美观、坚固、实用‒好的计算机应用系统应该实用、好维护、可靠、性价比高架构师(architect)需要发现特定系统的最重要的关注点,设计某种折衷的总体方案以满足关注点。架构包含系统的一组基本结构(structure),每种结构都有各种类型的部件(component)及其关系构成,架构描述了这些部件的组合、相互调用参照、通信以及其他动态交互。架构和结构的关系架构是抽象无形的,体现高层全局的决策,就像文章的中心思想和提纲。结构是具体有形的,体现决策的贯彻,如同文章的每个段落及细节描述。架构包含了结构的初步描述和决策。相同架构的系统,具体结构允许有差异。使用桥梁来比喻桥梁的架构设计可以使用草图描述,架构决定了桥梁的基本结构部件。‒桥梁有梁式桥、拱桥、斜拉桥、悬索桥等架构斜拉桥的基本结构:•索塔•主梁•斜拉索使用桥梁来比喻桥梁的结构设计则需要考虑各种部件的数量、材料、重量、形态等方面,是可以施工的严谨的结构图。‒架构是抽象的,对结构进行了设计和限定,每座桥的结构是具体有形的、元素组合千变万化1.软件架构软件架构(softwarearchitecture)的定义没有统一的版本,一般认为:一个应用程序或计算系统的软件架构是一个或一组结构,它包含组成系统的软件元素、这些元素对外可见的性质以及它们之间的关系。对外可见的性质指软件元素能够提供的服务、性能特征、错误处理、共享资源的用法等。‒软件的一个结构元素可能是一个子系统、构件、进程、库、数据库、计算结点、遗留系统等等。软件架构是最高层次的系统分解,它不会囊括所有的结构和行为的定义,它只关注那些被认为是重要的元素。架构难以更改,一旦修改,意味着整个系统重建,而结构修改只影响局部。2.软件架构模式大部分的架构来源于有相似关注点的系统的总结和抽象,这些相似性被描述成某种特殊模式的架构风格,也就是架构模式(architecturalpattern)。一种架构模式就是一个经验秘籍,架构师在设计不同系统时可以重复使用这些先进经验。‒图10.1就是桥梁的四种常用架构模式。‒中国建筑有一种攒尖模式,被广泛应用在古典园林中,如三角、四角、五角、八角等亭子,宫殿、坛庙大量应用。软件架构模式软件架构模式就是可重复使用的软件结构风格。8.1.2架构设计主机-终端的集中控制结构分布式对象结构客户机-服务器的分布式结构‒C/S结构‒B/S结构1、主机-终端式结构软件配置在主机上,处理能力也集中于主机终端用于输入和输出,无CPU主机Host终端Terminal控制台Console主机-终端的一般硬件配置主机-终端网络拓扑结构..CPUCPU….....控台控台………...汉字用户终端一期40台,二期100台,小型打印机一期5台,二期8台激光打印机2台,行打1台3台磁带机4000M硬盘通信控制器中心终端,一期2台,二期10台…2、分布式对象结构每个对象在逻辑上是平等的,它们可以互相为对方提供所需的服务。提供服务的对象就是服务器,而提出服务请求的对象就是客户。软件总线(ORB)O1S(O1)O2S(O2)OnS(On)…分布式对象结构分布式对象结构的网络拓扑模型分布式对象结构......通信控制器PC1PC2PC3点阵打印机硬盘驱动器激光打印机a.星形网络......PC1PC2PC3点阵打印机激光打印机b.总线形网络......PC1PC2PC3硬盘驱动器激光打印机c.环形网络3、客户机-服务器结构处理分布于客户机和服务器。客户机完成本地运算,可向服务器请求某种服务(如查询数据),服务器响应请求,完成运算后,将结果返回给客户机数据库服务器客户机数据库客户机-服务器的一般硬件配置客户机/服务器结构..微机......微机微机工作站..工作站数据库服务器数据库服务器应用服务器客户机-服务器的软件配置Client/Server(C/S):应用程序配置于客户机,DBMS配置于服务器。Windows窗口程序数据库数据库服务器数据库服务器Web应用服务器数据库浏览器程序(如IE)•Browser/Server(B/S):应用程序配置于Web应用服务器,客户端配置浏览器程序B/S的工作机制B/S结构(Internet架构)..用户..用户..用户...WEB服务器数据库服务器ODBC数据请求返回数据数据请求返回数据Lan连接HTTP连接如何选择架构模式内部管理、安全性要求高、后台少数人使用的功能采用Windows界面的C/S结构,也称为胖客户端。外部用户较多的功能采用浏览器界面的B/S结构,也成为瘦客户端。胖客户端/瘦客户端,各有优缺点:C/S架构的缺点主要是部署、更新的问题。B/S架构的缺点主要是受制于HTML的限制,无法像C/S那样使用丰富的效果来展示数据,用户体验比较糟糕。软件架构的最新发展丰富客户端RIA(RichInternetApplication)的出现给我们带来重新在客户端和服务器端进行更好的平衡的机会。是集桌面应用程序的最佳用户界面功能与Web应用程序的普遍采用和快速、低成本布署以及互动多媒体通信的实时快捷于一体的新一代网络应用程序。有以下特点:‒在消息确认和格式编排方面提供互动用户界面‒在无刷新页面之下提供快捷的界面响应时间(Ajax技术AsynchronousJavaScriptandXML)‒提供通用的用户界面特性如拖放式(draganddrop)以及在线和离线操作能力‒结合了B/S配置的优势和C/S界面丰富的特点8.2结构化软件结构设计的基本概念(structure)8.2.1结构化设计内容8.2.2结构化设计思想8.2.3模块8.2.4结构图8.2.5模块的联系8.2.6模块间的耦合8.2.7模块的内聚8.2.8启发规则采用强调自顶向下、逐层分解的功能模块设计,也称为结构化设计。主要包括:-将系统划分成功能模块(Module);-决定每个模块的功能;-决定模块的调用关系;-决定模块的界面(Interface,接口),即调用时传入的信息(函数参数),以及返回的信息(返回值)。主要模型:模块结构图(SC,StructureChart),也称功能结构图。8.2.1设计内容8.2.2设计思想结构化:自顶向下,逐层分解求精结构化设计:软件模块化,按层次划分模块化因为根据经验:对于问题1(P1)和问题2(P2)若:C(P1)C(P2)则:E(P1)E(P2)有规律显示:C(P1+P2)C(P1)+C(P2)则:E(P1+P2)E(P1)+E(P2)C表示复杂度,E表示需要的工作量模块化设计方法使用功能分解一定程度上能够简化系统结构,使系统容易修改和理解。具体做法:‒把整个软件划分为部分,其中每一部分的功能简单明确,即程序模块(可以是子过程或函数)‒划分模块的工作按层次进行,上层模块调用下层模块‒每一个模块应尽可能独立‒模块间的调用接口要阐明(模块名称、输入数据、输出数据)8.2.3模块模块(Module)一词使用很广泛。通常对应于用一个名字就可以调用的一段程序语句(子程序或函数)。模块具有输入和输出、逻辑功能、运行程序、内部数据四种属性。计算年龄模块的图形表示方法模块的函数接口表示intGetAge(datebirthday)小程序练习计算5!+6!+7!。代码如下:x1=1;for(inti=1;i=5;i++)x1=x1*i;x2=1;for(inti=1;i=6;i++)x2=x2*i;x3=1;for(inti=1;i=7;i++)x3=x3*i;x4=x1+x2+x3;封装一个求阶乘的模块吧!定义和调用子过程C#‒定义:PublicvoidPrintGradeReport(StringstuID){……}‒调用:PrintGradeReport(“2008012264”);模块之子程序可视化程序设计采用事件驱动的编程技术,使用事件过程,事件过程也是子程序。例如按钮button1单击的事件过程如下:C#.NET:‒事件过程的定义:privatevoidbutton1_Click(objectsender,EventArgse){……}‒事件过程的调用(与事件绑定后自动完成调用):this.button1.Click+=newSystem.EventHandler(this.button1_Click);模块之事件过程与子过程的区别:‒函数存在返回值‒调用函数通常要使用其返回值C#‒定义函数PubliclongFactorial(intn){……}‒调用函数x1=Factorial(5);x2=Factorial(6);模块之函数接口成本/集成成本成本/工作量模块数量单元模块成本软件总成本模块数量和软件成本•粒度太大,单个模块复杂度升高、维护困难•粒度太小,管理与运行成本升高试想一下:每个经理管理协调多少个下级合适?8.2.4结构图结构图(StructureChart)描述系统的模块结构及模块间的联系结构图中的主要成分有:‒模块:用长方形表示‒调用:从一个模块指向另一模块的箭头表示前一个模块调用后一个模块。有循环调用和条件调用‒数据:用带圆圈的小箭头表示从一个模块传递给另一模块的数据(有实义)‒控制信息:带涂黑圆圈的小箭头表示一个模块传送给另一模块的控制信息主调模块被调模块被调模块主调模块被调模块被调模块循环调用条件调用结构图无严格的模块调用顺序,但一般习惯从左至右因为约定遵从从上向下的调用,调用关系也可以不使用箭头,而直接使用直线模块间传递的信息如果出现在数据字典中,则视为数据,否则为控制信息结构图的画法计算获得有效数据生成报表打印报表读入数据核对数据打印表头打印表尾显示无效数据打印一行有效数据EOF数据EOF有效数据数据有效数据结果EOF结果日期数据行总计行总计一个完整的结构图简单画法的结构图(H图)借书模块还可分解:‒验证读者身份、修改图书状态、保存借阅记录等简化后,忽略信息传递的结构图如下:8.2.5模块的联系为了衡量模块的相对独立性,提出了模块间的耦合(Coupling)与模块的内聚(Cohesion)两个标准‒耦合:模块和模块之间的联系程度‒内聚:模块内部各元素之间的联系程度设计目标:‒模块内的联系越紧越好‒模块间的联系越少越好‒为什么?8.2.6模块的耦合doubleCalculateAvg(){intn;doubletotal,average,value;scanf(“输入个数:\n”,&n);total=sum(n);average=total/n;return(average);}两个模块之间存在联系影响耦合度的因素如果使用模块A需要了解模块B,那么A和B是耦合的。影响模块间耦合程度有三方面的因素:‒联系方式--模块间通过什么方式联系‒来往信息的作用--模块间来往信息作什么用‒数量--模块间来往信息的多少。混合控制数据用过程直接引用语句调用少多数量方式作用0离坐标原点越远,耦合程度越高耦合的类型耦合分类如下:‒数据耦合:采用子程序调用,调用模块将需要进行处理的数据传递给被调模块。数据耦合是不可避免的。‒标记耦合:如果调用模块将整个数据记录传递给被调模块,而被调模块只使用了部分数据项,则称为标记耦合或特征耦合。‒控制耦合:一个模块将控制信息传递给另一个模块,以控制被调模块的内部处理逻辑。(可以分解)
本文标题:第8章-结构化系统设计(总体设计)
链接地址:https://www.777doc.com/doc-4936070 .html