可维护与可复用的软件设计基础(第一部分)

合集下载

软件工程基础实践手册

软件工程基础实践手册

软件工程基础实践手册第一章软件工程概述 (2)1.1 软件工程的定义与目标 (2)1.2 软件工程的发展历程 (2)1.3 软件工程的基本原则 (3)第二章需求分析 (4)2.1 需求收集与识别 (4)2.2 需求分析与建模 (4)2.3 需求确认与验证 (4)第三章软件设计 (4)3.1 软件设计的基本原则 (4)3.2 软件架构设计 (5)3.3 软件详细设计 (5)第四章编码实践 (6)4.1 编程语言与工具选择 (6)4.2 编码规范与技巧 (6)4.3 代码审查与重构 (7)第五章测试与调试 (7)5.1 软件测试基本概念 (8)5.2 测试策略与过程 (8)5.3 调试技巧与方法 (8)第六章软件项目管理 (9)6.1 项目管理基本理论 (9)6.1.1 项目定义 (9)6.1.2 项目生命周期 (9)6.1.3 项目组织结构 (9)6.1.4 项目管理知识体系 (9)6.2 项目计划与执行 (10)6.2.1 项目计划 (10)6.2.2 项目执行 (10)6.3 项目监控与评估 (10)6.3.1 项目监控 (10)6.3.2 项目评估 (11)第七章软件维护与演化 (11)7.1 软件维护的类型与策略 (11)7.2 软件演化与升级 (11)7.3 软件退役与替换 (12)第八章软件质量保证 (13)8.1 软件质量标准与模型 (13)8.2 质量管理过程与方法 (13)8.3 质量评估与改进 (13)第九章软件工程伦理与法律 (14)9.1 软件工程伦理原则 (14)9.1.1 尊重用户权益 (14)9.1.2 保障软件质量 (14)9.1.3 促进公平竞争 (14)9.1.4 提升行业形象 (14)9.2 软件版权与知识产权 (14)9.2.1 软件版权 (14)9.2.2 知识产权 (15)9.3 法律法规与合规性 (15)9.3.1 法律法规 (15)9.3.2 合规性 (15)第十章软件工程实践案例分析 (15)10.1 项目案例分析 (15)10.2 团队协作与沟通 (16)10.3 实践经验总结与展望 (16)第一章软件工程概述1.1 软件工程的定义与目标软件工程作为一门跨学科领域,旨在通过系统化的方法、技术和工具,研究和解决软件开发过程中的各种问题。

软件工程的基础方法和原则

软件工程的基础方法和原则

软件工程的基础方法和原则软件工程是一门关于开发、维护和管理软件的学科。

在软件开发的过程中,基础方法和原则是保证软件质量和项目成功的关键。

本文将探讨软件工程的基础方法和原则,包括需求工程、软件设计、编码和测试等方面。

1. 需求工程需求工程是软件开发的起点,它涉及与客户和相关利益相关者沟通,并明确系统的功能、性能和可靠性等方面的要求。

需求工程包括以下关键方法和原则:1.1 可追踪性:需求必须能够被跟踪和追踪。

为了实现可追踪性,开发团队需要使用适当的工具和技术,如需求跟踪矩阵。

1.2 客户参与:客户参与是确保最终交付的软件能够满足客户需求的关键步骤。

开发团队应与客户进行密切合作,收集和解析客户需求,并及时反馈。

1.3 需求验证:需求验证是确保软件系统满足所需功能的过程。

通过验证需求,可以减少错误和风险,并确保软件系统满足预期目标。

2. 软件设计软件设计是制定软件系统架构和组织的过程。

良好的软件设计可以提高软件的可维护性、可扩展性和可重用性。

以下是软件设计的基础方法和原则:2.1 模块化设计:软件应按照模块化的原则进行设计,即将复杂的系统划分为独立的功能模块。

这样可以提高系统的可维护性和可测试性,并促进团队合作和重用。

2.2 高内聚低耦合:模块之间应该有清晰的接口和合适的依赖关系。

高内聚意味着模块内的元素彼此相关,低耦合意味着模块之间的依赖关系尽可能松散。

2.3 设计原则:设计原则,如单一职责原则、开闭原则、里氏替换原则等,是指导良好软件设计的基本准则。

遵循这些原则可以提高软件的复用性和可维护性。

3. 编码编码是将设计转化为可执行代码的过程。

以下是编码阶段的基本方法和原则:3.1 标准化编码规范:制定并遵循统一的编码规范是保证代码质量和可读性的重要手段。

通过编码规范,可以避免潜在的错误和混乱。

3.2 代码复审:代码复审是团队中的同行评审过程。

通过代码复审,可以发现和纠正潜在的错误和不规范的编码实践。

3.3 自动化测试:在编码的同时,开发人员应编写自动化测试用例。

软件设计师必背知识点

软件设计师必背知识点

软件设计师必背知识点一、计算机组成与体系结构。

1. 数据的表示。

- 进制转换:- 二进制、八进制、十进制、十六进制之间的相互转换。

例如,十进制转二进制可以采用除2取余法,将十进制数不断除以2,取余数,直到商为0,然后将余数从右到左排列得到二进制数。

- 二进制数的运算,包括算术运算(加、减、乘、除)和逻辑运算(与、或、非、异或)。

- 原码、反码、补码:- 原码:最高位为符号位,0表示正数,1表示负数,其余位表示数值的绝对值。

- 反码:正数的反码与原码相同,负数的反码是在原码的基础上,符号位不变,其余位取反。

- 补码:正数的补码与原码相同,负数的补码是其反码加1。

计算机中通常采用补码来表示和运算数据,因为补码可以简化减法运算,将减法转换为加法。

2. 计算机的基本组成。

- 冯·诺依曼结构:由运算器、控制器、存储器、输入设备和输出设备五大部分组成。

- 运算器:进行算术和逻辑运算的部件,如加法器、乘法器等。

- 控制器:指挥计算机各部件协调工作的部件,它从存储器中取出指令,分析指令并产生相应的控制信号,控制计算机各部件执行指令。

- 存储器:用于存储程序和数据。

分为内存储器(主存)和外存储器(辅存)。

内存储器包括随机存取存储器(RAM)和只读存储器(ROM)。

RAM是可读可写的存储器,断电后数据丢失;ROM是只读存储器,断电后数据不丢失,常用于存储BIOS等基本系统程序。

- 输入设备:如键盘、鼠标等,用于向计算机输入数据和指令。

- 输出设备:如显示器、打印机等,用于将计算机处理的结果输出。

3. 指令系统。

- 指令的格式:一般包括操作码和操作数两部分。

操作码表示指令要执行的操作,操作数表示操作的对象。

- 指令的寻址方式:- 立即寻址:操作数直接包含在指令中。

- 直接寻址:操作数的地址直接包含在指令中。

- 间接寻址:指令中给出的是操作数地址的地址。

- 寄存器寻址:操作数存放在寄存器中,指令中给出寄存器编号。

关于软件开发工程师的书籍

关于软件开发工程师的书籍

关于软件开发工程师的书籍关于软件开发工程师的书籍,是帮助软件开发工程师提升技能、扩展知识、了解行业发展趋势和掌握最佳实践的重要资源。

本文将结合个人经验和市场上常见的书籍,逐步回答这个主题。

第一部分:技术基础作为一名软件开发工程师,掌握良好的技术基础是非常重要的。

以下几本书籍可帮助建立和加强技术基础:1.《计算机组成原理》- Hennessy & Patterson:本书介绍了计算机硬件组成和运行原理,对软件开发工程师理解计算机体系结构以及如何编写更高效的代码非常有帮助。

2.《算法导论》- Thomas H. Cormen 等人:这是一本关于算法设计与分析的经典教材,介绍了各种常见算法的思想和实现。

3.《代码大全》- Steve McConnell:这本书讨论了构建高质量软件的实用技巧和策略,包括代码编写、调试和代码重构。

对提升代码质量和开发效率有很大帮助。

第二部分:编程语言和框架掌握一门或多门编程语言和框架对软件开发工程师而言至关重要。

以下几本书籍可帮助学习编程语言和框架:1.《Java核心技术》- Cay S. Horstmann:这本书非常详细地介绍了Java 的核心概念和重要特性,适合有一定编程基础的读者。

2.《Python编程:从入门到实践》- Eric Matthes:这本书以Python为例,逐步引导读者学习编程的基本概念和技术。

对于初学者来说非常友好。

3.《深入理解计算机系统》- Bryant & O'Hallaron:本书探讨了计算机系统的底层,包括汇编语言、内存、处理器和操作系统等方面的知识。

对于理解底层工作原理和优化性能非常有帮助。

此外,针对特定的编程语言和框架,还有很多深入的专业书籍可供选择。

第三部分:软件工程和设计模式良好的软件工程实践和设计模式是高效开发和维护可扩展软件系统的关键。

以下几本书籍可帮助理解软件工程原则和设计模式:1.《重构:改善既有代码的设计》- Martin Fowler 等人:这本书介绍了如何通过重构技术改进现有代码的结构和设计,以提高软件质量和可维护性。

软件资格考试计算机辅助设计师(中级)(基础知识、应用技术)合卷试卷及答案指导

软件资格考试计算机辅助设计师(中级)(基础知识、应用技术)合卷试卷及答案指导

软件资格考试计算机辅助设计师(基础知识、应用技术)合卷(中级)自测试卷(答案在后面)一、基础知识(客观选择题,75题,每题1分,共75分)1、在软件工程中,哪个阶段负责对软件的需求进行分析和定义?A、可行性研究阶段B、需求分析阶段C、系统设计阶段D、编码阶段2、软件开发生命周期(SDLC)中,哪个阶段主要关注软件的可维护性和可扩展性?A、需求分析阶段B、系统设计阶段C、编码阶段D、测试阶段3、题目:以下关于软件工程中“需求分析”阶段的说法,正确的是:A. 需求分析阶段的目的是确定软件系统需要实现哪些功能B. 需求分析阶段不需要与用户进行沟通C. 需求分析阶段完成后,系统设计阶段可以直接使用需求规格说明书D. 需求分析阶段的成果是软件系统的物理设计说明书4、题目:在软件测试中,以下关于“黑盒测试”的说法,错误的是:A. 黑盒测试关注软件的功能,而不关心内部实现细节B. 黑盒测试主要使用等价类划分和边界值分析等测试方法C. 黑盒测试可以完全覆盖软件的所有功能D. 黑盒测试适用于测试软件的可用性、性能等特性5、题目:在软件开发过程中,以下哪个阶段最适宜进行需求分析?A. 设计阶段B. 编码阶段C. 测试阶段D. 需求阶段6、题目:以下哪项不是软件工程的基本原则?A. 可维护性B. 可复用性C. 可移植性D. 可测试性7、以下关于软件开发中面向对象编程(OOP)的特点描述错误的是()A. 封装性B. 继承性C. 多态性D. 通用性8、以下关于软件需求规格说明书(SRS)描述错误的是()A. SRS是软件项目开发过程中非常重要的文档B. SRS应该详细描述系统的功能和非功能需求C. SRS应该包括系统设计、实现和测试等方面的内容D. SRS的编写应该遵循一定的格式和标准9、在面向对象的程序设计中,以下哪个原则体现了“开闭原则”?A. 单一职责原则B. 依赖倒置原则C. 接口隔离原则D. 开闭原则 10、在Java编程语言中,以下哪个关键字用于声明一个静态成员变量?A. staticB. finalC. abstractD. synchronized11、在软件工程中,哪个阶段是确定系统必须做什么的阶段?A. 需求分析阶段B. 系统设计阶段C. 编码阶段D. 测试阶段12、以下哪个不是软件工程中的软件质量属性?A. 可用性B. 可靠性C. 可维护性D. 代码行数13、在面向对象的设计中,以下哪个原则描述了类的接口应该尽可能简单,只包含实现类所需的功能,而不是多余的特性?A. 单一职责原则B. 开放封闭原则C. 里氏替换原则D. 依赖倒置原则14、以下哪个工具通常用于对软件系统进行静态代码分析?A. JUnitB. SeleniumC. SonarQubeD. Postman15、在软件开发过程中,UML(统一建模语言)主要用于哪个阶段?A. 需求分析B. 设计阶段C. 编码阶段D. 测试阶段16、以下哪个工具不属于敏捷开发常用的工具?A. JiraB. ConfluenceC. GitD. Selenium17、在软件开发过程中,下列哪项不属于软件质量属性?A. 可靠性B. 可维护性C. 可用性D. 可行性18、软件需求规格说明书中,以下哪种表述方式最不利于需求理解?A. 使用自然语言描述B. 使用伪代码描述C. 使用图表和表格描述D. 使用数学公式描述19、以下关于面向对象设计原则的说法,错误的是:A. 单一职责原则(SRP)要求一个类只负责一项职责。

知乎 面向对象的系统开发书籍

知乎 面向对象的系统开发书籍

知乎面向对象的系统开发书籍面向对象的系统开发是当今软件开发领域中的重要概念之一。

随着软件系统越来越复杂,面向对象的开发方法可以帮助我们更好地组织和管理代码,提高开发效率,确保系统的可靠性和可维护性。

因此,掌握面向对象的系统开发技术对于软件工程师来说是至关重要的。

在这篇文章中,我将为大家推荐一些值得阅读的面向对象的系统开发书籍,这些书籍内容涵盖了面向对象思想的基本原理和实践技巧,适合不同阶段的开发者阅读。

1. 《设计模式:可复用面向对象软件的基础》这本经典著作由四位软件工程师合著,对于面向对象的系统开发来说是必读的。

书中介绍了23种常见的设计模式,包括工厂模式、单例模式、观察者模式等,这些设计模式是开发者在实际项目中经常使用的模式。

通过学习这些设计模式,开发者可以更好地理解面向对象的思想,并且能够运用这些模式解决实际问题。

2. 《重构:改善既有代码的设计》这本书由马丁·福勒(Martin Fowler)写就,是关于重构技术的经典之作。

重构是在不改变软件系统外部行为的前提下,改进代码的内部结构和设计的一种技术。

面向对象的系统开发过程中,难免会遇到代码冗余、复杂度高等问题,这本书将教会你如何通过重构手法来提高代码质量和可维护性。

3. 《实现模式》这本书由Kent Beck等软件开发大咖合著,主要讲述了一种名为“测试驱动开发”的开发方法。

测试驱动开发是一种基于测试的软件开发方法,通过先编写测试用例再编写相应的功能代码的方式来推动开发进程。

这本书不仅教会了你如何进行测试驱动开发,而且还介绍了一些常见的设计模式和编码技巧。

4. 《面向对象分析与设计》这本书由Craig Larman撰写,是面向对象分析和设计的经典教材之一。

书中详细介绍了面向对象的基本原理、UML建模语言等概念和技术。

通过学习这本书,你将能够掌握面向对象分析和设计的方法和工具,从而更好地应对复杂系统的开发挑战。

5. 《敏捷软件开发:原则、模式与实践》这本书由Robert C. Martin撰写,是关于敏捷软件开发的权威之作。

软件工程基础之 软件维护


可维护性改进
代码重构
对代码进行重新组织和优化,使其更易于阅读、理解和维护 。
文档更新
更新软件文档,以反映软件的新功能、性能优化和修复的缺 陷,方便后续维护和开发。
05
适应性维护
环境变化处理
操作系统升级
当操作系统升级时,软件也需要进行相应的调整以适应新的操作系统。这可能涉及到修改软件与操作系统的接口、更 新系统调用等。
软件版本控制
为了确保软件的版本兼容性和升级的顺利进行,需要进行软件版本的控制和管理 。这可能涉及到版本号的分配、版本升级流程的制定和实施等。
兼容性测试
在软件升级后,需要进行兼容性测试以确保新版本软件与旧版本软件的兼容性。 这可能涉及到测试用例的设计、测试环境的搭建和测试执行等。
THANKS
感谢观看
04
完善性维护
功能增强
增加新功能
根据用户需求或市场需求,对软 件进行功能扩展或升级,增加新 的特性和功能。
优化现有功能
对现有功能进行改进和调整,提 高其性能、稳定性和用户体验。
性能优化
提升运行速度
通过优化算法、减少冗余计算或使用 更高效的存储结构等方式,提高软件 的运行速度。
降低资源消耗
优化软件对内存、CPU等资源的利用 ,降低软件运行成本和维护成本。
文档化与标准化
文档是软件维护的重要依据,包 括系统架构、系统功能、接口协
议等方面的文档。
标准化则是指遵循统一的编码规 范、命名规范、接口规范等,提
高代码的可读性和可维护性。
文档化和标准化有助于提高软件 的可维护性和可扩展性,降低维
护成本。
03
改正性维护
错误识别与定位
错误报告
01

软件设计基础

假如一种类中没有任何两个措施对同一变量进行 访问,则它们没有相同性,该类旳内聚程度将会 很低,缺乏内聚度意味着该类能够分为两个或更 多旳类。
3.1 软件设计旳基本概念 3.2 软件设计过程 3.3 软件设计旳质量 3.4 软件体系构造设计 3.5 高可信软件设计 3.6 软件设计规格阐明 3.7 软件设计评审
▪ 高质量旳软件设计,能够有效缩短软件开发 时间,降低开发成本,提升最终软件产品质 量。
软件设计旳质量要素
▪ 评价软件设计旳质量 构造良好 充分性 可行性 简朴性 实用性 灵活性 强健性 可移植性 可复用性 原则化
软件设计旳质量
▪ 软件设计对最终软件产品质量产生旳影响 涉及:
模块数。 可见性和联通性
模块旳可见性:该模块可直接或间接引用旳一组模块。 模块旳联通性:模块可直接引用旳一组模块。
软件构造有关概念
A
扇出
深度
B
C
D
E
F
G
H
I
J 宽度
扇入
3)界面设计
▪ 顾客界面设计旳目旳是,为顾客使用目旳软件 系统以实现其全部业务需求而提供友好旳人机 交互界面。
▪ 软件界面设计需要考虑下列原因 :
过程/算法 设计
数据模型设计
未通过
通过
设计评审
设计规格说明
1)软件设计计划
▪ 在设计过程中,对设计活动进行计划应该最早 进行,然后按照计划实施体系构造设计、界面 设计、模块/子系统设计、数据模型设计、过 程/算法设计等活动。
▪ 软件设计计划旳任务是:明确设计过程旳输入 制品并使其处于就绪状态,定义设计过程旳目 旳、输出制品及其验收准则,拟定覆盖设计过 程中各个阶段旳全局性设计策略,分配设计过 程有关人员旳职责,针对设计过程中旳活动制 定工作计划。

第04章-软件设计-01-基础


设计的方法:
从DFD出发 设想把DFD中的处理分解成各种不 出发,设想把 中的处理分解成各种不 出发 设想把 同的实现方案; 同的实现方案 抛弃技术上行不通的方案. 抛弃技术上行不通的方案
2. 选择合理的方案 任务:
从设想的可供选择的方案中选择若干个合理的方案; 从设想的可供选择的方案中选择若干个合理的方案
成本 最小成本区 M 软件总成本 接口成本 模块成本 模块 数目
模块化与软件成本的关系
并非模块分得越小越好,因为模块之间接口的复杂度和工作量增加。 并非模块分得越小越好,因为模块之间接口的复杂度和工作量增加。 显然,每个软件系统都有一个最佳模块数M 注意选择分解的最佳模块数。 显然,每个软件系统都有一个最佳模块数M。注意选择分解的最佳模块数。 右上图描述了模块化与软件成本的关系。 右上图描述了模块化与软件成本的关系。
逐步求精是人类解决复杂问题时采用的基本方 法,也是许多软件工程技术的基础. 抽象与逐步求精是一对互补的概念.模块分解中 的上层是下层的抽象,下层是上层的求精过程
重构是一种重新设计的技术,可以优化构 件的设计(代码)而无须改变系统的功能 或行为。
模块设计的关键:
每个模块完成一个相对独立的子功能,并且与其 它模块间的接口简单,即功能专一,模块之间无 过多的相互作用的模块。
分解的层次
Top level
First level of decomposition Second level of decomposition
模块分解(Modular decomposition) 面向数据分解(Data-oriented decomposition)
将功能分配给模块; 高层描述系统功能,低层描述模块组织及相互联系. 基于外部数据结构; 高层描述总体数据结构,低层描述数据元素细节及其联系.

软件设计基础知识

软件设计基础知识软件设计是指在计算机软件开发过程中,根据需求和要求进行系统设计和构建的过程。

在这个过程中,开发人员需要具备一定的基础知识,才能够有效地设计和开发出高质量的软件。

本文将介绍一些软件设计的基础知识,帮助读者更好地理解和应用于实践中。

一、需求分析在进行软件设计之前,首先需要进行需求分析。

需求分析是指对用户需求进行全面、准确的调查和分析,确定软件的功能、性能和其他特征。

通过需求分析,可以明确软件的目标和范围,为后续的设计和开发工作提供指导。

需求分析的方法有很多种,如面谈法、问卷调查法、观察法等。

开发人员需要根据具体情况选择合适的方法,并与用户进行有效的沟通,确保需求的准确性和完整性。

二、概要设计概要设计是对软件系统进行整体架构和设计的过程。

在概要设计中,需要对系统进行功能划分,确定软件各个模块之间的关系和接口。

在进行概要设计时,可以借助一些工具和方法,如UML(统一建模语言)、数据流图、状态转换图等。

这些工具和方法可以帮助开发人员更好地组织和表示系统的结构和行为,为详细设计提供依据。

三、详细设计详细设计是在概要设计的基础上,对系统进行更加详细的设计和描述。

在详细设计中,需要对软件各个模块进行详细的设计,包括算法设计、数据结构设计、接口设计等。

算法设计是软件设计中非常重要的一部分,它关系到软件的性能和效率。

开发人员需要根据具体需求,选择合适的算法,并对其进行详细的设计和分析。

在算法设计过程中,需要考虑时间复杂度、空间复杂度、稳定性等因素。

数据结构设计是软件设计中另一个重要的方面,它关系到数据的组织和管理。

开发人员需要选择合适的数据结构,并进行详细的设计和实现。

常用的数据结构有数组、链表、栈、队列、树等。

接口设计是软件设计中的一个重要环节,它关系到模块之间的通信和交互。

开发人员需要设计出清晰、简洁的接口,并进行合理的参数传递和数据交换。

四、编码和测试在详细设计完成后,就可以进行编码和测试工作了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用例图(use case)
静态模型:类图(Class Diagram)
依赖 实现
依赖
泛化(继承)
组合
泛化(继承)
聚合
泛化(继承) 实现
关联
>
>
>
>
=
泛 化
类 之

实 现
关 系 的
组 合
强 弱 顺

聚 合

关 联
依 赖
静态模型:构件图(Package Diagram) 表示包(Package)的主要共用及相互之间的关系
软件模型与软件层次
OOD是一种思维模式,是认识和解决问题的逻辑与方法; 软件设计是一门艺术,有一定的规律和技巧;但是需要学
习和经验积累才能掌握; OOD设计方法,重点是如何解决:简单、重用、继承、扩展 设计模式提供了如何进行“优美”设计的方法
软件需求与领域建模
软件设计必须以业务领域为中心;领域建模,将领域模型 与代码分离
静态模型:部署图(Deployment Diagram) 表示软件及硬件设备之间的关系
动态模型:序列图(Sequence Diagram)
动态模型:活动图(Activity Diagram)
动态模型:状态图
软件设计:多学习、多实践 参考书籍
第二篇:软件设计的基本原则
设计原则概述 单一职责与开闭原则 里氏替换与依赖倒置原则 接口隔离原则
迪米特原则
2013年12月25日 廖洪涛
1
大纲 第一篇:软件开发的基本要求 第二篇:软件设计的基本原则 第三篇:软件设计的常用模式 第四篇:软件重构的通用方法
培训目的 了解可维护与可重用的软件设计基础知识 了解软件需求的重要性和常用的设计语言 了解软件设计的一般原则、常用设计模式 掌握反模式的基本表现与软件重构的意义
不考虑软件实现,只考虑领域的特性和问题的解决 建模思维:
软件的层次模型
软件分层模式:MVC框架,三层框架,… 软件分块模式:“物以类聚,人以群分” 软件实现模式:封装与复用,使用已有代码
软件设计语言与工具 UML:统一建模语言, OMG组织1997年发布 UML:软件设计的标准图纸
针对可复用的软件设计
传统的复用:
代码的复制、粘贴(容易出错,代码重复) 算法的复用,比如sort函数,strcpy函数 数据结构的复用
面向对象设计(OOD)的复用:抽象、封装、多态、继承
复用焦点:不再集中于函数、算法的具体实现,而在更抽象 的逻辑层次;面向接口编程而不是具体实现
抽象:进行抽象层次的设计,抽象层次独立于具体实现; 封装:将可变部分、行为、模块接口等封装起来,便于扩展; 多态:依据情况扩展状态和行为; 继承:在基类定义特征和基本行为,在子类具体化
第一篇:软件开发的基本要求
软件开发的核心问题 软件为什么不可维护 可维护与可复用的软件设计 软件需求与领域建模
熟练使用设计语言
软件开发的核心问题
可维护性
软件的再生; 能够允许新的设计要求以较为容易和平稳的方式加入到已有
的系统中去,从而使这个系统能够不断焕发出青春
可重用性(可复用性)
提高生产率、降低成本 提高软件质量 恰当的复用可以提高系统的可维护性
用户模型:用例(use case) 静态模型:类图(或子模块图)、构件图、部署图 动态模型:序列图、状态图、活动图
OMG(Object Management Group) 对象管理组织/ 拥 有约300家机构的国际联盟,它开发了对象管理体系结构(OMA:是一种 描述OMG希望为面向对象的应用和环境开发的标准模型)。
法能容易达到目标) 太多重复(Repetition):软件代码的拷贝(复用) 太过晦涩(Opacity):很难阅读、理解,不知啥意思
针对可维护性的设计标 可扩展:容易加入新功能
反例:买个新家具,发现屋里乱,塞不下
灵活性:容易修改而不波及其它 反例:汽车加装个空调,发动机不能启动了
可插入:容易替换一个同接口的类或组件,从而改变功能 如:掉了一颗螺丝,换个就好;插件。
软件为什么不能维护
需求变化,无法相容新变化 维护工程师 设计工程师,浅尝辄止,简单地打补丁 软件缺乏设计、copy代码:
过于僵化(Rigidity):牵一发而动全身,耦合性太强 过于脆弱(Fragility):改一个问题导致十个问题 太过复杂(Complexicity):设计过细,没有进行分类与聚合 黏度过高(Viscosity):容易诱惑犯罪(采用破坏原有设计的方
相关文档
最新文档