10软件实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件工程课件
第七章 软件实现
软件工程
1
第七章 软件实现
7.1 软件实现的过程与任务 7.2 程序设计方法概述 7.3 编程风格与编码标准 7.4 编程语言 7.5 程序效率与性能分析 7.6 程序复杂性
软件工程
2
什么是软件编码?
什么是软件编码?
Professional Programmer =Software Engineer 正确观点
} 对框架中的局部再做细化,得到整个程序。 main ( ) { /*建立2到100的数组A[ ],其中A[i]=i*/ for ( i = 2;i <= 100;i++ ) A[i] = i;
软件工程
25
/* 建立2到10的素数表B[ ],其中存放2到 10以内的素数*/ B[1]= 2;B[2]= 3;B[3]= 5;B[4]= 7; /*若A[i]=i是B[ ]中任一数的倍数,则剔 除A[i]*/ for ( j = 1;j <= 4;j++ ) /*检查A[ ]所有的数能否被B[j]整除并将 能被整除的数从A[ ]中剔除*/ for ( i = 2;i <= 100;i++) if (A[i] != 0 && A[i]/B[j]*B[j] == A[i]) A[i] = 0;
个人素质方面
–聪明 –有自我发展能力 –足够自信 –有很强的工作驱动能力,知道如何开展工作 –沉着与镇定 –有创新精神
对待产品和技术
–热爱技术,热心解决问题 –针对变化和创新,有良好的适应和管理能力
举例:微软公司对员工的要求
注重客户的反馈
–所有员工都要以客户为中心开展工作 –员工代表公司的形象
软件工程
7
7.2 程序设计方法概述
只有语法上没有错误的程序才能通过编译系统的 语法检查。
然而,软件工程项目对代码编写的要求,绝不仅 仅是源程序语法上的正确性,也不只是源程序中 没有各种错误,还要求源程序具有良好的结构性 和良好的程序设计风格。
软件工程
8
软件编码的工作
程序设计
–理解软件的需求说明和设计模型 –补充遗漏的或剩余的详细设计–设计程序代码的结构
软件工程
5
7.1 软件实现的过程与任务
软件实现阶段也称为程序编码阶段,通常包括编 程实现和单元测试。本章只讲编程实现。
软件实现是软件产品由概念到实体的一个关键过 程,它将详细设计的结果翻译成用某种程序设计 语言编写的并且最终可以运行的程序代码。
虽然软件的质量取决于软件设计,但是规范的程 序设计风格将会对后期的软件维护带来不可忽视 的影响。 软件实现的过程如图:
如何做好程序员
•高效率地工作 –合理安排一天的时间 •你怎样安排一天的时间?如何保证精力充沛的? –开会 •如何看待会议?怎样使得会议效率高? –处理电子邮件 •电子邮件是很好的通信工具,但使用不当可能损害 工作效率 •你认为以什么方式处理电子邮件比较好? –随时记录 •你是否有随时记录问题和灵感的习惯?
面向对象程序设计方法的特点是封装、泛化、多 态、协同和复用。 1. 封装 按照抽象数据类型的要求,对象把数据和相应 操作封装在其内部,通过定义在接口上的操作 访问。 例如,用C++ 定义的类的实例,所有的数据
软件工程
33
成员和成员函数都规定了三种访问权限: 属于Private的只有该类的实例才能访问; 属于Protected的只有该类的实例和子类的实 例才能访问,对于外界其他操作禁止访问; 属于Public的才可供任何外界的操作访问,在 其属下的操作构成该类实例的接口。 2. 泛化 泛化关系给出了一种类间的共享(继承)关系。 子类可以共享父类的 Public 和 Protectede 数 据和操作。从另一个角度看,子类可以是父类 的一种实现方式。
程序员应具备的能力
•基础知识 –英语的功底 –数学基础(算法分析与设计) –计算机科学基础知识 •基本技能 –认识事务的能力(抽象、模型、结构、层次) –做事的逻辑性和条理性 –沟通技能、演讲技巧和团队协作能力 –学习新知识和新技术的能力 •职业化训练和实践经验
如何做好程序员
•职业道德 –上班时间不干与工作无关的事情 •你如何看待上班玩游戏? •下班后待在公司里干与工作无关的事情行不行? –不损害集体利益 •常见的损害行为:泄密、盗取成果 •怎样减少无意的泄密? –不干危害社会的事情 •你如何看待黑客行为? •问题:在大学生涯中,如何培养这些素质?
软件工程
27
使用基本控制结构构造程序
(1) 使用语言中的顺序、选择、重复等有限的基本 控制结构表示程序逻辑。 (2) 选用的控制结构只准许有一个入口和一个出口。 (3) 程序语句组成容易识别的块(Block),每块只 有一个入口和一个出口。 (4) 复杂结构应该用基本控制结构进行组合嵌套来 实现
软件工程
软件工程
20
以自顶向下逐步求精的方式编写程序
采取自顶向下,逐步细化的方法,把模块功能逐 步分解,细化为一系列具体的步骤,进而翻译成 一系列用某种编程语言写成的程序。 用先全局后局部,先整体后细节,先抽象后具体 的逐步求精的过程开发出来的程序具有清晰的层 次结构,程序容易阅读和理解。
理想情况下把程序分解成树形结构。 同一层的节 点相互间没有关系,它们的细化工作相互独立。 在任何一步发生错误,只影响它下层的节点。
–软件编码是一个复杂而迭代的过程, 包括程序设计和程序实现。 –软件编码要求
•正确wenku.baidu.com理解用户需求和软件设计思想
•正确地根据设计模型进行程序设计 •正确地而高效率地编写和测试源代码
–软件编码是设计的继续,会影响软件质量和可维护性。
程序编码就是将软件设计的结果翻译成为用某种 程序设计语言描述的源代码。其中涉及到方法、 工具和过程。 编程语言的特性和程序设计风格会深刻地影响软 件的质量和可维护性。 本章不是具体介绍如何编写程序,而是从软件工 程这个更广泛的范围去讨论与编程语言及程序编 码有关的问题。
团队合作方面
–有团队精神 –具备良好的交流能力
–善于与人相处
你怎样看待这些要求?
结构化程序设计
结构化程序设计技术主要包括两个方面:
在程序设计过程中,尽量采用自顶向下和逐步 细化的原则,由粗到细,一步步展开。
在编写程序时强调使用几种基本控制结构,通 过组合嵌套,形成程序的控制结构。尽可能避 免使用会使程序质量受到影响的GOTO语句。
如何做好程序员
•工作态度 –认真负责 •在办公室老实上班,工作时间比别人长,是“认真负 责”吗? •怎样是真正意义的“认真负责”? –服务意识 •程序员要为后续阶段和产品质量的工作提供服务 •你对用户提出的要求应采取什么态度? –团队协作 •如何在团队中发挥自己的作用? •问题:在课程实验中,你对上述要求有体会吗?
如何做好程序员
学无止境 –不断学习新技术 •“主动”学习是很关键的 •学习的内容完全依赖个人的喜好吗? –提高综合才能 •缺乏表达能力和管理能力是软件开发人员的通病 •应该真正学会软件工程的思想 –向错误和失败学习 •抓住一切机会,勇于实践 •随时有面对无知和承认错误的勇气,善于总结和提 高
举例:微软公司对员工的要求
if ( A < B ) goto 120; 100 110 if ( B < C ) goto 110; write ( C ); goto 140; write ( B ); goto 140; if ( A < C ) goto 130; goto 100; write ( A ); end
软件工程
30
120
130 140
使用if_then_else结构化构造,则程序1可改成如 下形式。
if ( A < B ) and ( A < C ) write ( A ) else if ( A B ) and ( B < C ) write ( B ) else write ( C )
软件工程
软件工程
26
/*输出A[ ]中所有没有被剔除的数*/ for ( i = 2; i <= 100;i++) /*若A[i]没有被剔除,则输出之*/ if ( A[i] != 0 ) printf ( “A[%d]=%d\n”, i, A[i] ); }
自顶向下,逐步求精方法符合人们解决复杂问 题的普遍规律。用先全局后局部,先整体后细 节,先抽象后具体的逐步求精的过程开发,成 功率和生产率都很高。
软件工程
34
3. 多态
多态是面向对象程序设计的一个亮点。多态 有几种不同形式,Cardelli和Wegner把它分 为4类:一般的多态包括参数多态和包含多态, 特殊的多态包括过载多态和强制多态。
设计审查
–检查设计结果 –记录发现的设计缺陷(类型、来源、严重性)
编写代码
–应用编码规范进行代码编写 –所编写代码应该是易验证的
软件编码的工作
代码检查
–确认所写代码完成了所要求的工作 –记录发现的代码缺陷(类型、来源、严重性)
编译代码
–修改代码的语法错误
测试所写代码
–对代码进行单元测试
–调试代码修改错误
28
(6) 严格控制GOTO语句,仅在下列情形才可使用:
用一个非结构化的编程语言去实现一个结构 化的构造。
在某种可以改善而不是损害程序可读性的情 况下。
F T 打印B B<C?
例1 打印A, B, C三数中最小者程序
A<B?
T
F
F
打印C
A<C?
T 打印A
29
软件工程
程序1:输出A、B和C中最小值
软件工程
6
软件实现的过程
首先,开发人员需要正确理解用户需求和软件设 计模型,补充一些遗漏的详细设计,进一步设计 程序代码的结构,并自行检查设计结果; 接下来,根据程序设计结果和编码规范等编写代 码,在单元测试过程,检查和记录程序代码中可 能的缺陷和错误,通过程序调试,对缺陷和错误 定位和改正。
软件工程
23
输出A[ ]中所有没有被剔除的数;---------4 }
再细化框架中每条语句 main ( ) { /*建立2到100的数组A[ ],其中A[i]=i*/ for ( i = 2;i <= 100;i++ ) A[i] = i; /* 建立2到10的素数表B[ ],其中存放2到 10以内的素数*/ B[1]= 2;B[2]= 3;B[3]= 5;B[4]= 7; /*若A[i]=i是B[ ]中任一数的倍数,则剔 除A[i]*/
软件工程
21
每一步工作仅在上层节点的基础上做不多的设计 扩展,这样有利于编程、检查、测试、集成和修 改。
逐 步 细 化
软件工程
22
例如,用筛选法求100以内的素数
筛选法就是从 2 到 100 中去掉 2, 3, …, 9, 10 的 倍数,剩下的就是100以内的素数。 为了解决这个问题,可先按程序功能写出一个 框架。 main ( ) { //程序框架 建立2到100的数组A[ ], 其中A[i]=i;-----1 建立2到10的素数表 B[ ], 其中存放2 到10以内的素数;------------------------2 若A[i]=i是B[ ]中任一数的倍数,则 剔除A[i];----------------------------------3
编码过程与文档流
程序员的秉性
•具备诚实的品性
–勤奋的程序员在调试无穷多的Bug 时,已经深深地体会了“ 诚实”的意义
•信奉简单实用主义 –程序员的基本工作是将复杂的问题转化为计算机能处理的
一些简单的程序
•喜欢技术挑战
–程序员喜欢接触新技术,愿意攻克技术难题 –高水平的程序员喜欢与高水平的程序员一起工作 –这种喜好可能导致程序员干活偏离项目真正的需求
31
面向对象的程序设计方法
在传统的程序设计中把模块看成是黑箱,它接受 给定的输入,进行需要的处理,最后产生规定的 输出。这种模块是面向处理的,通常数据和处理 是分开的。
它是用户习惯或者熟悉的方法。
软件工程
32
在面向对象的程序设计中,数据和操作数据的算 法不再分离,它们被封装在一起,构成对象,其 他的对象可以使用这个对象所提供的服务。
软件工程
24
for ( j = 1;j <= 4;j++ ) 检查A[ ]所有的数能否被B[j]整除并将 能被整除的数从A[ ]中剔除; ----------3.1 /*输出A[ ]中所有没有被剔除的数*/ for ( i = 2;i <= 100;i++ ) 若A[i]没有被剔除,则输出之 ----------4.1
第七章 软件实现
软件工程
1
第七章 软件实现
7.1 软件实现的过程与任务 7.2 程序设计方法概述 7.3 编程风格与编码标准 7.4 编程语言 7.5 程序效率与性能分析 7.6 程序复杂性
软件工程
2
什么是软件编码?
什么是软件编码?
Professional Programmer =Software Engineer 正确观点
} 对框架中的局部再做细化,得到整个程序。 main ( ) { /*建立2到100的数组A[ ],其中A[i]=i*/ for ( i = 2;i <= 100;i++ ) A[i] = i;
软件工程
25
/* 建立2到10的素数表B[ ],其中存放2到 10以内的素数*/ B[1]= 2;B[2]= 3;B[3]= 5;B[4]= 7; /*若A[i]=i是B[ ]中任一数的倍数,则剔 除A[i]*/ for ( j = 1;j <= 4;j++ ) /*检查A[ ]所有的数能否被B[j]整除并将 能被整除的数从A[ ]中剔除*/ for ( i = 2;i <= 100;i++) if (A[i] != 0 && A[i]/B[j]*B[j] == A[i]) A[i] = 0;
个人素质方面
–聪明 –有自我发展能力 –足够自信 –有很强的工作驱动能力,知道如何开展工作 –沉着与镇定 –有创新精神
对待产品和技术
–热爱技术,热心解决问题 –针对变化和创新,有良好的适应和管理能力
举例:微软公司对员工的要求
注重客户的反馈
–所有员工都要以客户为中心开展工作 –员工代表公司的形象
软件工程
7
7.2 程序设计方法概述
只有语法上没有错误的程序才能通过编译系统的 语法检查。
然而,软件工程项目对代码编写的要求,绝不仅 仅是源程序语法上的正确性,也不只是源程序中 没有各种错误,还要求源程序具有良好的结构性 和良好的程序设计风格。
软件工程
8
软件编码的工作
程序设计
–理解软件的需求说明和设计模型 –补充遗漏的或剩余的详细设计–设计程序代码的结构
软件工程
5
7.1 软件实现的过程与任务
软件实现阶段也称为程序编码阶段,通常包括编 程实现和单元测试。本章只讲编程实现。
软件实现是软件产品由概念到实体的一个关键过 程,它将详细设计的结果翻译成用某种程序设计 语言编写的并且最终可以运行的程序代码。
虽然软件的质量取决于软件设计,但是规范的程 序设计风格将会对后期的软件维护带来不可忽视 的影响。 软件实现的过程如图:
如何做好程序员
•高效率地工作 –合理安排一天的时间 •你怎样安排一天的时间?如何保证精力充沛的? –开会 •如何看待会议?怎样使得会议效率高? –处理电子邮件 •电子邮件是很好的通信工具,但使用不当可能损害 工作效率 •你认为以什么方式处理电子邮件比较好? –随时记录 •你是否有随时记录问题和灵感的习惯?
面向对象程序设计方法的特点是封装、泛化、多 态、协同和复用。 1. 封装 按照抽象数据类型的要求,对象把数据和相应 操作封装在其内部,通过定义在接口上的操作 访问。 例如,用C++ 定义的类的实例,所有的数据
软件工程
33
成员和成员函数都规定了三种访问权限: 属于Private的只有该类的实例才能访问; 属于Protected的只有该类的实例和子类的实 例才能访问,对于外界其他操作禁止访问; 属于Public的才可供任何外界的操作访问,在 其属下的操作构成该类实例的接口。 2. 泛化 泛化关系给出了一种类间的共享(继承)关系。 子类可以共享父类的 Public 和 Protectede 数 据和操作。从另一个角度看,子类可以是父类 的一种实现方式。
程序员应具备的能力
•基础知识 –英语的功底 –数学基础(算法分析与设计) –计算机科学基础知识 •基本技能 –认识事务的能力(抽象、模型、结构、层次) –做事的逻辑性和条理性 –沟通技能、演讲技巧和团队协作能力 –学习新知识和新技术的能力 •职业化训练和实践经验
如何做好程序员
•职业道德 –上班时间不干与工作无关的事情 •你如何看待上班玩游戏? •下班后待在公司里干与工作无关的事情行不行? –不损害集体利益 •常见的损害行为:泄密、盗取成果 •怎样减少无意的泄密? –不干危害社会的事情 •你如何看待黑客行为? •问题:在大学生涯中,如何培养这些素质?
软件工程
27
使用基本控制结构构造程序
(1) 使用语言中的顺序、选择、重复等有限的基本 控制结构表示程序逻辑。 (2) 选用的控制结构只准许有一个入口和一个出口。 (3) 程序语句组成容易识别的块(Block),每块只 有一个入口和一个出口。 (4) 复杂结构应该用基本控制结构进行组合嵌套来 实现
软件工程
软件工程
20
以自顶向下逐步求精的方式编写程序
采取自顶向下,逐步细化的方法,把模块功能逐 步分解,细化为一系列具体的步骤,进而翻译成 一系列用某种编程语言写成的程序。 用先全局后局部,先整体后细节,先抽象后具体 的逐步求精的过程开发出来的程序具有清晰的层 次结构,程序容易阅读和理解。
理想情况下把程序分解成树形结构。 同一层的节 点相互间没有关系,它们的细化工作相互独立。 在任何一步发生错误,只影响它下层的节点。
–软件编码是一个复杂而迭代的过程, 包括程序设计和程序实现。 –软件编码要求
•正确wenku.baidu.com理解用户需求和软件设计思想
•正确地根据设计模型进行程序设计 •正确地而高效率地编写和测试源代码
–软件编码是设计的继续,会影响软件质量和可维护性。
程序编码就是将软件设计的结果翻译成为用某种 程序设计语言描述的源代码。其中涉及到方法、 工具和过程。 编程语言的特性和程序设计风格会深刻地影响软 件的质量和可维护性。 本章不是具体介绍如何编写程序,而是从软件工 程这个更广泛的范围去讨论与编程语言及程序编 码有关的问题。
团队合作方面
–有团队精神 –具备良好的交流能力
–善于与人相处
你怎样看待这些要求?
结构化程序设计
结构化程序设计技术主要包括两个方面:
在程序设计过程中,尽量采用自顶向下和逐步 细化的原则,由粗到细,一步步展开。
在编写程序时强调使用几种基本控制结构,通 过组合嵌套,形成程序的控制结构。尽可能避 免使用会使程序质量受到影响的GOTO语句。
如何做好程序员
•工作态度 –认真负责 •在办公室老实上班,工作时间比别人长,是“认真负 责”吗? •怎样是真正意义的“认真负责”? –服务意识 •程序员要为后续阶段和产品质量的工作提供服务 •你对用户提出的要求应采取什么态度? –团队协作 •如何在团队中发挥自己的作用? •问题:在课程实验中,你对上述要求有体会吗?
如何做好程序员
学无止境 –不断学习新技术 •“主动”学习是很关键的 •学习的内容完全依赖个人的喜好吗? –提高综合才能 •缺乏表达能力和管理能力是软件开发人员的通病 •应该真正学会软件工程的思想 –向错误和失败学习 •抓住一切机会,勇于实践 •随时有面对无知和承认错误的勇气,善于总结和提 高
举例:微软公司对员工的要求
if ( A < B ) goto 120; 100 110 if ( B < C ) goto 110; write ( C ); goto 140; write ( B ); goto 140; if ( A < C ) goto 130; goto 100; write ( A ); end
软件工程
30
120
130 140
使用if_then_else结构化构造,则程序1可改成如 下形式。
if ( A < B ) and ( A < C ) write ( A ) else if ( A B ) and ( B < C ) write ( B ) else write ( C )
软件工程
软件工程
26
/*输出A[ ]中所有没有被剔除的数*/ for ( i = 2; i <= 100;i++) /*若A[i]没有被剔除,则输出之*/ if ( A[i] != 0 ) printf ( “A[%d]=%d\n”, i, A[i] ); }
自顶向下,逐步求精方法符合人们解决复杂问 题的普遍规律。用先全局后局部,先整体后细 节,先抽象后具体的逐步求精的过程开发,成 功率和生产率都很高。
软件工程
34
3. 多态
多态是面向对象程序设计的一个亮点。多态 有几种不同形式,Cardelli和Wegner把它分 为4类:一般的多态包括参数多态和包含多态, 特殊的多态包括过载多态和强制多态。
设计审查
–检查设计结果 –记录发现的设计缺陷(类型、来源、严重性)
编写代码
–应用编码规范进行代码编写 –所编写代码应该是易验证的
软件编码的工作
代码检查
–确认所写代码完成了所要求的工作 –记录发现的代码缺陷(类型、来源、严重性)
编译代码
–修改代码的语法错误
测试所写代码
–对代码进行单元测试
–调试代码修改错误
28
(6) 严格控制GOTO语句,仅在下列情形才可使用:
用一个非结构化的编程语言去实现一个结构 化的构造。
在某种可以改善而不是损害程序可读性的情 况下。
F T 打印B B<C?
例1 打印A, B, C三数中最小者程序
A<B?
T
F
F
打印C
A<C?
T 打印A
29
软件工程
程序1:输出A、B和C中最小值
软件工程
6
软件实现的过程
首先,开发人员需要正确理解用户需求和软件设 计模型,补充一些遗漏的详细设计,进一步设计 程序代码的结构,并自行检查设计结果; 接下来,根据程序设计结果和编码规范等编写代 码,在单元测试过程,检查和记录程序代码中可 能的缺陷和错误,通过程序调试,对缺陷和错误 定位和改正。
软件工程
23
输出A[ ]中所有没有被剔除的数;---------4 }
再细化框架中每条语句 main ( ) { /*建立2到100的数组A[ ],其中A[i]=i*/ for ( i = 2;i <= 100;i++ ) A[i] = i; /* 建立2到10的素数表B[ ],其中存放2到 10以内的素数*/ B[1]= 2;B[2]= 3;B[3]= 5;B[4]= 7; /*若A[i]=i是B[ ]中任一数的倍数,则剔 除A[i]*/
软件工程
21
每一步工作仅在上层节点的基础上做不多的设计 扩展,这样有利于编程、检查、测试、集成和修 改。
逐 步 细 化
软件工程
22
例如,用筛选法求100以内的素数
筛选法就是从 2 到 100 中去掉 2, 3, …, 9, 10 的 倍数,剩下的就是100以内的素数。 为了解决这个问题,可先按程序功能写出一个 框架。 main ( ) { //程序框架 建立2到100的数组A[ ], 其中A[i]=i;-----1 建立2到10的素数表 B[ ], 其中存放2 到10以内的素数;------------------------2 若A[i]=i是B[ ]中任一数的倍数,则 剔除A[i];----------------------------------3
编码过程与文档流
程序员的秉性
•具备诚实的品性
–勤奋的程序员在调试无穷多的Bug 时,已经深深地体会了“ 诚实”的意义
•信奉简单实用主义 –程序员的基本工作是将复杂的问题转化为计算机能处理的
一些简单的程序
•喜欢技术挑战
–程序员喜欢接触新技术,愿意攻克技术难题 –高水平的程序员喜欢与高水平的程序员一起工作 –这种喜好可能导致程序员干活偏离项目真正的需求
31
面向对象的程序设计方法
在传统的程序设计中把模块看成是黑箱,它接受 给定的输入,进行需要的处理,最后产生规定的 输出。这种模块是面向处理的,通常数据和处理 是分开的。
它是用户习惯或者熟悉的方法。
软件工程
32
在面向对象的程序设计中,数据和操作数据的算 法不再分离,它们被封装在一起,构成对象,其 他的对象可以使用这个对象所提供的服务。
软件工程
24
for ( j = 1;j <= 4;j++ ) 检查A[ ]所有的数能否被B[j]整除并将 能被整除的数从A[ ]中剔除; ----------3.1 /*输出A[ ]中所有没有被剔除的数*/ for ( i = 2;i <= 100;i++ ) 若A[i]没有被剔除,则输出之 ----------4.1