Presentation is loading. Please wait.

Presentation is loading. Please wait.

第一课 程序设计方法学绪论 浙江大学计算机学院博士 蔡 铭 电话: , (O), (H)

Similar presentations


Presentation on theme: "第一课 程序设计方法学绪论 浙江大学计算机学院博士 蔡 铭 电话: , (O), (H)"— Presentation transcript:

1 第一课 程序设计方法学绪论 浙江大学计算机学院博士 蔡 铭 电话:13516828512,87951414(O),85454625(H)
第一课 程序设计方法学绪论 浙江大学计算机学院博士 蔡 铭 电话: , (O), (H)

2 本课程设置的目的 当前常见的高级语言程序设计教程以介绍程序设计语言为中心,很少介绍程序设计方法,致使书中只有程序,没有程序设计过程,难以说清楚程序是如何得来的,难以起到培养程序设计能力的作用。 只有规范的、科学的进行程序设计,一个大项目才能得到有效的管理,其质量才有保证。 程序设计不是单纯技巧性的活动,也有自身的科学理论,程序设计方法学是一门使程序设计从技巧升华为科学的学科。

3 本讲的内容 本课程的核心内容和目的 程序设计语言的介绍 软件危机与程序设计方法学的产生 程序设计方法学的内容 作业及考试情况

4 本课程的核心内容 ——怎样设计出“优秀”的程序
本课程的核心内容 ——怎样设计出“优秀”的程序 1.什么样的程序才是“优秀” 的? “优秀”的程序与优秀程序员的迫切性 “优秀”程序的要素

5 优秀的程序与优秀程序员的迫切性 开发成本的例子 开发效率的试验
IBM公司的早期操作系统MVS,700万行代码,成本20亿美元,平均每行代码285美元 开发效率的试验 调试时间 28:1 编程时间 16:1 程序长度 6:1 程序速度 6:1

6 “优秀” 程序的要素 正确性 易验证 结构化 模式化 易维护 易扩展 易阅读 性能均衡 从程序正确性方面考虑 从程序组成结构方面考虑
从程序表现形式方面考虑 从程序运行性能方面考虑

7 本课程的核心内容 ——怎样设计出“优秀”的程序
本课程的核心内容 ——怎样设计出“优秀”的程序 2.怎么才能设计出“优秀”的程序? 学习(技巧、技术、方法、理论,以及别人的经验) 工具(设计工具、调试工具、测试工具) 实践(练习、思考题、作业) 激情(兴趣) 勤劳 运气 Wake up every day with a feeling of passion for the different technology will make in people’s life

8 软件硕士应具备的素质 能在系统分析、系统设计、系统编码和系统调试四个领域,准确地使用至少一种新方法
能够选择该适当的数据结构和算法进行编码的能力,并能够对软件进行基本的测试和调试,并改进系统的性能 至少熟悉一个有意义的领域(操作系统、编译系统、数据库、MIS),并研制出领域较为先进的软件系统 能够有效地组织和管理3-7人的开发团队 能够与客户、经理和技术人员进行有效沟通的能力 具有评价、选择和实现新方法、新技术的能力

9 本课程的核心内容 ——怎样设计出“优秀”的程序
本课程的核心内容 ——怎样设计出“优秀”的程序 3. 本课程的学习目的 掌握较深层次的程序设计知识与理论 有助于设计出优秀的程序 开拓思路、扩大知识面 学习程序设计形式化方法,有利于进一步深造

10 本课程与相关课程的区别 软件工程 (管理) 数据结构与算法(实现) 程序设计语言学(运行) 程序设计技巧 (技巧) 程序设计方法学(方法学)
软件工程 (管理) 数据结构与算法(实现) 程序设计语言学(运行) 程序设计技巧 (技巧) 程序设计方法学(方法学) 研究程序的性质,以及程序设计的理论、方法和技术的科学

11 本课程的参考文献 《程序设计方法学》胡正国等 国防工业出版社 2003年1月 《程序设计方法学》冯树椿等 浙江大学出版社 1987年12月
《软件设计方法》 王选 清华大学出版社 1992年4月 《软件开发的科学与艺术》 微软电子工业出版社 2002年5月 《程序设计语言概念和结构》Ravi Sethi 机械工业出版社 2002 《程序设计实践》 Brian W.K 机械工业出版社 2000年8月 《Design Patterns Elements of Reusable Object-Oriented Software》Erich,Person Education,2002年3月 《Art of Computer Programming, Volume 1-3》Donald E.Knuth 国防工业出版社 《软件项目管理》 Philip Metzger 电子工业出版社 2002年8月

12 本讲内容 本课程的核心内容和目的 程序设计语言的介绍 软件危机与程序设计方法学的产生 程序设计方法学的内容 作业及考试情况

13 程序 设计 语言

14 一、机器语言和汇编语言 原始的冯.诺依曼机器(1946年)代码 00000010101111001010
机器语言是晦涩难懂的,而英语是罗嗦而非形式化的, 因此需要设计另外一种语言来写程序,它应该是符号式 的或者说助记的。 高级语言的优越性:可扩展性;可读性;可移植性

15 二、命令式语言 科学计算的语言 Backus[1957]为Fortran的成功预备了两个成分:记法和效率
APL是唯一使用带有专用符号的交互式键盘来编写程序的语言。 商用语言 第一个商用语言是COBOL(面向商业的公用语言的缩写)。它是一种功能很强而又极为冗长的语言 BASIC设计者的最意图体现在该语言的名字上--初学者通用的符号指令码 多用途语言 Alogol60主导20世纪60年代程序设计语言的发展。 Pascal作为教学语言扩展了Alogol Dennis Ritchie1972年创建C语言

16 三、函数式语言 1958年MCarthy设计了LISP用作符号演算,具有严格的理论基础
Standard ML、Miranda、Haskell对语言发展的推动作用 1984年CLOS是LISP的面向对象扩展,全名是Common Lisp Object System

17 四、(基于)面向对象语言 Simula :Kristen Nygaard和Ole-Jodan Dahl在1961年设计了这个语言,目的是想同时作为一种描述语言和程序设计语言 Smalltalk是第一个严格意义的全面向对象的程序设计语言,它的设计受到了LISP的影响 C++设计的是为了把面向对象的优点带进C的命令式程序设计中 JAVA是面向对象程序设计语言的成熟标志 你需要知道的一些(基于)面向对象程序设计语言和相关语言:Ada、Simula、Smalltalk、C++、JAVA

18 本讲内容 本课程的核心内容和目的 程序设计语言的介绍 软件危机与程序设计方法学的产生 程序设计方法学的内容 作业及考试情况

19 软件危机——产生 (1/2) 软件危机的产生(60年代末-70年代初) 机器、汇编语言,以及小规模高级程序设计
软件危机——产生 (1/2) 软件危机的产生(60年代末-70年代初) 机器、汇编语言,以及小规模高级程序设计 追求指令少、运行快,是一种手工艺式时代。 随着计算机应用的扩展和系统软件的出现, 传统的追求技巧型的方法,已变得不适合。

20 软件危机——产生(2/2) 软件危机的表现 软件开发成本和进度的估计常常很不准确 用户对“已完成的”软件系统不满意的现象经常发生
软件常常是不可维护的 软件常常是不可管理的 软件在计算机系统总成本中所占的比例逐年上升 软件开发生产率提高的速度远远跟不上计算机应用迅速及深入普及的速度

21 软件危机——如何解决 管理学和工程学角度——软件工程 划分阶段;加强审计;质量控制; 过程改进;结构化; 方法学和语言学角度——程序设计方法
标准的程序设计;设计理论; 设计模式;设计风格;设计技巧

22 本讲内容 本课程的核心内容和目的 程序设计语言的介绍 软件危机与程序设计方法学的产生 程序设计方法学的内容 作业及考试情况

23 程序设计方法学讲课内容 介绍和发展历程 设 计 模 式 模块化程序设计方法 面向对象程序设计 程序设计 新方法 结构化程序设计方法 应 用
程序正确性证明 递归程序正确性证明 结构化定理 程序调试技术 抽象数据类型 代数规范理论 程序设计实例

24 课程的主要研究问题 程序设计的基本特征 程序设计标准化问题 形式语义 代数规范 程序设计标准实施问题 设计风格 设计方法 设计工具 设计技巧
结构化 模块化 对象化 智能化 程序设计标准化问题 形式语义 代数规范 正确性的代数证明 形式推导 程序变换 程序设计标准实施问题 设计风格 设计方法 设计工具 设计技巧

25 本讲内容 本课程的核心内容和目的 程序设计语言的介绍 软件危机与程序设计方法学的产生 程序设计方法学的内容 作业及考试情况

26 作业及考试情况 宗旨:希望学得轻松,并有所得 作业:完成一篇关于程序设计方法 方面的论文(30%) 考试:一般开卷 (70%)

27 谢谢!

28 结构化与非结构化程序示例 switch(state){ PROC: Case STATE_ZOOMIN: switch(state){
……;goto NOT_SENDING; Case STATE_DRAWRECT: ……;goto SENDING; …… } SENDING: ……;return; NOT_SENDING: PROC: switch(state){ Case STATE_ZOOMIN: ……;goto ERROR; Case STATE_DRAWRECT: …… } ERROR: ……;goto PROC; 返回

29 模式化示例——单体 final class Singleton { private static Singleton s = new Singleton(47); private int i; private Singleton(int x) { i = x; } public static Singleton getHandle() { return s; } public int getValue() { return i; } public void setValue(int x) { i = x; } } public class SingletonPattern { public static void main(String[] args) { Singleton s = Singleton.getHandle(); System.out.println(s.getValue()); Singleton s2 = Singleton.getHandle(); s2.setValue(9); System.out.println(s.getValue()); 在不同软件系统设计过程中,存在对大量的同样或相似问题的求解,因此,如何进行设计思想重用,从而实现高质量、高效率、低成本的完成系统开发是“设计模式”解决的问题。 对大量既往软件系统进行比较分析(逆向分析),从中筛选出最优方案,形成一系列模式设计族,以便于再次重用。 程序设计模式化体现了一种“软件再工程” 思想。 返回

30 程序的可阅读性示例 //处理轴类调头的描述问题, newplan:新工艺规程 Void CP_Process_ShiftHead(CPGProcPlanSC *newplan) { CPGOperSC *process; CPGMechStepSC *stepptr;   process = newplan->OperMap.GetAt(proid); if (process->SetupMap.GetSize() < 1) continue;   setupptr = process->SetupMap.GetAt(0); stepptr = setupptr->StepMap.GetAt(0); //采用工序集中方案 if (!gCappSC_CFG.is_converge) if(process->SetupMap.GetAt(0)->StepMap …… 阅读代码的时间比写代码的时间多得多。思路清晰的设计可获得易于理解的程序,但注释、细致的解释以及一些示例往往具有不可估量的价值。 返回


Download ppt "第一课 程序设计方法学绪论 浙江大学计算机学院博士 蔡 铭 电话: , (O), (H)"

Similar presentations


Ads by Google