[新大纲] 1 概述.ppt_第1页
[新大纲] 1 概述.ppt_第2页
[新大纲] 1 概述.ppt_第3页
[新大纲] 1 概述.ppt_第4页
[新大纲] 1 概述.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、参考书籍,殷人昆. 数据结构(第2版). 清华大学出版社, 2007 宋力杰. 测量平差程序设计. 国防工业出版社, 2009 C+ Primer(第3/4版) 严蔚敏,吴伟民. 数据结构. 清华大学出版社. 2011 曹德欣, 曹缨珞. 计算方法(第二版).中国矿业大学出版社, 2001(数值分析类书均可以选择参考!) 吴立新, 史文中. 地理信息系统原理与算法. 科学出版社, 2003,先修课程,C/C+程序设计(数据结构) 线性代数,高等数学(计算方法/数值分析) 误差理论与测量平差(算法设计模型),课程设置的目的与任务,了解测绘行业软件发展的最新动态,认识软件危机产生的基本原因及其克服

2、软件危机的基本思路与方法; 掌握测绘数据管理常用的数据结构; 初步了解并熟练掌握测绘软件开发过程中所涉及的基本数值计算方法; 了解软件工程的基本思想,熟悉生命周期法在测绘软件设计与开发过程中各个阶段的基本职能; 掌握不同类型的典型测绘软件设计方法,使得学生初步具备编写测绘软件常用算法的能力以及开发中小规模测绘专业软件的能力。,内容划分及学时安排(32学时),第一部分:概述(2学时) 第二部分:数据结构(1416学时) 泛型程序设计与STL(24学时) 第三部分:数值分析/计算方法(8学时) 第四部分:实例(2学时),考核方式,闭卷 最终成绩 考试70%80% 平时20%30%,第一部分 概述,

3、主讲教师:王永波 中国矿业大学环境与测绘学院 2014年2月24日,提纲,软件与软件危机 软件工程方法学 C+的部分功能,一、软件与软件危机,1、软件的定义及其分类,软件 一系列按照特定顺序组织的计算机数据和指令的集合 软件是程序、数据及相关文档的完整集合 程序设计的最终结果是软件 软件分类 系统软件:操作系统和支撑软件 Dos、Windows、Unix、Mac OS、Visual Studio.Net等 应用软件:为了特定的目的而开发得到的软件Office、 Photoshop、AutoCAD等,2、软件危机及其主要表现,软件危机的定义 在计算机软件的开发和维护过程中遇到的一系列严重问题 “

4、软件开发的高成本与低质量之间的矛盾” 软件危机的主要表现 对软件开发成本和进度的估计难以控制 用户对“已完成的”软件系统不满意的现象经常发生 软件产品的质量往往靠不住 软件常常是不可维护的 软件通常没有适当的文档资料 软件成本在计算机系统总成本中所占的比例逐年上升 软件开发生产率提高远远跟不上计算机应用迅速普及的速度,二、软件工程方法学,1、定义,方法学 通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范性。 软件工程的方法学包括三个要素 方法 完成软件开发各项任务的技术方法 工具 为运用方法而提供的、自动或半自动的软件工程支撑环境 过程 一系列任务的框架,规定了完成各

5、项任务的工作步骤,2、软件工程方法学的分类,结构化(面向过程的)方法 工具:C、Pascal 缺点:对象和操作相分离 面向对象的方法 工具:C#,Java C+兼有面向过程和面向对象的特点,2、软件工程方法学的分类,结构化(面向过程的)方法 着眼于系统要实现的功能 从系统的输入、输出为出发点,确定系统的模块结构 自顶向下,逐步进行功能分解(功能模块) 缺点:对象和操作相分离,系统维护工作量大,2、软件工程方法学的分类,面向对象的方法 着眼于解决问题所涉及的对象及其对象间的关系 确定对象间的层次结构(继承关系+通信机制) 优点:易于维护,3、面向对象的方法学,对象 类 继承性 封装性,3.1 对

6、象和类的定义,对象 融合了数据及数据上的操作行为的统一的软件构件 属性(对象的状态)+操作(对属性的行为服务) 注意:程序中任何元素都是对象 复杂对象由比较简单的对象组合而成,3.1 对象和类的定义,类 具有相同属性和服务(操作)的对象统称为类 每个类都定义了一组数据和一组操作,类是对具有相同数据和相同操作的一组相似对象的定义 所有对象都划分成类 属性:用于表达对象的状态信息(静态) 服务:施加于属性之上,用于实现对象行为的(动态)操作,3.2 对象和类的解释,对象 一切事物都是对象 类 性质相似的一组实体构成类 类是对这组对象的抽象描述 每个对象都是该类的一个实例 举例 “人”是一个类 中国

7、人、美国人、男人、女人等都是一个对象,3.3 对象和类的例子,类名 例如:车 数据 类的属性:描述类的静态特性 例如:轮胎、发动机、行驶方向 操作 类的操作:描述类的动态特性 例如:启动、行驶、刹车,class Vehicle /类名是Vehicle string direct; /类的属性 void run( direct ); /类的操作 ,3.4 继承,按照父类与子类的关系,把若干个相关类组成一个层次结构的系统 子类自动拥有上层基类中的数据和操作,这种现象称为继承 例子: 从父类继承来的属性和操作是一样的 此外,子类可以有各自的属性和操作,class Lorry : Vehicle vo

8、id load (货物); ,class Car : Vehicle void load (人); ,3.4 继承,class Baseprivate:int b_num;public:Base( ) Base() Base(int i) : b_num (i) int get_num( ) return b_num; void print( ) cout b_num; cout endl; ;,22,class Derived : public Base private: int d_num; public: Derived( int i, int j ) :Base(i), d_num(j

9、) void print( ) cout get_num() ; cout d_num endl; ;,3.4 继承,int main( ) Base a(2); Derived b(3, 4); cout a is ; / print( ) in Base a.print( ); cout b is ; / print( ) in Derived b.print( ); cout base part of b is ; / print( ) in Base b.Base:print( ); return 0;,23,程序运行结果输出: a is 2 b is 3 4 base part of

10、 b is 3,3.5 封装,对象与传统数据有本质区别 传统数据是被动地等待外界对它施加操作 对象是数据处理的主体 对象的所有信息都被封装在该对象内,不能从外界直接访问,这就是通常所说的封装性,3.5 封装,实质 隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别 目的 增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员,25,3.5 封装,例子: 1号车行驶方向? 2号车行驶方向? 实例 Car car1; car1.direction = east; Car car2; car2.direction = w

11、est; car1.run(direction); car2.run(direction);,三、C+的部分功能,3.1 动态存储与分配动态数组,new函数:负责分配空间 定义大小为100的一维动态数组 double *xArray; xArray = new double100; 定义大小为100*50的二维动态数组 double *yArray; yArray = new double*100; for (int i = 0; i 50; i+) yArrayi = new double 50;,28,3.1 动态存储与分配动态数组,delete函数:负责释放动态分配的空间 释放定义的大小

12、为100的一维动态数组 delete xArray; 释放定义的大小为100*50的二维动态数组 for (int i = 0; i 100; i+) delete yArrayi; delete yArray;,29,3.2 友元函数,在类的声明中使用保留字friend定义友元函数 可以是一个常规函数,也可以是另一个类的成员函数 通过友元函数对当前类的私有成员和保护成员进行存取访问 在类的声明中给出函数的原型,并在该函数原型前面加上一个friend e.g. friend istream,30,3.3 模板,所谓模板是一种使用无类型参数来产生一系列函数或类的机制。 若一个程序的功能是对某种特

13、定的数据类型进行处理,则可以将所处理的数据类型说明为参数,以便在其他数据类型的情况下使用,这就是模板的由来。 模板是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。 通过模板可以产生类或函数的集合,使它们操作不同的数据类型,从而避免需要为每一种数据类型产生一个单独的类或函数。,31,引例模版,设计一个求两参数最大值的函数 int max(int a , int b) return (a b)?a, b; long max(long a , long b) return ( a b ) ? a , b ; double max(double a, double b) r

14、eturn (a b)?a, b; char max (char a , char b) return (a b)?a, b; 这些函数几乎相同,唯一的区别就是形参类型不同 需要事先知道有哪些类型会使用这些函数,对于未知类型这些函数不起作用,3.3.1 模板分类,函数模板(function template) 是独立于类型的函数 可产生函数的特定版本 类模板(class template) 跟类相关的模板,如vector 可产生类对特定类型的版本,如vector,3.3.2 求最大值函数模板实现,求两个数最大值,使用模板 template T max(T a , T b) return (a

15、b) ? a , b; template (模板函数形参表) /函数定义体 ,3.3.3 模板函数工作方式,函数模板只是说明,不能直接执行,需要实例化为模板函数后才能执行 在说明了一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中对应的形参,然后生成一个重载函数。该重载函数的定义体与函数模板的函数定义体相同,它称之为模板函数,3.3.4 模板函数实例,编写一个对具有n个元素的数组a 求最小值的程序,要求将求最小值的函数设计成函数模板,#include using namespace std; template T min(T a,int n) in

16、t i; T minv=a0; for( i = 1;i ai) minv=ai; return minv; ,void main() int a=1,3,0,2,7,6,4,5,2; double b=1.2,-3.4,6.8,9,8; cout”a数组的最小值为:” min(a,9) endl; cout”b数组的最小值为:” min(b,4)endl; 此程序的运行结果为: a数组的最小值为:0 b数组的最小值为:-3.4,3.3.5 模板函数优缺点,函数模板方法克服了C语言解决上述问题时用大量不同函数名表示相似功能的坏习惯 克服了宏定义不能进行参数类型检查的弊端 克服了C+函数重载用相

17、同函数名字重写几个函数的繁琐 缺点,调试比较困难 一般先写一个特殊版本的函数 运行正确后,改成模板函数,3.3.6 类模板栈的定义,template class Stack private: int top; / 栈顶指针 Type *elements; / 栈元素数组 int maxSize; / 栈最大容量 public: Stack ( int = 10 ); / 构造函数 Stack ( ) delete elements; void Push ( Type / 进栈,38,3.3.6 类模板栈的定义,Type Pop ( ); / 出栈 Type GetTop ( ); / 取栈顶 void MakeEmpty ( ) / 置空栈 top = -1; int IsEmpty ( ) const return top = -1; int IsFull ( ) const return top = maxSize-1; ,39,3.3.6 类模板栈的实现,template Stack :Stack ( int s ) : top (-1) , maxSize (s) elements = new TypemaxSize;assert ( el

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论