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

2023-11-09

一.面向对象实现

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

二.程序设计语言

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

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

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

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

3.类库和开发环境

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

4.其他因素

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

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

1.提高可重用性

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

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

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

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

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

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

(2)分解因子

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

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

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

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

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

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

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

四.面向对象测试策略

1.单元测试

单元:封装的类和对象

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

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

2.集成测试

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

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

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

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

3.确认测试(黑盒法)

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

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

4.测试用例的设计

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

(1)测试类的方法

 随机测试

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

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

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

(2)集成测试方法

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

 

  • 随机测试
  • 划分测试

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

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软工导论知识框架(八)面向对象设计风格 的相关文章

  • Python Selenium搭建UI自动化测试框架

    自动化测试是软件测试中非常重要的一部分 可以提高测试效率和测试覆盖率 在UI自动化测试中 Selenium是非常流行的工具 本文将介绍如何使用Python和Selenium搭建UI自动化测试框架 一 环境准备 在开始搭建UI自动化测试框架之
  • JavaScript资源大全中文版(Awesome最新版)

    Awesome系列的JavaScript资源整理 awesome javascript是sorrycc发起维护的 JS 资源列表 内容包括 包管理器 加载器 测试框架 运行器 QA MVC框架和库 模板引擎 数据可视化 时间轴 编辑器等 前
  • Elasticsearch安装IK分词器、配置自定义分词词库

    一 分词简介 1 单字分词 2 二分法分词 3 词库分词 二 配置IK中文分词器 三 配置自定义分词拓展词库 一 分词简介 在Elasticsearch中 假设搜索条件是 华为手机平板电脑 要求是只要满足了其中任意一个词语组合的数据都要查询
  • 自学软件测试6个月,找到了月薪8.5K的工作,多亏了这套学习方法

    8 5K的薪资也许对csdn的各位大佬来说并不算什么 但是对于我这种曾经在工厂 每月工资才4000左右的人来说 已经是巨大的改变了 文中附我的学习心得及学习资料 其实我在很早就对编程感兴趣 只是一直缺乏学习的动力 刚好在去年疫情期间 厂里停

随机推荐

  • vue + ts 项目中watch的用法

    要使vue支持ts写法 我们需要用到vue property decorator 这个组件完全依赖于vue class componet 首先安装 npm i D vue property decorator Watch path stri
  • Tkinter PhotoImage 踩坑记录

    1 直接使用PhotoImage file xxxx 报错 tkinter TclError couldn t recognize data in image file xxxxx png 原因 PhotoImage支持的图片格式有限 解决
  • MySQL视图、索引、备份与恢复、执行计划

    目录 一 前言 1 导读 2 学习的好处 二 视图 1 什么是视图 2 视图与数据表的区别 3 使用视图的优点 4 视图的语法 1 创建视图 CREATE VIEW 2 查询视图数据 3 更新视图数据 4 修改视图定义 ALTER VIEW
  • 超强实用:中国各地特产风味大搜捕!

    http www lotour com snapshot 2006 2 6 snapshot 32012 shtml 来源 中国交通旅游图册 北京特产风味 北京集全国风味佳肴 工艺美术和民族用品于一城 宫廷菜点 烤鸭 果脯 酥糖 京绣 戏装
  • 如何用Python让你的电脑说话

    如何用Python让你的电脑说话 你成为亿万花花公子的第一步 如果你是像 钢铁侠 这样的电影的粉丝 你可能已经幻想过得到你自己的贾维斯 那么 在这篇文章中 我将告诉你如何开始制作你自己的电脑助手 我们将通过一个小的编程和一些聪明的pytho
  • 图基本算法介绍:广度优先搜索、深度优先搜索、拓扑排序、强连通分支(算法篇)

    一 广度优先搜索 什么是广度优先搜索 在给定图G V E 后和一个特定的源顶点s的情况下 广度优先搜索 系统的探索G中的边 以期发现从s可以到达的所有顶点 并计算s到所有这些可达顶点之间的距离 即最少的边数 广度优先搜索的作用 个人从定义理
  • VC下加载多种格式图片的方法总结

    尽管VC有提供相应的API和类来操作bmp位图 图标和 增强 元文件 但却不支持jpg gif和png等格式的图片 而这几种格式却是常常要用到的 这里我给大家介绍两种办法来操作这些格式的图片 1 用API OleLoadPicture来加载
  • Object对象如何类获取对应类的属性值

    Object对象如何类获取对应类的属性值 public void test throws NoSuchFieldException IllegalAccessException Deposit deposit new Deposit dep
  • 卡方分布

    以上讲了一种称为服从正态分布的概率密度函数 今天 讲一讲服从 卡方分布 的概率密度函数 首先给出该函数的定义 自由度 是公式中一个重要参数 自由度不同 图形的形状也完全不同 众所周知 直线方程中的参数k是斜率 它控制着直线的倾斜角度 它不同
  • java中trim()方法

    string类型 指定要删除首部和尾部空格的字符串返回值String 函数执行成功时返回删除了string字符串首部和尾部空格的字符串 发生错误时返回空字符串 如果参数值为null时 会抛出空 指针异常 主要是为了防止复制过来首尾出现字符串
  • Day 15 - 面向对象2习题

    建立一个汽车类Auto 包括轮胎个数 汽车颜色 车身重量 速度等属性 并通过不同的构造方法创建实例 至少要求 汽车能够加速 减速 停车 再定义一个小汽车类CarAuto 继承Auto 并添加空调 CD属性 并且重新实现方法覆盖加速 减速的方
  • C++二叉树遍历总结\100. Same Tree

    理论学习 概念介绍 遍历图解 遍历算法 代码实践 实现模板 Same Tree 题目描述 代码实现 转载请注明出处 http blog csdn net c602273091 article details 55195284 理论学习 概念
  • ajp协议服务器端如何配置,详解Tomcat HTTP协议与AJP协议

    IT168评论 Tomcat最主要的功能是提供Servlet JSP容器 尽管它也可以作为独立的Java Web服务器 它在对静态资源 如HTML文件或图像文件 的处理速度 以及提供的Web服务器管理功能方面都不如其他专业的HTTP服务器
  • count()用啥好?

    按照效率排序的话 count 字段
  • template模板中的if判断语句

    if 0 value task state 22 else 33 if
  • 程序员,都去写一写前端代码吧

    转至 http www raychase net 1162 你可以认为我是一个极端的人 就像有许多人专注于自己的领域而不屑于其它 肤浅 的工作范畴一样 比如我见过不少认为做portal没有技术含量的判定 做工程都是充满苦逼行为的言论 最近则
  • Quant 实习申请总结[转自丁丁笑笑生]

    我是University of Michigan博士第四年的学生 专业是高能理论物理 弦论 从北大元培毕业来到美国之后 我对科研的兴趣 信心和成就感与日俱减 加之对于未来组建家庭的考虑 决定放弃科研理想和道路 寻找一份工作 养家糊口 积累一
  • C++ 中的 POD 类型

    C 内存管理系列文章汇总 C 中数据类型和变量总结 C 中内存分区总结 C 中三种内存对象特点总结 C 中栈对象的使用总结 C 中 static 静态对象的使用总结 C 中堆对象的使用总结 C 中普通类的对象布局 C 中字节对齐总结 C 继
  • Linux终端信息

    获取终端能显示的行数和列数 student myhost tput cols 140 student myhost tput lines 35 获取终端名 student myhost tput longname xterm with 25
  • 软工导论知识框架(八)面向对象设计风格

    一 面向对象实现 把面向对象设计结果翻译成面向对象程序 测试并调试面向对象的程序 二 程序设计语言 所有语言都可完成面向对象实现 但效果不同 使用非面向对象语言编写面向对象程序 则必须由程序员自己把面向对象概念映射到目标程序中 1 将来能够