《软件方法(下)》8.3.3 泛化的一些重点讨论(202405更新)

news2024/11/26 0:52:59

DDD领域驱动设计批评文集

做强化自测题获得“软件方法建模师”称号

《软件方法》各章合集


8.3 建模步骤C-2 识别类的关系

8.3.3 泛化的一些重点讨论

8.3.3.1 子集的不相交和完整

泛化是集合关系,在建模泛化关系时,我们对泛化关系中的子类(子集)的要求应该严格到什么程度?例如,不同子集可以有相同的元素吗?子集的并集必须等于全集吗?

UML规范对此持宽松的态度,泛化关系缺省是无约束的。如果要表达一个元素只能出现在一个子集中,需要给泛化关系加{disjoint}约束,如果要表达一个元素必须能出现在一个子集中,需要给泛化关系加{complete}约束,如图8-98。

图片

图8-98 泛化的不相交和完整约束

(1)不相交

本书认为,同一个泛化集中的任意子类之间不相交,应该是缺省的做法。或者说,尽量把泛化建立在子类不相交的类之上。

例如,自然语言“员工有调度员、装卸工、配货员”,可能有的人画成图8-99的组合关联:

图片

图8-99 错误的关联关系

这当然是错误的。“员工有调度员、装卸工、配货员”指的是“员工”的对象集合包含了“调度员”、“装卸工”、“配货员”的对象集合,不是指一个“员工”对象由“调度员”对象、“装卸工”对象、“配货员”对象组成。这个“有”是集合的“有”,是泛化关系,如图8-100。

图片

图8-100 泛化关系

但图8-100也不是合适的建模结果,因为很可能允许员工身兼数职,同时既是调度员也是配货员。此时, “员工”的任意子集之间的交集不再为空,应该调整泛化结构所在的位置,例如改为图8-101。

图片

图8-101 调整泛化关系的位置

图8-101中,“调度员”、“装卸工”、“配货员”的概念和图8-99相比含义已经不同,它们变成了“职位”的一种。“职位”的任意子集之间的交集应该为空。

如果“调度员”、“装卸工”、“配货员”取“职位”的概念,那么类似图8-99的图8-102其实也不是不可以。

图片

图8-102 员工关联到具体职位

读者可以思考一下,如果把图8-102中的“员工”换成图8-79的“人”,下方的类换成“▲▲”和“〇〇”,可以吗?

如果对于不同职位,系统关注的差别在属性值上就可以体现,不需要在行为上体现,那么,图8-101的泛化关系可以取消,只保留“职位”,如图8-103。

图片

图8-103 删去子类以及泛化关系

★图8-101到图8-103的“职位”,严格来说应该是“职位规格”。可以看得出来,“职位”实例的属性值不会随具体员工而变化。如果要记住张三做装卸工和配货员分别干了多少活,拿了多少绩效,还需要另外的类来区分。例如“员工-任职-职位”或“员工-职位-职位规格”。

(2)完整

本书认为,不需要要求子类完整,否则会导致批量刷废话。

如图8-104,一开始A有两个子类B和C,知道应该是不完整的。如果为了完整,强行加一个口袋子类“其他A”,那么很可能所有的泛化关系都会在结尾加一个“其他*”,这种批量的废话不如不要,缺省认为其不完整即可。

而且,“其他A”的集合元素是不定的,现在的含义是“非B非C”,假设以后A再加一个子类D,“其他A”的含义就变成“非B非C非D”,元素也变少了。

图片

图8-104 不要求完整

当然,如果添加D为B或C更下一级的子类,是可以的。如果“其他A”经过时间的沉淀变成了一个领域术语,D作为“其他A”的子类也无妨——第6章所列的需求分类中的“非功能需求”就是这样的“其他A”的例子。

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

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

相关文章

JavaEE初阶-多线程5

文章目录 一、线程池1.1 线程池相关概念1.2 线程池标准类1.3 线程池工厂类1.4 实现自己的线程池 二、定时器2.1 java标准库中的定时器使用2.2 实现一个自己的定时器2.2.1 定义任务类2.2.2 定义定时器 一、线程池 1.1 线程池相关概念 池这个概念在计算机中比较常见&#xff0c…

极验4图标方向点选验证码

验证码如下如所示,提供了三个方向剪头。根据剪头顺序,点击大图中图标的方向完成验证。 经过我们的努力,正确率达到了90%左右。下面提供了验证码识别的代码。 import base64 import requests import datetime from io import BytesIO from PI…

Linux-软件安装--tomcat的安装

tomcat的安装 1、下载tomcat安装包2.移动到自己想要解压的目录3、解压文件夹4、启动tomcat5、查看tomcat进程6、查看日志7、通过浏览器访问成功8、停止tomecat服务8.1运行tomcat的bin目录中提供的停止服务的脚本文件shutdcwn.sh8.2结束tomcat进程1、下载tomcat安装包 本篇文章…

蓝海创业商机小吃配方项目,日入200+ ,小白可上手,图文创作转现快

小吃技术销售,一单价格从几元到几百元不等,行业竞争相对较小,是一个相对冷门的领域。只需一部手机,就可以发布图文并茂的内容,配上背景音乐(BGM),即使是对视频剪辑不熟悉的新手&…

【WEEK11】 【DAY6】Employee Management System Part 7【English Version】

2024.5.11 Saturday Continued from 【WEEK11】 【DAY5】Employee Management System Part 6【English Version】 Contents 10.8. Delete and 404 Handling10.8.1. Modify list.html10.8.2. Modify EmployeeController.java10.8.3. Restart10.8.4. 404 Page Handling10.8.4.1. …

如何取消格式化SD卡并恢复丢失的数据?

在相机中格式化SD卡后,您将丢失卡上的所有文件。如果有恢复形成操作的选项,您可以轻松取回文件。然而,相机或任何其他设备中没有这样的选项。它无法直接取消格式化相机SD卡,但您仍然可以从格式化的SD卡中恢复文件。 为什么格式化后…

excel常见图表大全

Excel图表是一种以图形形式呈现数据的工具,它将数字和统计信息转化为直观的视觉元素,如线图、柱状图、饼图等。这些图表可以帮助人们更容易地理解数据的趋势、关系和模式。 使用场景 Excel图表广泛应用于各个领域,包括: 商务分…

服装定制|基于SSM+vue的服装定制系统的设计与实现(源码+数据库+文档)

服装定制系统 目录 基于SSM+vue的服装定制系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户后台管理模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xf…

基于Springboot的村庄果园预售系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的村庄果园预售系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…

2024情感聊天赛道,al工具制做,视频一分钟一条,日入500+

在这个领域,我们可以利用AI技术快速制作情感文章和闲聊内容。基本原理是结合热门创意文案,通过AI生成情感聊天短视频,然后在各大网站进行独家代理,这个领域的竞争相对较小,可以说是一片蓝海。 项 目 地 址 &#xff…

【目标检测论文解读复现NO.38】基于改进YOLOv8模型的轻量化板栗果实识别方法

前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文&#xff0c…

【机器学习】LoFTR:革命性图像特征批评技术等领跑者

LoFTR:革命性图像特征匹配技术的领跑者 一、引言二、LoFTR技术的创新之处三、LoFTR技术的实现原理四、LoFTR技术的代码实例五、结语 一、引言 在3D计算机视觉领域,图像特征匹配技术一直是研究的热点和难点。随着技术的不断发展,传统的特征检…

电子学会C/C++编程等级考试2024年03月(八级)真题解析

C/C编程(1~8级)全部真题・点这里 第1题:道路 N个以 1 … N 标号的城市通过单向的道路相连:。每条道路包含两个参数:道路的长度和需要为该路付的通行费(以金币的数目来表示) Bob and Alice 过去住在城市 1.在…

ACE框架学习4

目录 ACE Proactor框架 异步I/O工厂类 ACE_Handler类 前摄式Acceptor-Connector类 ACE_Proactor类 ACE Streams框架 ACE_Model类 ACE_Streams类 ACE Proactor框架 ACE Proactor框架实现了proactor模式,也就是异步网络模式,允许事件驱动…

并行执行线程资源管理方式——《OceanBase 并行执行》系列 3

在某些特定场景下,由于需要等待线程资源,并行查询会遇到排队等待的情况。本篇博客将介绍如何管理并行执行线程资源,以解决这种问题。 《OceanBase并行执行》系列的内容分为七篇博客,本篇是其中的第三篇。前2篇如下: 一…

容器组件:Column ,Row(HarmonyOS学习第四课【4.1】)

容器组件-Column Column 容器组件是沿垂直方向布局的容器。该组件从APIVersion7开始支持从API version 9开始,该接口支持在ArkTs,卡片中使用。其可以包含子组件 Column(value?: {space?: string | number}) 参数 space 参数类型string | number 是否必填&am…

锁策略详解:互斥锁、读写锁、乐观锁与悲观锁、轻量级锁与重量级锁、自旋锁、偏向锁、可重入锁与不可重入锁、公平锁与非公平锁

一.锁策略 锁策略指的是在多线程编程中用于管理共享资源访问的规则和技术。它们确保在任何给定时间只有一个线程可以访问共享资源,以防止竞态条件和数据不一致性问题。常见的锁策略包括: 互斥锁(Mutex):最常见的锁类型…

WPS表格:对比少于1万的两列数据

当我们需要对于A、B两列乱序的数据,找出A列中某一项B列有没有,或者找出B列中的某一项A列有没有,都可以先将这两列数据放入WPS表格中: 1.选中C列的第一行的单元格,在函数区输入函数 如果我们以A为基准,找A中…

项目分享|基于ELF 1S开发板完成的物联网开源项目

ElfBoard作为飞凌嵌入式旗下教育品牌,自成立以来,持续吸引着各界的瞩目,其中也赢得了一些工程师的青睐。今天,就和各位小伙伴分享一位杰出工程师借助ELF 1S开发板完成的嵌入式物联网项目,见证智慧与技术的火花。 关于…

二、计算机基础(Java零基础二)

🌻🌻目录 一、认识计算机二、计算机的组成2.1 计算机硬件(摸得着,看得见)2.1.1 计算机硬件组成2.1.2 冯.诺依曼(计算机之父)体系结构 2.2 计算机软件(摸不着,看不见) 三、电脑常用快…