第一章软件设计概论.ppt

上传人:tang****xu1 文档编号:528450 上传时间:2018-09-27 格式:PPT 页数:51 大小:589.50KB
返回 下载 相关 举报
第一章软件设计概论.ppt_第1页
第1页 / 共51页
第一章软件设计概论.ppt_第2页
第2页 / 共51页
点击查看更多>>
资源描述

《第一章软件设计概论.ppt》由会员分享,可在线阅读,更多相关《第一章软件设计概论.ppt(51页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、VISUAL C+ 程序设计基础,第一章 软件设计概论,第五章 类与对象,第四章 函数,第三章 结构化程序设计,第二章 C+基础知识,第十章 异常处理,第九章 输入/输出流类库,第八章 继承与多态,第七章 动态内存分配,第六章 指针与数组,第十一章 标准模板类库(STL),附 录,目 录,第一章 软件设计概述,软件设计是一个将人类思维物化为计算机思维的过程,通过这个过程计算机获得一定程度的独立加工甚至思维的能力,从而将人类思维推向更高层次。关于软件设计的概念和方法的研究是随着计算机应用的深入和所处理问题的复杂化而不断加深的。本章将就软件设计的相关概念和程序设计方法的演化发展作一简要介绍。,1.

2、1 软件与软件危机,1.2 软 件 工 程,1.3 程序设计方法,1.6 一个简单的C+程序,1.5 C语言和面向对象的C+,1.4 算法的设计与分析,第一章 软件设计概述,1.1 软件与软件危机,什么是软件,什么是软件危机,软件 程序,软件危机首次爆发于二十世纪六十年代。在大型程序设计中,人们发现投入大量的人力、物力、时间开发出的软件,其成本、效率、质量等方面却处于失控状态,尤其软件维护异常困难。程序的修改扩充往往需要大量重复性投入。,1.1 软件与软件危机,软件危机产生的原因主要有三个:,2 软件是一种逻辑产品而非物理产品,软件的开发过程本质上是人的思考过程。,3 人的智力在面对越来越复杂

3、的问题时,处理问题的效率会越来越低。,1 软件开发者不熟悉用户问题的领域,或没有理解用户需求,软件产品与要求不一致。,1.2 软件工程,软件危机的 出现迫使人们重新认识软件和软件开发过程。大型软件开发也应该借鉴建筑、机械等行业的发展过程,由“手工方式”向“工程化”方向发展。1968年在北大西洋公约组织(NATO)的年会上首次提出软件工程的概念,此后又逐步提出软件生命期的概念。,1.2 软件工程,软件工程的提出和软件的定义,软件是程序、方法、规则、相关文档以及在计算机上运行所必需的数据的集合。而软件工程是开发、运行、维护软件的系统方法。,软件生命期,软件生命期指从开始研制到废弃不用的整个期间,可

4、划分为五个阶段:需求分析、设计、编程、测试和运行维护。,软件的质量标准,正确性 健壮性 可维护性可用性 可重用性 效率等,1.2 软件工程,正确性 软件的正确性指的是软件系统在正常条件下能够正确工作,完成规定功能。这是软件的首要指标。例如,要求设计程序,输入一批数据,计算它们的累加和。在这里,正确性就是正确能正确计算累加和。,1.2 软件工程,健壮性软件的健壮性指的是在意外情况下(如输入数据不合理或某些硬件故障),软件系统仍能适当地工作,并对意外情况进行适当处理,而不致于导致错误结果甚至系统的瘫痪或死机。例如,要求设计程序,根据输入的三边a、b、c的长度判别三角形类型。现有如下设计思想:若a、

5、b、c中只有两个量相等,则为等腰三角形,若三个量均相等,则为等边三角形,否则为一般三角形。如果输入为(-2,-2,-2)时,程序输出为:等边三角形。这个结果显然是错误的。这是由于程序对不合理数据不能进行适当处理,我们就说这个程序的健壮性不好。,1.2 软件工程,可维护性软件的维护包括发现并改正软件的错误,以及由于软件运行环境发生变化或软件功能扩充而对软件进行的改动。 软件的可维护性指的是软件容易维护的程度。一般地说,软件的可读性好,容易理解,维护起来也就比较容易。因此可读性是可维护性的基础。,1.3 程序设计方法,1.3.1 传统的结构化程序设计 SP(Structured Programmi

6、ng),1.3.2 面向对象的程序设计 OOP(Object Oriented Programming),1.3.1 传统的结构化程序设计,传统的程序设计方法可以归结为“程序=算法+数据结构”,将程序定义为处理数据的一系列过程。这种设计方法的着眼点是面向过程的,特点是数据与程序分离,即数据与数据处理分离。 结构化程序设计的基本思想是采用自顶向下、逐步细化的设计方法和单入单出的控制结构。,1.3.1 传统的结构化程序设计,1.3.1 传统的结构化程序设计,举一个简单的例子,要求读入一组整数,统计其中正整数和负整数的个数。该任务的模块结构及细化过程如下:,1.3.1 传统的结构化程序设计,结构化程

7、序设计为处理复杂问题提供了有力手段,但到80年代末,这种设计方法逐渐暴露出以下缺陷: (1)难以适应大型软件的设计。 (2)程序可重用性差。,1.3.2 面向对象的程序设计,为什么要引入面向对象的设计方法,面向对象的设计方法与面向过程的设计方法有什么关系,1.3.2 面向对象的程序设计,面向过程程序设计缺点的根源在于数据与数据处理分离。面向对象程序设计模拟自然界认识和处理事物的方法,将数据和对数据的操作方法放在一起,形成一个相对独立的整体对象(object),同类对象还可抽象出共性,形成类(class )。一个类中的数据通常只能通过本类提供的方法进行处理,这些方法成为该类与外部的接口。对象之间

8、通过消息(message)进行通讯。,1.3.2 面向对象的程序设计,1 基 本 概 念,3 “面向对象”程序设计的特点,2 面向对象的软件开发方法,基 本 概 念,对 象(object),类(class),消 息(message),1 基 本 概 念,调节旋钮,对 象,1 基 本 概 念,是一个抽象的概念,用来描述某一类对象所共有的、本质的属性和类行为。,类,基 本 概 念,我们把对象之间产生相互作用所传递的信息称做消息。,消 息,启 动,转 向,面向对象的软件开发方法,面向对象软件开发的根本合理性在于它符合客观世界的组成方式和大脑的思维方式。在大型程序开发过程中,编码只是其中很小一部分,应

9、当采用工程化的方法,并将面向对象的思想贯穿于软件开发全过程,这就是面向对象的软件工程。面相对象的软件工程同样遵循分层抽象、逐步细化的原则。软件开发过程包括以下五个阶段:,面向对象的软件开发方法,测试的任务在于发现并改正程序中的错误。,分析阶段的主要任务是按照面向对象的概念和方法,从问题中识别出有意义的对象,以及对象的属性、行为和对象间的通信,进而抽象出类结构,最终将它们描述出来,形成一个需求模型。,设计阶段从需求模型出发,分别进行类的设计和应用程序的设计。,编程阶段实现由设计表示到面向对象程序设计语言描述的转换。,“面向对象”程序设计的特点,封装性,(2) 继承与派生性,(3) 多态性,3 “

10、面向对象”程序设计的特点,封装性,对象是一个封装体,在其中封装了该对象的属性和操作。通过限制对属性和操作的访问权限,可以将属性“隐藏”在对象内部,对外提供一定的接口,在对象之外只能通过接口对对象进行操作。,C+通过建立数据类型类来支持封装和数据隐藏。封装性增加了对象的独立性,从而保证了数据的可靠性。一个定义完好的类可以作为独立模块使用。,3 “面向对象”程序设计的特点,继承与派生,以汽车为例看客观世界描述事物的方式:,当定义了一个类后,又需定义一个新类,这个新类与原来的类相比,只是增加或修改了部分属性和操作,这时可以用原来的类派生出新类,新类中只需描述自己所特有的属性和操作。,面向对象程序设计

11、提供了类似的机制:,继承性大大简化了对问题的描述,大大提高了程序的可重用性,从而提高了程序设计、修改、扩充的效率。,新类称为子类或派生类,原来的类称为基类。派生可以一直进行下去,形成一个派生树。,“面向对象”程序设计的特点,语文、数学、英语、政治、物理、化学、生物,多态性,多态性指,同一个消息被不同对象接收时,产生不同结果,即实现同一接口,不同方法。,高中生,计 算平均成绩,大学生,高数、英语、计算机、线性代数,“面向对象”程序设计的特点,继承和多态性组合,可以生成很多相似但又独一无二的对象。继承性使得这些对象可以共享许多相似特性,而多态又使同一个操作对不同对象产生不同表现形式。这样不仅提高了

12、程序设计的灵活性,而且减轻了分别设计的负担。,1.4 算法的设计与分析,1.4.1 算 法 的 概 念,1.4.3 常 用 算 法 介 绍,1.4.2 算 法 的 表 示,1.4.1 算 法 的 概 念,通俗地说,算法就是解决问题的步骤。算法是程序设计学习的重点。用计算机解决问题的算法应具有以下特征: 可执行性 确定性 有穷性 可输入输出信息,1.4.2算法的表示及三种基本结构,3 循 环 结 构,1 顺 序 结 构,2 分 支 结 构,num115;,1.4.2算法的表示及三种基本结构,(1) 顺序结构,【例11】 求两数之和。,显示结果:35,num220;,sumnum1+num2;,演

13、示算法执行过程,输出sum;,1.4.2算法的表示及三种基本结构,(2) 分支结构,【例12】 输入三个数,输出其中的最大数。,x7;,y12;,z10;,if(xy) maxx;else max y;,if (zmax) maxz;,输出max;,显示结果:12,演示算法执行过程,1.4.2算法的表示及三种基本结构,【例13】求4个整数的和。,显示结果:59,演示算法执行过程,12,3,14,26,2,16,42,1,18,60,0,count4; /整数个数sum0; /累加和的初值while (count0) x输入一个整数; sumsum+x; countcount-1;输出sum;,

14、1.4.3 常用算法介绍,1. 直接法,2.枚举法,3.递推法,解决的问题的种类与复杂程度各不相同决定了算法的多样性,但从其思想方法上可以将其归为以下几种:直接法、枚举法、递推法、递归法、回溯法等等。本节 将介绍以下三种:,1.4.3 常用算法介绍,1 直接法,直接法就是根据问题给出的条件直接求解,前面的很多例子都是这种算法的运用。这里不再举例。,1.4.3 常用算法介绍,2 枚举法,枚举法也称穷举法,基本思想是,在有限范围内列举所有可能的结果,找出其中符合要求的解。枚举法适合求解的问题是:问题可能的答案是有限个且答案是可知的,但又难以用解析法描述。这种算法通常需要用循环结构来完成。,请看下例

15、:,【例14】 给定一个正整数,判断其非负整数立方根是否存在,若存在,输出该立方根。,1.4.3 常用算法介绍,算法如下:,分析:设某正整数为27,则非负整数立方根的取值范围为127,因此可在这一范围内对所有整数进行检测,满足立方根为27的就是所求整数。,【例14】求非负整数立方根算法:,1.4.3 常用算法介绍,27,1,显示结果:3,演示算法执行过程,比较,c*c*c,2,比较,c*c*c,3,比较,c*c*c,num27;cube_root1;/立方根初值while (cube_rootnum) 输出 “无整数立方根”;,1.4.3 常用算法介绍,【例15】 判断一个正整数是否素数,给出

16、相应结果。,分析:假设正整数num, 如果num不是2,需要检测它是否含有除1和它本身之外的其他因子,如果有,就不是素数。检测方法是在2num-1范围内逐个验证。实际上可以证明在2 num平方根范围内逐个验证即可。,假定num为9,算法如下:,1.4.3 常用算法介绍,【例15】 判断9是否素数算法,9,2,3,显示结果:不是素数,演示算法执行过程,比较,求余,为0,比较,求余,不为0,3,为0,比较,求余,num9; if (num=2) 输出 “是素数”;else i2; ksqrt(num); /平方根取整 while (ik)输出 “是素数”; else 输出 “不是素数”;,1.4.

17、3 常用算法介绍,3.递推法,递推算法是通过问题的一个或多个已知解,用同样的方法逐个推算出其他解,如数列问题以及一些近似计算问题等。通常也要借助于循环。,请看下例:,1.4.3 常用算法介绍,【例1】求n!,分析:n!=123n,因此可以从1开 始,由1!乘以2得到2!,再乘以3得到3!,以此推出n!。,假定n4,算法如下:,1.4.3 常用算法介绍,【例1】求n!算法:,显示结果:24,演示算法执行过程,1,2,4,比较,2,3,比较,6,4,比较,24,比较,5,factorial1; /阶乘初值i2;n 4;while (i=j) return i; else return j; void main(void) /B coutij; /从键盘上输入变量值 coutmax number is:max(i, j) n ; /输出提示和结果,【例18】 一个简单的C+程序。,程序组成:,注释,编译预处理指令,程序体,由若干函数组成,其中有且仅有一个主函数main(),这是程序的执行入口。在Windows编程中定义为winmain()。,下面进入VC+ 运行,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com