《第十一讲:软件实现.ppt》由会员分享,可在线阅读,更多相关《第十一讲:软件实现.ppt(76页珍藏版)》请在三一办公上搜索。
1、软 件 工 程 导 论,刘春计算机与信息工程学院 软件工程系,2,回顾,设计模式概述经典设计模式介绍用户界面设计,什么是设计模式?,设计模式:描述一个在我们周围不断重复发生的问题,以及该问题的解决方案。,使用设计模式,我们就能一次一次地利用已有方案而不必做重复劳动。,设计模式之四人帮(GOF),GOF:Gang of FourErich Gamma、Richard Helm、Ralph Johnson、John Vlissides),GOF之书,GOF之书:Design Patterns:Elements of Reusable Object-Oriented Software(设计模式:可复
2、用的面向对象软件的基本原理)。该书被广大喜爱者昵称为GOF之书,被认为是学习设计模式的必读著作,GOF之书已经被公认为是设计模式领域的奠基之作。,GOF之23种设计模式,创建型模式1.抽象工厂模式2.工厂方法模式 3.单例模式4.建造者模式 5.原型模式 结构型模式1.适配器模式2.外观模式 3.桥接模式 4.组合模式5.装饰模式6.享元模式7.代理模式,行为型模式1.迭代器模式2.观察者模式3.策略模式4.职责链模式5.命令模式 6.解释器模式7.中介者模式8.备忘录模式9.状态模式10.模板方法模式11.访问者模式,7,内容提纲,设计模式概述经典设计模式介绍用户界面设计,经典设计模式介绍,
3、创建型模式1.抽象工厂模式2.工厂方法模式 3.单例模式4.建造者模式 5.原型模式 结构型模式1.适配器模式2.外观模式 3.桥接模式 4.组合模式5.装饰模式6.享元模式7.代理模式,行为型模式1.迭代器模式2.观察者模式3.策略模式4.命令模式 5.职责链模式6.解释器模式7.中介者模式8.备忘录模式9.状态模式10.模板方法模式11.访问者模式,抽象工厂模式的UML图,工厂方法模式的UML图,单例模式的结构,模式的结构中包括一种角色:单例类(Singleton),单例模式的应用实例(1/2),1单例类(Singleton):Moon.java public class Moon pri
4、vate static Moon uniqueMoon;double radius;double distanceToEarth;private Moon()uniqueMoon=this;radius=1738;distanceToEarth=363300;public static Moon getMoon()if(uniqueMoon=null)uniqueMoon=new Moon();return uniqueMoon;public String show()String s=月亮的半径是+radius+km,距地球是+distanceToEarth+km;return s;,经典设
5、计模式介绍,创建型模式1.抽象工厂模式2.工厂方法模式 3.单例模式4.建造者模式 5.原型模式 结构型模式1.适配器模式2.外观模式 3.桥接模式 4.组合模式5.装饰模式6.享元模式7.代理模式,行为型模式1.迭代器模式2.观察者模式3.策略模式4.命令模式 5.职责链模式6.解释器模式7.中介者模式8.备忘录模式9.状态模式10.模板方法模式11.访问者模式,适配器模式的UML图,外观模式的UML图,经典设计模式介绍,创建型模式1.抽象工厂模式2.工厂方法模式 3.单例模式4.建造者模式 5.原型模式 结构型模式1.适配器模式2.外观模式 3.桥接模式 4.组合模式5.装饰模式6.享元模
6、式7.代理模式,行为型模式1.迭代器模式2.观察者模式3.策略模式4.命令模式 5.职责链模式6.解释器模式7.中介者模式8.备忘录模式9.状态模式10.模板方法模式11.访问者模式,迭代器模式的UML图,观察者模式的UML图,策略模式的UML图,20,内容提纲,设计模式概述经典设计模式介绍用户界面设计,用户界面通常也称为人机界面(HCI),它是交互式应用软件系统的门面。用户界面设计的重要性:苹果的成功,用户界面设计,用户界面设计在软件设计中的归类,软件设计的主要任务体系结构设计接口设计数据设计过程设计,软件构件间的接口设计软件和其它硬件或软件间的接口设计人与计算机间交互信息的界面设计,以用户
7、为中心:将界面置于用户的控制之下减轻用户的记忆负担:良好的直觉特性保持界面的一致性,用户界面设计原则,课程进度,我们现在的位置,25,提纲,软件实现的目标和任务程序设计语言软件编码规范程序效率,目标:选择某种程序设计语言,将详细设计结构进行编码实现,并形成可执行的软件系统的过程。任务:程序设计语言的选择集成开发环境的选择程序编码实现,软件实现的目标和任务,27,提纲,软件实现的目标和任务程序设计语言软件编码规范程序效率,程序设计语言的分类程序设计语言介绍程序设计语言的选择,程序设计语言,按程序设计语言的历史发展过程:机器语言、汇编语言、高级语言按与机器的依赖程度:低级、中级和高级语言按应用范围
8、:通用语言与专用语言。通用语言又可细分为系统程序设计语言、科学计算语言、事务处理语言和实时控制语言等按程序的设计方法:命令性语言和作用性语言按语言的成分:顺序语言、并行语言和实时语言等按语言的组成方法:汇集式语言和可扩充语言,程序设计语言的分类,按程序设计语言的历史发展过程,程序设计语言可分为:机器语言汇编语言高级语言,程序设计语言的介绍,机器语言时代(19461953),光电阅读机将记录在穿孔卡片上数据读入计算机计算的结果则利用打孔机在卡片上打出的一些小孔,机器语言,卡片上的小孔就组成了计算机和专家明白但绝大多数人不明白的天书机器语言(完全用0、1代码写的程序),汇编语言,汇编语言出现:用助
9、记符来代替0,1代码,帮助人们理解机器语言助记符:MOV,ADD,.汇编程序:将用汇编语言编写的程序翻译成机器语言程序的程序汇编:具体的翻译成机器语言的过程汇编语言程序的特征:依赖于具体的硬件平台翻译之后的代码体积小,高级语言时代(1954至今),高级语言的特征:接近于自然语言直观、好理解,便于记忆屏蔽了程序设计中与硬件相关的细节,实现了程序设计对机器硬件的独立性,使程序设计转向求解问题本身,常见的高级语言(1/3),FORTRAN:公式翻译程序设计语言,第一个广泛使用的高级语言,1956Pacial:第一个结构化的程序设计语言,六十年代末C:结构化设计语言,既具有高级语言的特征,又具有低级语
10、言的功能,1972(它的诞生是现代程序语言革命的起点,是程序设计语言发展史中的一个里程碑)C+:C语言的扩展(加入了面向对象),提供了类,多态,异常处理,模板,标准类库等,80年代初期,常见的高级语言(2/3),JAVA:一种面向对象的编程语言(太阳公司),其语法结构与C+类似。Java在虚拟机上运行,通过为不同的平台提供虚拟机,实现了Java跨平台的特性C#:语法与Java类似,是.Net平台上编程语言(微软公司),2000Delphi:由传统Pascal语言发展而来的Object Pascal,支持面向过程、面向数据和面向对象的三种开发方法,1995,提供了大量的快速应用程序开发组件,常见
11、的高级语言(3/3),Perl:linux/unix下的脚本语言,1987Python:一种面向对象、直译式语言,语法简洁,1991Ruby:一种为简单快捷的面向对象编程的脚本语言,1995Php:一种 HTML 内嵌式的脚本语言,语言的风格有类似于C语言,1995,参考阅读,假如编程语言是私家车 http:/http:/,常见高级语言的目前使用情况,Java:适合于WEB、桌面、控制台等程序,目前霸占了企业级应用市场C#:同JAVA类似,目前迅速崛起C/C+:是嵌入式开发和系统给开发的利器。操作系统、驱动程序、各种游戏大都是基于C/C+开发的Delphi:擅长于快速的桌面程序开发,数据库开发
12、,例如进销存软件,目前逐渐下滑perl、python、ruby,php等其它语言也占据了一定的市场,高级语言的现状(1/3),编程语言本身的发展非常缓慢,虽然中间出现了面向对象语言等一些进展过去的大部分的进展没有体现在编程语言本身上,而是体现在框架及工具等方面Java编程框架:Struts、Spring现在的IDE,已经有了无数强大的功能,例如语法提示,重构,调试器,探测器等等,,高级语言的现状(2/3),开发语言排行榜:http:/每月更新一次依据的指数是基于世界范围内的资深软件工程师和第三方供应商提供其结果作为当前业内程序开发语言的流行使用程度的有效指标,排名110的编程语言,排名1120
13、的编程语言,程序设计语言的分类程序设计语言介绍程序设计语言的选择,程序设计语言,编程语言的选择,用户的选择程序员的知识软件的应用领域工程项目的规模软件的可移植性性能上的考虑,47,提纲,软件实现的目标和任务程序设计语言软件编码规范程序效率,遵循一定的规范,可以提高程序的:可靠性、可读性、可修改性、可维护性、一致性,为什么需要软件编码规范?,使开发人员之间的工作成果可以共享,充分利用资源。,头文件规范注释规范命名规范排版规范 目录结构规范,软件编码规范的内容,C/C+源程序的组织结构,头文件用于保存程序的声明后缀:.h程序定义文件用于保存程序的实现后缀:.c/.cpp,头文件的结构与规范,文件头
14、注释(涉及版权和版本声明、文件名、作者等信息)预处理块函数和类结构声明,防止头文件被重复引用,用ifndef/define/endif结构产生预处理块,只存放“声明”而不存放“定义”,头文件的引用方式,用#include 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)用#include“filename.h”格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索),/防止被重复引用,/标准库的头文件,/非标准库的头文件,/全局函数声明,/类/结构声明,头文件规范注释规范命名规范排版规范 目录结构规范,软件编码规范的内容,1、注释的缩进要与代码的缩进一致2、注释之间要用空行隔开3
15、、对所有的变量、数据结构、以及函数进行声明时都应加以注释,说明含义4、头文件和源文件的头部都应进行注释5、函数的头部也应进行块注释,列出函数的功能、输入参数、返回值等,注释规范,头文件规范注释规范命名规范排版规范 目录结构规范,软件编码规范的内容,好的命名应是直观且容易理解的标识符长度应当“长度简短、含义丰富”变量、函数等命名应遵循一定的规范,命名规范,头文件规范注释规范命名规范排版规范 目录结构规范,软件编码规范的内容,主要目的是增加代码的可读性常见的一些排版规范 1、程序块采用缩进风格编写,缩进为2个空格2、每个类声明、函数定义之后都要有空行3、函数体内,逻辑上密切相关的语句之间不加空行,
16、其它地方应加空行隔开4、一行代码只做一件事情,如只定义一个变量、或只写一条语句5、if,while,do try,catch等语句应独占一行,不论执行语句有多少都要加6、代码行最大长度应控制在70-80个字符内,7、关键字之后要留空格,排版规范(1/8),排版规范(1/7),1)程序块采用缩进风格编写,缩进为2个空格,排版规范(2/7),2)每个类声明、函数定义之后都要有空行3)函数体内,逻辑上密切相关的语句之间不加空行,其它地方应加空行隔开,排版规范(3/7),4)一行代码只做一件事情,如只定义一个变量、或只写一条语句,排版规范(4/7),5)if,while,do try,catch等语句
17、应独占一行,不论执行语句有多少都要加,排版规范(5/7),6)对空格的处理:关键字之后要留空格函数名之后不要留空格,紧跟左括号“(”;“(”向后紧跟,而“)”,“,”,“;”向前紧跟,紧跟处不留空格“,”之后要留空格,如function(x,y,z);如果“;”不是一行的结束符,其后要间隔一个空格,如for(int i=0;i=,)等二元操作符前后应加空格一元操作符如!,+,-,&等前后不加空格像“”,“.”,“-”这类操作符前后不加空格对于表达式比较长的for,while,switch语句和if语句,为了紧凑,可以适当去掉一些空格修饰符“*”和“&”应紧靠数据类型,排版规范(6/7),7)尽
18、可能在定义变量的同时初始化该变量,排版规范(7/7),8)尽量控制一行代码的长度一行代码长度应该控制在80个字符以内拆分出的新行要进行适当的缩进,使排版整齐,语句可读,69,提纲,软件实现的目标和任务程序设计语言软件编码规范程序效率,程序效率,效率主要指处理时间和存储器容量两个方面效率的三条原则第一,效率是性能要求,应该在需求分析阶段确定效率方面的要求;第二,效率是靠好设计来提高的;第三,程序的效率和程序的简单度是一致的,不要牺牲程序的清晰性和可读性来不必要地提高效率,为了提高程序的运行速度,应遵循以下原则:(1)改善循环的效率(2)采用快速的算术运算(3)对数据结构进行划分和改进,以及对程序
19、算法的优化来提高空间效率(4)尽量避免使用指针和复杂的表达式,使用指针时,要防止“野指针”(5)不要混淆数据类型,避免在表达式中出现类型混杂(6)尽量采用整数算术表达式和布尔表达式(7)编码前,尽量简化有关的算术表达式和逻辑表达式(8)选用等效的高效率算法,运行速度的提高,内存采取基于操作系统的分页功能的虚拟存储管理对于变动频的数据最好采用动态存储,存储空间的优化,提高输入输出效率的指导原则如下:(1)对所有的输入数据都进行检验,从而识别错误的输入,以保证每个数据的有效性。(2)检查输入项的各种重要组合的合理性,必要时报告输入状态信息。(3)使得输入的步骤和操作尽可能简单,并保持简单的输入格式
20、。(4)输入数据时,应允许使用自由格式输入,允许默认值;输入一批数据时,最好使用输入结束标志,而不要由用户指定输入数据数目;在以交互式输入输出方式进行输入时,要在屏幕上使用提示符明确提示交互输入的请求指明可使用选择项的种类和取值范围,同时,在数据输入的过程中和输入结束时,也要在屏幕上给出状态信息。,输入/输出效率的提高(1/3),提高输入输出效率的指导原则如下:(5)对所有的输入输出操作,安排适当的缓冲区,以减少频繁的信息交换。(6)对辅助存储(如磁盘),应当成块传送,以提高输入输出效率。(7)对辅助存储的输入输出,应考虑设备特性,改善输入输出的质量和速度。(8)对终端或打印机的输入输出,应考虑设备特性,改善输入输出的质量和速度。,输入/输出效率的提高(2/3),提高输入输出效率的指导原则如下:(9)任何不易理解的、对改善输入输出效果关系不大的措施都是不可取的。(10)不应该为追求所谓超高效的输入输出,而损害程序的可理解性。(11)良好的输入输出程序设计风格对提高输入输出效率会有明显的效果。,输入/输出效率的提高(3/3),软件实现的目的就是要把详细设计的结果翻译成用选定的语言书写的源程序。这一过程要选择合适的程序设计语言,遵守软件编码规范,开发出高效率的软件。,小结,