JMU软件20 UML复习资料

news2025/7/15 14:53:22

碎碎念

(印象中复习资料漏了的知识点:P175:通信图,P168:UML顺序图的图框,都考完了也懒得再整理了,自己翻书看吧)

昂,把下面这些都学会大概率不会不及格,要求高分的话爱莫能助
(因为我也就80出了点头)

以下涉及的页数是我用goodnotes看电子书的页数,实体书书对应页数-18

灵文灵文保佑我

文章目录

  • 碎碎念
  • 碎碎的知识
  • UML图
    • 用例图
    • 领域模型
    • 交互图(/顺序图):
    • 类图
  • 设计类图
    • 类图间的关系(注意线和箭头)
      • 泛化(继承)
      • 实现
      • 依赖
      • 关联
      • 聚合
      • 组合
    • 设计原则GRASP
      • ⭐ 信息专家
      • ⭐ 创建者
      • ⭐ 低耦合
      • ⭐ 高内聚
      • ⭐ 控制器
      • ⭐ 多态
      • ⭐ 纯虚构
      • ⭐ 间接
      • ⭐ 受保护变化(防止变异)
    • 设计模式
      • ⭐适配器
      • ⭐抽象工厂
      • ⭐单例
      • ⭐策略
      • ⭐组合
      • ⭐外观
      • ⭐观察者

碎碎的知识

  • 面向对象的三大特点:封装,继承,多态,(抽象)

UML图

UNL图有两种,结构图和行为图

  • 结构图:类图…
  • 行为图:顺序图,用例图,状态图(没学)…


用例图

在这里插入图片描述

  • 表示的是用例和参与者的关系
  • 组成:参与者(人或其他外界系统),系统边界,用例,关联
  • 关系:
    • 参与者与参与者:泛化

    • 用例与参与者:关联:————>

    • 用例与用例:包含,泛化,扩展

    • 包含:一个用例(基础用例)的行为包含了另一个用例(包含用例)的行为。[简单点说:把一个复杂的步骤分解为较小的步骤,箭头指向分解后的用例]
      在这里插入图片描述

    • 泛化:一个用例可以被特别列举为一个或多个子用例(父子关系)。带空心箭头实线,箭头指向被继承的(父用例) 用例。
      在这里插入图片描述

    • 扩展 :用例功能的延申,相当于为基础用例提供一个附加功能。指向基础用例在这里插入图片描述

领域模型

  • 领域模型描述重要的概念及其关联和属性( 只有属性没有方法
  • 领域模型不是对软件对象的描述,是使真实世界领域中的概念和想象可视化。[P24]
  • 一场游戏中一个玩家,一次转两枚骰子,骰子的点数(faceValue)总和为7即胜利。
    在这里插入图片描述

交互图(/顺序图):

  • 展现软件对象之间的消息流和由消息引起的方法的调用。
  • 真实世界是由游戏者掷出骰子,软件设计中是由DiceGame对象掷出骰子。(加不加玩家对象取决于软件系统是否有这个对象)
  • 对象拥有x方法,向对象发送x方法(注意顺序)【die对象有roll方法,dieGame对象通知die调用roll方法】在这里插入图片描述

记得再去看看书上顺序图这边关于循环,选择判断的符号是什么,就是那些alt啥的。
这里有篇博客可以参考

类图

  • 描述类的属性和方法

  • 和领域模型的一个差别:领域模型表示的是真是时间的类,设计类图表示的是软件类。领域模型只有属性和关联,类图除了属性还有方法。
    在这里插入图片描述

  • (其他的图好像都没学)

设计类图

类图间的关系(注意线和箭头)

在这里插入图片描述

泛化(继承)

父类子类。
在这里插入图片描述

实现

接口的实现类和接口之间的关系。
在这里插入图片描述
耦合度依次增强:依赖、关联、聚合和组合。

依赖

一个类使用另一个类的方法或属性。或者是A类包含B类的参数,变量。(偶然的、临时的)(局域变量、方法的形参,或者对静态方法的调用
在这里插入图片描述

关联

表示一类对象与另一类对象之间的联系。一般是一个类的对象作为另一个类的成员变量。(关系也不是临时性的,一般是长期性的)(成员变量)关联的两个对象之间一般是平等的。【这里可以说明一下关联双方是一对一,一堆多…
在这里插入图片描述

聚合

成员变量形式实现,对象之间存在着整体与部分的关系。整体和个体的关系。整体消失不会引发个体的消失。关联的两个对象之间一般是平等的,而在聚合关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分。多个整件可以同时间共享同一个部件。
在这里插入图片描述

组合

在聚合的基础上,整件删除时,部件一定会跟着删除。而且,多个整件不可以同时间共享同一个部件。比如公司和部门。
在这里插入图片描述

设计原则GRASP

(课上没有全讲)

⭐ 信息专家

问题:如果给定Square名称,从那个对象查询该Square对象的相关信息?

解决方案把职责分配给具有完成该职责所需要信息的类。

应用:设计对象(类)的时候,如果某个类拥有完成某个职责所需要的所有信息,那么这个职责就应该分配给这个类来实现。这时,这个类就是相对于这个职责的信息专家。

⭐ 创建者

问题:谁负责创建某类的新实例。

解决方案合理分配创建职责,以降低耦合(参照低耦合设计原则)。

应用:符合下列任一条件的时候,建议由类A来创建类B,这时A是B的
创建者:

  • A是B的聚合
  • A是B的容器
  • A持有初始化B的信息(数据),创建B时会传递给B
  • A记录B的实例
  • A频繁使用B

创建者设计原则禁忌:有时对象创建具有相当的复杂性,最好把创建职责委派给称为具体工厂或抽象工厂的辅助类。

优点:支持低耦合。

⭐ 低耦合

先清楚什么是耦合?
耦合(coupling):耦合是对某元素与其他元素之间的联系、感知和依赖程度的度量。低耦合往往能够减少修改软件所需的时间、工作量和缺陷

问题:为什么是通过Board对象查询Square,而不是任意一个类?

解决方案分配职责以使(不必要的)耦合保持在较低水平,减少类之间的联系。

⭐ 高内聚

功能性紧密相关的职责应该放在一个类里,并共同完成有限的功能,那么就是高内聚。

问题:怎样使对象保持有内聚、可理解和可管理,同时具有支持低耦合的附加作用?

解决方案职责分配应保持高内聚,以此来评估备选方案。

⭐ 控制器

控制器一般负责委派工作给其他的对象,本身并不完成大量工作。在UI之下首先接收和协调系统操作的对象。

问题:在UI层之下首先接收和协调系统操作的对象是什么?

解决方案:把职责分配给能代表下列选择之一的对象:

  • 代表全部“系统”、“根对象”、运行软件的设备或主要的子系统(这些是外观控制器的所有变体)
  • 代表发生系统操作的用例场景(用例或会话控制器)

应用控制器的优点:

  • 增加了可复用和接口可插拨的能力
  • 获得推测用例状态的机会

禁忌

  • (避免臃肿的控制器):只有一个控制器接收系统中全部的系统事件。控制器完成诸多必要的任务,而不是把工作委派出去―控制有许多属性,维护与领域相关的重要信息。
  • (UI层不处理系统事件)。系统操作职责分配给应用层,而不是UI层中的对象

⭐ 多态

问题:如何处理基于类型的选择,创建可插拨的构件。

解决方案相关选择或行为随类型有所不同时,使用多态操作为变化的行为类型分配职责。

⭐ 纯虚构

问题:有时对领域对象分配职责会导致不良内聚或耦合。且专家原则提供的方案不合适。

解决方案

  • 设计一个虚构的类,分配一组高内聚职责,用以支持高内聚、低耦合的复用。
  • 该类不代表领域的概念,是凭空虚构的
  • 理想情况:虚构类的职责支持高内聚低耦合

⭐ 间接

问题:为了避免两个或多个事物之间直接耦合,应该如何分配职责?如何使对象解耦合?

解决方案将职责分配给中介对象,使其作为其他构件或服务之间的媒介,以避免它们之间的直接耦合。

⭐ 受保护变化(防止变异)

不要跟陌生人讲话
问题

  • 如何设计,使内部的变化不会对其他元素产生不良影响?

解决方案

  • 预先识别不稳定的变化点,定义稳定的接口
  • 如果未来发生变化的时候,可以通过接口扩展新的功能,而不需要去修改原来旧的实现

设计模式

一共有23个,但有些课上没讲

⭐适配器

问题:如何解决不相容的接口问题,或者如何为具有不同接口的类似构件提供稳定的接口?

解决方案:通过中介适配器对象,将构件的原有接口转换为其他接口

  • 将一个类的接口转换成客户希望的另外一个接口Adapter模式
  • 使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

如何体现

  • 使用多态和接口
  • 增加一层间接性对象

举例:定义一个TextShape类,由它来适配TextView的接口和Shape的接口,即继承Shape类的接口和TextView的实现。将一个TextView实例作为TextShape的组成部分,并且使用TextView的接口实现TextShape。

⭐抽象工厂

意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

问题:当有特殊考虑(如存在复杂创建逻辑,为了改良内聚而分离创建职责等)时,应该由谁来负责创建对象?

解决方案:创建称为工厂的纯虚构对象来处理这些职责。

图取自原博客

  • 简单工厂:把具体的产品创建封装成一个工厂类。返回对象通常都是接口,比如AbstractBlock。
    在这里插入图片描述

  • 具体工厂:进一步解耦合,把工厂类抽象,不再负责所有实例的创建,而是把具体的创建工作交给了子类去完成,实例化延迟到子类加载,由子类来决定要实例化的类。
    在这里插入图片描述

  • 抽象工厂:抽象工厂将工厂方法进一步抽象。定义了一个接口用于创建相关或有依赖关系的对象簇,而无需指明具体的类。可以根据创建对象类型使用对应的工厂子类。这样将单个的简单工厂类变成了工厂簇,更利于代码的维护和扩展。

在这里插入图片描述

⭐单例

代码参考建议链接

意图:保证一个类仅有一个实例,并提供比一个访问它的全局访问点。(该类全局只需要一个对象)

解决方案:对类定义静态方法用以返回单实例。

⭐策略

问题:如何设计应对某一算法或业务规则的经常变化?

解决方案:在单独的类中分别定义每种算法/政策/策略,并且使其具有共同的接口。

如何体现:即不同类中的方法名字、参数都一样,但是代码内容不一样。(接口的实现)

在这里插入图片描述

⭐组合

可供参考代码
在这里插入图片描述

组合模式使得用户对单个对象和组合对象的访问具有一致性,即让用户以一致的方式处理个别对象以及组合对象。避免在使用过程中区分开来,造成麻烦。

问题:如何能够像处理原子对象一样,多态地处理一组对象或具有组合结构的对象

解决方案定义组合和原子对象的类,使他们实现相同的接口。

⭐外观

代码参考链接

问题:对一组不同的实现或接口(如子系统的实现和接口)需要公共、统一的接口。可能会与子系统内部的大量事物产生耦合,或者子系统的实现可能会改变,怎么办?

解决方案:对子系统定义唯一的接触点——使用外观对象封装子系统。该外观对象提供了唯一和统一的接口,并负责与子系统构件进行协作。

举个例子:打开电视,包括打开屏幕,打开音响…,电视类的open方法包含屏幕,音响…的open方法,调用电视类的open就可以调用全部子类的open。电视类的open就是公共统一的接口。

⭐观察者

问题:不同类型的订阅者对象关注于发布者对象的状态变化或事件,并且想要在发布者产生事件时以自己独特的方式做出反应(有点vue的感觉)。此外,发布者想要保持与订阅者的低耦合

解决方案:定义“订阅者”或“监听者”接口。订阅者实现此接口。发布者可以动态注册关注某事件的订阅者,并在事件发生时通知他们

如何体现

  • 使用listener
  • 发布者注册登记订阅者
  • 连接UI对象和非UI对象
public abstract class Subject {

    protected List<Observer> observerList = new ArrayList<Observer>();

    public void add(Observer observer) {
        observerList.add(observer);
    }
	public void add(Observer observer){...}
    //通知观察者
    public abstract void notifyObserver();
}


public class ConcreteSubject extends Subject{
    @Override
    public void notifyObserver() {
        //遍历观察者
        for (Observer observer : observerList) {
            observer.response();
        }
    }
}

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

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

相关文章

蓝库云|数字化车间建设,是加速制造业数智化转型的关键因素

什么是制造业的数字化车间&#xff0c;对于传统制造业来说这也许是个新词汇&#xff0c;但在企业数字化转型中&#xff0c;数字化车间的存在至关重要&#xff0c;其意思就是将制造业车间里所有的工作流程数字化&#xff0c;实现设备、生产流程、工人等各环节之间的数字化管理与…

SQL注入——时间盲注

目录 一&#xff0c;时间盲注概述 二&#xff0c;关键函数 sleep() if() 三&#xff0c;注入原理 四&#xff0c;实例 一&#xff0c;时间盲注概述 web页面只返回一个正常页面。利用页面响应时间不同&#xff0c;逐个猜解数据。但是前提是数据库会执行命令代码&#xff…

dashboard疏散主机提示报错:无法疏散主机...处理方法、openstack虚拟机状态卡在重启处理方法、openstack在数据库修改虚拟机状态的方法

文章目录dashboard疏散主机提示报错&#xff1a;无法疏散主机...处理方法报错说明【状态卡在reboot状态】解决方法【登录nova数据库修改虚拟机信息】首先获取nova数据库的密码登录nova数据库并做修改验证信息是否修改成功再次迁移并验证报错说明【虚拟机状态error也会导致疏散失…

二叉树的遍历(前序、中序、后序)| C语言

目录 0.写在前面 1.前序遍历 步骤详解 代码实现 2.中序遍历 步骤详解 代码实现 3.后序遍历 步骤详解 代码实现 0.写在前面 认识二叉树结构最简单的方式就是遍历二叉树。所谓遍历二叉树就是按照某种特定的规则&#xff0c;对二叉树的每一个节点进行访问&#xff0c;…

QML动画(Animator)

在Qt5.2之后&#xff0c;引入Animator动画元素。这种方式可以直接所用于Qt Quick的场景图形系统&#xff0c;这使得基于Animator元素的动画及时在ui界面线程阻塞的情况下仍然能通过图形系统的渲染线程来工作&#xff0c;比传统的基于对象和属性的Animation元素能带来更好的用户…

CAD如何导入其他图纸的打印设置?CAD打印设置导入步骤

CAD打印设置怎么导入&#xff1f;这个问题相信很多设计师小伙伴在CAD图纸打印过程中都曾想到过&#xff0c;但不知道CAD如何导入其他图纸的打印设置&#xff0c;今天小编就以浩辰CAD软件为例来给大家分享一下CAD打印设置导入的具体操作步骤&#xff0c;一起来看看吧&#xff01…

把第三方sdk放在thinkphp的那个目录

ThinkPHP5.1 如何自动加载第三方SDK&#xff08;非composer包 &#xff09;注意&#xff1a;这里只是针对于非Composer 安装包的自动加载的实现&#xff0c;能用composer安装的自动跳过。由于ThinkPHP5.1 严格遵循PSR-4规范&#xff0c;不再建议手动导入类库文件&#xff0c;所…

应用实战|微信小程序开发示例--多人聊天互动空间

“超能力”数据库&#xff5e;拿来即用&#xff0c;应用开发人员再也不用为撰写API而发愁。MemFire Cloud 为开发者提供了简单易用的云数据库&#xff08;表编辑器、自动生成API、SQL编辑器、备份恢复、托管运维&#xff09;&#xff0c;很大地降低开发者的使用门槛。 本示例是…

[Web]——限流

限流概念&#xff1a;什么是限流呢&#xff1f;限流是限制到达系统的并发请求数量&#xff0c;保证系统能够正常响应部分用户请求&#xff0c;而对于超过限制的流量&#xff0c;则通过拒绝服务的方式保证整体系统的可用性。限流的分类:根据作用范围可以分为单机限流和分布式限流…

Delphi 实现HTML邮件发送

在我们的邮箱里&#xff0c;经常收到HTML格式的邮件。每注册一个网站的时候&#xff0c;总会收到一些他们发来的邮件&#xff0c;打开一后发现和一个网页一样&#xff0c;有图片、链接、文字&#xff0c;甚至有的还有声音和视频和交互。那我们想知道我们怎么才可以给朋友发送这…

【FLY】Java知识点总结

目录认识Java概念图名词解释历史版本基础知识编程规范关键字数据类型运算符数组Stringequals与流程控制引用数据结构常用数据结构HashMapLinkedHashMapWeakHashMapIdentityHashMapEnumMapTreeMapCopyOnWriteArrayList面向对象类反射注解IO异常线程EffectiveJava8JVM运行时数据区…

MXNet的机器翻译实践《编码器-解码器(seq2seq)和注意力机制》

机器翻译就是将一种语言翻译成另外一种语言&#xff0c;输入和输出的长度都是不定长的&#xff0c;所以这里会主要介绍两种应用&#xff0c;编码器-解码器以及注意力机制。编码器是用来分析输入序列&#xff0c;解码器用来生成输出序列。其中在训练时&#xff0c;我们会使用一些…

centos7安装教程

1.点击文件–新建虚拟机 2.根据图片一直下一步或者做一些改动 3. 点击自定义硬件&#xff0c;点击浏览选中下载好的ISO文件 4.配置完成后启动虚拟机 5.选择语言&#xff0c;中英文都可&#xff0c;按需求选择 6.进行设置目标位置&#xff0c;配置分区 7.选择网络和主机名 8.配置…

.net6 web api使用EF Core,根据model类自动生成表

1.安装EF Core和mysql数据库的nuget包 Microsoft.EntityFrameworkCore Pomelo.EntityFrameworkCore.MySql 2.创建models文件夹&#xff0c;在文件夹下创建实体类 public class Users{public int Id { get; set; }[Column(TypeName "varchar(200)"), Required]publ…

Streaming systems 第三章中文

Chapter 3. Watermarks GIthub链接&#xff0c;欢迎志同道合的小伙伴一起翻译 到目前为止&#xff0c;我们一直从pipeline设计者或数据科学家的角度来研究流处理。第二章介绍了水印&#xff0c;对事件时间处理中发生的位置和处理时间中结果何时输出的基本问题做了一部分回答。…

制造企业数字化工厂建设步骤的建议

随着工业4.0、中国制造2025的深度推进&#xff0c;越来越多的制造企业开始迈入智能制造的领域&#xff0c;那数字工厂要从何入手呢&#xff1f; 数字工厂规划的核心&#xff0c;也正是信息域和物理域这两个维度&#xff0c;那就从这两个维度来进行分析&#xff0c;看如何进行数…

MySQL架构篇

一、进阶学习环境说明 1.1 MySQL服务器环境 Linux虚拟机&#xff1a;CentOS 7 MySQL&#xff1a;MySQL5.7.30 在Linux服务器中安装MySQL&#xff1a; ps.如果有自己的云服务器&#xff0c;可忽略前两步&#xff0c;直接进行第三步 1.2 服务器日志文件说明 MySQL是通过文件系统对…

论文投稿指南——中文核心期刊推荐(经济管理)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

什么蓝牙耳机好用戴着舒适?佩戴舒适音质好的无线蓝牙耳机

戴耳机时间长会导致耳朵痛&#xff0c;时间长了对我们的听力还有影响。一款佩戴舒适的耳机更贴合耳朵的设计&#xff0c;能够带来更加优质的聆听体验&#xff0c;下面甄选出了几款佩戴比较舒适的耳机推荐&#xff0c;音质还非常出众。 一、南卡小音舱蓝牙耳机 单耳重量&#x…

Protobuf 使用和原理

文章目录1. protobuf 简介1.1. 发展背景1.2. 优缺点1.2.1. 优点1.2.2. 缺点2. 使用2.1. 消息类型2.1.1. 字段限制2.1.2. 数据类型2.1.3. 分配字段编号2.1.4. 保留字段2.1.5. 默认字段规则2.1.6. 枚举2.2. Protobuf 工作流程2.2.1 编译proto文件2.3. 使用建议3. 原理3.1. 编码格…