440 likes | 595 Views
第六章. 软件构造. 内容. GUI 设计原则 Java 对象程序设计 面向对象体系结构 软件体系结构模式. 软件构造. 软件构造基础. 构造的管理. 实际考虑. 构造的设计. 复杂性最小化. 构造的模型. 构造的语言. 预测变更. 构造的计划. 编码. 构造的测试. 为验证而构造. 构造的度量. 复用. 构造相关标准. 构造的质量. 集成. 软件构造知识域主题的本体结构. 5大编码原则. 简明原则 副作用原则 正确性原则 注释原则 语言原则. 理解用户原则 用户控制原则 友好性原则 左上角原则 空间关系原则
E N D
第六章 • 软件构造
内容 • GUI设计原则 • Java对象程序设计 • 面向对象体系结构 • 软件体系结构模式
软件构造 软件构造基础 构造的管理 实际考虑 构造的设计 复杂性最小化 构造的模型 构造的语言 预测变更 构造的计划 编码 构造的测试 为验证而构造 构造的度量 复用 构造相关标准 构造的质量 集成 软件构造知识域主题的本体结构
5大编码原则 • 简明原则 • 副作用原则 • 正确性原则 • 注释原则 • 语言原则
理解用户原则 用户控制原则 友好性原则 左上角原则 空间关系原则 主动交流原则 颜色适度原则 分辨颜色原则 字体适度原则 尺寸相同原则 左对齐原则 按钮原则 12条GUI设计原则
Point -myX():double -myY():double +getX():double +getY():double +Point(x:double,y:double) +Poin() SetPoint(x:double:double):void Point类的UML图
Circle -blue:int -green:int -origin:Point -radius:double -red:int +Circle(org:Point,rad:double) +getB():int +getG:int +getOrigin():Point +getR():int +getRadius():double +setOrigin(org:Point):void +setRadius(r:double):void +setRGB(r:int,g:int,b:int):void SetPoint(x:double:double):void Circle类
可见性(1) • 包。唯一的包名称前缀总是由全小写的ASCII字母组成,而且应该是一个顶级域名,诸如.com、.edu或其他正式的顶级名称。包名称的其余部分可根据组织自己内部的命名传统而定。使用点将各部分分开。例如:com.sun.eng、com.objectcentral.javatools • 类。类(和接口)名称应该是一个名词,描述类的目的。类名是大小写混合的,第一个字母大写,里面每个单词的首字母大写。使用完整的单词,避免使用缩写。例如:Point、Shape、MovieEditor、ClientList
可见性(2) • 方法。方法应该使用动词,描述方法的目的。方法名称是大小写混写的,第一个字母小写,里面每个单词的首字母大写。对于一些通用的方法类型有一些传统的前缀,比如取值方法和设值方法分别使用get和set作为前缀。例如:getOrigin、findSmallest、drawGraph、saveModel • 变量。除了作为常量使用的情况之外,所有的变量名称都是大小写混合的,第一个字母小写,里面的每个单词的首字母大写。变量名应该尽量取的有意义,使阅读代码的人能了解变量的用途。例如:myMovie、editMovie、backgroudColor、lastItem • 常量。作为常量使用的变量名应该全部使用大写,单词间用下划线(“_”)分隔。例如:MAX_SIZE、R_PG13、TERM_LIMIT
Color Point -blue:int -green:int -red:int -myX():double -myY():double +getX():double +getY():double +Point(x:double,y:double) +Poin() SetPoint(x:double:double):void +Color(r:int,g:int,b:int) +getB():int +getG():int +getR():int +setRGB(r:int,g:int,b:int):void Point类和Color类的UML类图
Library Person Reader Book Borrowing Page LibraryBook 1 1 1 0..* 1..* 1..* 0..* 图书馆及其用户之间的关系
Observable <<interface>> Observer update +addObserver() +notifyObservers() +update() Observable 接口的另一种表示方式,用圆代代替<<interface>> +update() DoorSensor Lights Guard Observer接口
过程处理系统(procedural processing system)中的处理过程(process)
过程处理系统的优缺点 • 优点包括:(1)系统的总体行为,是各个处理部件的简单组合;(2)只要输入和输出数据合适,处理部件可以在不同系统中重复使用;(3)只要增加新的处理部件,系统可以很容易地扩展;(4)系统可以在大规模并行计算机(Massively Parallel Computer)中运行,解决复杂的工程技术和科研难题。 • 缺点包括:(1)它主要以一个批量(Batch)处理的方式执行,不太适合作交互式应用(Interactive Application);(2)当有大量和不同方式的输入和输出数据时,数据存储和管理就颇伤脑筋。
客户机/服务器系统的优缺点 • 优点包括:(1)客户机与服务器分离,允许作长距离的连线运作。两者的开发也可以分开同时进行;(2)一个服务器,可以服务于多个客户机。 • 缺点包括:(1)客户机与服务器的通讯依赖于网络,可能成为整体系统运作的瓶颈(若两者在同一台计算机上,则没有这个问题);(2)倘若服务器及其界面定义有改变,则客户机也要作相应改变。当客户机数量很大时,要保证每一个都有最新软件版本,就要费很大力气。
层级系统的优缺点 • 优点包括;(1)在部件或结点中分设层有助把复杂的问题按功能分解,使整体设计更为清晰;(2)由于内层与外界隔绝,内层函数和服务受到有效的控制,只有界面层的对象作为界面类而向外界公开;(3)新的运算可以在界面层中引入,它们把内层(核心或持久)的一些运算合起来;(4)如果界面合适,某一个层可以反复用在不同地方。一个自成一体的层,也可以作为部件或结点使用。 • 缺点包括:(1)层的个数多时,系统性能就会下降。因为界面函数可能要穿过好几层,才能到达某一内层;(2)标准化的层界面对能变得臃肿,降低函数调用的性能。
多级系统的优缺点 • 优点包括:(1)因为系统的功能分布在几个级或服务器上,系统维修和扩展都比较容易;(2)从底层到高层,可以分级控制,对不同级的客户机提供不同水平的服务;(3)方便企业水平的整合。通常的做法是把中间级与企业的其他系统连接起来;(4)多级系统可以扩充,以服务大量同时使用系统的客户机。例如,可把多个服务器群集起来。 • 缺点包括:(1)各对客户机/服务器之间可能有多种不同的通讯协议;(2)由于数据要行经多级结点,而各个结点可能在不同的计算机和操作系统中,调试系统的整体运作性能就很不容易。
代理体系结构的优缺点 • 优点包括:(1)在处理复杂任务时,代理体系结构有高度的灵活性,统筹多个全自动或半自动的代理的活动;(2)系统可用渐进方式建立,并容许从原有系统逐步过渡;(3)由于各组功能分布在不同代理,系统比较容易维修和扩展;(4)系统很容易与多级系统合并使用,伸缩性强,便利企业水平的软件整合。 • 缺点包括:(1)由于所有活动都经共用的消息总线传送,安全的问题必须尽早设计解决。例如外加密码则使网络负载增加,加密和解密也会影响系统性能;(2)消息总线要有统一的通讯协议,企业的整体计划就必须十分周详;(3)因为事务分布在多个代理处理,系统的性能调试可能比较困难。
聚合和联邦体系结构的优缺点 • 优点包括:(1)反复运用一些小的结点,就可以组合成庞大的软件系统。各个结点共享整个系统的一个共同视图,而系统结点则分布各地;(2)每一个结点都比较简单,并只通过少数界面与其他结点通讯;(3)体系结构非常灵活,没有中央集权,各结点或枢纽在本地有很强的控制力。 • 缺点包括:(1)聚合不一定是最好的网络结构,消息传播要经过多个结点,速度受到缺点;(2)聚合容易由于某一点联络中断,而引起大面积网络通讯失灵;(3)假如各结点不完全相同,而数目又很多,保养维修的工作量就很大。
要点 • 软件的体系结构(Architecture)是系统实施的抽象描述,它概括了整体系统结构、功能部件分解、部件的本质和特性、部件的界面和之间的通讯协议和整体性布局策略及法则。良好的软件系统,必须有合理健全、内在一致的体系结构。 • 面向对象的体系结构,与传统体系结构有所不同。它强调分布式对象的分配、部件及其界面、持久对象和面向对象通讯方法。
要点 • 软件体系结构有多种模式,必须对症下药,按照实际要求和限制,选择合适的一种。 • 面向对象体系结构的通用模式可以:(1)把某一体系结构的总体性质与不同背景的人分享;(2)反复把体系结构的架构和模式,应用在不同系统和环境;(3)比较不同的体系结构,根据其长短处,作出总体性的决策。
相关系统分析员论文题目 • 论软件的选用和二次开发(1993) • 论自由软件的合理使用(2003)
相关世界软件工程大会论文 • Feature oriented refactoring of legacy applications • A quality-driven systematic approach for architecting distributed software applications • Precise Modeling of Design Patterns in UML • A case study of open source software development: the Apache server • Using off-the-shelf middleware to implement connectors in distributed software architectures • Linux as a case study: its extracted software architecture