第一章
程序设计方法学(Programming Methodology)有两种含义:
一种是以程序设计方法为研究对象的学科,它不仅研究各种具体的方法,而且着重研究各种具体方法的共性,涉及规范的全局性方法,以及这些方法的显示背景和理论基础;
另外一种含义是针对某一领域或某一领域的一类特定问题,所用的一整套特定程序设计方法所构成的体系 程序设计的基本特征
结构化、模块化、对象化 (OOP,Object Oriented Programming)、智能化 (AOP, Agent Oriented Programming) 怎么做出优秀的程序
(1) 系统分析、系统设计、设计风格、编码、调试、测试(2)数据结构和
算法(3)维护性、通用性、灵活性、性能均衡性 优秀程序的要素:
(1)正确性;结构化;模块化;可重用(2)可维护;可变化;可管理;可测试 (3)性能均衡 程序设计方法:就是使用在计算机上可执行的程序代码来有效地描述解决特定问题算法的过程。
程序设计方法的发展:面向计算机的程序设计(注重机器,逐一执行)——面向过程的程序设计(自顶向下,逐步求精)——面向对象的程序设计(注重对象,抽象成类)——面向组件的程序设计(注重重用)——面向Agent的程序设计(注重自治) 其他程序设计方法(递归、嵌入式)
程序设计语言:过程设计语言(PDL)PDL具有以下特点:关键字的固定语法、自然语言的自由语法、数据说明的手段、模块定义和调用的技术 程序设计的基本方法要素:程序分析和综合程序设计、算法设计与数据结构设计、程序设计方法。
基本的程序结构:顺序结构、选择结构、循环结构、跳转结构 程序分析与综合程序设计
(1) 抽象程序 (2)观察客观事物(3)程序的灵活性 算法设计 所谓算法,是指为解决给定问题而需要执行者一步一步施行的有穷操作过程的描述。
一个算法,必须具有有穷性、确定性、数据输入、信息输出和可执行五种基本特征。
程序设计的表示方法分为:
(1) 图形(程序流程图) (2)表格(判定表,它有四部分组成:所有条件、所有动作、条件组合及其对应动作) (3)语言(过程设计语言) 判定树的优点是形式简单、较直观、易于掌握和使用; 判定树的缺点是简洁性不如判定表、重复多。
第二章 程序算法及图灵机模型
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。
定理:gcd(a,b) = gcd(b,a mod b)
图灵:计算机理论之父。 计算机界最高荣誉奖:ACM图灵奖 什么是计算?
广义上讲,一个函数变化如把x变成了f(x)就是一个计算!如果我们把一切都看作是信息,那么更精确的讲,计算就是对信息的变换!
图灵机是一个理论计算机模型,主要用于计算。 图灵机是一个计算的装置,因为图灵机也是一个会对输入信息进行变换给出输出信息的系统。(图灵机用于计算的例子:构造一个图灵机,完成对一个自然数加1的运算。) 在证明了不存在决定图灵机停机问题的算法的基础上,图灵指出,不存在决定数学问题的一般算法。希尔伯特的判决问题没有解答。
第三章 结构化程序设计方法
结构化程序设计,就是采用以逐步降低算法抽象级为中心的一套程序设计方法而得到的具有良好结构的程序。 面向过程的缺点
缺乏数据和代码保护机制,缺乏代码重用机制 优点:(1)程序便于分工编制(2)有利于提高软件的生产效率(3)结构清晰,易于阅读理解和保证其可靠性(4)易于修改,便于维护和验证其正确性(5)易于移植
一个比较好的结构程序在结构方面应具有以下两个特点: (1)大型程序按照其功能进行模块化分
(2)每一个基本程序单元具有的特征:① 单入口、单出口 ② 由三种基本结构组成,控制使用goto语句 ③ 无死语句,即程序中不存在永远执行不到的语句 ④ 无死循环 ⑤ 书写格式清晰
基本程序(不可再分解的正规程序)
(1) (2)序列
(3)If then (4)while do
(5)do while (6)do while do
(7)if then else
在一个强连通图G中,线性无关的环路数最大值V(G)=e-n+1。其中,e为图G的弧数,n为结点数
一个结构化程序可退化成最大环路数为1的程序。这种退化过程是消除程序结构中只有一个入口结点和一个出口结点的子图过程。 正则子图是仅含顺序、选择、循环的子图。ev=V(G)-m 一个结构化程序的本质复杂性ev为1。
判别一个软件是否满足结构化程序设计标准的要求:
① 每个程序单元是否有单一入口和单一出口结点;② 是否有转入(出)循环或判定的情形;③ 计算程序的本质复杂性;④ 检验结构化程序设计标准的其他要求。
第四章 面向对象的程序设计方法
面向对象的设计方法与传统的面向数据/过程的方法有本质不同, 这种方
法的基本原理是:对问题领域进行自然分解, 按照人们习惯的思维方式建立问题领域的模型, 模拟客观世界, 从而设计出尽可能直接、自然地表现问题求解方法的软件。
优点:符合认识论观点、能尽量逼真的模拟客观世界及其事物、先进的开发方法、
软件适应性广、设计观点的改变与更新
缺点:描述的局限性、具体实现困难 面向对象程序设计的方法与步骤 OOA ( Object Oriented Analysis) 面向对象的分析
OOD(Object Oriented Design) 面向对象的设计
OOI(Object/Oriented/Implementation)面向对象的实现
P116面向对象程序设计方法的软件模式: 代码模式Coding Pattern 、架构模式(MVC)Architectural Pattern 、设计模式 Design Pattern。
简单工厂模式
#include using namespace std; #include #include class COperation{ protected:
double Operand1,Operand2,Result; public:
COperation() {
Operand1=0; Operand2=0; Result=0; }
void SetOperand1(double op1) {
Operand1=op1; }
double GetOperand1() {
return Operand1; }
void SetOperand2(double op2) {
Operand2=op2; }
double GetOperand2() {
return Operand2; }
virtual double GetResult() { return Result; } };
//加法类
class COperationAdd:public COperation{
virtual double GetResult() {
Result = Operand1+Operand2; return Result; } };
class COperationSub:public COperation{
virtual double GetResult() {
Result = Operand1-Operand2; return Result; } };
class COperationMul:public COperation{ virtual double GetResult() {
Result = Operand1*Operand2; return Result; } };
class COperationDiv:public COperation{ virtual double GetResult() {
if (fabs(Operand2)>0)
Result = Operand1/Operand2; else
cout
//简单类工厂模式 //运算类工厂 //
class OperationFactory {
COperation *oper; public:
OperationFactory() {
oper = NULL; }
COperation *createOperate(char operate) {
switch (operate) {
case '+': { oper = new COperationAdd(); break; } case '-': { oper = new COperationSub(); break; } case '*': { oper = new COperationMul(); break; } case '/': { oper = new COperationDiv(); break; } }
return oper; } };
void main() {
double Operand1,Operand2,Result=0; char Operator; COperation *Calc;
OperationFactory Factory;
cout>Operand1,cin.fail()) {
cout
cin.clear(); //清除std::cin的错误状态 cin.sync(); //清空输入缓冲区 }
cout>Operator;
cout>Operand2,cin.fail()) {
cout
cin.clear(); //清除std::cin的错误状态 cin.sync(); //清空输入缓冲区 }
//用简单类工厂模式创建对象
Calc = Factory.createOperate(Operator);
Calc->SetOperand1(Operand1); //动态多态性的体现 Calc->SetOperand2(Operand2); Result=Calc->GetResult();
cout
第一章
程序设计方法学(Programming Methodology)有两种含义:
一种是以程序设计方法为研究对象的学科,它不仅研究各种具体的方法,而且着重研究各种具体方法的共性,涉及规范的全局性方法,以及这些方法的显示背景和理论基础;
另外一种含义是针对某一领域或某一领域的一类特定问题,所用的一整套特定程序设计方法所构成的体系 程序设计的基本特征
结构化、模块化、对象化 (OOP,Object Oriented Programming)、智能化 (AOP, Agent Oriented Programming) 怎么做出优秀的程序
(1) 系统分析、系统设计、设计风格、编码、调试、测试(2)数据结构和
算法(3)维护性、通用性、灵活性、性能均衡性 优秀程序的要素:
(1)正确性;结构化;模块化;可重用(2)可维护;可变化;可管理;可测试 (3)性能均衡 程序设计方法:就是使用在计算机上可执行的程序代码来有效地描述解决特定问题算法的过程。
程序设计方法的发展:面向计算机的程序设计(注重机器,逐一执行)——面向过程的程序设计(自顶向下,逐步求精)——面向对象的程序设计(注重对象,抽象成类)——面向组件的程序设计(注重重用)——面向Agent的程序设计(注重自治) 其他程序设计方法(递归、嵌入式)
程序设计语言:过程设计语言(PDL)PDL具有以下特点:关键字的固定语法、自然语言的自由语法、数据说明的手段、模块定义和调用的技术 程序设计的基本方法要素:程序分析和综合程序设计、算法设计与数据结构设计、程序设计方法。
基本的程序结构:顺序结构、选择结构、循环结构、跳转结构 程序分析与综合程序设计
(1) 抽象程序 (2)观察客观事物(3)程序的灵活性 算法设计 所谓算法,是指为解决给定问题而需要执行者一步一步施行的有穷操作过程的描述。
一个算法,必须具有有穷性、确定性、数据输入、信息输出和可执行五种基本特征。
程序设计的表示方法分为:
(1) 图形(程序流程图) (2)表格(判定表,它有四部分组成:所有条件、所有动作、条件组合及其对应动作) (3)语言(过程设计语言) 判定树的优点是形式简单、较直观、易于掌握和使用; 判定树的缺点是简洁性不如判定表、重复多。
第二章 程序算法及图灵机模型
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。
定理:gcd(a,b) = gcd(b,a mod b)
图灵:计算机理论之父。 计算机界最高荣誉奖:ACM图灵奖 什么是计算?
广义上讲,一个函数变化如把x变成了f(x)就是一个计算!如果我们把一切都看作是信息,那么更精确的讲,计算就是对信息的变换!
图灵机是一个理论计算机模型,主要用于计算。 图灵机是一个计算的装置,因为图灵机也是一个会对输入信息进行变换给出输出信息的系统。(图灵机用于计算的例子:构造一个图灵机,完成对一个自然数加1的运算。) 在证明了不存在决定图灵机停机问题的算法的基础上,图灵指出,不存在决定数学问题的一般算法。希尔伯特的判决问题没有解答。
第三章 结构化程序设计方法
结构化程序设计,就是采用以逐步降低算法抽象级为中心的一套程序设计方法而得到的具有良好结构的程序。 面向过程的缺点
缺乏数据和代码保护机制,缺乏代码重用机制 优点:(1)程序便于分工编制(2)有利于提高软件的生产效率(3)结构清晰,易于阅读理解和保证其可靠性(4)易于修改,便于维护和验证其正确性(5)易于移植
一个比较好的结构程序在结构方面应具有以下两个特点: (1)大型程序按照其功能进行模块化分
(2)每一个基本程序单元具有的特征:① 单入口、单出口 ② 由三种基本结构组成,控制使用goto语句 ③ 无死语句,即程序中不存在永远执行不到的语句 ④ 无死循环 ⑤ 书写格式清晰
基本程序(不可再分解的正规程序)
(1) (2)序列
(3)If then (4)while do
(5)do while (6)do while do
(7)if then else
在一个强连通图G中,线性无关的环路数最大值V(G)=e-n+1。其中,e为图G的弧数,n为结点数
一个结构化程序可退化成最大环路数为1的程序。这种退化过程是消除程序结构中只有一个入口结点和一个出口结点的子图过程。 正则子图是仅含顺序、选择、循环的子图。ev=V(G)-m 一个结构化程序的本质复杂性ev为1。
判别一个软件是否满足结构化程序设计标准的要求:
① 每个程序单元是否有单一入口和单一出口结点;② 是否有转入(出)循环或判定的情形;③ 计算程序的本质复杂性;④ 检验结构化程序设计标准的其他要求。
第四章 面向对象的程序设计方法
面向对象的设计方法与传统的面向数据/过程的方法有本质不同, 这种方
法的基本原理是:对问题领域进行自然分解, 按照人们习惯的思维方式建立问题领域的模型, 模拟客观世界, 从而设计出尽可能直接、自然地表现问题求解方法的软件。
优点:符合认识论观点、能尽量逼真的模拟客观世界及其事物、先进的开发方法、
软件适应性广、设计观点的改变与更新
缺点:描述的局限性、具体实现困难 面向对象程序设计的方法与步骤 OOA ( Object Oriented Analysis) 面向对象的分析
OOD(Object Oriented Design) 面向对象的设计
OOI(Object/Oriented/Implementation)面向对象的实现
P116面向对象程序设计方法的软件模式: 代码模式Coding Pattern 、架构模式(MVC)Architectural Pattern 、设计模式 Design Pattern。
简单工厂模式
#include using namespace std; #include #include class COperation{ protected:
double Operand1,Operand2,Result; public:
COperation() {
Operand1=0; Operand2=0; Result=0; }
void SetOperand1(double op1) {
Operand1=op1; }
double GetOperand1() {
return Operand1; }
void SetOperand2(double op2) {
Operand2=op2; }
double GetOperand2() {
return Operand2; }
virtual double GetResult() { return Result; } };
//加法类
class COperationAdd:public COperation{
virtual double GetResult() {
Result = Operand1+Operand2; return Result; } };
class COperationSub:public COperation{
virtual double GetResult() {
Result = Operand1-Operand2; return Result; } };
class COperationMul:public COperation{ virtual double GetResult() {
Result = Operand1*Operand2; return Result; } };
class COperationDiv:public COperation{ virtual double GetResult() {
if (fabs(Operand2)>0)
Result = Operand1/Operand2; else
cout
//简单类工厂模式 //运算类工厂 //
class OperationFactory {
COperation *oper; public:
OperationFactory() {
oper = NULL; }
COperation *createOperate(char operate) {
switch (operate) {
case '+': { oper = new COperationAdd(); break; } case '-': { oper = new COperationSub(); break; } case '*': { oper = new COperationMul(); break; } case '/': { oper = new COperationDiv(); break; } }
return oper; } };
void main() {
double Operand1,Operand2,Result=0; char Operator; COperation *Calc;
OperationFactory Factory;
cout>Operand1,cin.fail()) {
cout
cin.clear(); //清除std::cin的错误状态 cin.sync(); //清空输入缓冲区 }
cout>Operator;
cout>Operand2,cin.fail()) {
cout
cin.clear(); //清除std::cin的错误状态 cin.sync(); //清空输入缓冲区 }
//用简单类工厂模式创建对象
Calc = Factory.createOperate(Operator);
Calc->SetOperand1(Operand1); //动态多态性的体现 Calc->SetOperand2(Operand2); Result=Calc->GetResult();
cout