UML与设计模式

1、关联关系

        关联关系用于描述不同类的对象之间的结构关系,它在一段时间内将多个类的实例连接在一起。关联关系是一种静态关系,通常与运行状态无关,而是由“常识”、“规则”、“法律”等因素决定的,因此关联关系是一种强关联的关系。关联关系用来定义对象之间的静态、天然的结构。在最终的代码里面,关联对象通常是以实例变量(成员变量)的形式实现的。与下述的依赖关系相比,关联的两个对象通常不会直接使用,尽管它们相互指导对方的的存在,但一般都是由外部对象来访问的。

2、依赖关系

        依赖关系是一条带箭头的虚线表示的,它描述一个对象在运行期间会使用到另一个对象的关系。与关联关系不同的是,依赖关系是一种临时性关系,通常都是在运行期产生,并且随着场景的不同,依赖关系也可能发生变化。依赖关系表达的是对象之间临时性的、动态的关系一般而言,依赖关系在最终的代码里面体现为类构造方法、类方法等的传入参数。与关联关系相比,依赖关系除了临时知道对方外,还会使用对方的属性或者方法。从这个角度讲,被依赖的对象改变会导致依赖对象的修改

3、实现关系

        实现所代表的含义是,基本用例描述了一个业务目标,但是该业务目标有多种可能的实现途径,每一种实现途径可以用用例实现(或称用例实例)来表示,而用例实现与基本用例之间就构成了实现关系。换言之,每个实现途径都实现了基本用例的业务目标。

4、泛化关系

        泛化关系是用一条带空心箭头的直线表示的。泛化关系可用于建模过程中的任意一个阶段,说明两个对象之间的继承关系。泛化关系表示一个类对另一个类的继承。继承而得的类称为后代。被继承的类称为祖先。继承意味着祖先的定义(包括任何特征,如属性、关系或对其对象执行的操作)对于后代的对象也是有效的。泛化关系是从后代类到其祖先类的关系。

5、聚合关系

        聚合关系是用一条带空心菱形箭头的直线表示的,聚合关系用于类图,特别用于表示实体对象之间的关系,表达整体由部分构成的语义,与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在

6、组合关系

组合关系是用一条带实心菱形箭头的直线表示的,组合关系用于类图,特别用于表示实体对象关系,表达整体拥有部分的语义,组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也将消亡。

        节点是带有至少一个处理器、内存以及可能还带有其他设备的处理元素。在实际工作中,一般说来服务器、工作站或客户机都可以称为一个节点。节点是应用程序的部署单元。节点元素特别用于部署视图,描述应用程序在物理结构上是如何部署在应用环境中的,是一种包括软、硬件环境在内的拓扑结构描述。

        实际上,由于人脑对信息的处理能力是有限度的,如果信息量超过了人脑的处理能力,人就会失去对这个事物的理解能力。因此,越是具体的表达信息量越大,越接近人脑的处理极限,人们的理解能力越是下降(这也是面向过程方法为什么困难的原因之一)。对面向对象方法来说,这时就需要提高抽象层次,用一个新的概念来概括一部分相关的信息,一旦人们像接受了光年概念一样消化了这个新的概念,理解起来就变得容易了。同时,这个新的概念就屏蔽了(或者说封装了)更多具体的信息。抽象层次越高,被屏蔽的信息也就越多,信息量越少,也就越容易理解和处理。这就是面向对象比面向过程具有优势的原因。

        抽象有两种方法,一种是自顶向下,另一种是自底向上。自顶向下的方法适用于让人们从头开始认识一个事物,自底向上的方法适用于在实践中改进和提高认识。在软件开发过程中,主体上应当采用自顶向下的方法,用少量的概念覆盖系统需
求,再逐步降低抽象层次,直到代码编写。同时应当辅以自底向上的方法,通过总结在较低抽象层次的实践经验来改进较高层次的概念以提升软件质量。

7、对象分析方法
7.1 一切皆是对象

        在面向对象的眼里,一切有名字的东西都是对象,都应当使用对象的观点来看待它、分析它。哪怕这个东西的名字叫某某业务流程,它也仍然应当看作是一个对象,而不是一个过程。这意味着,无论什么时候都应当采用接下来讲述的一些观点和方法来看待和分析事物。

7.2对象都是独立的

        独立性是面向对象的一大特点,承认对象的同时就接纳了这一观点。对象与对象 之间是天然独立的,只是在某个特定的场景下,它们的某一个特定的实例才相互联系 在一起。我们获取和分析对象的手段经常是通过分析某个场景,但是需要知道,对象是离散的,它不是因为该场景而存在的。场景中的对象只是对象“映射”到该场景中的一个侧面,我们称之为对象实例。换言之,通过一个场景,我们仅能得到对象的一个侧面的信息,如图2.4所示,如果以每一个场景为坐标(维度),那么对象实例就是对象在该坐标上的投影。

7.3、对象都具有原子性

        无论在什么时候,在同一抽象层次上,在分析过程中都应当将对象视为一个不可分割的原子,哪怕这个对象的规模很大。例如在分析一个商业过程的时候,对象的规模(粒度)大到如银行、工厂、商场的程度,不论它有多么巨大,只要我们认为它是对象,它与其他对象交互时就是一个整体,不能分割。原子性是抽象层次有意义的重要保证,一旦破坏了原子性,则表示在同一抽象层次上的对象不具备同样的粒度,这使得分析工作陷入混乱我们应当将分析过程中得到的所有对于对象的认识附加在对象边界上,在实现这个对象之前不理会其内部的细节。这称之为面向接口编程

7.4、对象都是可抽象的

        对象有着很多个不同的方面。一般来说,对象参与一个场景时会展现出某一个方面。总可以将对象的某一个方面抽象出来,让其作为对象的一个代表来参与场景交互。通常这种抽象会以接口来命名。在分析过程中,得到的任何一个对象都有特定的方面可作为抽象。因为对象总是从场景分析中得到的,它在场景中肯定展现了一个方面。对象所具有的方面,或者说对象所参与的场景越多,对象越有抽象价值,反之则越没有抽象价值。因此在分析过程中,应当关注于那些参与了很多场景的对象,它们往往是分析设计中的重点以及成败关键。

7.5、对象都有层次性

        对象是有着抽象层次的。层次越高,其描述越粗略但适应能力越广;层次越低则描述越精确但适应能力越下降。在分析过程中,应当根据问题领域的复杂程度设定多个抽象层次,在每个层次上使用适合的抽象程度的对象描述。这将有助于显著地减少分析的难度和工作量。不论是在需求、分析还是设计过程中,都应当具备抽象层次的观点。从需求到设计的过程已经是几个不同的抽象层次。

以上内容摘自《大象 Thinking in UML》

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

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

相关文章

Web前端开发模板:创新实践与深度解析

Web前端开发模板:创新实践与深度解析 在数字化时代的浪潮中,Web前端开发作为构建用户界面的关键环节,其重要性日益凸显。一个优秀的Web前端模板不仅能够提升用户体验,还能有效推动项目的快速开发与部署。本文将从四个方面、五个方…

媒体查询的屏幕尺寸范围

在响应式网站设计中,媒体查询通常用于根据不同的屏幕尺寸应用不同的样式规则。以下是一些常见的屏幕尺寸范围,这些范围可以用于定义大屏幕、中屏幕、小屏幕和超小屏幕设备的样式。这些范围广泛参考了 Bootstrap 框架的断点,因为它是一个广泛使…

层出不穷的大模型产品:使用体验、倾向选择及未来展望

✨作者主页: Mr.Zwq✔️个人简介:一个正在努力学技术的Python领域创作者,擅长爬虫,逆向,全栈方向,专注基础和实战分享,欢迎咨询! 您的点赞、关注、收藏、评论,是对我最大…

哪些因素驱动新零售发展?新零售与传统零售、电子商务区别在哪?

零售业正经历着一场前所未有的变革,这场变革由多种因素驱动,涉及技术、消费习惯以及商业模式的全面升级。我们称之为”新零售”,它不仅仅是一个概念,更是零售业未来发展的方向。新零售的兴起,标志着零售行业正在迈向一…

Spring boot 使用AbstractRoutingDataSource实现数据源动态切换

目录 一、AbstractRoutingDataSource 二、具体实现 1、pom.xml 2、新建UserMapper 3、在spring boot 启动类上添加扫描mapper注解 4、在配置文件 application.properties 中添加多个(我这里是两个)数据源的配置信息 5、集成动态数据源模块 5.1、新建注解 CurDataSource…

186.二叉树:二叉搜索树中的插入操作(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

pytest + yaml 框架 -61.jenkins+allure+钉钉通知添加测试结果

前言 上一篇pytest + yaml 框架 -60.git+jenkins+allure+钉钉通知反馈 已经实现测试结果用钉钉通知。 本篇继续在钉钉通知里添加测试的汇总结果,此功能在pytest-yaml-yoyo v1.5.2版本上实现。 Environment Injector 插件 在运行完用例后会生成一个summary.json 文件,汇总…

护眼台灯哪个品牌更好?五款市面主流的护眼台灯款式分享

近年来,护眼台灯的研发和创新不断推进,一些台灯配备了智能化功能,如定时开关机、自动调节光线等,使孩子们能够更好地控制用眼时间和光线环境。护眼台灯哪个品牌更好?一些高端的护眼台灯还采用了纳米光滤镜技术&#xf…

誉天5月红帽战报:恭喜14名学员通过RHCE认证,通过率87.5%!

红帽认证是全球公认的Linux权威认证之一,对于Linux从业者来说具有很高的价值和认可度。旨在评估考生在Linux系统管理和应用方面的专业知识和技能。红帽考试是Linux从业者提升自身技能水平和职业竞争力的重要途径之一。 5月份,誉天14名学员通过了RHCE认证…

Python基础教程(十九):网络编程

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

【深度学习】基于注意力机制的多实例学习(MIL)图像分类

1. 引言 1.1.研究背景 在图像分类任务中,我们通常持有一个直观的假设,即每张图像都可以清晰无误地归属于一个特定的类别标签。然而,在医学成像领域,特别是在计算病理学等复杂的应用中,情况则有所不同。在这些情况下&…

值类型之Hello翻身当类型了

值类型 TypeScript 规定,单个值也是一种类型,称为“值类型”。 let Zakun: "hello";Zakun "hello"; // 正确 // Zakun "world"; // 报错上面示例中,变量Zakun的类型是字符串hello,导致它只能赋…

Midjourney提示词终极指南(完整版)

在这篇博客中,我们深入研究了使用提示的艺术,以利用Midjourney的AI功能的力量。我们将探索各种技术,以创建个性化和迷人的图像,将你的创意想法转变为令人惊叹的视觉杰作。 1. 了解提示词 提示是简短的文字描述或关键词&#xff…

基于Spring+Vue的前后端分离的计算器

麻雀虽小,五脏俱全 需求分析 表达式求值 支持加减乘除四则运算、支持高精度 获取日志 Api文档定义 前后端分离,人不分离 通过Apifox定义接口细节,协调前后端开发工作。 软件架构设计 Spring-MVC 把软件系统分为三个基本部分:模…

跨国大文件传输需要哪些方面?怎么实现数据快速传输?

跨国大文件传输涉及到许多方面,包括网络速度、安全性、可靠性和法律合规性等。 以下是跨国大文件传输时需要考虑的一些重要方面: 高速稳定的网络连接:确保有足够的带宽和稳定的网络连接以支持大文件的快速传输。这可能需要考虑到跨国网络的延…

岩土工程乙级资质下的风险管理与责任需求

1. 技术风险管理 地质勘察准确性:确保勘察数据的准确性和完整性,避免因地质误判导致的设计错误或施工事故。技术方案评估:合理评估岩土工程方案的可行性,包括支护、加固、地基处理等,预防技术失误带来的风险。新技术应…

数字孪生火电厂:传统能源的数字化转型

通过图扑自主研发的产品 HT for Web ,采用可视化与数字孪生技术,打造多样化设计风格和业务视角下的火电厂数字孪生方案。为智慧电厂综合“一张图”管理提供了上层展示技术支撑,助力企业增强对火电厂的信息化和数字化管理水平。

win11安装pycuda的一点点问题

问题:ERROR: Failed building wheel for pycuda C:\Users\97160\AppData\Local\Temp\pip-install-oi8pc0pg\pycuda_49ea4802a21a4336a69368c192f9cfce\src\cpp\cuda.hpp(23): fatal error C1083: 无法打开包括文件: “cudaProfiler.h”: No such file or directoryC…

用android如何实现计算机计算功能

一.新建一个项目 步骤&#xff1a; 1.新建项目 2.选择 二.用户界面构建 找到项目的res的下面layout里面的activity.xml文件进行约束布局界面构建。 activity.xml代码如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> <androidx.c…

Web前端进阶课程:深度剖析与全面突破

Web前端进阶课程&#xff1a;深度剖析与全面突破 在数字化浪潮席卷全球的今天&#xff0c;Web前端技术作为连接用户与互联网世界的桥梁&#xff0c;其重要性不言而喻。为了更好地满足市场对前端技能的高要求&#xff0c;Web前端进阶课程应运而生。本文将从四个方面、五个方面、…