【软件工程导论】——面向对象与UML(学习笔记)

📖 前言:面向对象是以问题空间中出现的物体为中心进行模型化的一种技术。建立模型是软件工程中最常使用的技术之一。无论软件分析或软件设计,都需要建立模型。UML 就是OO 软件工程使用的统一建模语言。它是一种图形化的语言,主要用图形方式来表示。

在这里插入图片描述


目录

  • 🕒 1. 面向对象概述
  • 🕒 2. UML(Unified Modeling Language,统一建模语言)简介
    • 🕘 2.1 UML的组成
    • 🕘 2.2 UML的特点与应用
    • 🕘 2.3 静态建模
      • 🕤 2.3.1 用例图与用例模型
      • 🕤 2.3.2 类图和对象图
    • 🕘 2.4 动态建模
      • 🕤 2.4.1 消息
      • 🕤 2.4.2 状态图
      • 🕤 2.4.3 时序图(顺序图)和协作图(通信图)
      • 🕤 2.4.4 活动图
    • 🕘 2.5 物理架构建模
  • 🕒 3. 课后习题

🕒 1. 面向对象概述

类和对象的关系:

  • 对象:代表客观世界中实际或抽象的事物
    • 客观世界是由各种对象组成的
    • 数据以及在其上的操作的封装体
  • 类:一组相似的对象的共性抽象
    • 类是一组客观对象的抽象
    • 实现抽象数据类型的工具
  • 类与对象的关系
    • 抽象与具体的关系
    • 组成类的每个对象都是该类的实例
    • 实例是类的具体事物
    • 类是各个实例的综合抽象

面向对象的基本特征:抽象、封装、继承、多态

面向对象开发的优点:可复用性、可扩展性、可维护性

🕒 2. UML(Unified Modeling Language,统一建模语言)简介

UML:通用的可视化的建模语言

  • 目前在软件工程里主要用于系统分析与系统设计
  • 软件生存周期:RUP(统一过程)
  • 软件建模方式:可视化的语言
  • 软件文档规范:文档由UML建模工具自动产生
  • 软件人员分工:岗位界面逐渐趋向模糊

🕘 2.1 UML的组成

UML由模型元素、扩展机制、图及视图等部分组成:

  • 模型元素是构成图的最基本的元素;
  • 扩展机制用于扩展一个模型元素;
  • 图由模型元素和扩展机制构成;
  • 视图由一个或多个图构成,UML包括5种不同的视图。

UML的模型元素

  • 表示模型中的某个概念
    • 类、对象、构件、用例、结点(node)、接口(interface)、包(package)和注释(note)
  • 表示模型元素之间的关系
    • 关联、泛化、依赖、实现、聚集、组合

在这里插入图片描述

UML的元模型结构:元元模型层、元模型层、模型层、用户模型层
在这里插入图片描述

图:

  • 静态图:用例图、类图、对象图、构件图和部署图
  • 动态图:状态图、时序图、协作图和活动图

视图:

  • 用例视图(用例图 [活动图] )
    • 从用户角度看到的系统应有的外部功能
  • 逻辑视图(静态:类图、对象图;动态:状态图、时序图、协作图、活动图)
    • 描述系统的静态结构和对象间的动态协作关系
  • 进程视图(状态图、时序图、协作图、活动图、构件图、部署图)
    • 展示系统的动态行为及其并发性
  • 构件视图(构件图)
    • 展示系统实现的结构和行为特征
  • 部署视图(部署图)
    • 显示系统的实现环境和构件被部署到物理结构中的映射

展开来说,标准建模语言UML可以由下列5类图(共9种图)来定义:

  • 用例图
    • 用例图:需求捕获,测试依据
  • 静态图(Static diagram):
    • 类图:类以及类之间的相互关系
    • 对象图:对象以及对象之间相互关系
  • 行为图(Behavior diagram):
    • 状态图:类所经历的各种状态
    • 活动图:对工作流建模
  • 交互图(Interactive diagram):
    • 时序图:强调时间顺序的交互图
    • 协作图:强调对象协作的交互图
  • 实现图(Implementation diagram):
    • 构件图:构件及其相互依赖关系
    • 部署图:构件在各节点上的部署

其符号体系如下:

第一类 用例图的组成符号:

可视化图符名称描述
在这里插入图片描述用例用于表示用例图中的用例,每个用例表示所建模系统的一项外部功能需求,即从用户的角度分析所得的需求。
在这里插入图片描述参与者用于描述与系统功能有关的外部实体,它可以是用户,也可以是外部信息系统。
在这里插入图片描述系统用于界定系统功能范围。描述该系统功能的用例都置于其中,而描述外部实体的参与者都置于其外,上方标注系统名称。
在这里插入图片描述关联连按参与者和用例,表示该参与者所代表的系统外部实体与该用例所描述的系统需求有关。这是参与者和用例的连接。
在这里插入图片描述包含由用例A连向用例B,表示用例A包含用例B的行为或功能。
在这里插入图片描述泛化由用例A连向用例B,表示用例B描述了一项基本需求。而用例A则描述了该基本需求的特殊情况。
在这里插入图片描述扩展由用例连向用例B,表示用例描述了一项基本需求。并声明有扩展点,而用例A则描述了该基本需求在扩展点上的扩展。
在这里插入图片描述注释体用于对URL实体进行文字描述。
在这里插入图片描述注释连接将注释体与要描述的实体相连。

第二类 静态图——类图和对象图的组成符号:

可视化图符名称描述
在这里插入图片描述第一栏是类名,第二栏是类的属性,第三在是类的操作
在这里插入图片描述表示类图的集合,是一种分组机制
在这里插入图片描述关联表示类的对象之间的关系,其特殊形式是组成关联和聚合关联
在这里插入图片描述聚合关联表示类的对象之间是整体和部分之间的关系
在这里插入图片描述组成关联表示类的对象的这种关系,整体拥有部分,部分与整体共存,如果整体不存在了,则部分也随之消失
在这里插入图片描述泛化关系也称继承关系,定义类和包之间的一般元素和特殊元素之间的分类关系
在这里插入图片描述依赖关系有两个类元素A和B,如果修改则可能引起对另一个元素B的修改,则称B依赖A
在这里插入图片描述对象对象是类的一 个实例,第一栏表示对象名(带下划线),第二栏表示属性和行为值

第三类 行为图——状态图和活动图中常用到的图形符号:

可视化图符名称描述
在这里插入图片描述初态用于表示状态图的起始点
在这里插入图片描述活动状态在框中标明活动的名称,用于表示内部行动执行的情形
在这里插入图片描述终态用于表示状态图的终点
在这里插入图片描述条件判断用于表示状态之间的条件分支转移
在这里插入图片描述并行用于表示并发状态
在这里插入图片描述转移用于说明两个对象之间存在着某种关系,如果满足某个条件且当某个事件发生时,对象的状态发生转移
在这里插入图片描述送出信号将对象发出的信号送出到指定对象
在这里插入图片描述收到信号接收指定对象发出的信号

第四类 交互图——时序图和协作图中常用到的图形符号:

可视化图符名称描述
在这里插入图片描述对象用于表示物理设备和在其上运行的软件系统
在这里插入图片描述生命线条用于表示可执行的物理代码模块
在这里插入图片描述同步消息用于表示嵌套的控制流,发出消息后要等待操作处理完毕,调用者才能继续执行自 己的操作
在这里插入图片描述异步消息用于表示异步控制流,当消息发出后不用等待返回即可继续执行自己的操作
在这里插入图片描述简单消息用于表示控制如何在对象间进行传递
在这里插入图片描述关联表示对象之间的关系

第五类 实现图——构件图和配置图中常用到的图形符号:

可视化图符名称描述
在这里插入图片描述节点用于表标物理设备和在其上运行的软件系统
在这里插入图片描述构件用于表示可执行的物理代码模块
在这里插入图片描述接口 界面用于表示对外提供的可视操作和属性
在这里插入图片描述连接用于表示节点之间的连接,表示系统之间进行的通信路径

🕘 2.2 UML的特点与应用

特点

  • 统一标准
  • 面向对象
  • 表达能力强大、可视化

应用:用于描述系统开发的不同类型于不同阶段

  • 从需求分析到软件设计到软件测试及维护
  • 可视化问题描述,帮助理解问题
  • 帮助建立各阶段的文档
  • 获取和交流有关应用问题求解的知识
  • 辅助构建系统

🕘 2.3 静态建模

静态建模包括:用例图、类图、对象图

🕤 2.3.1 用例图与用例模型

下图是某保险商务系统的用例图。在这一简化的保险系统中有3个用例:签订保险单、销售统计和客户统计。客户只与用例“签订保险单”有交互,保险销售员则与3个用例都有交互。

在这里插入图片描述

用例之间主要存在两种关系:扩展关系和包含关系

扩展关系:根据指定的条件,一个用例中有可能加入另一个用例的动作

在这里插入图片描述

包含关系:一个用例的行为包含另一个用例的行为
在这里插入图片描述

包含关系和扩展关系的联系和区别:

  • 联系:都是从现有的用例中抽取出公共的那部分信息,作为一个单独的用例,然后通过不同的方法来重用这个公共的用例,以减少模型维护的工作量。
  • 区别:扩展关系中基本用例的基本流执行时,扩展用例不一定执行,即扩展用例只有在基本用例满足某种条件的时候才会执行。

包含关系中基本用例的基本流执行时,包含用例一定会执行。

在这里插入图片描述

🕤 2.3.2 类图和对象图

类图:
在这里插入图片描述
上图表示一个学生可以购买0或多本书,而一本书只能属于一个学生。

类图表示类间关系:

  • 关联关系 (Association)
    • 类之间存在的语义上的关系
    • 普通关联、递归关联、多重关联等
  • 聚集关系(Aggregation)
    • 特殊的关联:整体-部分
  • 组合关系(Composition)
    • 特殊的聚集:整体强烈拥有部分
  • 泛化关系(Generalization)
    • 继承
  • 依赖关系(Dependency)
    • 对一个类/对象的修改会影响另一个类/对象

普通关联:
在这里插入图片描述

上图也是对象图,是类图的实例。

在关联的两端可写上一个被称为重数(multiplicity)的数值范围,表示该类有多少个对象可与对方的一个对象连接。重数的符号表示有:

  • 1 表示1个对象,重数的默认值为1。
  • 0 …1表示0或1。
  • 1 …*表示1或多。
  • 0…*表示0或多,可以简化表示为*。
  • 2…4 表示2~4。

在这里插入图片描述

聚集关系(Aggregation)

特殊的关联:表示类之间具有整体与部分的关系
特征是“部分”对象可以是多个任意“整体”对象的一部分,“部分”可以参与到多个“整体”中,部分可以脱离整体。
在这里插入图片描述

组合关系(Composition)

特殊的聚集:整体强烈拥有部分
在组合中,“整体”强烈拥有“部分”,“部分”与“整体”共存。如果“整体”不存在了,“部分”也会随之消失。“整体”的重数必须是0或1,“部分”的重数可以是任意的。

泛化关系(Generalization)

  • 又称继承
  • 普通泛化,限制泛化
  • 此处的一般元素可视作父类,特殊元素视作子类。
  • 一般元素所具有的关联、属性和操作,特殊元素也都隐含性地拥有;
  • 特殊元素应包含额外信息;
  • 允许使用特殊元素实例的地方,也应能使用一般元素。

在这里插入图片描述

依赖关系(Dependency)

对一个类/对象的修改会影响另一个类/对象
例如,某个类中使用另一个类的对象作为操作中的参数,一个类存取作为全局对象的另一个类的对象,或一个类的对象是另一个类的类操作中的局部变量等,都表示这两个类之间有依赖关系。
在这里插入图片描述

包图:
在这里插入图片描述

🕘 2.4 动态建模

动态建模包括:状态图、时序图、协作图和活动图等

🕤 2.4.1 消息

在这里插入图片描述

🕤 2.4.2 状态图

状态图描述对象的所有可能状态及事件发生时状态的转移条件

在这里插入图片描述
状态图之间发送消息:
在这里插入图片描述

🕤 2.4.3 时序图(顺序图)和协作图(通信图)

时序图(元素:对象、对象生命线、消息)
时序图用来描述对象之间的动态交互,着重体现对象间消息传递的时间顺序。它以垂直轴表示时间,水平轴表示不同的对象。对象用一个带有垂直虚线的矩形框表示,并标有对象名和类名。垂直虚线是对象的生命线,用于表示在某段时间内对象是存在的。对象间的通信在对象的生命线间通过消息符号来表示,消息的箭头指明消息的类型。
在这里插入图片描述

协作图(元素有对象、链接和消息流)
协作图描述了对象间的动态协作关系,但它强调消息发生和接收的对象的结构组织(及连接关系)(协作对象之间的交互和链接)
在这里插入图片描述

🕤 2.4.4 活动图

活动图描述了用例的活动行为以及活动时的约束关系(泳道表明执行的对象)

在这里插入图片描述

🕘 2.5 物理架构建模

逻辑架构和物理架构

构件图:显示软件构件直接的依赖关系。一般来说,软件构件就是一个实际文件,可以是源代码文件、二进制代码文件和可执行文件。

构件图可以用来表现编译、链接或执行时构件之间的依赖关系。
在这里插入图片描述

部署图:描述系统硬件的物理拓扑结构以及在此结构上执行的软件。部署图可以显示计算节点的拓扑结构和通信路径、结点上运行的软件构件、软件构件包含对的逻辑单元(对象、类)等。
在这里插入图片描述

🕒 3. 课后习题

用例(use case):表示参与者与系统的一次交互过程,描述系统的一个功能。用例图被用在需求分析阶段,通过系统外部的参与者与系统之间交互过程的描述,来展现系统的功能。用例之间存在着泛化、包含、扩展关系。

1、根据你的理解,把下面的用例图补充完整。
在这里插入图片描述
解答:
在这里插入图片描述

2、某学校要开发一个网上选课系统。该系统提供以下基本功能:
建立课程:教务人员通过本系统建立课程信息
课程维护:教务人员修改和删除课程信息
安排课程:教务人员安排课程,课程的安排信息包括:
周学时、授课时间、授课老师、教室等信息
调整课程:教务人员对已经安排的课程信息进行调整。
课程浏览:用户可以浏览和查询课程信息
学生选课:学生登陆本系统,选择自己要修的课程。
选课浏览:学生浏览自己选修的课程。
试分析以上问题,并通过用例图描述该系统的功能。

在这里插入图片描述在这里插入图片描述

3、某绘图系统存在Point、Line、Square三种图元,它们具有Shape接口,图元的类图关系如图所示。现要将Circle图元加入此绘图系统以实现功能扩充。已知某第三方库已经提供了XCircle类,且完全满足系统新增的Circle图元所需的功能,但XCircle不是由Shape派生而来,它提供的接口不能被系统直接使用。代码3-1既使用了XCircle又遵循了Shape规定的接口,既避免了从头开发一个新的Circle类,又可以不修改绘图系统中已经定义的接口。代码3-2根据用户指定的参数生成特定的图元实例,并对之进行显示操作。请在代码补全代码空缺处。
绘图系统定义的接口与XCircle提供的显示接口及其功能如下表所示:
在这里插入图片描述

// 代码3-1
class Circle  (1)  {private (2) pxc;public Circle() {pxc = new (3);}public void display() {pxc.(4);}
}
// 代码3-2
public class Factory {public (5) getShapeInstance(int type) { // 生成特定类实例switch(type) {case 0: return new Point();case 1: return new Rectangle();case 2: return new Line();case 3: return new Circle();default: return null;}}
}public class App {public static void main(String argv[]) {if (argv.length != 1) {System.out.println("error parameters!");return;}int type = Integer.parseInt(argv[0]);Factory factory = new Factory();Shape s;s = factory.(6);if (s == null) {System.out.println("Error get instance!");return;}s.display();return;}
}

解答:

// 代码3-1
class Circle implements Shape  {private Xcircle pxc;public Circle() {pxc = new Xcircle;}public void display() {pxc.displayIt();}
}
// 代码3-2
public class Factory {public Shape getShapeInstance(int type) { // 生成特定类实例switch(type) {case 0: return new Point();case 1: return new Rectangle();case 2: return new Line();case 3: return new Circle();default: return null;}}
}public class App {public static void main(String argv[]) {if (argv.length != 1) {System.out.println("error parameters!");return;}int type = Integer.parseInt(argv[0]);Factory factory = new Factory();Shape s;s = factory.getShapeInstance(type);if (s == null) {System.out.println("Error get instance!");return;}s.display();return;}
}

4、在一个订货系统中,采购员从供货商处订货,双方需要签订订单,一个采购员可以订多个供货商的货品,一个供货商也可以给多个采购员供货。分析这个问题,并用类图对这个问题进行建模。

解答:
在这里插入图片描述

5、根据自己的理解,对下图中不合理之处进行修改。
在这里插入图片描述
解答:
在这里插入图片描述

5、传输门是传输系统中的重要装置。传输门具有 Open(打开)、Closed(关闭)、Opening(正在打开)、StayOpen(保持打开)、Closing(正在关闭)五种状态。触发状态的转换事件有 click、complete 和 timeout 三种。事件与其相应的状态转换如图所示。

在这里插入图片描述

下面的【Java 代码 1】与【Java 代码 2】分别用两种不同的设计思路对传输门进行状态模拟,请填补代码中的空缺。

// 代码1
public class Door {// 定义状态变量,用不同的整数表示不同状态public static final int CLOSED = 1;public static final int OPENING = 2;public static final int OPEN = 3;public static final int CLOSING = 4;public static final int STAYOPEN = 5;private int state = CLOSED;private void setState(int state) {this.state = state; // 设置传输门当前状态}public void getState() {// 此处代码省略,本方法输出状态字符串,// 例如,当前状态为 CLOSED 时,输出字符串为”CLOSED”}// 发生 click 事件时进行状态转换public void click() { if (1) {setState(OPENING);} else if (2) {setState(CLOSING);} else if (3) {setState(STAYOPEN);}}// 发生 timeout 事件时进行状态转换public void timeout() {if (state == OPEN) {setState(CLOSING);}}// 发生 complete 事件时进行状态转换public void complete() { if (state == OPENING) {setState(OPEN);} else if (state == CLOSING) {setState(CLOSED);}}public static void main(String[] args) {Door aDoor = new Door();aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();aDoor.getState();aDoor.click();aDoor.getState();aDoor.click();aDoor.getState();return;}
}
// 代码2
public class Door {public final DoorState CLOSED = new DoorClosed(this);public final DoorState OPENING = new DoorOpening(this);public final DoorState OPEN = new DoorOpen(this);public final DoorState CLOSING = new DoorClosing(this);public final DoorState STAYOPEN = new DoorStayOpen(this);private DoorState state = CLOSED;// 设置传输门当前状态public void setState(DoorState state) {this.state = state;}public void getState() { // 根据当前状态输出对应的状态字符串System.out.println(state.getClass().getName());}public void click() { // 发生 click 事件时进行状态转换4;}public void timeout() { // 发生 timeout 事件时进行状态转换5;}public void complete() { // 发生 complete 事件时进行状态转换6;}public static void main(String[] args) {Door aDoor = new Door();aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();aDoor.getState();aDoor.timeout();aDoor.getState();return;}
}public abstract class DoorState { // 定义所有状态类的基类protected Door door;public DoorState(Door door) {this.door = door;}public void click() {}public void complete() {}public void timeout() {}
}class DoorClosed extends DoorState { // 定义一个基本的 Closed 状态public DoorClosed(Door door) {super(door);}public void click() {7;}// 该类定义的其余代码省略
}// 其余代码省略

解答:
(1) state == CLOSED || state == CLOSING
(2) state == OPENING || state == STAYOPEN
(3) state == OPEN
(4) state.click()
(5) state.timeout()
(6) state.complete()
(7) door.setState(door.OPENING)

【代码一】没有用状态模式,将所有的状态转换代码都写到Door类中,每一个状态对应一个整型常量(状态变量),当Door的click()等方法被调用时,可以实现相应状态的转换,根据状态图,可以完成对(1)、(2)和(3)空的解答,例如当状态变量state为CLOSED或者CLOSING时,调用click()方法,状态将转换为OPENING。同理,当timeout()方法和complete()方法被调用时,某些状态之间也可以发生转换。

【代码二】使用了状态模式,Door类充当环境类,提供了抽象类DoorState充当抽象状态类,其子类,如DoorClosed、DoorOpening等,充当具体状态类。在环境类Door枚举了所有的状态,提供了一个setState()方法用于设置当前状态,此外,在Door的click()方法中调用状态类的click()方法,在Door的timeout()方法中调用状态类的timeout()方法,在Door的complete()方法中调用状态类的complete()方法。因此,(4)、(5)、(6)空用于实现间接调用。第(7)空用于实现状态的切换,当状态为DoorClosed时,如果调用click()方法,那么Door的当前状态将切换到OPENING,因此在第(7)空,将调用door对象的setState()方法,注入一个DoorOpening类型的对象,由于该对象已存在于Door中,无须再重新创建。在C++中,可以通过door->OPENING来获取,而在Java中则通过door.OPENING来获取。在本试题中,状态的切换由具体状态类来完成,由环境类来维护各个具体状态类的实例。

6、用状态图描述一个请假流程:
少于等于 3 天的请假申请,辅导员审批就可以了,超过 3 天的请假还需系主任审批。

解答:
在这里插入图片描述

7、下图是一个通信图,试把该图转换为顺序图

在这里插入图片描述
解答:
在这里插入图片描述

8、在顺序图中:Kjosk表示信息亭,BoxOffice表示售票中心, CreditCardService表示信用卡服务。
(1)Kjosk类中的操作有哪些?BoxOffice的操作有哪些 ? CreditCardService类的操作有哪些?
(2)根据对象间的消息顺序,描述该顺序图的含义。

在这里插入图片描述

解答:
(1)Kjosk类的操作有showAvailable(seat-list)、DemandPayment(cost)、printtickets(performance,seats)、ejectcard
BoxOffice的操作有Request(count,performance)、SelectSeats、InsertCard(CardNumber)、authorized
CreditCardService的操作有change(cardnumber,cost)
(2)信息亭查询演出的信息
售票中心给出可用的座位表
信息亭选择座位,售票中心给出所需要支付的费用
信息亭插入卡,提供信用卡卡号,进行费用支付
售票中心将信用卡号和费用发送给信用卡服务中心
信用卡服务中心验证有效性,并进行扣款
信息亭确认支付成功后,打印包含演出和座位信息的票,并弹出信用卡。


OK,以上就是本期知识点“面向对象与UML”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~

❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页

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

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

相关文章

3D DRAM在2025年来袭

4月1日消息,据半导体工程报道,在行业大会Memcon 2024上,三星电子宣布其计划成为首家在2025年后步入3D DRAM内存时代的行业领军者。随着DRAM内存行业在本十年后期将线宽压缩至低于10纳米,现有的设计解决方案在如此精细的尺度上难以…

HarmonyOS 应用开发之Actor并发模型对比内存共享并发模型

内存共享并发模型指多线程同时执行复数任务,这些线程依赖同一内存并且都有权限访问,线程访问内存前需要抢占并锁定内存的使用权,没有抢占到内存的线程需要等待其他线程释放使用权再执行。 Actor并发模型每一个线程都是一个独立Actor&#xf…

Cisco交换机安全配置

Cisco交换机安全配置 前提 我们以下命令一般都要先进入Config模式 S1> enable S1# conf t S1(config)#端口安全保护 禁用未使用的端口 以关闭fa0/1到fa0/24的端口为例 S1(config)# interface range fa0/1-24 S1(config-if-range)# shutdown缓解MAC地址表攻击 防止CAM…

sql注入---Union注入

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 学习目标 了解union注入过程中用到的关键数据库,数据表,数据列sql查询中group_concat的作用使用union注入拿到靶机中数据库里的所有用户名和密码 一. 获得数据库表名和列…

酷开系统 | 酷开科技打造全流程全自动化运营链路

近日,QuestMobile发布的《2023年全景生态流量半年报告》数据显示,随着营销场景边界的拓展,越来越多的品牌方开始将阵地由移动端转移到大屏端。OTT及智能硬件营销占中国互联网营销市场规模比例已经从2020年的3.8%升至2022年的7.6%。随着人口红…

【JavaWeb】Day30.SpringBootWeb请求响应——响应

响应 HTTL协议的交互方式:请求响应模式(有请求就有响应)那么Controller程序,除了接收请求外,还可以进行响应。 1.ResponseBody 在我们前面所编写的controller方法中,都已经设置了响应数据。 controller方…

【C语言进阶】- 内存函数

内存函数 1.1 内存函数的使用1.2 memcpy函数的使用1.3 memcpy函数的模拟实现2.1 memmove函数的使用2.2 memmove函数的模拟实现2.3 memcmp函数的使用2.4 memset函数的使用 1.1 内存函数的使用 内存函数就是对内存中的数据进行操作的函数 1.2 memcpy函数的使用 void* memcpy ( …

Docker容器与Serverless的融合:探索《2023腾讯云容器和函数计算技术实践精选集》中的云原生创新案例

Docker容器与Serverless的融合:探索《2023腾讯云容器和函数计算技术实践精选集》中的云原生创新案例 文章目录 Docker容器与Serverless的融合:探索《2023腾讯云容器和函数计算技术实践精选集》中的云原生创新案例一、引言二、《2023腾讯云容器和函数计算…

交通标志识别项目 | 基于Tensorflow+SSD实现道路交通标志识别

项目应用场景 面向智能驾驶或自动驾驶场景道路道路交通标志的识别,在交通标志识别的基础上为下一步的智能决策提供前提 项目效果: 项目细节 > 具体参见项目 README.md (1) 安装依赖 Python3.5、TensorFlow v0.12.0、Pickle、OpenCV-Python、Matplotl…

论文笔记✍GS3D- An Efficient 3D Object Detection Framework for Autonomous Driving

论文笔记✍GS3D: An Efficient 3D Object Detection Framework for Autonomous Driving 📜 Abstract 🔨 主流做法限制 : 我们在自动驾驶场景中提出了一种基于单个 RGB 图像的高效 3D 物体检测框架。我们的工作重点是提取 2D 图像中的底层 3…

AIGC-Stable Diffusion发展及原理总结

目录 一. AIGC介绍 1. 介绍 2. AIGC商业化方向 3. AIGC是技术集合 4. AIGC发展三要素 4.1 数据 4.2 算力 4.3 算法 4.3.1 多模态模型CLIP 4.3.2 图像生成模型 二. Stable Diffusion 稳定扩散模型 1. 介绍 1.1 文生图功能(Txt2Img) 1.2 图生图功能&…

数据结构(六)——图的应用

6.4 图的应用 6.4.1 最小生成树 对于⼀个带权连通⽆向图G (V, E),⽣成树不同,每棵树的权(即树中所有边上的权值之和)也可能不同。设R为G的所有⽣成树的集合,若T为R中边的权值之和最小的生成树,则T称为G的…

计算机视觉新巅峰,微软牛津联合提出MVSplat登顶3D重建

开篇:探索稀疏多视图图像的3D场景重建与新视角合成的挑战 3D场景重建和新视角合成是计算机视觉领域的一项基础挑战,尤其是当输入图像非常稀疏(例如,只有两张)时。尽管利用神经场景表示,例如场景表示网络&a…

代码随想录第27天 | 39. 组合总和、40.组合总和II、131.分割回文串

一、前言 今天的主题还是回溯算法&#xff0c;还是根据那个backtracking模板&#xff0c;但是今天会涉及到去重和一些小细节的问题。 二、组合总和 1、思路&#xff1a; 我一开始的想法就是在for循环转化为&#xff1a; for(int i 0; i < size; i) 但是这个是会陷入一…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十 简单颜色反转效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十 简单颜色反转效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十 简单颜色反转效果 一、简单介绍 二、简单颜色反转效果实现原理 三、简单颜色反转效果案例实现简单步骤 四、注…

壁纸小程序Vu3(预览页面:弹窗)

1.展示跳转后的分类列表图片 classlist.vue <template><view class"classlist"><view class"content"><navigator class"item" v-for"item in 10"><image src"../../common/images/64.png" mode…

基于arkTS开发鸿蒙app应用案例——通讯录案例

1.项目所用技术栈 arkTS node.js express mongoDB 2.效果图 3.源码 Index.ets&#xff08;登录页&#xff09; 登陆时让前端访问数据库中已经存好的账号密码&#xff0c;如果可以查询到数据库中的数据&#xff0c;则账号密码正确&#xff0c;登录成功&#xff0c;否则登录…

Docker容器赋能TitanIDE:引领编程新纪元的集成开发环境

Docker是一种容器化技术&#xff0c;它可以将应用程序和其所有的依赖项打包到一个轻量级、可移植的容器中。以下是Docker的基本概念和优势&#xff1a; 基本概念&#xff1a; 镜像&#xff08;Image&#xff09;&#xff1a;一个镜像是一个只读的模板&#xff0c;可以用于创建…

17.应用负载压力测试

早些点&#xff0c;下午题考&#xff0c;最近几年出现的少&#xff1b; 备考较为简单&#xff1b;历年真题相似度高&#xff1b; 主要议题&#xff1a; 1.负载压力测试概述 注意这些测试细微的差别&#xff1b; 负载测试和压力测试的方法比较相似&#xff0c;但是目的不同&a…

学习 MongoDB:打开强大的数据库技术大门

一、基本概念 MongoDB 是一个基于分布式文件存储的文档数据库&#xff0c;由 C 语言编写。它旨在为 Web 应用提供可扩展的高性能数据存储解决方案。 相信MySQL我们非常的熟悉&#xff0c;那么MySQL的表结构与MongoDB的文档结构进行类比的话可能更好理解MongoDB。 MySQL的数据…