【软工】软件设计——面向对象技术


前言

前面已经说过了面向过程的软件设计方法,这次就说一说面向对象的软件设计方法。

正文

概念

面向对象

面向对象=对象+类+继承+通信
一个软件系统是使用这4个概念设计和实现的,那么这个软件系统是面向对象的。

对象

对象是没想对象开发模式的基本成分。每个对象可以有它本身的一组属性和它可以执行的一组操作来定义。
属性可以通过执行对象的操作来改变。

消息

消息是对象间的联系(主动对象和被动对象)
消息是一个对象与另一个对象的通信单元。

类是一组具有相同的数据结构和相同的操作的对象的集合。
类的定义包括椅子数据属性和在数据上的一组合法操作。

继承

继承是使用已经存在的定义作为基础建立新定义的技术。

开发过程

应用生存期

在这里插入图片描述

论域分析

论域分析开发问题论域的问题
建立大致的系统实现环境。

应用分析

根据特定应用的需要进行论域分析
细化在论域分析阶段开发出来的信息,把注意力集中在当前要解决的问题上。

类生存期

在这里插入图片描述

类的实现

通过变量的声明,操作界面的实现以及支持界面操作的函数的实现,可实现一个类的预期行为和状态。

类的测试

若类的定义提供的界面比较狭窄,穷举测试可以实现。
类的测试在最抽象的层次开始,沿继承关系继续向下进行。
已经测试过得部分不需要重新测试。

求精和维护

这个是一个软件生存期中最花费时间的部分。
传统的维护活动是针对应用的,而求精过程是针对类的,针对把类集成在一起的结构。

分析(OOA)

面向对象设计,重点是五层次和四组成部分。

OOA的两个任务

说明面对的应用问题,最终成为软件系统基本过程的对象,还有系统所必须遵从的、由应用环境所决定的规则和约束。

明确的规定构成系统的对象如何协同合作、完成指定的功能。

五层次模型

这五个层次是分析过程中的层析,每个层次的工作都为系统的规格说明在增加了一个组成部分。
在这里插入图片描述

类与对象

表示待开发的基本结构快,这一层是整个OOA模型的基初,问题在于如何建立现实世界中的事物。

属性

对象的属性和实例链接共同组成了OOA模型的属性层。

服务

对象的服务,加上对象实例之间的消息通信,共同组成了OOA模型的服务层,消息链接用有向箭头表示。

结构

负责捕捉特定应用域中的结构关系。

一种类型,描述出了该系统的整体结构。
另一种类型,称为一般—特殊结构,表明了类的继承性。

主题
具体操作
识别类和对象

第一个层次主要是识别类和对象
类和对象是对与应用有关的概念的抽象,这一层工作是整个分析模型的基础。

选择类和对象的原则
目标系统必须记住类和对象的某些事情。
类和对象应当提供某些服务或处理,
多属性。
所有属性对于类中所有实例都有意义。

标识结构

典型的结构有两种:
一般化—特殊化结构;整体—部分结构

标识一般化—特殊化结构的方法和策略:
对于每一类和对象,将他看做是一个一般化的类,对他的所有特殊情况,考虑以下问题:
它是否在问题论域中?
是否在系统职责捏?
继承性是否存在?
是否能都符合选择类和对象的标准?

标识整体化—部分化结构的方法和策略:
总体——部分关联
包容——内含关联
收集——成员关联

标识属性

下一个层次成为属性层,对前面已经识别的类和对象做进一步的说明,在这里,对象所保存的信息成为它的属性。

类的属性所描述的是状态信息,每个实例的属性值表达了该实例的状态值。

标识属性的方法和策略:
找出属性
将属性放在适当的位置
找出实例链接
检查特殊情况
描述属性
考虑取值范围等

定义服务层

定义服务的方法和策略:
找出对象所有状态
找必要操作
建立消息连接
描述服务

消息连接的标识:
两个对象之间可能存在着由于通信需要而形成的关系,这称为消息连接。
消息连接标识从一个对象发送消息到另一个对象,由那个对象完成某些处理。

识别主题

主题可以看成是高层的模块或者子系统。
对于面向对象分析模型,主题表示此模型的整体框架。

设计(OOD)

OOD继续做面向对象分析阶段的工作,建立软件的结构。
主要工作分为:高层设计和类设计。

高层设计

设计阶段开发系统的结构,即构造应用软件的总体模型。

高层设计模型

在这里插入图片描述

高层设计的特点

可以表征为标识和定义模块的过程
模块可以是一个单个的类,也可以是由一些类组成的子系统
定义过程是职责驱动的。

遵循的原则

应使得在子系统的各个高层部件之间的通信量达到最小。
子系统应当把那些成组的类打包,形成高度的内聚。
逻辑功能分组,提供一个一个单元,识别并定位问题事件。

高层设计方法(四组成部分)

系统的四个组成成分:
问题论域部分
包括与应用问题直接有关的所有类和对象。
识别和定义这些类和对象的工作在OOA中已经开始,在OOA阶段得到的有关应用的概念模型描述了我们要解决的问题。

设计:
在OOA阶段描述了要解决的问题,在OOD阶段,要继续OOA阶段的工作,对在OOA中得到的结果进行改进和增补。
在OOA模型中的某些类和对象,结构、属性、操作进行组合和分解。

人机交互部分
系统某个特定实现的界面

用户界面设计:
用户分类
描述人及其任务的脚本
设计命令层
设计详细的交互
继续做原型
设计HIC(人机交互)类

任务管理部分
任务是进程的别称,是执行一系列活动的一段程序。
任务管理主要包括任务的选择和调整。

定义各个任务:
定义任务的工作主要包括:是什么任务、如何协调工作及如何通信。

数据管理部分

数据管理方法:
文件管理、关系数据库管理、面向对象库数据管理。

提供了在数据管理系统中存储和检索对象的基本结构,包括对永久性数据的访问和管理。
分离了数据管理结构所关系的事项,包括文件、关系型或面向对象DBMS等。

类设计

实现与测试

测试策略
单元测试(类测试)

在面向对象环境下,最小的可测试的单元是封装了的类或对象,而不是程序模块。
面向对象软件的类测试等价于传统软件开发方法中的单元测试。
完全孤立的测试类的各个操作是不行的。

组装测试

基于线索测试
把为响应某一系统输入或事件所需要的一组类组装在一起,每一条线索将分别测试和组装。
基于应用测试
着眼于系统结构,首先测试独立类,这些类只使用很少的服务器类,再测试那些使用了独立类的相关类。

确认测试

确认需求,利用黑盒测试。

不同层次测试

类的测试用例组
一个类的测试用例组由满足测试需要的用例组成。
每个测试用例是一系列输入值,它们将在要求的处理中执行,以满足测试需求。

类测试

每个类尽可能的孤立的进行测试。

测试类的测试用例用例组:
先定义测试类的各个操作的测试用例组
把测试用例组扩充,针对被测操作调用类中其他操作的情况,进行组装测试。

类测试的种类:
基于定义的测试
把类当做是一个黑盒对待,确认类的实现是都遵照它的定义。
基于程序的测试
考虑类的实现,明确代码编写的是否正确。

组装测试

类组装
测试一个新类时,需要先测试在定义中所涉及的类,在考虑这些类的组装。

总体组装
把所有组成完成软件的各个部分集合在一起。
这种测试所选择的测试用例应当瞄准待开发软件的目标。

OMT(对象模型化技术)

对象模型化技术把分析时收集的信息构造在三类模块中,对对象模型,功能模型和动态模型。
这个模型化的过程是一个迭代的过程。
在这里插入图片描述

对象模型

三个模型中最关键的一个模型。

作用

描述系统的静态结构,包括构成系统的类和对象,他们的属性和操作,以及他们之间的关系。

在OMT中,类和类之间的关系叫关联。

关联的形式:

聚合:代表整体和部分的关系,这是一种特殊形式的关联。
限定:用以对关联的含义做某种约束。
角色:用来说明关联的一端,由于多数关联具有两个端点,所以涉及到两个角色。

动态模型

着重于系统的控制逻辑。
包含两个图,一个是状态图,一个是事件追踪图。

状态图

是一个状态和事件的网络,侧重于描述每一类对象的动态行为。
在状态图中国,状态是对某一时刻中属性特征的概括,而状态迁移表示这一类对象在何时对系统内外发生的那些事件做出何种响应。

操作是一个伴随状态迁移的瞬间发生的行为,与触发事件一起表示在有关的状态迁移之上。

动态模型由多个状态图组成。
多个状态图并发的执行,可以独立的改变状态。

事件

一个事件发生在一个时刻
每个事件都是单独发生
我们建立事件类,并给每个事件一个名字,指明共同结构和行为。
事件从一个对象向另一个对象传送信息。

事件追踪图

事件追踪图侧重于说明发生于系统执行过程中的一个特定“场景”
场景也叫作脚本,是完成系统某个功能的一个事件序列。

状态图和事件追踪图的关系

状态图叙述一个对象的个体行为,事件追踪图给多个对象所表现出来的集体行为。

功能模型

由多个数据流图组成,指明从外部输入,通过操作和内部存储,直到外部输出,这整个的数据流情况。

多有的数据流图形成一个层次结构。在这个层次结构中,一个数据流图的过程可以由下一个的数据流图做进一步的说明。

基于三个模型的分析过程

功能模型定义“做什么”
动态模型定义“何时做”
对象模型定义“对谁做”

用户界面设计——人机交互部分

特性

可使用性
灵活性
复杂性和可靠性

任务分析
用户特性分析

目的:
详细了解所有用户的技能和经验,以便能预测用户对不同的界面设计会做出什么反应。
用户类型:
外行型
初学型
熟练型
专家型
用户特性度量:
用户使用频率
是否能自由选择界面
对计算机的熟悉程度
用户知识/思维能力
用户生理能力和技能

用户工作分析

任务分析,是对系统内部活动的分解。
采用自顶向下、逐步分解
对功能进行分解时,使用数据流图和数据字典进行描述。
任务可以有一组动作构成,规定了为实现这个任务,所必须的一系列活动。
任务的细节,可以使用结构化语言来表达,描述了动作完成的序列及在完成动作时所有例外的情况。

用户模型和观点
理论认知模型
用户知识模型
用户特性模型
用户任务模型
用户观点

任务模型
静态模型——关系模型,用于展示界面的结构设计。
动态模型——对系统操作或与会话设计有关的对象的动态行为的描述。

用户界面任务和工作设计

目的在于创造用户的工作环境。

任务分配

动作分配给计算机、用户或者两者。

产生两个网络,一个是人的任务网络,一个是计算机的任务网络。
人的任务网络说明如何安装、操作和使用系统,最后形成一个操作过程和用户手册的基础。
计算机的任务网络描述计算机应担负的工作。

任务分配步骤:
检查数据流图,标记计算机和人的任务,或者是共同完成的任务。
对于共同完成的任务,将任务的灭一个动作分配给计算机或人。
构成新的任务网络。
进一步细化任务。

工作方式和工作设计

目的:
使任务需求与操作员的能力匹配。

度量:
复杂性
专心程度
责任心
变化性

工作方式:
由一个人单独完成一个系统的目标
任务进展跟踪

界面设计基本类型

界面设计类型分类:
使用的难易程度
学习的难易程度
操作进度
复杂程度
控制
开发的难易程度

数据输入界面设计

规则:
简化用户工作
减少用户输入工作量
组织输入次序

输入方法:
关键词数据输入
光学标识/识别
条形码

布局设计
引表
块结构
分组结构

功能键

直接操作界面基本特性:
明确的动作
及时反馈
增量效应
直观的交互作用
剥皮式的学习
可逆的动作
事先验证

数据显示设计
控制界面设计

感谢阅读~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张_Laura

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值