软件设计的层次_第1页
软件设计的层次_第2页
软件设计的层次_第3页
软件设计的层次_第4页
软件设计的层次_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

第二章软件设计的层次

丁二玉南京大学,软件学院课程交流有明确的体系结构设计过程吗?如何完成?质量如何评价?有明确的模块与类结构设计过程吗?如何完成?质量如何评价?程序代码编写过程有明确规范吗?如何完成?质量如何评价主要内容低层设计:代码设计中层设计:模块与类结构设计高层设计:体系结构设计程序设计的建立1950s第一代语言,第二代语言语句为最小单位1960s第三代语言类型与函数:第一次复杂系统分割1970s类型与函数的成熟:形式化方法数据结构+算法=程序低层设计将基本的语言单位(类型与语句),组织起来,建立高质量的数据结构+算法常见设计场景:数组的使用,链表的使用,内存的使用,遍历算法,递归算法…经典场景:堆栈,队列,树,排序算法,查找算法…质量:数据结构合理易用,算法高效易读<计算机程序设计艺术>低层设计的本质屏蔽程序中复杂数据结构与算法的实现细节!评价:易读,易维护抽象层接口层精化层实现层数据结构的含义与使用算法的语义与复杂度结构的类型定义存储空间的使用与更改书写控制语句分支的处理技巧对数据的操纵低层设计:代码设计对一个方法/函数的内部代码进行设计又被称为软件构造“softwareconstruction”,通常由程序员独立完成依赖于语言提供的机制(程序设计课程)OOorStructuralReferenceorAddressPoint…有惯例用法(数据结构课程)也存在一些方法与技巧(缺失!)低层设计:代码设计,常见技术防御式编程DefensiveProgramming断言式编程AssertiveprogrammingDesign-by-Contract测试驱动开发Test-Drivenprogramming配置式编程ConfiguringProgramming表驱动编程Table-drivenProgramming基于状态机编程State-machinebasedProgramming异常处理Errorhandling,exceptionhandling….低层设计:代码设计推荐资源《代码大全》《从小工到专家》《HowToWriteUnmaintainableCode》低层设计:代码设计工具剖面性能分析切片工具主要内容低层设计:代码设计中层设计:模块与类结构设计高层设计:体系结构设计程序的分割1970s模块1980sOO模块模块化信息隐藏面向对象设计模式…模块划分模块划分将系统分成简单片段片段有名字,可以被反复使用名字和使用方法称为模块的抽象与接口模块内部的程序片段为精华与实现模块划分:中层设计的开始模块划分隐藏一些程序片段(数据结构+算法)的细节,暴露接口于外界抽象层接口层精化层实现层数据结构的含义与使用算法的语义与复杂度结构的类型定义存储空间的使用与更改书写控制语句分支的处理技巧对数据的操纵程序细节模块接口模块化的初始考虑模块划分的质量评价简洁性Simplicity易开发易修改易复用可观察性Observability看上去“显然是正确的”“ObviouslyCorrect”易开发,易调试,易维护模块化的目标:完全独立性完全独立有助于理解使用与复用开发修改模块化的问题与困难程序片段之间不可能是完全独立的方法:实现尽可能的独立低耦合CouplingMinimizingtherelationshipsamongmodules高内聚CohesionMaximizingrelationshipsamongelementsinthesamemodule模块间的联系链接:Connections对名字的使用或者对地址的访问Aconnectionisareferencetosomelabeloraddressdefinedelsewhere耦合就是衡量模块间链接的强度强度越小,模块越独立耦合强度衡量耦合层次THESESAREFORBIDDEN!模块化的启示要求:PrinciplesfromModularization1:GlobalVariablesConsiderHarmful2:TobeExplicit3:DonotRepeat4:ProgrammingtoInterface5:DesignbyContract内聚的衡量:连接因素bindingCoincidentalBinding:NoBindingLogicalBinding:BindingbylogicalsimilarityTemporalBinding:SameTimeCommunicationalBinding:SameDataSequentialBinding:SameProblemFunctionalBinding:SamegoalInformationalBinding:SameAbstraction内聚Equalcohesion!Forbidden!判断内聚

用一句话描述一个模块如果只有一个简单语句,功能内聚组合语句,多个动词

不是功能内聚 …ClassA{

Private: FinancialReportfr; WeatherDatawd; Inttotalcount; Public: voidinit();}voidinit(){/*initializationModule*///initializesfinancialreportfr=new(FinancialReport);fr.setRatio(5);fr.setYear(”2010”);//initializescurrentweatherwd=new(WeatherData);wd.setCity(“Nanjing”);wd.setCode(“210093”);//initializesmastercounttotalcount=0;}信息隐藏:DavidParnas

模块化方法1按照处理流程,每个功能一个模块模块化方法2信息隐藏每个模块有1或多个秘密Eachmodulehasoneormore"secrets”每个模块实现了一个重要决策,而且只有自己知道细节决策类型1:需求,即一个模块的接口功能与模块内部的程序细节分离决策类型2:变化,将要发生变化的程序部分需要进行一个决策不同决策之间互相独立《Onthecriteriatobeusedindecomposingsystemsintomodules》KWICExampleInput: barsock cardog townfog Output:

barsock cardog dogcar fogtown sockbar townfogFoursteps: Input Circularshift Alphabetize OutputIndex:Circularshiftpositions: 1510141823Alphabetize: 1101423518按功能设计按照信息隐藏设计Lineshowcharacters/linesarestoredCircularShifteralgorithmforshifting,storageforshiftsAlphabetizeralgorithmforalpha,lazinessofalpha可修改性比较可能的修改输入数据:(1,1)字符储存:(all,1)字符打包:(all,1)更改转置算法:(3,1)更改排序算法:(2,1模块化与信息隐藏模块化=按功能设计给出功能接口,隐藏功能实现程序的细节信息隐藏=模块化+可修改性给出功能接口,隐藏功能实现程序的细节给出要修改部分的接口,隐藏待修改部分的实现程序细节不要只是按照流程设计信息隐藏的应用:ModuleGuide为每一个模块书写一个规格说明:模块在整个系统设计中扮演的角色,即承担的功能模块对外提供的接口主要秘密:模块承担的需求决策(0~N)来源与需求规格说明书次要秘密模块承担的修改决策(0~N)来源于对可修改性的预测在设计的高层,可以运行一个模块有多个秘密在设计的细节层,一个模块只能有一个秘密《TheModularStructureofComplexSystems》常见的可修改性决策hardwaredependenciesinputandoutputformatsnonstandardlanguagefeaturesandlibraryroutines;difficultdesignandimplementationareascomplexdatastructurescomplexlogicglobalvariablesConstraintsandbusinessrules<“MissinginAction:InformationHiding”>面向对象模块化+可修改性=信息隐藏抽象数据类型属于信息隐藏数据封装属于信息隐藏模块化+信息隐藏+(抽象数据类型、封装、继承、多态)=面向对象理想的对象信息内聚代表现实世界中不超过一个事物功能内聚只有一个目的信息隐藏只有一个秘密继承符合多态思想LSP面向对象设计原则SingleResponsibilityPrinciple(SRP)Open/ClosedPrinciple(OCP)LiskovSubstitutionPrinciple(LSP)a.k.a.DesignbyContractDependencyInversionPrinciple(DIP)InterfaceSegregationPrinciple(ISP)中层设计隐藏程序片段(数据结构+算法)的实现细节,通过接口对外交互评价质量标准:模块化;信息隐藏;OO原则抽象层接口层精化层实现层数据结构的含义与使用算法的语义与复杂度结构的类型定义存储空间的使用与更改书写控制语句分支的处理技巧对数据的操纵程序细节对象、模块主要内容低层设计:代码设计中层设计:模块与类结构设计高层设计:体系结构设计Programming-in-the-SmallVS

Programming-in-the-Large

Programming-in-theSmall中低层设计的问题《Programming-in-the-SmallVS

Programming-in-the-Large》过于依赖细节连接与依赖,接口与实现忽略的关键因素:无法有效抽象部件的整体特性总体结构质量属性大型软件开发的一个根本不同是它更关注如何将大批独立模块组织形成一个“系统”,也就是说更重视系统的总体组织高层设计:体系结构部件承载了系统主要的计算与状态连接件承载部件之间的交互部件与连接件都是抽象的类型定义(就像类定义),它们的实例(就像类的对象实例)组织构成软件系统的整体结构,配置将它们的实例连接起来连接件是一个与部件平等的单位体系结构示例AbstractspecificationVSImplementationArchitectureas-designVSas-implementationFunctionalorganizationsVSimplementedmechanismstosoftware软件体系结构设计的关键在大型软件系统的开发中,质量属性是影响软件系统复杂度的关键因素,软件体系结构是处理质量属性和控制复杂性的主要手段为什么质量属性在高层设计中是重要的?影响广泛。与质量属性相关的设计决策可能会影响到软件体系结构的很多元素,甚至是绝大部分的元素。互相交织。质量属性之间并不是完全独立的,它们可能互相冲突,也可能互相促进,这扩大了它们的影响范围。易于被违反。因为与质量属性相关的设

温馨提示

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

评论

0/150

提交评论