已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章 程序设计基本特点1.1 软件的发展1.1.1 从程序设计到软件工程计算机(computer)是能以相对于人而言几百万甚至几十亿倍速度进行运算并作出逻辑判断的设备。计算机按照一组指令控制下的运行过程(由“算法”规定)来处理数据(data) ,这组指令称为计算机程序(computer program) 。编写这组指令的工作称为程序设计(programming) 。大约在二十世纪七十年代,程序设计发展为软件工程。软件可定义为包括计算机程序、方法、规则、相关的文档资料以及计算机运行所需数据。软件工程曾由 Boehm 下定义为:“运用现代科学技术知识设计并构造计算机程序和为开发、运行和维护这些程序所必需的相关文件资料” 。程序设计和软件工程两者区别大致如下:主要特点 程序设计 软件工程内容 指令和数据 指令、数据和全套文档主要语言 汇编语言和高级语言 需求定义、软件功能、文档设计和程序设计语言等工作范围 编写程序 软件生命周期各阶段 (以下将简单介绍)需求者 个别用户 市场用户开发者 编程人员本人 开发组织或团队软件规模 微型、小型 小、中型乃至大型决定质量因素 个人技术水平 管理水平开发技术和手段 程序库 数据库、工程化开发方法、标准和规范、面向对象技术维护者 编程人员本人 专职软件维护队伍硬件特征 容量小、速度慢、可靠性 差 超高速、特大容量、微型化、网络化软件开发过程(软件生命周期)分为互相重叠的三个阶段:(一) 开发与设计(development and design):它大致可分为四部分:1. 分析问题。2. 研究解决方案。3. 方案的代码化,也即编写程序,简称编程(programming) 。4. 程序的测试和修改。(二) 编写文档(documentation) 。软件开发过程中涉及众多文档,例如需求说明书、可行性分析、实施计划、概要设计说明书、用户手册等等。这是软件工程的一个重要环节,也是软件工程与以前普通程序设计的一个重要区别。(三) 维护(maintenance) 。这是三个阶段中耗时最长、费用最多的。最典型的例子是“Y2K(2000 千年虫)问题” ,曾拖延十多年之久。问题源自上世纪许多程序只用两位数表示年份,因而遇到 50 时就无法辨别它是 1950 还是 2050。不少公司花费大量精力修改数十年来运行的程序,以使它们能在新世纪中成功地运行。我们这门课只是上述各阶段中的一小部分,主要是第一阶段中的第三项编程工作。1.1.2 程序设计语言的五种形式程序设计语言在发展过程中可分为五种形式:1. 机器语言(machine language): 以0和1表示 手工操作2. 汇编语言(assembler language): 稍微接近人的语言,例如mov ax,100add ax,bx 开始使用批处理(batch processing)功能。3. 高级编程语言(high-level programming language): 更接近于人类语言,但使用仍不方便 如60年代的ALGOL 等4. 面向过程的程序设计语言(procedure-oriented programming language):有时也称过程式程序设计语言(procedural programming language)或结构化程序设计(structured programming language)语言。目前仍在部分使用中。 结构化程序设计的产生和发展形成了现代软件工程的基础。 编程是面向过程的(procedure-oriented)或面向操作的(action-oriented),编程单位是函数(function,也称子程序)。 整个程序是一个模块层次(hierarchy of modules),按功能划分为多个基本模块,各模块之间关系尽可能简单,其功能相对独立,自顶向下进行功能分解。 每一模块内既有数据,又有代码(code) ,函数代码按一定算法进行运算。 如FORTRAN、C、PASCAL语言等。5. 面向对象的程序设计(Object-Oriented Programming, OOP) 语言:面向过程的程序设计具有以下缺点: 无法保护数据。 限制了软件的可重用性,降低了软件开发效率,软件修改困难,因此难于维护软件。 软件功能固定,无法扩充功能。 功能与数据分离,不易保持功能与数据的相容性。为解决以上问题,人们进而开发面向对象技术,提出了面向对象的程序设计方法。上述缺点都能得以克服。详见下节。目前人们使用的面向对象的程序设计语言实际上沿用了不少结构化程序设计语言的功能,例如以后可知,C+就沿用了不少 C 语言的功能。1.2 面向对象的程序设计1979年美国贝尔实验室的Bjarne Stroustrup开发了C+语言,但直至 1998年9月才由国际标准化组织(ISO ,International Standards Organization)正式发布了 C+的语言定义。1.2.1 编程语言特征面向对象编程语言直接描述有关域中的对象及其相互关系。它以客观世界中所存在的事物为依据,较为接近人们的思维方式,具有如下特征:(1) 客观世界由一系列事物组成,每个事物的特性被抽象出来后分别由一组属性和一组操作(方法)来描述。例如汽车及其驾驶和牛车及其驾驭是不同的。这类事物就是面向对象编程语言中的类(class)及其对象(object) 。(2)客观世界的各事物可按其共性分为各个类(称为基类,如人、车、鸟等) ,这些类是具有基本共性的各事物的集合,它是面向对象语言中相对独立的程序单位,是这些事物的统一抽象。(3)不同事物除具有基类的共性之外,还具有各自的个性。因此应由具有不同的属性和操作的特殊类加以描述。这些特殊类(称为派生类)通过继承机制继承基类的共性(如汽车、拖拉机、坦克都继承“车”的共性) ,但派生类又各有自己的个性。面向对象编程是面向对象的(object-oriented),编程单位是类(class)。1.2.2 优越性面向对象的程序设计至少能解决结构化程序设计语言(例如 C 语言)中以下四个无法解决的问题:(A) 数据的保护(数据的封装):在面向过程的编程语言中,编程单位是函数,它们用于实施一定算法,对所有数据进行操作。这就是Nicholase Wirth(Pascal 编程语言的设计者)所提出的公式:算法 + 数据结构 = 应用程序这种编程方法无法对全局变量加以控制:有时要求只有一个函数独家对全局数据进行赋值和读取,而不准其它函数访问它。这在面向过程的编程语言中无法做到,由于这些全局变量谁都可以读、可以写。因此软件工程规定应该尽少使用全局数据(全局变量) 。但在面向对象的编程语言中,可以通过数据封装对数据加以保护,只允许被授权者对数据读取或赋值,从而实现上述要求。此点详见第三章。(B)复杂程序中程序代码的可重用性(re-usability):先看个简单例子。Windows 操作系统允许用户在他自己的程序中设计不同窗口,如同 Windows 操作系统的窗口一样(参见第九章) 。但又绝对不允许用户修改 Windows 提供的代码,而且用户也没有能力修改。实际上用户根本不必修改 Windows 的代码,只需将自己的程序模块贴上去,即可在他自己的程序中设计并实现不同窗口。复杂程序不但庞大,而且复杂。其复杂性表现在:必须由多个梯队合作完成编程,因而管理比较困难;不易处理各种系统状态之间的正确切换;设计周期很长;不易维护。复杂程序不单要求运行正确,还须容易维护、具有好的可读性和可重用性。好的可重用性允许新的用户程序使用原有复杂程序中一部分甚至于大部分已有功能以及大量的通用模块,但又绝对不在原有程序中引进任何错误。这将能节省大量费用、极大地缩短开发周期和减少程序的复杂性。当解决这个问题时,在面向过程的编程语言中只能将原有程序部分地或全部地复制过来,接着加以改写,这极易引进错误。但在面向对象的编程语言中,不必进行复制,只须通过继承机制和多态性功能即可使用原有复杂程序中一部分甚至于大部分已有功能,实现可重用性。同时还引进新功能。详见第四章和第五章。(C)同一方法(操作)具有多种功能(软件多功能):以上提到,新的用户程序可以继承并再次使用复杂程序中大量通用模块以及一部分甚至于大部分它们的现有功能。但仅这一点是远远不够的,它还必须具有为原有函数补充新功能的能力。面向过程的编程语言并不具备此类能力。而在面向对象的编程语言中,新程序能够将继承来的方法重新定义,修改、补充旧功能或增加新功能,同时又绝对不允许修改原有程序代码(因原有程序十分复杂),从而不会在原有程序中引进错误。这时可以通过继承性重用大部分原有程序代码,而同时又允许用户通过多态性对此方法补充新功能,以便该方法在不同情况下发挥不同功能。这就是多态性。详见第五章、第六章和第七章。以上两种功能例见第九章的 FigureDraw.exe、SplitRandom.exe、TreeCtrl.exe 和ADO_HostelTree.exe(带有数据库文件 Hostel.mdb) 。(D)数据与程序的相容性 (consistency) 类型安全性(type-safety):这个功能较小,但却有用。例 1在面向过程的编程语言 C 语言中,可能出现输出语句中的类型错误。include void main( )int i=3;double d=4.4;printf(“%dt%fn”, i, d);运行结果:3 4.400000 对!但如写错为:printf(“%dt% d n”, i, d);则编译时不出错,但运行结果错,为:3 26214,其原因是不同类型的数据的字长不同(见第二章) 。但在面向对象的编程语言 C+中,如使用:coutvoid main( )int i=3;double d=4.4;printf(“%dt%fn”, i, d);运行结果:3 4.4C程序中一般还有其它函数(即子程序)如以下程序中的add( ):例2带有子函数的C语言程序#include int add(int i, int j)int a;a = i + j;return a;void main( )int i = 3, j = 4, a;a = add ( i, j);printf(“%d”, a);运行结果:7可以看出,语句(statements)是程序的基本单元。每条语句由操作数和运算符组成,用分号结束。操作数可以是变量、常量或表达式。C 语言和 C+中的运算符 (operator)用于规定对操作数进行运算操作的运行方式,分为三类:1. 一元运算符(或称单目运算符):作用于一个操作数,又可分为前缀运算符和后缀运算符。它们使用时分别放置于操作数的前面和后面。如 i+或+j ,!d 。2. 二元运算符(或称双目运算符):作用于两个操作数,它们使用时放置于两个操作数之间。如 a = b,c + d。3. 三元运算符(或称三目运算符):作用于三个操作数。C 和 C+中仅有一个,即“条件运算符 ? :”(见第二章2.4.1.2 ) 。以上是 C 语言的结构特点,而 C+语言的结构特点则有同、有不同。表现为:C 语言的编程单位是函数(function) ,这是 C 语言的重点。一组完成类似任务的语句(操作)用于组成函数,而一批函数又组成程序。C 语言中的数据只用于支持函数所要完成的操作。而 C+语言的编程单位是类(class) 。C+ 程序中既要考虑函数,又要考虑数据,须将它们有机地组织起来(即封装) ,成为新的编程单位,称为 “类” 。C 和 C+程序的相同处在于:都由若干个文件组成。但其文件组成则不同。C 语言的每个文件由若干个函数组成,各函数是相对独立的程序段,这些函数中只有一个是主函数(主程序) 。C+语言的每个文件中由若干个类组成,而绝大部分函数都包含在类中。同样只有一个主函数。下例中整个 C+程序由 5 个源文件组成,各源文件的长度都不同。它们是:test1.cpp、test2.cpp、test3.cpp、test4.cpp 和 test5.cpp。以上各源文件并不一定彼此紧挨着,同时其顺序也常是随意的。而任何一个源文件中又可包括以下内容:文件一test1.cpp文件二test2.cpp文件三test3.cpp文件四test4.cpp文件五test5.cpp整个程序的全部文件的所有独立函数中必定有也只能有一个主函数 main( )。除头文件一般在源文件的首部外,其他类、独立函数和变量的顺序可以随意安排。在很多程序中,各种类的声明(个别情况下也有类定义)都包含在不同头文件中。1.3.2 C程序的实现(一)建立项目( project,或称工程)任何一个程序必须先建立项目,然后才能在 此项目下展开各种活动。本课程(对应于课件上册)只须建立简单项目即可。其步骤如下:(1)在 C+2003 开发平台上,使用组合键 Ctrl + N,点击并调出“新建项目”对话框,选择“项目类型”为“Win32 ”;在模板中选择“Win32 控制台项目” 。在“名称”中填入项目名称例如 aaa。(2)单击“确定”按钮,进入“Win32 应用程序向导” 对话框,点击左侧的“应用程序设置”选项,右侧即显示更多设置选项。(3)选择右侧“附加选项:” 名下的“空项目”复选项,单击“完成”按钮。项目已经建成。名为例如aaa 的文件夹配置于文件夹“Visual Studio Projects”之下。但它不包含任何文件。从“解决方案资源管理器”窗口可以看出这点。如此窗口未出现,可点击子菜单“视图 | 解决方案资源管理器”选项。如欲建立源文件。则可用鼠标右键点击“源文件” ,即出现选项卡,可点击“添加 | 添加新项” ,即出现“添加新项”对话框,选择左侧“类别:”中的“代码” ,右侧“模板: ”中的“C+文件 (.cpp)”。在“名称”框内填入源文件名称,例如 test1。点击“打开”按钮即可。如果一个项目中希望包含多个文件,则可重复上述步骤。(二)源程序文件的编辑过程(editing)在 C+开发平台上出现空白文件,即 aaa.cpp。用户可手工写入,更多时候应可从它处复制过来,再进行修改。这样就形成了源文件(source files) ,文件名称的后缀为 cpp,例如 test1.cpp。用户可随意编写和修改。(三)两遍编译过程(two-pass compiling)大部分编程语言采用单遍编译过程,但C 和C+ 语言却都采用两遍编译过程:(1)第一遍(first pass):将源程序文件编译为中间语言(IL,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030智慧社区服务平台商业模式创新研究
- 2025-2030智慧矿山建设项目市场供需平衡及投资机会部署分析
- 2025-2030智慧电网设备运行监测与维护分析
- 杭州市人民医院双镜联合技术准入与协作考核
- 2025-2030智慧物流行业运作环境梳理资金驱动体系规约
- 2025-2030智慧物流行业市场发展现状深度研究及投资机遇前景预测分析报告
- 2025-2030智慧物流行业市场供需现状分析及投资策略规划报告
- 2025-2030智慧物流机器人制造行业市场供需调研及产业投资评估规划研究
- 2025-2030智慧物流体系建设研究及供应链协同创新与效率提升策略建议
- 2025-2030智慧物流仓储体系建设供需分析及投资可行性评估报告
- 2025全国学生学宪法讲宪法知识竞赛题库及答案
- 2025年9月浙江嘉兴海宁市通程港口经营有限公司招聘3人备考考试题库附答案解析
- 2025年大学辅导员招聘考试题库:学生心理危机干预方案设计试题
- 2024-2025学年广东省广大附中大联盟九年级(上)期中联考道法试题及答案
- 2025年云南省高考地理试卷(含答案)
- 2025贵州黔西南州州直机关面向全州遴选公务员31人考试参考试题及答案解析
- 汴京的星河解析课件
- 亚马逊培训考试题及答案
- 餐饮行业人力资源管理-招聘、培训和留住员工
- 建筑企业税收调研报告及政策解析
- 2025比亚迪供应商审核自查表
评论
0/150
提交评论