


单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,目 录,上一页,下一页,结 束,软件工程,项目五,软件项目的实现,软件工程案例教程 清华大学出版社,项目五软件项目的实现软件工程案例教程 清华大学出版社,项目五 软件项目的实现,任务一,结构化程序设计,任务二,面向对象程序设计,任务三,程序设计语言,任务四 程序复杂度,小结,实验实训,项目五 软件项目的实现任务一 结构化程序设计,2,任务一,结构化程序设计,5.1.1,结构化程序的提出,结构化程序设计的特征主要有以下几点:,1,以三种基本结构的组合来描述程序2,整个程序采用模块化结构3,有限制地使用转移语句,在非用不可的情况下,也要十分谨慎,并且只限于在一个结构内部跳转,不允许从一个结构跳到另一个结构,这样可缩小程序的静态结构与动态执行过程之间的差异,使人们能正确理解程序的功能任务一 结构化程序设计 5.1.1 结构化程序的提出,3,任务一,结构化程序设计,4,以控制结构为单位,每个结构只有一个入口,一个出口,各单位之间接口简单,逻辑清晰;,5,采用结构化程序设计语言书写程序,并采用一定的书写格式使程序结构清晰,易于阅读;,6,注意程序设计风格。
我们现在用到的譬如,C,、,FORTRAN,、,PASCAL,等语言都属于典型结构化程序设计语言任务一 结构化程序设计 4以控制结构为单位,每个结构只有,4,任务一,结构化程序设计,5.1.2,程序的三种基本结构,顺序结构表示程序中的各操作是按照它们出现的先后顺序执行的,其流程如图所示图中的,S1,和,S2,表示两个处理步骤,例如在我们学生信息管理系统中,S1,可以代表增加学生纪录、,S2,代表标记学生学号、,S3,代表确定学生院系等这些处理步骤可以是一个非转移操作或多个非转移操作序列,甚至可以是空操作,也可以是三种基本结构中的任一结构整个顺序结构只有一个入口点,a,和一个出口点,b,这种结构的特点是:程序从入口点,a,开始,按顺序执行所有操作,直到出口点,b,处,所以称为顺序结构事实上,不论程序中包含了什么样的结构,而程序的总流程都是顺序结构的S1,S2,S3,顺序结构,b,a,任务一 结构化程序设计 5.1.2程序的三种基本结构 S1,5,任务一,结构化程序设计,选择结构表示程序的处理步骤出现了分支,它需要根据某一特定的条件选择其中的一个分支执行选择结构有单选择、双选择和多选择三种形式。
双选择结构,单选择结构,多选择结构,任务一 结构化程序设计 选择结构表示程序的处理步骤出现了分,6,任务一,结构化程序设计,循环结构,循环结构表示程序反复执行某个或某些操作,直到某条件为假(或为真)时才可终止循环在循环结构中最主要的是:什么情况下执行循环?哪些操作需要循环执行?循环结构的基本形式有两种:当型循环和直到型循环,,(a),当型循环结构,(b),直到型循环结构,任务一 结构化程序设计 循环结构 (a)当型循环结构(,7,5.1.3 N-S,流程图,N-S,流程图是结构化程序设计方法中用于表示算法的图形工具之一对于结构化程序设计来说,传统流程图已很难完全适应了因为传统流程图出现得较早,它更多地反映了机器指令系统设计和传统程序设计方法的需要,难以保证程序的结构良好另外,结构化程序设计的一些基本结构在传统流程图中没有相应的表达符号例如,在传统流程图中,循环结构仍采用判断结构符号来表示,这样不易区分到底是哪种结构特别是传统流程图由于转向的问题而无法保证自顶而下的程序设计方法,使模块之间的调用关系难以表达为此,两位美国学者,Nassi,和,Shneiderman,于,1973,年就提出了一种新的流程图形式,这就是,N-S,流程图,它是以两位创作者姓名的首字母取名,也称为,Nassi Shneiderman,图,任务一,结构化程序设计,(a),顺序,(b),循环,(c),当型循环,(d),直到型循环,5.1.3 N-S流程图任务一 结构化程序设计(a)顺序,8,任务一,结构化程序设计,5.1.4,结构化程序设计方法,结构化程序设计方法是公认的面向过程编程应遵循的基本方法和原则。
结构化程序设计方法主要包括:只采用三种基本的程序控制结构来编制程序,从而使程序具有良好的结构;程序设计自顶而下;用结构化程序设计流程图表示算法有关结构化程序设计及方法有一整套不断发展和完善的理论和技术,对于初学者来说,完全掌握是比较困难的但在学习的起步阶段就了解结构化程序设计的方法,学习好的程序设计思想,对今后的实际编程是很有帮助的任务一 结构化程序设计5.1.4 结构化程序设计方法,9,任务二 面向对象程序设计,面向对象程序设计(,OOP,)技术汲取了结构化程序设计中好的思想,并将这些思想与一些新的、强大的理念相结合,从而给你的程序设计工作提供了一种全新的方法通常,在面向对象的程序设计风格中,你会将一个问题分解为一些相互关联的子集,每个子集内部都包含了相关的数据和函数同时,你会以某种方式将这些子集分为不同等级,而一个对象就是已定义的某个类型的变量当你定义了一个对象,你就隐含的创建了一个新的数据类型任务二 面向对象程序设计面向对象程序设计(OOP)技术汲取,10,任务二 面向对象程序设计,5.2.1,数据抽象和封装,把数据和函数包装在一个单独的单元(称为类)的行为称为封装数据封装是类的最典型特点。
数据不能被外界访问,只能被封装在同一个类中的函数访问这些函数提供了对象数据和程序之间的接口避免数据被程序直接访问的概念被称为“数据隐藏”抽象指仅表现核心的特性而不描述背景细节的行为类使用了抽象的概念,并且被定义为一系列抽象的属性如尺寸、重量和价格,以及操作这些属性的函数类封装了将要被创建的对象的所有核心属性因为类使用了数据抽象的概念,所以它们被称为抽象数据类型(,ADT,)封装:封装机制将数据和代码捆绑到一起,避免了外界的干扰和不确定性它同样允许创建对象简单的说,一个对象就是一个封装了数据和操作这些数据的代码的逻辑实体在一个对象内部,某些代码和(或)某些数据可以是私有的,不能被外界访问通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分任务二 面向对象程序设计5.2.1数据抽象和封装,11,任务二 面向对象程序设计,5.2.2,继承,继承是指一个对象从另一个对象中获得属性的过程继承是软件重复使用的一种方式,新的类可以吸收已存类的数据与方法,并增加新的数据和方法它支持按层次分类的概念任务二 面向对象程序设计5.2.2 继承,12,任务二 面向对象程序设计,例如,学生管理系统涉及学生对象类,每一学生均拥有他们共同的属性,例如:,name,(姓名)、,idNo,(身份证号)、,sex,(性别)、,stNo,(学号)、,coarseId,(某公共课成绩)等。
但是不同系的学生由于专业不同,他们又有各自与专业相关的课程的学分,例如,信息系的学生应该具有其属类,student,类全部特征和行为规则,同时还具有这个系学生独有东西,以,Student,类为基础建立的信息系学生类,C_student,既具有学生类的特点,也具有信息系学生自己的特点,这里,我们称,Student,类是,C_student,类的父类,类,C_student,称为,Student,的子类,,C_Student,类继承学生类,Student,任务二 面向对象程序设计例如,学生管理系统涉及学生对象类,,13,任务二 面向对象程序设计,5.2.3,多态,多态是指一个方法只能有一个名称,但可以有许多形态,也就是程序中可以定义多个同名的方法,用“一个接口,多个方法”来描述可以通过方法的参数和类型引用例如,学生类应该有一个计算成绩的操作,信息系学生、会计系学生和机械系学生都继承自学生类显然对于各种不同的学生类型需要统计的课程不一样,这就需要计算成绩的操作在不同的学生类中有不同的实现,但使用同一个操作名称,我们称为多态继承和多态的结合可以轻易构造一系列功能类似但又各异的类和对象由于继承性,这些类和对象具有相似的特征。
但由于多态性,同样一种行为在不同类和对象上又有不同的实现和结果任务二 面向对象程序设计5.2.3多态,14,任务二 面向对象程序设计,面向对象程序设计的一些显著的特性包括:,程序设计的重点在于数据而不是过程;,程序被划分为所谓的对象;,数据结构为表现对象的特性而设计;,函数作为对某个对象数据的操作,与数据结构紧密的结合在一起;,数据被隐藏起来,不能为外部函数访问;,对象之间可以通过函数沟通;,新的数据和函数可以在需要的时候轻而易举的添加进来;,在程序设计过程中遵循由下至上(bottom-up)的设计方法任务二 面向对象程序设计面向对象程序设计的一些显著的特性包括,15,任务三程序设计语言,5.3.1,计算机语言与程序设计语言,什么是计算机语言?,狭义的指计算机可以执行的机器语言广义的指一切用于人与计算机通讯的语言包括程序设计语言,各种专用的或通用的命令语言,查询语言,定义语言等现在一般采用后一种说法,.,程序设计语言“泛指一切用于书写计算机程序的语言,包括汇编语言、机器语言,以及一般称为高级语言的完全符号形式的独立于具体计算机的语言任务三程序设计语言5.3.1计算机语言与程序设计语言,16,任务三程序设计语言,上面两段话很清楚地说明了计算机语言与程序设计语言之间的区别和联系。
计算机语言是外延较大的概念,程序设计语言只是计算机语言下的一个子概念有人说:“人们交流要通过语言,人要和计算机打交道,也要通过语言,所以要使用计算机必须学习程序设计语言前半句话指的是计算机语言,而后半句话指的是程序设计语言,由于“偷换”了概念,推理不合逻辑,结论也就不可靠了由于概念的混乱,出现了这种说法我们和计算机打交道,就要用计算机语言”这句话是对的,但用计算机语言与计算机打交道,不一定要用程序设计语言任务三程序设计语言上面两段话很清楚地说明了计算机语言与程序,17,任务三程序设计语言,我们用,DOS,命令,就是在用计算机语言:命令语言;我们学习,Windows,操作,用鼠标单击某一图标,让计算机执行某一操作也是一种计算机语言;我们学习某种应用软件的操作,也是学习计算机语言总之,我们在学习计算机知识的过程中一直在学习计算机语言,一直是通过计算机语言和计算机打交道,但它们都不是程序设计语言程序设计语言是根据计算机的特点而编制的,它没有自然语言那么丰富多样,而只是有限规则的集合,所以它“简单易学”但是,也正因为它是根据机器的特点编制的,所以交流中无法意会和言传,而更多地表现了说一不二,表现了“规则”的严谨。
例如该是“;”的地方不能写成“,.”,,该写“,a”,的地方不能写成“,A”,,这使得学习程序设计语言在一开始会有些不习惯任务三程序设计语言我们用DOS命令,就是在用计算机语言:,18,任务三程序设计语言,5.3.2,程序语言分类,1.,机器语言,电子计算机所使用的是由“,0”,和“,1”,组成的二进制数,二进制是计算机语言的基础计算机发明之初,人们只能降贵纡尊,用计算机的语言去命令计算机干这干那,一句话,就是写出一串串由“,0”,和“,1”,组成的指令序列交由计算机执行,这种语言,就是机器语言2.,汇编语言,为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,比如,用“,ADD”,代表加法,“,MOV”,代表数据传递等等,这样一来,人们很容易读懂并理解程序在干什么,纠错及维护都变得方便了,这种程序设计语言就称为汇编语言,即第二代计算机语言任务三程序设计语言5.3.2程序语言分类,19,任务四,程序复杂度,5.4.1,程序复杂度,同一问题可用不同,算法,解决,而一个算法的质量优劣将影响到算法乃至程。