Presentation is loading. Please wait.

Presentation is loading. Please wait.

软件工程 Software Engineering

Similar presentations


Presentation on theme: "软件工程 Software Engineering"— Presentation transcript:

1 软件工程 Software Engineering
第九章 编码 武汉大学 计算机学院

2 思考? 编程对软件的开发和维护有何影响?

3 软件生存期 软件计划 需求分析 软件设计 实现(编码) 测试 维护 定义时期 开发时期 使用和维护时期 退

4 第9章 软件编码 什么是结构化程序设计技术? 程序设计语言的分类如何? 面向对象程序设计语言的优点有哪些?
面向对象程序设计语言的技术特点如何? 如何选择程序设计语言? 如何保持良好的编码风格?

5 软件开发时期的三个阶段 信息描述 数据设计 功能描述 设计 结构设计 行为描述 实现 程序模块 测试 其他需求 过程设计 集成并确认 的软件

6 一、结构化程序设计(SP) 无条件转移语句GOTO “好结构” —— “高效率”的争论 缺点 优点 破坏了程序动态结构与静态结构的一致性
难阅读、难理解 易出错、难查错 优点 使程序简单 提高执行效率 “好结构” —— “高效率”的争论

7 非结构化  结构化 E1 C B T F E2 E3 A D E1 Flag=1 T F E2 E3 Flag=0 C B A D (a)

8 二、程序设计语言 语言的元计算模型等价 → 功能等价 描述问题的方便性有差异 P A B 语义等价

9 1. 语言的分类 按语言的演变分类 第一代 机器相关(机器语言,汇编语言)
第二代 高级程序设计语言(Fortran, COBOL, Basic) 第三代 结构化PL 通用语言(Pascal, C, Ada) OOPL(C++, Smalltalk, Java) 专用语言(LISP, Prolog) 第四代 不涉及算法细节的4GL SQL,Program generators, Decision support language Prototyping language, Formal specification language

10 2. 编程语言对软件的影响 机器求解问题的基本工具  思维方式、解题方式 理想的模块化机制,语法清晰  可读性、可理解性
独立编译机制,编译程序查错能力  可靠性 实现的难易程度,独立编译机制,软件开发工具丰富  开发效率 编译程序优化能力,语言直接操纵硬件能力  运行效率 标准化程度,模块封装机制  可维护性

11 3. 语言的选择 应用领域 算法和计算复杂性 性能需求 数据结构的复杂性 软件开发人员的知识水平 软件运行环境

12 4. 编码风格(编码原则) 编码风格指一个人编制程序是所表现出来的特点、习惯、逻辑思路等。良好的编码风格可以减少编码的错误,提高程序的可读性,提高开发效率。 代码文档化(标识符的命名、注释安排、程序的视觉组织) 数据说明 语句构造 输入/输出风格 效率 复用

13 三、面向对象编程(Object-oriented Programming, OOP)
面向对象语言(OOPL) 支持OO概念 编译程序可自动把OO概念映射到目标程序中 非面向对象语言 程序员实现 OOP是否必须用OOPL来实现?

14 OOD的结果可以用OOPL/非OOPL实现
错误! OOPL功能强于非OOPL? 任何通用语言都可实现OO概念 OOPL实现OO概念远比非OOPL方便! 选择编程语言的关键 一致的表达能力 可重用性 可维护性

15 1. OOPL的优点 一致的表达方式 可重用性好 可维护性好 OOA→OOD→OOP使用统一的概念 可重用OOA、OOD、OOP的结果
程序显式陈述问题域语义

16 2. OOPL的技术特点 20世纪50年代,LISP,动态联编、交互式开发 60年代,SIMULA,类,继承
70年代末,Modula_2,Ada,数据抽象机制 80年代,OOPL 纯OOPL(Smalltalk, Eiffel) 混合型OOPL(C++)

17 OOPL的技术特点主要有: 支持类和对象概念 实现整体-部分结构 实现一般-特殊结构 实现属性和服务 提供类库和强大的开发环境 类型检查
效率

18 类型检查 按编译时进行类型检查的严格程度,分为 强类型(Strong Typing) 弱类型(Weak Typing)
每个变量(属性)必须准确属于某个类 C++,Eiffel等 弱类型(Weak Typing) 仅要求每个变量(属性)隶属于一个对象 Smalltalk无类型,Foxpro等

19 强类型语言的优点 可靠 高效 强类型编译型语言  弱类型解释型语言  利于在编译时发现程序错误 增加了程序可读性 可生成高效率目标代码
开发软件产品 快速开发原型

20 效率问题 许多人认为OOPL的主要缺点是效率低 早期OOPL是解释型而非编译型的  类库
运行时dynamic binding实现多态性,要在运行时查找继承树  优化了查找过程,高效率查找

21 3. 选择OOPL应考虑的因素 将来能否占主导地位 可重用性 类库、开发环境 其它因素

22 4. 程序设计风格 提高可重用性 提高可扩充性 提高健壮性 提高方法的内聚 减小方法的规模 保持方法的一致性 把策略与实现分开 全面覆盖
尽量不使用全局信息 利用继承机制 提高可扩充性 封装实现策略 不要用一个方法遍历多条关联链 避免使用多分支语句 精心确定公有方法 提高健壮性 预防用户的操作错误 检查参数合法性等

23 小 结 结构化程序设计 程序设计语言 编码风格 面向对象语言的优点 面向对象语言的技术特点 选择面向对象语言的实际因素

24 思考题 根据你的经验,总结编程应遵循的风格,并说明为什么如此能增加代码的可读性和可理解性?
有人认为:“应该尽量用面向对象语言来实现面向对象分析和设计的结果”。你认为他的观点对吗 ?请说明理由。 选择面向对象程序设计语言时应该主要考虑哪些因素?


Download ppt "软件工程 Software Engineering"

Similar presentations


Ads by Google