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

Slides:



Advertisements
Similar presentations
1 计算机软件考试命题模式 计算机软件考试命题模式 张 淑 平 张 淑 平. 2  命题模式内容  组织管理模式 − 命题机构和人员组成 − 命题程序  试卷组成模式.
Advertisements

数据结构的引入. 通讯录管理 社团机构管理 校园导航管理 通讯录管理 社团机构管理 校园导航管理.
面向侧面的程序设计 方林博士 本文下载地址:
哈尔滨工业大学计算机学院 唐好选 软件体系结构 ( 含软件设计模式)
联系方式 课程学习平台网址: 用户名:学号 ; 密码:身份证后 6 位.
《程序设计实践》 孙辉 理工配楼104A
计算机网络教程 任课教师:孙颖楷.
ASP .NET 程序设计(C#版) 第二版 机械工业出版社同名教材 配套电子教案
——Windows98与Office2000(第二版) 林卓然编著 中山大学出版社
药物分析 pharmaceutical analysis
C++面试笔试精要 张立伦 讲师的CSDN博客地址
初级会计电算化 (用友T3) 制作人:张爱红.
四資二甲 第三週作業 物件導向程式設計.
电子信息类专业英语.
Tool Command Language --11级ACM班 金天行.
第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
对 培训者 培训的理解 丁革建
实用操作系统概念 张惠娟 副教授 1.
人工智能技术导论 廉师友编著 西安电子科技大学出版社.
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
第10章 FPGA硬件设计 <EDA技术与应用> 课程讲义
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
Oracle数据库 Oracle 子程序.
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
《数据结构》课程简介 李武军 南京大学计算机科学与技术系 2016年秋季.
计算机基础知识 丁家营镇九年制学校 徐中先.
程序的形式验证 - 简介 中国科学院软件研究所 张文辉 1.
《数据库原理及应用》课程介绍 信息工程学院 孙俊国
                                                                                                                                                                
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
嵌入式系统课程简介 宋健建 南京大学软件学院 2004/02/10.
Computer Graphics 计算机图形学基础 张 赐 Mail: CSDN博客地址:
面向对象建模技术 软件工程系 林 琳.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
鼎捷易飞 实战课程 老卓 ERP资深实施者 讲师的CSDN博客地址
管理信息结构SMI.
数 控 技 术 华中科技大学机械科学与工程学院.
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
湖南大学-信息科学与工程学院-计算机与科学系
分布式程序设计 姚斌 计算机科学与工程系 上海交通大学.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
程序设计工具实习 Software Program Tool
JAVA 编 程 技 术 主编 贾振华 2010年1月.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
$9 泛型基础.
VisComposer 2019/4/17.
程式語言 程式語言發展史 資料型態 程式指令 程序定義和使用.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
北师大版五年级数学下册 分数乘法(一).
JSP实用教程 清华大学出版社 第2章 JSP运行环境和开发环境 教学目标 教学重点 教学过程 2019年5月7日.
<编程达人入门课程> 本节内容 计算机编程语言 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
第八章 总线技术 8.1 概述 8.2 局部总线 8.3 系统总线 8.4 通信总线.
Chapter 18 使用GRASP的对象设计示例.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
Parallel Programming Xuanhua Shi/Pingpeng Yuan
计算机绘图 AutoCAD2016.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_03宽字符与Unicode编程 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
第二节 C语言的特点.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
JAVA 程式設計與資料結構 第三章 物件的設計.
学习数据结构的意义 (C语言版) 《数据结构》在线开放课程 主讲人:李刚
第二章 Java基本语法 讲师:复凡.
IT审计简介 最高审计机关国际组织 IT审计培训 第一讲.
IT 方法 INTOSAI IT 审计培训.
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

本课程的参考文献 《程序设计方法学》胡正国等 国防工业出版社 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月

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

程序 设计 语言

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

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

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

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

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

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

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

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

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

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

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

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

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

谢谢!

结构化与非结构化程序示例 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; 返回

模式化示例——单体 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()); 在不同软件系统设计过程中,存在对大量的同样或相似问题的求解,因此,如何进行设计思想重用,从而实现高质量、高效率、低成本的完成系统开发是“设计模式”解决的问题。 对大量既往软件系统进行比较分析(逆向分析),从中筛选出最优方案,形成一系列模式设计族,以便于再次重用。 程序设计模式化体现了一种“软件再工程” 思想。 返回

程序的可阅读性示例 //处理轴类调头的描述问题, 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 …… 阅读代码的时间比写代码的时间多得多。思路清晰的设计可获得易于理解的程序,但注释、细致的解释以及一些示例往往具有不可估量的价值。 返回