软工导论知识框架(八)面向对象设计风格

一.面向对象实现

  • 把面向对象设计结果翻译成面向对象程序
  • 测试并调试面向对象的程序

二.程序设计语言

所有语言都可完成面向对象实现,但效果不同。

使用非面向对象语言编写面向对象程序,则必须由程序员自己把面向对象概念映射到目标程序中

1.将来能够占主导地位 ——  产品有生命力

2.可重用性(基本特点和主要优点

3.类库和开发环境

  • 考虑类库中提供有价值类      
  • 开发环境中提供基本软件工具和类库编辑工具及浏览工具

4.其他因素

培训服务;技术支持;开发工具、开发平台、发行平台;对机器性能和内存需求;集成已有软件容易程度

三.程序设计风格(结构化程序设计依然要遵守)

1.提高可重用性

  • 提高方法的内聚: 方法只完成单个功能,涉及多个不相关功能时,需要分解。
  • 减小方法的规模:当方法规模过大,需要分解
  • 保持方法的一致性:功能相似方法有一致名字、参数特征(包括参数个数、类型和次序)、返回值类型、使用条件及出错条件等
  • 把策略与实现分开

策略方法:负责做出决策,提供变元,管理全局资源

实现方法:负责完成具体操作

实现方法相对独立,可在其它系统中重用,将二者分开。

  • 全面覆盖:应针对所有组合写方法、对空值、极限值、界外值做出响应
  • 尽量不用全局信息降低方法与外界耦合程度
  • 利用继承机制:实现共享和提高重用程度的主要途径

(1)调用子过程:把公共代码分离出来,构成一个公用方法。

(2)分解因子

         从不同类相似方法分解出不同的代码, 余下作为公用方法中公共代码。把分解出的因子作为名字相同算法不同的方法,在不同 类中定义。 

(3)使用委托(不存在一般特殊的关系时~)

(4)代码封装在类中:把被重用的代码封装在类中

2.提高可扩充性(从用心一定程度也可以提高可扩充性)

  • 封装实现策略: 应把类的实现策略(包括数据结构、算法等)封装起来,对外提供公有接口。
  • 不要用一个方法遍历多条关联链:一个方法应只包含对象模型中有限内容。否则导致方法过分复杂,不易理解和修改扩充。
  • 避免使用多分支语句: 增添新类时会修改原有的代码,合理利用多态性机制(根据类的性质自动选择行为)
  • 精心确定公有方法:公有方法是向公众公布的接口。

3.提高健壮性(鲁棒性)

  • 预防用户操作错误: 任何输入(错误),给出提示信息,再次接收用户输入。
  • 检查参数合法性(尤其是公有方法)
  • 不预先确定限制条件:使用动态内存分配机制,创建未预先设定限制条件数据结构。
  • 先测试后优化(性能大于优化

四.面向对象测试策略

1.单元测试

单元:封装的类和对象

对程序内部具体单一功能模块测试,如程序用C++实现,主要对类成员函数测试。

传统的测试方法都可使用,等价类划分、边值分析、逻辑覆盖法、基本路径法。

2.集成测试

在面向对象的软件中不存在层次的控制结构,传统的自顶向下或自底向上的集成策略就没有意义了。

 此外,由于构成类的各个成分彼此间存在直接或间接的交互,一次集成一个操作到类中(传统的渐增式集成方法)通常是不现实的

面向对象软件的集成测试主要有下述两种不同的策略:

  • 基于线程的集成测试:把响应系统的一个输入或一个事件所需类集成起来。
  • 基于使用的集成测试:先测独立类,测完后测独立类下一层类(依赖类),到测完。

3.确认测试(黑盒法)

测用户可见动作,可识别系统输出。    

根据动态模型和描述系统行为的脚本设计确认测试用例。

4.测试用例的设计

与传统软件测试(测试用例的设计由软件的输入、处理、输出视图或单个模块的算法细节驱动)不同,面向对象测试关注于设计适当的操作序列以检查类的状态。

(1)测试类的方法

 随机测试

 划分测试(类似等价类划分)

  • 基于状态的划分:设计测试用例,以分别测试改变状态的操作和不改变状态的操作。 
  • 基于属性的划分:根据类操作属性—— 使用该属性,修改属性,不操作该属性。
  • 基于功能的划分

基于故障测试 :错误推测法,如边界或输入输出为零等。

(2)集成测试方法

多类测试:测类间协作,同样可采用随机测试和划分测试。

 

  • 随机测试
  • 划分测试

从动态模型导出测试用例:测试用例涵盖所有状态。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/88161.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023国赛数学建模A题思路分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

0基础学C#笔记10:归并排序法

文章目录 前言一、递归的方式二、代码总结 前言 将一个大的无序数组有序,我们可以把大的数组分成两个,然后对这两个数组分别进行排序,之后在把这两个数组合并成一个有序的数组。由于两个小的数组都是有序的,所以在合并的时候是很…

38 | 浦发银行股票分析案例

本文将通过一个浦发银行股票分析案例,探讨如何从多个维度对股票进行分析,包括基本面、技术面和市场环境等因素。我们将深入挖掘浦发银行的财务数据、业务模式以及市场定位,以了解其内在价值和潜在风险。同时,我们还将考察技术面的指标,如价格走势、均线形态等,以揭示市场…

全球劳动力革命,Papaya Global 打破薪资界限

员工需求和劳动力结构的进一步变化,只会增加对更加自动化和全面的全球薪资解决方案的需求。 远程工作潮流与全球劳动力的蓬勃发展,使得企业在全球范围内,寻找最优秀的人才成为可能。然而,随之而来的复杂薪资管理挑战,也…

系统架构设计师-系统可靠性分析与设计

目录 一、可靠性相关基本概念 二、可靠性指标 1、串联系统与并联系统可靠性指标计算 2、混合系统 三、可靠性设计 1、影响软件可靠性的主要因素: 2、增加可靠性的解决方案 2.1 避错技术 2.2 降低复杂度设计 2.3 检错技术 2.4 容错技术 3、双机容错 一、可靠性相关…

idea中提示Unsupported characters for the charset ‘ISO-8859-1‘

application.properties中文注释拉黄线 ,提示Unsupported characters for the charset ISO-8859-1 解决办法: 注意: 改完之后之前输入的中文就变成“ ???”了,建议备份一下 1、打开setti…

BLE蓝牙协议栈分析

BLE——协议层次结构 一、BLE Controller Controller实现射频相关的模拟和数字部分,完成最基本的数据发送和接收,Controller对外接口是天线,对内接口是主机控制器接口HCI(Hostcontroller interface); 控制…

尚医通(医院预约挂号系统)笔记

文章目录 一. 登录系统1. 手机登录1.1 业务流程1.2 代码1.3 JWT 2. 微信登陆2.1 业务流程2.2 代码2.3 OAthu2 3. 用户认证与网关整合 二. 预约挂号1. 业务流程及模块设计 一. 登录系统 1. 手机登录 1.1 业务流程 传入手机号和验证码校验手机号和验证码是否为空校验手机验证码…

【用unity实现100个游戏之6】制作一个战旗自走棋类游戏(附源码)

文章目录 前言导入素材开始1. 设置瓦片间隙2. 放置全图瓦片3. 美化瓦片地图4. 添加树木障碍物5. 设定不同的排序图层6. 瓦片交互6. 瓦片交互优化6. 瓦片是否允许角色7. 添加角色8. 新增游戏管理脚本9. 角色移动范围逻辑10. 角色移动范围可视化11. 角色移动12. 重置瓦片颜色12. …

C语言必会题目(2)

W...Y的主页 😊 代码仓库分享💕 今天继续分享C语言必会的题目,上一篇文章主要是一些选择题,而今天我们主要内容为编程题的推荐与讲解 准备好迎接下面的题了吗?开始发车了!!! 输入…

Linux源码剖析匿名共享内存shmem原理

如下问题如果都清楚了就不用看本文了: 1. shmem ram文件系统的初始化流程是怎样的 2. shmem思想上想复用基于文件的操作流程,实现上shmem也引入了一个文件,那么类似文件open会生成struct file,shmem的struct file怎么生成的 3.…

Ansible Playbook快速部署一主多从MySQL集群

部署目标: 1、快速部署一套一主两从的mysql集群 2、部署过程中支持交互式定义安装目录及监听端口号 部署清单目录结构: rootmaster:/opt/mysql# tree . . ├── group_vars │ └── all.yml ├── hosts ├── mysql.yml └── roles└── mys…

【Spring Cloud +Vue+UniApp】智慧建筑工地平台源码

智慧工地源码 、智慧工地云平台源码、 智慧建筑源码支持私有化部署,提供SaaS硬件设备运维全套服务。 前言:互联网建筑工地,是将互联网的理念和技术引入建筑工地,从施工现场源头抓起,最大程度的收集人员、安全、环境、材…

C++的六大“天选之子“拷贝构造与与运算符重载

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 &#x1f…

MySql(干货)

写这篇博客的目的不是为了将介绍原理,而是为了Sql中的代码操作属实太多了,在这里进行一个汇总,方便查阅!!! Sql分类 分类全称说明 DDL Data Definintion Language数据定义语言,用来定义数据库对…

Docker知识(详细笔记)

概览图 文章目录 概览图docker 知识速查1. 初识 Docker1.1 概念1.2 特点1.3 架构1.4 应用场景1.5 安装 Docker1.6 配置 Docker 镜像 2. Docker 命令2.1 Docker 进程相关命令2.2 Docker 镜像相关命令2.3 Docker 容器相关命令 3. Docker 容器的数据卷3.1 数据卷概念及作用3.1.1 概…

jvm里的内存溢出

目录 堆溢出 虚拟机栈和本地方法栈溢出(栈溢出很少出现) 方法区和运行时常量池溢出 本机内存直接溢出(实际中很少出现、了解即可) 堆溢出 堆溢出:最常见的是大list,list里面有很多元素 堆溢出该怎么解决…

修改IDEA的idea.vmoptions参数导致IDEA无法打开(ReservedCodeCacheSize)

事发原因 Maven导依赖的时候OOM,因此怀疑是内存太小,尝试修改idea.vmoptions的参数,然后发现IDEA重启后打不开了,卸载重装后也无法打开。。。 实际上如果导包爆出OOM的话应该调整下图参数,不过这都是后话了 解决思路…

52.Linux学习day02 基础命令详解2

目录 Linux常见的基础命令 1.cp 2.mv 3.rm 4.find 5.grep 6.管道 | 7.wc 8.su 9.关机与重启 10.runleve Linux常见的基础命令 1.cp 用于复制文件或目录 使用 cp 命令的基本格式如下: cp [选项] 源文件 目标文件或目录选项:cp 命令支持一些选…

Spring5新功能

文章目录 前言一、整合日志功能二、Nullable注解三、函数式风格编程四、JUnit5单元测试框架总结 前言 整合日志、Nullable注解、函数式风格编程、整合JUnit5、Webflux 一、整合日志功能 Spring5移除了Log4jConfigListener,官方建议使用Log4j2. 依赖: &…