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

news2024/11/26 20:54:44

一.设计准则

  • 分析:提取、整理用户需求,建立问题域精确模型。
  • 设计:转变需求为系统实现方案,建立求解域模型。

在实际的软件开发过程中分析和设计的界限是模糊的,分析和设计活动是一个多次反复迭代的过程。分析的结果可以是设计的一部分,设计又可以对分析产生更加严格的要求。

面向对象方法学在概念和表示方法上的一致性,保证了在各项开发活动之间的平滑(无缝)过渡,领域专家和开发人员能够比较容易地跟踪整个系统开发过程,这是面向对象方法与传统方法比较起来所具有的一大优势。

1、抽象(过程与数据均支持抽象

通过类抽象机制实现,提高可重用性

2、信息隐蔽

通过封装性实现,提高独立性。

3、弱耦合:

交互耦合:对象间通过消息连接实现。(追求松散)

  • 降低消息连接复杂度(减少参数个数,降低参数复杂度)
  • 减少信息数 

继承耦合:一般类和特殊类之间耦合。(追求紧密)

有继承关系基类和派生类是系统中粒度更大模块。

4、强内聚

  • 服务内聚:只完成一个功能。
  • 类内聚:一个类只有一个用途,否则分解。
  • 一般特殊内聚:设计合理,是对领域知识正确抽取。

5、可重性 (设计时就要考虑)

  • 尽量利用已有类(类库、已创建类)    
  • 创建新类考虑以后可重用性

二.启发规则(遵守规则有助于设计出高质量设计结果)

1、设计结果清晰易懂。

  • 用词一致
  • 使用已有协议
  • 减少消息模式的数目
  • 避免模糊的定义

2、一般-特殊结构深度适当。

约100个classes,则设计7±2层

3、设计简单class

  • 避免过多attributes 
  • 分配给每个类任务应简单
  • objects间合作关系简单
  • 避免过多methods(7个)

4、使用简单的协议

经验表明,通过复杂消息相互关联的对象是紧耦合的,对一个对象的修改往往导致其他对象的修改。

5、使用简单的服务

三.系统分解

面向对象设计模型:四部分组成(有些领域目标系统可只由3个或更少子系统组成)

  • 问题域:直接负责实现客户需求子系统
  • 人机交互:实现用户界面子系统,包括可复用的GUI子系统。
  • 任务管理:确定各类任务,把任务分配给适当的硬件或软件去执行。
  • 数据管理:负责对象的存储和检索的子系统。 

子系统间交互方式:

客户供应商关系:“客户”子系统了解“供应商”子系统接口,反之则不用。

平等伙伴关系:各子系统都有可能调用其它子系统,或为其它子系统提供服务。交互方式复杂,各子系统需要了解彼此接口。  

四.设计问题域子系统

1.设计基础: 分析阶段精确问题域模型。

2.设计任务 :从实现角度补充、修改问题域模型。

可能做的修改或补充主要包含如下几个方面:

  • 调整需求:用户需求或外部环境变化;分析模型不完整、准确。

        无论出现上述哪种情况,通常都只需简单地修改面向对 象分析结果,然后再把这些修改反映到问题域子系统中。

  • 重用已有类(设计阶段必须开始考虑)

        根据问题解决的需要,把从类库或其他来源得到既存类 增加到问题解决方案中去。

  • 把问题域类组合在一起

        设计时,从类库中引进一个根类,作为包容类,把所有与问题域有关的类关联到一起,建立类的层次。

  • 增加一般化类

        某些特殊类要求一组类似的服务,应加入一般化的类,定义为所有特殊类共用的一组服务名,服务都是虚函数;在特殊类中定义其实现(例如C++中的模板函数

  • 调整继承关系

        在OOA阶段建立的对象模型中可能包括多继承关系,但实 现时使用程序设计语言可能只有单继承,需对分析结果修改。

五.设计人机交互子系统

1.分析阶段:用户界面需求。

2.设计阶段:确定人机交互细节,窗口报表形式,命令层次等。

3.Theo Mandel三条黄金原则

  • 置用户于控制之下
  • 减少用户的记忆负担
  • 保持界面一致
  • 允许用户操作控制的原则:

1)交互模式的定义不能强迫用户进入不必要的或不希望的动作的方式

2)提供灵活的交互

3)允许用户交互可以被中断和撤销

4)当技能级别增长时可以使交互流水化并允许定制交互

5)使用户隔离内部技术细节

  • 能够减少用户记忆负担:

1)减少对短期记忆的要求

2)建立有意义的缺省

3)定义直觉性的捷径

4)界面的视觉布局应该基于真实世界的隐喻

5)以不断进展的方式揭示信息

  • 用户应以一致的方式展示和获取信息:

1)所有可视信息的组织均按照贯穿所有屏幕显示所保持的设计标准

2)输入机制被约束到有限的集合,在整个应用中被一致地使用

3)从任务到任务的导航机制被一致地定义和实现

4.Web界面设计

简洁性

  • 避免使用许多复杂的图片和动画等造成用户操作的分心
  • 界面布局应当适合清晰地表达信息
  • 具有与之匹配的导航性

一致性

  • 诸如同样的按钮在所有窗口中保持一致的位置
  • 始终使用 一致的配色方案
  • 在web界面设计时,需要注意美观和性能之间的折中平衡, 太大的图片会造成系统时间的不必要浪费。

 

 使用颜色的指导原则

  • 避免使用太多的颜色(通常一个窗口内不要多于三种颜色)
  • 使用颜色的变化显示系统状态的变化
  • 注意在低分辨率情况下的颜色显示

注意颜色的搭配

六.设计任务管理子系统

  • 在实际系统中,许多对象之间往往存在相互依赖关系。 设计工作的一项重要内容就是,确定哪些是必须同时动作的对象,哪些是相互排斥的对象。进一步设计任务管理子系统。
  • 系统总有许多并发行为,需按照各自行为的协调和通信关系, 划分各种任务(进程),简化并发行为的设计和编码。
  • 确定各类任务,把任务分配给适当的硬件和软件去执行。
  • 根据动态模型分析、定义并发行。

 1、分析并发性

并发对象:

  • 无交互行为的对象
  • 同时接受事件的对象

定义任务:检查各个对象的状态图,找没并发对象的路径。(任何时候路径中只有单个对象是活跃的),称控制线。通过分离出控制线设计任务。

并发任务的分配方案:

  • 每个任务分配到独立的处理器
  • 分配到相同处理器,通过操作系统提供并发支持

2、设计任务子系统

  • 事件驱动型:指睡眠任务(不占用cpu),某个事件发生,任务被触发,醒来做    相应处理,又回到睡眠状态。
  • 时钟驱动型任务:按特定时间间隔去触发任务进行处理。如某些设备需要周期性的采集数据。
  • 确定优先任务:高优先级,分离成独立任务,保证时间约束。
  • 确定关键任务:严格可靠性,分离考虑,精心设计和编码,严格测试。
  • 确定协调任务:三个以上任务,引入协调任务,控制封装任务间协调。
  • 尽量减少任务数:任务多,设计复杂、不易理解、难维护
  • 确定资源需求:计算系统载荷,每秒处理业务数,处理一个业务花费时 间,估算所需cpu(或其他固件)处理能力。

综合考虑,确定哪些任务硬件实现,哪些任务软件实现。

七.设计数据库管理子系统(检索和存储对象的基础)

1.选择数据存储管理模式

文件管理系统

  • 成本低,简单。
  • 操作级别低,不同操作系统的文件系统差别大。

关系数据库管理系统

面向对象数据库管理系统

  • 扩展的关系数据库管理系统:增加抽象数据类型,继承等机制,如oracle8.0 。
  • 扩展的面向对象语言:增加数据库存储和管理对象机制。

2.设计数据管理子系统

设计数据格式与数据存储管理模式密切相关:

(1)文件系统:达到第一范式;减少文件数;编码减少文件中属性值。

(2)关系数据库管理系统:达到第三范式,满足性能和存储需求。

(3)面向对象数据库管理系统:同(2)。

范式:对表的数据结构进行规范,规范化的模式称为范式。

设计相应服务

1)文件系统:打开文件、记录定位、检索记录、更新。

2)关系数据库管理系统:哪些由数据库管理系统承担,哪些由前端开发工具承担;访问哪 些库表、定位记录、更新等。

3)面向对象数据库管理系统: 同(2)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无涯教程-Perl - msgsnd函数

描述 此功能使用可选的FLAGS将消息MSG发送到消息队列ID。 语法 以下是此函数的简单语法- msgsnd ID, MSG, FLAGS返回值 该函数在错误时返回0,在成功时返回1。 Perl 中的 msgsnd函数 - 无涯教程网无涯教程网提供描述此功能使用可选的FLAGS将消息MSG发送到消息队列ID。 语法…

接地电阻测试仪的原理和使用事项

接地电阻测试仪(Ground Resistance Tester)是用来测量接地电阻的一种仪器。接地系统是指用于保护人员和设备的设施,它将电流引导到地下,将任何潜在危险的电流导向地面。 接地电阻测试仪的作用是通过测量接地系统的电阻值来评估其…

C++ STL string类模拟实现

目录 string类成员变量 一.构造函数 二.析构函数 三.拷贝构造 四.size(),capacity() 五.operator [ ] 六. operator 七.字符串比较 八.reserve() 九.push_back(),append() 十.operato…

【雕爷学编程】Arduino动手做(12)---霍尔磁场传感器模块5

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…

数据归一化:优化数据处理的必备技巧

文章目录 🍀引言🍀数据归一化的概念🍀数据归一化的应用🍀数据归一化的注意事项与实践建议🍀代码演示🍀在sklearn中使用归一化🍀结语 🍀引言 在当今数据驱动的时代,数据的…

Vue在页面输出JSON对象,测试接口可复制使用

效果图&#xff1a; 数据处理前&#xff1a; 数据处理后&#xff1a; 代码实现&#xff1a; HTML: <el-table height"600" :data"tableData" border style"width: 100%" tooltip-effect"dark" size"mini"><el-…

Django笔记之数据库函数之日期函数

日期函数主要介绍两个大类&#xff0c;Extract() 和 Trunc() Extract() 函数作用是提取日期&#xff0c;比如我们可以提取一个日期字段的年份&#xff0c;月份&#xff0c;日等数据 Trunc() 的作用则是截取&#xff0c;比如 2022-06-18 12:12:12&#xff0c;我们可以根据需求…

深度学习基础知识笔记

深度学习要解决的问题 1 深度学习要解决的问题2 应用领域3 计算机视觉任务4 视觉任务中遇到的问题5 得分函数6 损失函数7 前向传播整体流程8 返向传播计算方法1 梯度下降9 神经网络整体架构 11 神经元个数对结果的影响12 正则化和激活函数1 正则化2 激活函数 13 神经网络过拟合…

人工智能可解释性(二)(梯度计算,积分梯度等)

目录 1.定义 2.详述 2.1局部解释 可视化方法 梯度计算 2.2积分梯度Integrated Gradients&#xff08;梯度计算进阶&#xff09; 2. 3全局解释 2.3.1Activation Maximization 2.3.2GAN,VAE 2. 4用一个可解释模型解释不可解释模型 2. 4.1LIME 局部解释 参考文献 1.定义 可…

access怎么做进销存?借助access开发进销存管理应用

我不太推荐使用Access&#xff0c;因为他的缺点还是比较明显的&#xff1a; 1、软件自身限制 不能用于互联网&#xff1a;使用Access制作好的管理软件&#xff0c;访问页只能在局域网中使用&#xff1b;只能在Windows上运行&#xff1a;Access仅支持windows的运行环境&#x…

从零开始学习 Java:简单易懂的入门指南之多态(十)

多态&包&final&权限修饰符&代码块 第一章 多态1.1 多态的形式1.2 多态的使用场景1.3 多态的定义和前提1.4 多态的运行特点1.5 多态的弊端1.6 引用类型转换1.6.1 为什么要转型1.6.2 向上转型&#xff08;自动转换&#xff09;1.6.3 向下转型&#xff08;强制转换…

【将回声引入信号中】在语音或音频文件中引入混响或简单回声,以研究回声延迟和回波幅度对生成的回波信号感知的影响(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

积分代换和周期函数

昨晚上看书&#xff0c;有一个稳定随机过程的例题&#xff0c;涉及积分上下限代换、周期函数的微积分性质等知识点。这种题型以前肯定接触过&#xff0c;当下遇到了&#xff0c;思维仍然迷迷糊糊&#xff0c;像是一团乱麻&#xff0c;纠缠不清&#xff0c;照着答案思考了半天&a…

[Blender]Geometry nodes altermesh to UE

首先要先下载插件 AlterMesh – Use geometry nodes inside Unreal 下载对应版本的插件后 打开UE&#xff0c;在对应的设置里面挂上blender.exe的路径 去官方下载一个Blender Geometry nodes 的示例 Demo Files — blender.org​​​​​​

沃罗诺伊图(Voronoi):迷人的世界【1/2】

一、说明 Voronoi图&#xff08;也称为狄利克雷镶嵌或泰森多边形&#xff09;在自然界中无处不在。你已经遇到过他们数千次了&#xff0c;但也许没有这样称呼它。Voronoi图很简单&#xff0c;但它们具有令人难以置信的特性&#xff0c;在制图&#xff0c;生物学&#xff0c;计算…

【EI/SCOPUS征稿】第九届材料加工与制造工程国际学术会议(ICMPME 2023)

第九届材料加工与制造工程国际学术会议 2023 9th International Conference on Materials Processing and Manufacturing Engineering (ICMPME 2023) 第九届材料加工与制造工程国际学术会议(ICMPME 2023)定于2023年10月13-15日在中国南昌隆重举行。会议主要围绕“材料加工”、…

c++11 标准模板(STL)(std::basic_fstream)(五)

定义于头文件 <fstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_fstream : public std::basic_iostream<CharT, Traits> 类模板 basic_fstream 实现基于文件的流上的高层输入/输出。它将 std::basic_i…

【Linux从入门到精通】文件描述符详解

文章目录 一、引言 二、引入文件描述符fd 2、1 观察fd的值 2、2 fd保存的位置 三、详解文件描述符fd 3、1 为什么要有文件描述符呢 3、2 到底什么是文件操作符呢 四、文件描述符的使用 4、1 验证文件描述符 4、1、1 验证stdin、stdout、stdout 4、1、2 验证fd值的大小顺序 4、…

IMU惯性测量单元相关技术(概念版)

重要说明&#xff1a;本文从网上资料整理而来&#xff0c;仅记录博主学习相关知识点的过程&#xff0c;侵删。 一、参考资料 新手入门系列3——Allan方差分析方法的直观理解 惯性测量单元Allan方差分析详解 IMU误差&测量模型 IMU标定之—Allan方差 IMU误差模型简介及VINS…

2023年中国日志审计市场竞争格局、市场规模、下游应用领域及行业发展趋势[图]

日志是行为或状态详细描述的载体&#xff0c;其时效性与信息丰富程度在网络安全事件分析、事件回溯和取证过程中起到重要作用。在法律层&#xff0c;日志也是重要的电子证据&#xff0c;日志记录、监控、审计手段等&#xff0c;可以帮助有效地减少信息破坏、信息泄露的问题&…