下载

2下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 C++课件--薛景瑄chapter_1

C++课件--薛景瑄chapter_1.doc

C++课件--薛景瑄chapter_1

jingernanhang
2018-09-05 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《C++课件--薛景瑄chapter_1doc》,可适用于IT/计算机领域

第一章程序设计基本特点软件的发展从程序设计到软件工程计算机(computer)是能以相对于人而言几百万甚至几十亿倍速度进行运算并作出逻辑判断的设备。计算机按照一组指令控制下的运行过程(由“算法”规定)来处理数据(data)这组指令称为计算机程序(computerprogram)。编写这组指令的工作称为程序设计(programming)。大约在二十世纪七十年代程序设计发展为软件工程。软件可定义为包括计算机程序、方法、规则、相关的文档资料以及计算机运行所需数据。软件工程曾由Boehm下定义为:“运用现代科学技术知识设计并构造计算机程序和为开发、运行和维护这些程序所必需的相关文件资料”。程序设计和软件工程两者区别如下:主要特点程序设计软件工程内容指令和数据指令、数据和全套文档主要语言汇编语言和高级语言需求定义、软件功能、文档设计和程序设计等语言工作范围编写程序软件生命周期各阶段(以下将介绍)需求者个别用户市场用户开发者编程人员本人开发组织或开发机构软件规模微型、小型大、中、小型决定质量因素个人技术水平管理水平开发技术和手段程序库数据库、工程化开发方法、标准和规范、面向对象技术维护者编程人员本人专职维护队伍硬件特征容量小、速度慢、可靠性差超高速、特大容量、微型化、网络化软件开发过程(软件生命周期)分为互相重叠的三个阶段:()开发与设计(developmentanddesign):它又可分为四部分:分析问题。研究解决方案。方案的代码化也即编写程序简称编程。程序的测试和修改。()编写文档(documentation)。软件开发过程中涉及众多文档例如需求说明书、可行性分析、实施计划、概要设计说明书、用户手册等等。这是软件工程的一个重要环节也是软件工程与以前普通程序设计的一个重要区别。()维护(maintenance)。这是三个阶段中耗时最长、费用最多的。最典型的例子是“YK(年)问题”曾拖延数十年之久。问题来源是上世纪许多程序只用两位数表示年份因而遇到时就无法辨别它是还是。不少公司花费大量精力修改数十年来运行的程序以使它们能在本世纪中成功地运行。我们这门课只是上述各阶段中的一小部分主要是第一阶段中的编程工作。程序设计语言的五种形式程序设计语言在发展过程中可分为五种形式:机器语言(machinelanguage):·以和表示·手工操作汇编语言(assemblerlanguage):·稍微接近人的语言例如movax,addax,bx等·开始使用批处理(batchprocessing)功能。高级编程语言(highlevelprogramminglanguage):·更接近于人类语言但使用仍不方便·如年代的ALGOL面向过程的程序设计语言(procedureorientedprogramminglanguage):有时也称过程式程序设计语言(proceduralprogramminglanguage)或结构化程序设计(structuredprogramminglanguage)语言。·结构化程序设计的产生和发展形成了现代软件工程的基础。·编程是面向过程的(procedureoriented)或面向操作的(actionoriented)编程单位是函数(function子程序)。·整个程序是一个模块层次(hierarchyofmodules)按功能划分为多个基本模块各模块之间关系尽可能简单其功能相对独立自顶向下进行功能分解。·每一模块内既有数据又有代码函数代码按一定算法对代码进行操作。·如FORTRANC语言等面向对象的程序设计(ObjectOrientedProgramming,OOP)语言:面向过程的程序设计具有以下缺点:·功能与数据分离不易保持功能与数据的相容性。·软件修改困难。·限制了软件的可重用性降低了软件开发效率也难于维护软件。为解决以上问题人们进而研究面向对象技术提出了面向对象的程序设计方法。详见下节。目前人们大多混合使用结构化程序设计语言和面向对象的程序设计语言。面向对象的程序设计编程是面向对象的(objectoriented)编程单位是类(class)编程语言特征面向对象编程语言直接描述有关域中的对象及其相互关系。它以客观世界中所存在的事物为依据较为接近人们的思维方式具有如下特征:()客观世界由一系列事物组成每个事物的特性被抽象出来后分别由一组属性和一组操作(方法)来描述。这类事物就是面向对象编程语言中的类及其对象。()客观世界的各事物可按其共性分为各类(称为基类如人、车、鸟等)这些类是具有相同共性的各事物的集合它是面向对象语言中相对独立的程序单位是这些事物的统一抽象。()不同事物除具有基类的共性之外还具有各自的个性。因此应由具有不同的属性和操作的特殊类加以描述。这些特殊类(称为派生类)通过继承机制继承基类的共性(如汽车、拖拉机、坦克都继承“车”的共性)但派生类又各有自己的个性。优越性面向对象的程序设计至少能解决结构化程序设计语言(例如C语言)中以下四个无法解决的问题:(A)数据的封装(数据的保护):在面向过程的编程语言中编程单位是函数它们用于实施一定算法对所有数据进行操作。这就是NicholaseWirth(Pascal编程语言的设计者)所提出的著名公式:算法数据结构=应用程序这种编程方法无法对全局变量加以控制:有时只要求一个函数独家对全局数据进行赋值、读写而不准其它函数对它赋值。这在面向过程的编程语言中无法做到因这些全局数据谁都可以读、可以写。因此软件工程规定应该尽少使用全局数据(全局变量)。但在面向对象的编程语言中可以通过数据封装对数据加以保护只允许被授权者对数据读取或赋值从而实现上述要求。此点详见第三章。(B)复杂程序中程序代码的可重用性(reusability):先看个简单例子。Windows操作系统允许用户在他自己的程序中设计不同窗口如同Windows操作系统的窗口一样。但又绝对不允许用户修改Windows的程序而且用户也没有能力修改。实际上用户根本不必修改Windows的程序只需将自己的程序模块贴上去即可在他自己的程序中设计并实现不同窗口。复杂程序不但庞大而且复杂。其复杂性表现在:必须由多个梯队合作完成编程因而管理比较困难不易处理各种系统状态之间的正确切换设计周期很长不易维护。复杂程序不单要求运行正确还须容易维护、具有好的可读性和可重用性。好的可重用性允许在其它程序中再次使用复杂程序中一部分甚至于大部分现有功能以及大量的通用模块但又不引进任何错误。这将能节省费用、缩短开发周期和减少程序的复杂性。当解决这个问题时在面向过程的编程语言中只能将其它程序部分地或全部地复制过来在加以改写这极易引进错误。但在面向对象的编程语言中不必进行复制只须通过继承机制即可实现可重用性。详见第四章。(C)同一方法(操作)具有多种功能:以上提到新程序可以继承并再次使用复杂程序中大量通用模块以及一部分甚至于大部分现有功能。但仅这一点是远远不够的它还必须具有为原有函数补充新功能的能力。面向过程的编程语言并不具备此类能力。而在面向对象的编程语言中新程序能够将继承来的方法重新定义补充旧功能或增加新功能同时又绝对不允许修改原有程序(因原有程序十分复杂)。这时可以通过继承性重用大部分原有程序代码而同时又允许用户通过多态性对此方法补充新功能以便该方法在不同情况下发挥不同功能。这就是多态性。详见第五章、第六章和第七章。(D)数据与程序的相容性(consistency)–类型安全性(typesafety):这个功能较小但却有用。例在面向过程的编程语言C语言中可能出现输出语句中的类型错误#include<stdioh>voidmain(){inti=doubled=printf(“dtfn”,i,d)}运行结果:对!但如写错为:printf(“dtdn”,i,d)则编译时不出错但运行结果错为:-其原因是不同类型的数据的字长不同(见第二章)。但在面向对象的编程语言C中如使用:cout<<i<<“”<<d<<endl则得不会出错!此处C++中的对象cout解决了它与数据d的相容性!此内容包括在第八章中。C++语言概述C++程序结构特点先看C程序的结构特点:编程单位是函数(function)。C程序中至少有一个函数即主函数main()可能还有头文件如iostreamh。见下例:例#include<stdioh>整个程序如下:voidmain(){inti=doubled=printf(“dtfn”,i,d)}运行结果:C程序中一般还有其它函数(即子程序)如以下程序中的add():例#include<stdioh>intadd(inti,intj){intaa=ijreturna}voidmain(){inti=,j=,aa=add(i,j)printf(“d”,a)}运行结果:可以看出语句(statements)是程序的基本单元。每条语句由操作数和运算符组成用分号结束。操作数可以是变量、常量或表达式。运算符用于规定对操作数进行运算操作的运行方式分为三类:一元运算符:作用于一个操作数又可分为前缀运算符和后缀运算符。它们使用时分别放置于操作数的前面和后面。二元运算符:作用于两个操作数它们使用时放置于两个操作数之间。三元运算符:作用于三个操作数。C中仅有一个即“条件运算符:”(见第二章§)。以上是C语言的结构特点而C语言的结构特点则有所不同。表现为:C语言的编程单位是函数(function)而C语言的编程单位是类(class)。C语言的重点是函数由一组完成类似任务的操作组成函数而一批函数又组成程序。C语言中的数据只用于支持函数所要完成的操作。但C程序中既要考虑函数又要考虑数据须将它们有机地组织起来成为新的编程单位称为“类”。C和C程序的相同处在于:都由若干个文件组成。但其文件组成则不同。C语言的每个文件由若干个函数组成各函数是相对独立的程序段这些函数中只有一个是主函数(主程序)。C语言的每个文件中由若干个类组成而绝大部分函数都包含在类中。同样只有一个主函数。下例中整个C程序由个源文件组成各源文件的长度都不同。它们是:testcpp、testcpp、testcpp、testcpp和testcpp。以上各源文件并不一定彼此紧挨着同时其顺序也常是随意的。而任何一个源文件中又可包括以下内容:整个程序的全部文件的所有独立函数中必定有也只能有一个主函数main()。除头文件一般在源文件的首部外其他类、独立函数和变量的顺序可以随意安排。C++程序的实现(一)源程序文件的编辑过程(editing)形成源文件(sourcefiles)文件名称的后缀为cpp例如testcpp。由用户编写和修改。(二)两遍编译过程(twopasscompiling)大部分编程语言采用单遍编译过程但C和C语言却都采用两遍编译过程:()第一遍(firstpass):将源程序文件编译为汇编语言文件汇编语言文件名称的后缀为asm例如testasmreadinasm等。一般编程人员不使用这类文件。但它在调试程序以及深入分析程序时很有用。本课程多处使用此类文件。调试程序时如果希望阅读汇编语言文件可以在调试中将VC的菜单项“view”下拉在子菜单“DebugWindows”中选择最后一项“Disassembly”(热键为Alt)即可看到汇编语言文件。()第二遍(secondpass):将汇编语言文件编译为目标文件(objectfiles)目标文件名称的后缀为obj例如testobjreadinobj等。这是编程人员常用的文件。(三)连接过程(linking)将所有目标文件连接为可执行文件(executablefiles)可执行文件名的后缀为exe例如testexereadinexe等。这是最后供编程人员使用可供运行的文件。(四)调试过程(debugging)使用各种调试程序对可执行文件进行调试找出错误可能出现三种错误:编译错、连接错和算法错。(五)维护过程(maintenance)在可执行文件投入运行后的半年至一年甚至更长时间内程序中还会出现各种错误需要继续调试排除错误。(第一章完)类Cclassgrand类Bclassderive类A(包括数个函数体、数据或程序块)classbase全局变量和全局数据头文件文件一testcpp文件二testcpp文件三testcpp文件四testcpp文件五testcppvoidmain(){…………}及其它独立函数(外部函数)

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/9

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利