【软构课】How OOP improves quality(面向对象编程如何提升软件构造质量)

1.概念简介

【OOP】:面向对象设计(Object Oriented Programming),一种计算机编程架构,本质是以建立模型体现出来的抽象思维过程和面向对象的方法。OOP的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。OOP=对象+类+继承+多态+消息,其中核心概念是类和对象。

【软件构造质量目标】:编写软件程序所追求的质量目标,主要包括但不限于正确性、健壮性、可扩展性、可复用性、兼容性、可移植性、易用性、性能、及时性、经济性、功能等。

本文将逐条简述各个质量目标的含义,并分析OOP的哪些特性或功能使它能够提升软件构造这方面的质量。

2.正文分析

2.1.正确性(Correctness)

        正确性:按照预先定义的“规约”执行,是最重要的质量目标。 

        想要确保正确性,可以通过测试和调试发现错误并消除;在写程序时就采用防御式编程确保正确性;通过形式化验证发现问题。

        OOP的优点:OOP采用封装的做法,将数据和操作捆绑在一起,将接口与实现分离,通过接口访问分散在各个类中的数据,调用相应的函数,更加安全,有助于提升正确性。

2.2.健壮性(Robustness)

        健壮性:健壮性是对正确性的补充,要求出现规约定义之外的情形的时候,软件要做出恰当的反映。即针对异常情况处理得当,起码不要“崩溃”。

        

         OOP的优点:OOP采用封装的做法,在每个封装的类中一般都会有相应的错误处理函数(如catch函数),有助于提升健壮性。

2.3.可扩展性(Extendibility)

        可扩展性:为了应对一些变化,有时需要对软件的规约进行修改,是否容易修改是一个值得考虑的问题。由此还引出了简约主义设计和分离主义设计等设计思想。

        OOP的优点:OOP采用封装的做法,隐藏了对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,在需要修改规约扩展代码时,只需要修改相应部分的代码即可,而其他部分的代码不用修改,降低了软件维护的难度。

2.4.可复用性(Reusability)

        可复用性:一次开发,多次使用,很多软件系统都采用相似的模板,因此软件代码的可复用性也是很有用的质量属性。

        OOP的优点:OOP的设计原则使它的代码呈模块化,很多在以前的项目领域中已被测试过的组件和模型都可以复用,且具有较高的质量,一个模型也可以用于多个系统之中,有助于提升可复用性。

2.5.兼容性(Compatibility)

        兼容性:不同的软件系统之间相互可容易的继承,关键在于保持设计的同构性。

        OOP的优点:OOP中对模块的设计尤其是对类的设计采用统一的标准化模块和接口设计,极大地满足了设计的同构性,有助于提升兼容性。

2.6.可移植性(Portability)

        可移植性:软件在不同的技术环境之间移植的方便程度。

        OOP的优点:OOP采用数据抽象,可以隐藏对象的具体细节,在保持外部接口不变的情况下改变内部实现,从而减少甚至避免对外界的干扰,使得即便转换技术环境也依然可以正常运行,有助于提升可移植性。

2.7.易用性(Ease of use)

        易用性:易用性是指软件使用起来容易学、安装、操作、监控,即对于用户来说使用尽量方便,为此许多软件常常给用户提供详细的指南。

        OOP的优点:将OOP原则应用于GUI组件和系统架构的设计,一方面可以使软件结构更加清晰易懂,另一方面可以帮助设计师更好地理解预期用户群体的需求,有助于提升易用性。

2.8.性能(Efficiency)

        性能:性能是指一个软件尽可能少的占用硬件资源而能满足软件功能需求的能力。需要注意的是如果没有足够的正确性,那性能将毫无意义,关注性能的同时要与其他质量属性进行折中。

        OOP的优点:面向对象分析设计允许将现实问题中的对象直接映射到程序中,减少了软件开发过程中中间环节的转换过程,通过继承大幅减少冗余的代码,有助于降低复杂度,提升性能。

2.9.及时性(Timeliness)、经济性(Economy)和功能(Functionality)

之所以将这三个特性放在一起,是因为它们都更倾向于对软件更新发布而不是程序编写的要求。

        及时性:在用户需要时或之前,保证软件及时发布。

        经济性:与及时性相伴,是一个系统在其制定预算之内满足功能需求的能力。

        功能:软件开发者为了竞争而增加越来越多的功能,值得注意的是要警惕程序因为增加功能而变得复杂、不灵活、占用过多的磁盘空间,与性能一样要与其他质量属性进行折中。

        OOP的优点:一方面,通过重用现有的模型,可以大幅提高编码效率;另一方面由于继承、封装、多态的特性,根据OOP设计出的系统具有高内聚、低耦合的特点,使系统更灵活,更容易扩展,而且成本较低。故OOP有助于提升及时性、经济性和功能。

3.总结

        学习并采用OOP原则,对于提升软件构造质量有着明显的优点,同时也不可否认OOP设计具有运行效率较低、类库庞大、类库可靠性未知等缺陷。要积极学习,辩证应用。

        注意:本文为作者软件构造课的课上笔记与课后思考的结合,作者为技术小白,java萌新,对很多专业知识的叙述可能不够准确,如有错误,还请海涵,欢迎友善指正。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值