软件设计的层次

上传人:jiups****uk12 文档编号:45506839 上传时间:2018-06-17 格式:PPT 页数:56 大小:1.05MB
返回 下载 相关 举报
软件设计的层次_第1页
第1页 / 共56页
软件设计的层次_第2页
第2页 / 共56页
软件设计的层次_第3页
第3页 / 共56页
软件设计的层次_第4页
第4页 / 共56页
软件设计的层次_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《软件设计的层次》由会员分享,可在线阅读,更多相关《软件设计的层次(56页珍藏版)》请在金锄头文库上搜索。

1、第二章 软件设计的层次丁二玉南京大学,软件学院课程交流n有明确的体系结构设计过程吗?如何完成?质 量如何评价?n有明确的模块与类结构设计过程吗?如何完成 ?质量如何评价?n程序代码编写过程有明确规范吗?如何完成? 质量如何评价主要内容1.低层设计:代码设计2.中层设计:模块与类结构设计3.高层设计:体系结构设计程序设计的建立n1950sq第一代语言,第二代语言q语句为最小单位n1960sq第三代语言q类型与函数:第一次复杂系统分割n1970sq类型与函数的成熟:形式化方法q数据结构+算法=程序低层设计n将基本的语言单位(类型与语句),组织起来 ,建立高质量的 数据结构+算法n常见设计场景:数组

2、的使用,链表的使用,内 存的使用,遍历算法,递归算法n经典场景:堆栈,队列,树,排序算法,查找 算法n质量:数据结构合理易用,算法高效易读q低层设计的本质n屏蔽程序中复杂数据结构与算法的实现细节!q评价:易读,易维护 抽象层 接口层精化层 实现层数据结构的含义与使用算法的语义与复杂度结构的类型定义 存储空间的使用与更改书写控制语句 分支的处理技巧 对数据的操纵低层设计 : 代码设计n对一个方法/函数的内部代码进行设计n又被称为软件构造“software construction”,通 常由程序员独立完成n依赖于语言提供的机制(程序设计课程)qOO or StructuralqReference

3、 or Address Pointqn有惯例用法(数据结构课程)n也存在一些方法与技巧(缺失!)低层设计 : 代码设计,常见技术n防御式编程Defensive Programmingn断言式编程Assertive programmingqDesign-by-Contractn测试驱动开发Test-Driven programmingn配置式编程Configuring Programmingn表驱动编程Table-driven Programmingn基于状态机编程State-machine based Programmingn异常处理Error handling, exception hand

4、lingn.低层设计 : 代码设计n推荐资源q代码大全q从小工到专家qHow To Write Unmaintainable Code低层设计 : 代码设计n工具q剖面q性能分析q切片工具主要内容1.低层设计:代码设计2.中层设计:模块与类结构设计3.高层设计:体系结构设计程序的分割n1970sq模块n1980sqOO模块模块化信息隐藏面向对象设计模式模块划分n模块划分q将系统分成简单片段n片段有名字,可以被反复使用n名字和使用方法称为模块的抽象与接口n模块内部的程序片段为精华与实现模块划分:中层设计的开始n模块划分隐藏一些程序片段(数据结构+算 法)的细节,暴露接口于外界抽象层 接口层精化层

5、 实现层数据结构的含义与使用算法的语义与复杂度结构的类型定义 存储空间的使用与更改书写控制语句 分支的处理技巧 对数据的操纵模块接口模块化的初始考虑n模块划分的质量评价q简洁性Simplicityn易开发n易修改n易复用q可观察性Observabilityn看上去“显然是正确的”“Obviously Correct”n易开发,易调试,易维护模块化的目标:完全独立性n完全独立有助于q理解q使用与复用q开发q修改模块化的问题与困难n程序片段之间不可能是完全独立的n方法:实现尽可能的独立q低耦合CouplingnMinimizing the relationships among modulesq高

6、内聚CohesionnMaximizing relationships among elements in the same module模块间的联系n链接: Connectionsq对名字的使用或者对地址的访问qA connection is a reference to some label or address defined elsewheren耦合就是衡量模块间链接的强度q强度越小,模块越独立耦合强度衡量耦合层次THESES ARE FORBIDDEN!模块化的启示n要求:Principles from Modularizationq1: Global Variables Consi

7、der Harmfulq2: To be Explicitq3: Do not Repeatq4: Programming to Interfaceq5: Design by Contract内聚的衡量:连接因素bindingnCoincidental Binding: No BindingnLogical Binding: Binding by logical similaritynTemporal Binding: Same TimenCommunicational Binding: Same DatanSequential Binding: Same ProblemnFunctional

8、 Binding: Same goalnInformational Binding: Same Abstraction内聚Equal cohesion!Forbidden!判断内聚 用一句话描述一个模块n如果只有一个简单语句,功能内聚n组合语句,多个动词q不是功能内聚qClass A Private:FinancialReport fr; WeatherData wd; Int totalcount; Public: void init();void init() /*initialization Module*/ initializes financial report fr=new(Fin

9、ancialReport); fr.setRatio(5); fr.setYear(”2010”);/ initializes current weather wd=new(WeatherData); wd.setCity(“Nanjing”); wd.setCode(“210093”);/ initializes master count totalcount = 0; 信息隐藏: David Parnasn模块化方法 1q按照处理流程,每个功能一个模块n模块化方法2q信息隐藏n每个模块有1或多个秘密Each module has one or more “secrets”n每个模块实现了一

10、个重要决策,而且只有自己知道 细节q决策类型1:需求,即一个模块的接口功能与模块内部的程 序细节分离q决策类型2:变化,将要发生变化的程序部分需要进行一个 决策n不同决策之间互相独立On the criteria to be used in decomposing systems into modules KWIC ExampleInput: bar sock car dog town fogOutput:bar sock car dog dog car fog town sock bar town fogFour steps: Input Circular shift Alphabetize

11、 OutputIndex: Circular shift positions: 1 5 10 14 18 23 Alphabetize: 1 10 14 23 5 18按功能设计按照信息隐藏设计Lines how characters/lines are stored Circular Shifter algorithm for shifting, storage for shifts Alphabetizer algorithm for alpha, laziness of alpha可修改性比较n可能的修改q输入数据: (1, 1)q字符储存: (all, 1)q字符打包: (all, 1

12、)q更改转置算法: (3,1)q更改排序算法: (2,1模块化与信息隐藏n模块化=按功能设计q给出功能接口,隐藏功能实现程序的细节n信息隐藏=模块化+可修改性q给出功能接口,隐藏功能实现程序的细节q给出要修改部分的接口,隐藏待修改部分的实现程 序细节n不要只是按照流程设计信息隐藏的应用:Module Guiden为每一个模块书写一个规格说明:q模块在整个系统设计中扮演的角色,即承担的功能q模块对外提供的接口q主要秘密:n模块承担的需求决策(0N)n来源与需求规格说明书q次要秘密n模块承担的修改决策(0N)n来源于对可修改性的预测n在设计的高层,可以运行一个模块有多个秘密n在设计的细节层,一个模

13、块只能有一个秘密The Modular Structure of Complex Systems常见的可修改性决策nhardware dependenciesninput and output formatsnnonstandard language features and library routines;ndifficult design and implementation areasncomplex data structuresncomplex logicnglobal variablesnConstraints and business rules面向对象n模块化+可修改性=信息

14、隐藏n抽象数据类型 属于 信息隐藏n数据封装 属于信息隐藏n模块化+信息隐藏+(抽象数据类型、封装、继 承、多态)=面向对象理想的对象n信息内聚q代表现实世界中不超过一个事物n功能内聚q只有一个目的n信息隐藏q只有一个秘密n继承符合多态思想qLSP面向对象设计原则nSingle Responsibility Principle (SRP)nOpen/Closed Principle (OCP)nLiskov Substitution Principle (LSP)qa.k.a. Design by ContractnDependency Inversion Principle (DIP)nIn

15、terface Segregation Principle (ISP)中层设计n隐藏程序片段(数据结构+算法)的实现细 节,通过接口对外交互q评价质量标准:模块化;信息隐藏;OO原则 抽象层 接口层精化层 实现层数据结构的含义与使用算法的语义与复杂度结构的类型定义 存储空间的使用与更改书写控制语句 分支的处理技巧 对数据的操纵对象、模块主要内容1.低层设计:代码设计2.中层设计:模块与类结构设计3.高层设计:体系结构设计Programming-in-the-Small VS Programming-in-the-LargenProgramming-in-the Small中低层设计的问题Pro

16、gramming-in-the-Small VS Programming-in-the-Largen过于依赖细节q连接与依赖,接口与实现n忽略的关键因素:无法有效抽象部件的整体 特性q总体结构q质量属性大型软件开发的一个根本不同是 它更关注如何将大批独立模块组 织形成一个“系统”,也就是说更 重视系统的总体组织高层设计:体系结构n部件承载了系统主要的计算与状态n连接件承载部件之间的交互n部件与连接件都是抽象的类型定义(就像类定义),它们 的实例(就像类的对象实例)组织构成软件系统的整体结 构,配置将它们的实例连接起来n连接件是一个与部件平等的单位体系结构示例nAbstract specification VS ImplementationqArchitecture as-design VS as-implementationqFunctional organizations VS implemented mechanisms to software软件体系结构设计的关键n在大型软件系统的开发中

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号