4.3软件设计:面对对象的设计

面对对象设计

  • 1、面对对象的架构设计
    • 1.1 第一步:构造系统的物理模型
    • 1.2 第二步:设计子系统
      • 划分各个子系统的方式
      • 定义子系统之间的关系
      • 定义子系统的接口
    • 1.3 第三步:非功能需求设计
  • 2、面对对象的用例设计与类设计
    • 2.1 类
    • 2.2 类间关系
    • 2.3 细化用例
      • 第一步:定义类的属性
      • 第二步:定义类的操作
      • 第三步:定义类之间的关系

在这里插入图片描述

1、面对对象的架构设计

架构设计的目的是要勾画出系统的总体结构,这项工作由经验丰富的架构设计师主持完成。
输入:用例模型、分析模型。
输出:物理结构、子系统及其接口、概要的设计类。
在这里插入图片描述

1.1 第一步:构造系统的物理模型

  1. 首先用UML(统一建模语言)的配置图(部署图)描述系统的物理架构;
  2. 将需求分析阶段捕获系统功能分配到这些物理节点上;
  3. 配置图上可以显示计算节点的拓扑结构、硬件设备配置、通信路径、各个节点上运行的系统软件配置、应用软件配置;

一个图书馆信息管理系统的物理模型如后图所示:
在这里插入图片描述

1.2 第二步:设计子系统

  1. 对于一个复杂的软件系统而言,将其分解成若干个子系统,子系统内还可以继续划分子系统或包,这种自顶而下、逐步细化的组织结构非常符合人类分析问题的思路。
  2. 每个子系统与其他子系统之间应该定义接口,在接口上说明交互信息,注意这时还不要描述子系统的内部实现。
  3. 可用UML组件图表示。

划分各个子系统的方式

  1. 按照功能划分,将相似的功能组织在一个子系统中;
  2. 按照系统的物理布局划分,将在同一个物理区域内的软件组织为一个子系统:·
  3. 按照软件层次划分子系统,软件层次通常可划分为用户界面层、专用软件层、通用软件层、中间层和数据层。
    在这里插入图片描述

定义子系统之间的关系

划分子系统后,要确定子系统之间的关系,子系统之间的关系:
1. 请求-服务”关系,“请求”子系统调用“服务”子系统。“服务”子系统完成一些服务井且将结果返回给“请求”子系统。
2. 平等关系,每个子系统都可以调用其它子系统,
3. 如果子系统的内容相互有关联,就应该定义它们之间的依赖关系。在设计时,相关的子系统之阎应该定义接口,依赖关系应该指向接口而不要指向子系统的内容。

如果两个子系统之间的关系过于密切,则说明一个子系统的变化会导致另一个子系统变化,这种子系统理解和维护都会比较困难,

解决子系统之间关系过于密切的办法基本上有两个:
1. 重新划分子系统,这种方法比较简单,将子系统的粒度减少,或者重新规划子系统的内容,将相豆依赖的元素划归到司一个子系统之中;
2. 定义子系统的接口,将依赖关系定文到接口上

定义子系统的接口

每个子系统的接口上定义了若干提作,体现了子系统的功能,而功能的具体实现方法应该是隐藏的,其他子系统只能通过接口间接地享受这个子系统提供的服务。不能直接作它。

1.3 第三步:非功能需求设计

分析阶段定义了整个系统的非功能需求,在设计阶段要研究这些需求,设计出可行的方案。

非功能需求包括:系统的安全性、错误监测和故障恢复、可移植性和通用性等等。

具有共性的非功能需求一般设计在中间层和通用空用层,目的是充分利用已有构件,减少重新开发的工作量。

2、面对对象的用例设计与类设计

面对对象设计活动之二:进一步细化用例

  • 根据分析阶段产生的高层类图和交互图,由用例设计师研究已有的类,将它们分配到相应的用例中。
  • 检查每个用例功能,依靠当前的类能否实现,同时检查每个用例的特殊需求是否有合活的类来实现。
  • 细化每个用例的类图,描述实现用例的类及其类之间的相互关系,其中的通用类和关键类可用粗线框区分,这些类将作为项目经理检查项目时的重点。

2.1 类

类是包含信息和影响信息行为的逻辑元素。类的符号是由三个格子的长方形组成,有时下面两个格子可以省略。
最顶部的格子包含类的名字,类的命名应尽量用应用领域中的术语,有明确的含义,以利于开发人员与用户的理解和交流。中间的格子说明类的属性,最下面的格子是类的操作行为。
在这里插入图片描述

2.2 类间关系

关联、聚合、组合、依赖、泛化。
在这里插入图片描述

  • 分析类图:在需求分析阶段使用
    在这里插入图片描述
  • 如何找边界类?
    参与者与用例之间应当建立边界类。
    用例与用例之间如果有交互,应当为其建立边界类。
    如果用例与系统边界之外的非人对象有交互,应当为其建立边界类。
    在相关联的业务对象有明显的独立性要求,即它们可能在各自的领域内发展和变化,但又希望互不影响时,也应当为它们建立边界类。
  • 如何找控制类?
    控制类来源于对用例场最中动词的分析和定义。
    控制类主要起到协调对象的作用,例如从边界类通过控制类访问实体类,或者实体类通过控制类访问另一个实体类。
    如果用例场景中的行为在执行步骤、执行要求或者执行结果上具有类似的特征,应当合并或独取超类。

2.3 细化用例

在这里插入图片描述

第一步:定义类的属性

用所选择的编程语言定义每个类的属性。类的属性反映类的特性,通常属性是被封装在类的内部,不允许外部对象访问。

注意点:
1. 分析阶段和概要设计阶段定义的一个类属性在详细设计时可能要被分解为多个,减小属性的表示粒度有利于实现和重用,但是一个类的属性如果太多,则应该检查一下,看能否分离出一个新的类。
2. 如果一个类因为其属性的原因变得复杂而难于理解,那么就将一些属性分离出来形成一个新的类
3. 通常不同的编程语言提供的数据类型有很大差别,确定类的属性时要用编程语言来约束可用的属性类型,定义属性类型时尽可能使用已有的类型,太多的自定义类型会降低系统的可维护性和可理解性等性能指标。
4. 类的属性结构要坚持简单的原则,尽可能不使用复杂的数据结构。

第二步:定义类的操作

由构件工程师为每个类的方法设计必须实现的操作,并用自然语言或伪代码描述操作的实现算法。一个类可能被应用在多个用例中,由于它在不同用例中担当的角色不同,所以设计时要求详细周到.

注意事项:
1. 分析类的每个职责的具体含义,从中找出类应该具备的摄作。
2. 阅读类的非功能需求说明,添加一些必须的操作。
3. 确定类的接口应该提供的摄作。这关系到设计的质量,特别是系统的稳定性,所以确定类接口操作要特别小心。
4. 逐个检查类在每个用例实现中是否合适,补充一些必须的操作
5. 设计时不仅要考虑到系统正常运行的情况,还要考虑一些特殊情况,如中断/错误处理等。

第三步:定义类之间的关系

设置基数:一个类的实例与另一个类的实例之间的联系。在图书馆信息管理系统中,“图书”类和“读者”类关联,如果需求说明中有“一位读者可借图书的数量为0至10本”,那么它们之间的基数为1:0…10。

使用关联类:可以放置与关联相关的属性。例如“图书”类和“读者”类,如果要反映读者的借书情况该如何处理呢?可以创建一个关联类,这个类中的属性是“借书日期”。
在这里插入图片描述

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

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

相关文章

华为OD机试 - 求小球落地5次后所经历的路程和第5次反弹的高度 (Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题 点这里。 实战项目访问:http://javapub.net.cn/ 专栏导读 本专栏收录于 《华为OD机试(JAVA)真题(E卷D卷A卷B卷C卷)》 。 刷的越多,抽中的概率越大&…

VBA08-if语句

一、单行 If 语句 If x > 10 Then MsgBox "x is greater than 10"二、多行 If...Then...End If 语句 If x > 10 ThenMsgBox "x is greater than 10"y x 5 End If 三、If...Then...Else 语句 If condition Then 当条件为真时执行的代码块stateme…

JS 函数的基本知识

目录 1. 介绍函数 2. 使用函数 3. 函数传参 3.1 传递默认值 3.2 传递数组 3.3 传递变量 4. 函数返回值 5. 匿名函数 6. 立即执行函数 7. 注意 1. 介绍函数 在学习 CSS 样式过程中,经常有如下操作: 2. 使用函数 函数声明: 函数命名规…

澳鹏通过高质量数据支持 Onfido 优化AI反欺诈功能

“Appen 在 Onfido 的发展中发挥了至关重要的作用,并已成为我们运营的重要组成部分。我们很高兴在 Appen 找到了可靠的合作伙伴。” – Onfido 数据和分析总监 Francois Jehl 简介:利用人工智能和机器学习增强欺诈检测 在当今日益数字化的世界&#xff…

【大模型】Spring AI Alibaba 对接百炼平台大模型使用详解

目录 一、前言 二、Spring AI概述 2.1 spring ai是什么 2.2 Spring AI 核心能力 2.3 Spring AI 应用场景 三、Spring AI Alibaba 介绍 3.1 Spring AI Alibaba 是什么 3.2 Spring AI Alibaba 核心特点 3.3 Spring AI Alibaba 应用场景 四、SpringBoot 对接Spring AI Al…

小白学习之路:咖啡叶锈病分割

咖啡叶锈病分割系统源码&数据集分享 [yolov8-seg-C2f-Faster-EMA&yolov8-seg-SPPF-LSKA等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Globa…

RabbitMQ设置TTL(消息过期)时间(重要)

RabbitMQ设置消息过期时间 1、过期消息(死信)2、设置消息过期的两种方式2.1、设置单条消息的过期时间2.1.1、配置文件application.yml2.1.2、配置类RabbitConfig2.1.3、发送消息业务类service(核心代码)2.1.4、启动类2.1.5、依赖文…

让你的网站与众不同:6款独特播放器设计

文章目录 前言正文1.可拖动播放列表2.强调无障碍设计3.材质设计风格音频播放器4.旋转的黑胶唱片设计5.流畅且响应迅速6.带悬停标签的控制按钮 总结 前言 随着HTML5的普及,网站轻松添加音视频内容变得简单,但默认播放器功能有限,无法满足个性…

ImportError: cannot import name ‘packaging‘ from ‘pkg_resources‘ 的参考解决方法

文章目录 写在前面一、问题描述二、解决方法参考链接 写在前面 自己的测试环境: Ubuntu20.04 ROS-Noetic 一、问题描述 自己在通过 pip install 安装module时 (使用的是 pip install mmcv)遇到如下问题: ImportError: cannot …

AI, Machine Learning, Deep Learning 和 Generative AI

人工智能的采用开始得相当缓慢,大多数人甚至不知道它的存在,即使知道,也似乎还需要 5 到 10 年的时间,但后来机器学习、深度学习等东西出现了,我们开始看到一些应用,然后基础模型出现了。 AI 人工智能&am…

C# 一个工具类让winform自动根据窗体大小自适应缩放所有控件

AutoControlSize.cs工具类,功能是使控件尺寸随着主对话框尺寸按比例调整。并且使用方式十分简单,只需要调用两个函数即可实现整个页面的控件根据窗体的大小改变而跟着缩放。 1、使用效果如下: 未缩放前的原始窗体页面 缩放后的窗体页面&…

用 Python 从零开始创建神经网络(二):第一个神经元的进阶

第一个神经元的进阶 引言1. Tensors, Arrays and Vectors:2. Dot Product and Vector Additiona. Dot Product (点积)b. Vector Addition (向量加法) 3. A Single Neuron with NumPy4. A Layer of Neurons with NumPy5…

VS2022项目配置笔记

文章目录 $(ProjectDir)与 $(SolutionDir) 宏附加包含目录VC目录和C/C的区别 $(ProjectDir)与 $(SolutionDir) 宏 假设有一个解决方案 MySolution,其中包含两个项目 ProjectA 和 ProjectB,目录结构如下: C:\Projects\…

十五、Linux线程(二)

4.线程的分离属性 通过属性设置线程的分离 1.线程属性类型: pthread_attr_t attr; 2.线程属性操作函数: (1)对线程属性变量的初始化 int pthread_attr_init(pthread_attr_t* attr); (2)设置线程分离属…

Unity学习笔记(1):素材导入

文章目录 前言学习目标开发环境资源文件下载Unity窗口设置修改导入像素素材设置可以直接拖动导入设置像素图片格式导入多合一素材设置切割 总结 前言 最近由于工作的事情,很糟心。最近非常的迷茫。 学习目标 根据我的加的几个QQ群了解到,国内游戏行业…

简历模板(艺术风)

每份简历模板都有四页 36款艺术风简历模板 一、水墨古风 二、唯美淡雅 三、时尚个性 四、艺术气质

数字乡村建设方案-5

1. 政策背景与乡村振兴战略 中国政府提出的乡村振兴战略,旨在全面建设小康社会和社会主义现代化国家,其中数字乡村建设是实现乡村全面振兴的关键途径。国家和江苏省相继出台政策,推动信息技术与农业生产生活的深度融合,加快农业农…

「C/C++」C++ STL容器库 之 std::map 键值容器类

✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

2024 第五次周赛

A: 直接遍历即可 #include<bits/stdc.h> using namespace std;typedef long long ll; typedef pair<ll, ll>PII; const int N 2e6 10; const int MOD 998244353; const int INF 0X3F3F3F3F;int n, m; int main() {cin >> n;int cnt 0;for(int i 0; i …