活动图与状态图:UML中流程图的精细化表达——专业解析系统动态性与状态变迁

在这里插入图片描述
流程图是一种通用的图形表示法,用以展示步骤、决策和循环等流程控制结构。它通常用于描述算法、程序执行流程或业务过程,关注于任务的顺序执行。流程图强调顺序、分支和循环,适用于详细说明具体的处理步骤,图形符号相对基础和通用。

活动图和状态图是流程图的特殊形式,都是UML(统一建模语言)的一部分,可以更专业规范帮你理解和设计系统的动态行为。活动图更侧重于描述系统中的活动执行顺序和业务流程,而状态图则更关注于描述对象的状态和状态转换。

一、活动图(Activity Diagram)

UML(统一建模语言)中的活动图是一种图形化表示方法,主要用于描述系统中的活动和流程,帮助开发人员更好地理解系统的执行过程和交互关系。

活动图的用途:

  • 对系统工作流程建模
    工作流:是一个良好定义的动作序列,执行时将产生一个可观察的值,或者产生一个个体或实体的对象。
    在这里插入图片描述

  • 对工程组织过程建模
    在这里插入图片描述

  • 对算法流程建模
    在这里插入图片描述

1、活动(Activity)

活动代表了一个过程或者操作,通常用矩形框表示。

1.1. 动作状态

动作状态是指执行原子的、不可中断的动作,并在此动作完成后通过完成转换转向另一个状态的状态。
在这里插入图片描述

1.2. 活动状态

活动状态是可分解的,不是原子的,其工作的完成需要一定的时间。可把动作状态看作具体活动的特例。
在这里插入图片描述

一个活动可以分为若干个动作或子活动,这些动作和子活动本身可以组成一个活动图。
一个不含内嵌活动或动作的活动称之为简单活动;一个嵌套了若干活动或动作的活动称之为组合活动,组合活动有自己的名字和相应的子活动图。

  • 组合活动有自己的名字和相应的子活动图:
    在这里插入图片描述
  • 一个包含子活动的活动和嵌套了子状态的组合状态类似,概念上也相对统一:
    在这里插入图片描述

2、控制节点

用于控制活动的流程,如起始节点、结束节点、决策节点等。

  • 起始节点:表示活动的起始点,通常用一个实心圆表示。
  • 结束节点:表示活动的结束,通常用一个圆圈内带叉的符号表示。
  • 决策节点:当需要根据特定条件选择不同路径时使用。

3、边的类型

3.1、控制流边

表示活动之间的执行顺序,是最常见的边类型。

  • 直流:有一个输入流和一个输出流。

  • 分支(Branch)与合并(Merge)
    分支一般用于表示对象类所具有的条件行为。
    条件行为用分支和合并表达。
    一个分支有一个入转换和多个带条件的出转换,出转换的条件应当是互斥的。
    一个合并有两个带条件的入转换和一个出转换,合并表示从对应的分支开始的条件行为的结束。在这里插入图片描述

  • 分叉(Fork)和汇合(Join)
    分叉用于将动作流分为两个或者多个并发运行的分支,而汇合则用于同步这些并发分支,以达到共同完成一项事务的目的。
    分叉可以用来描述并发线程。
    汇合代表两个或多个并发控制流同步发生,当所有的控制流都达到汇合点后,控制才能继续往下进行。在这里插入图片描述

3.2. 对象流边

用虚线箭头表示,表示活动之间的数据传递。

3.3.异常边

用带有“<>”标签的箭头表示,表示活动执行过程中可能出现的异常情况。

4、泳道(Swimlane)

用于对活动图中的活动进行分组,描述对象之间的合作关系。泳道技术是将活动用线分成一些纵向区域,每个区域代表一个特定类、人或部门的责任区。泳道技术是活动图中引入的一种面向对象机制,可为提取类及分析各个对象之间的交互提供方便。
在这里插入图片描述

示例
假设我们要描述一个简单的购物流程的活动图,以下是可能的示例:

  • 起始节点:标记为“开始购物”。

  • 动作节点
    “浏览商品”:表示用户浏览可购买的商品。
    “选择商品”:表示用户从浏览的商品中选择要购买的商品。
    “添加到购物车”:表示用户将选择的商品添加到购物车中。
    “结算”:表示用户完成购物并准备结算。
    “支付”:表示用户进行支付操作。

  • 控制节点
    决策节点”:在“结算”节点后,可能有一个决策节点来判断用户是否选择了正确的支付方式或商品是否还有库存等。如果条件满足,则继续执行“支付”节点;否则,可能返回到“选择商品”或“浏览商品”节点。
    结束节点:标记为“购物完成”,表示整个购物流程的结束。

  • :使用控制流边连接上述的各个节点,表示活动的执行顺序。如果需要,还可以添加对象流边来表示数据传递,例如从“添加到购物车”节点到“结算”节点传递购物车数据。

这个示例展示了如何使用UML活动图来描述一个简单的购物流程。当然,在实际的项目中,活动图可能会更加复杂,包含更多的节点、边和图符来描述系统的活动和流程。

二、状态图(State Diagram)

状态(State)是对象在其生命周期内所呈现的一种特定条件或情境,这一条件或情境下,对象会满足特定的要求,执行相应的活动,或者等待特定事件的发生。每一个对象都拥有其独特的状态,这些状态是对象经过一系列操作或活动后的结果。一旦某个事件被触发,对象的当前状态便会随之发生变化,从而进入新的状态阶段。

UML(统一建模语言)状态图(Statechart Diagram)是一种用来详尽描述一个特定对象在其生命周期内所有可能存在的状态,以及这些状态之间由于不同事件触发而发生的转移和变化的图形化工具。它清晰地展示了对象在不同状态下的行为以及这些状态之间的转换路径,从而帮助开发人员深入理解和分析对象的动态行为。

本小节详细介绍了UML 状态图 的状态要素、状态分类,转移(Transition)要素、转移(Transition)分类,事件(Event)等内容。

在这里插入图片描述

1、状态

1.1、状态要素

一个状态在UML状态图中通常包含多个组成部分,它们共同描述了对象在某一特定情况下的行为和响应。以下是您提到的各个部分的详解:

  • 状态名(Name)
    状态名用于标识和描述对象在其生命周期中的某个特定状态。它通常是一个简洁且具有描述性的名称,如“待处理”、“进行中”或“已完成”等。

  • 进入/退出动作(Entry/Exit Action)

    • 进入动作(Entry Action):当对象进入该状态时,会执行的动作或操作。这些动作通常在对象从其他状态转移到当前状态时执行,用于初始化或准备该状态所需的环境或资源。
    • 退出动作(Exit Action):当对象准备离开该状态时,会执行的动作或操作。这些动作通常在对象从当前状态转移到其他状态之前执行,用于清理或释放该状态所使用的资源或执行必要的后续处理。
  • 内部转移(Internal Transition)
    内部转移指的是在不改变对象当前状态的情况下,由于某些事件或条件的发生而执行的动作或操作。这些转移不会导致对象从当前状态转移到另一个状态,而是在当前状态内部执行某些操作或响应某些事件。

  • 子状态(Substate)
    子状态(也称为嵌套状态)是出现在另一个状态内部的状态。一个状态可以有零个或多个子状态,这些子状态表示了该状态的更细粒度或更具体的行为。子状态可以进一步包含它们自己的进入/退出动作、内部转移和子状态等。子状态的存在使得状态图能够更加详细地描述复杂对象的动态行为。

  • 延迟事件(Deferred Event)
    延迟事件是一种特殊的事件,它不会立即触发状态的转换,而是被延迟到对象的某个特定状态或条件满足时再执行。当对象处于某个状态时,如果接收到一个延迟事件,该事件将被暂存起来,直到对象满足执行该事件的条件或进入能够处理该事件的状态时才会被触发。延迟事件允许对象根据当前状态或条件来决定何时处理某个事件,从而实现了对事件处理的灵活控制。

示例:
在这里插入图片描述
横线上面是名字域,下面是转换域(可选)。

  • entry/turnOn:当转入该状态时,做开灯动作。
  • do/blinkFivetimes:当处于该状态时,灯闪烁5次。do活动是只在状态内出现的活动,不能附加到转换上。
  • event poweroff/powerSupplySelf:当电源关闭事件发生时,用自备电源。
  • exit/turnOff:当转出该状态时,做关灯动作。
  • event selfTest/defer:当selfTest事件发生时,对象将延迟响应,到别的状态中再处理,用defer这个特定动作表示延迟。

通过以上组成部分,UML状态图能够全面、准确地描述一个特定对象的所有可能状态以及这些状态之间的转移和变化,为开发人员理解和分析对象的动态行为提供了有力的支持。

1.2、状态分类

状态可以细分为不同的类型,例如初态、终态、中间状态、组合状态、历史状态等。一个状态图只能有一个初态,但终态可以有一个或多个,也可以没有终态。

在UML(统一建模语言)中,状态图用于描述一个对象在其生命周期中可能经历的所有状态,以及由于各种事件触发而在这些状态之间进行的转换。UML状态图的状态可以分为几种主要类型,以下是对这些状态的详细解释:

  • 初始状态(Initial State)
    初始状态代表状态图的起始位置,表示对象生命周期的开始。在状态图中,初始状态通常用一个实心圆表示,并可能有一个指向它的箭头,表示对象从初始状态开始其生命周期。
    一个状态图只能有一个初始状态,因为每个执行都是从同一个起点开始的。

  • 终止状态(Final State或End State)
    终止状态表示对象生命周期的结束或某个特定行为的完成。在状态图中,终止状态通常用一个含有实心圆的空心圆表示。
    与初始状态不同,终止状态的数量可以不确定,也可以没有。一个对象可能经历多个终止状态,或者在没有达到任何终止状态的情况下结束其生命周期。

  • 中间状态(Intermediate State)
    中间状态是除初始状态和终止状态之外的其他状态,表示对象在其生命周期中的某个特定条件或状况。
    中间状态可能包含进入/退出动作(entry/exit action),这些动作在对象进入或离开该状态时执行。它们也可能包含内部转移(internal transition),这些转移在对象处于该状态时由于某些事件或条件而发生,但不导致对象转移到另一个状态。
    中间状态还可以包含子状态(substate),这些子状态表示该状态的更细粒度或更具体的行为。

  • 组合状态(Compound State)
    组合状态或称为复合状态,是一个包含其他状态(子状态)的状态。组合状态用于描述具有复杂行为或包含多个子行为的状态。这些子状态可以是顺序发生的,也可以是并发发生的。
    组合状态至少包含一个域(region),用于容纳其子状态。子状态可以是简单的中间状态、终止状态,或者它们自己也可以是组合状态,从而形成层次结构。在组合状态内部,可以定义进入动作(entry action)和退出动作(exit action),这些动作在对象进入或离开组合状态时执行。
    组合状态通常用于表示具有多个子阶段或子行为的复杂过程。例如,一个订单处理系统可能有一个“处理订单”的组合状态,其中包含“接收订单”、“验证订单信息”、“计算价格”和“发送确认邮件”等子状态。这些子状态按照特定的顺序或并发地执行,以完成整个订单处理过程。

    • 顺序子状态:如果一个组成状态的子状态对应的对象在其生命期内的任何时刻都只能处于一个子状态,即多个子状态之间是互斥的,不能同时存在,这种子状态称为顺序子状态。
      在这里插入图片描述

    • 并发子状态:有时组合状态有两个或者多个并发的子状态机,此时称组成状态的子状态为并发子状态。
      在这里插入图片描述

  • 历史状态(History State)
    历史状态用于记住对象上一次离开复合状态(composite state)时所处的子状态。当对象重新进入复合状态时,它可以恢复到历史状态,从而避免重新遍历整个复合状态的所有子状态。
    历史状态在处理复杂的嵌套状态或长时间运行的系统时特别有用,因为它们可以简化状态图的复杂性并提高性能。
    示例:CD Player,running状态被打断到power on状态,再转回到running状态时,希望直接进入历史状态

在这里插入图片描述

  • 伪状态(Pseudo State)
    伪状态是一种特殊类型的状态,它不像普通状态那样表示对象在其生命周期中的某个具体条件或状况。相反,伪状态用于描述状态图中的控制流或逻辑结构。
    常见的伪状态包括选择(choice)、分叉(fork)、汇合(join)等。这些伪状态用于表示在状态图中选择多个转移、并行执行多个活动或等待多个活动完成等情况。

通过使用这些不同类型的状态,UML状态图能够全面、准确地描述一个对象在其生命周期中可能经历的所有状态以及这些状态之间的转换和交互。这有助于开发人员理解对象的动态行为、识别潜在的问题并优化系统设计。

1.3、转移(Transition)

在UML(统一建模语言)状态图中,转移(Transition)是描述对象从一个状态变化到另一个状态的行为。转移是由触发事件(triggering event)引起的,当这个事件在对象处于某个状态时发生时,转移就会被激活,导致对象进入一个新的状态。

在这里插入图片描述

转移要素:

  • 源状态(Source State)
    这是转移开始的状态。在状态图中,转移从源状态的一个出口开始,指向目标状态的一个入口。
  • 目标状态(Target State)
    这是转移结束的状态。当转移成功执行时,对象将进入这个目标状态。目标状态在状态图中由转移箭头指向。
  • 触发事件(Triggering Event)
    触发事件是导致转移发生的原因。它可以是一个信号、消息、操作调用、时间事件(如超时)或改变对象属性的动作。当这个事件在源状态发生时,转移就被触发。
  • 监护条件(Guard Condition)
    监护条件是一个布尔表达式,用于确定当触发事件发生时是否应执行转移。如果监护条件为true,则转移会被执行;如果为false,则转移不会执行,对象保持在源状态。
  • 动作(Action)
    动作是在转移执行过程中可能发生的可选行为。它可以在转移开始时、过程中或结束时执行。动作可以是任何类型的操作或方法调用,用于更新对象的状态或执行其他任务。
  • 转移标签(Transition Label)
    转移标签用于描述转移的属性,包括触发事件、监护条件和动作。在UML图中,转移标签通常写在转移箭头的上方或旁边。

在UML状态图中,转移可以是简单的直线,也可以是带有分支或合并的复杂路径。通过组合使用不同类型的转移和状态,可以构建出复杂而灵活的状态图,以描述对象的动态行为和系统状态的变化。

转移分类

虽然UML标准并没有严格规定转移的分类,但根据其特点和应用方式,可以概括几种典型的转移类型:

  • 外部转移(External Transition):
    外部转移是对象在接收到外部事件(如消息、信号或操作调用)时触发的转移。这种转移描述了对象如何响应外部世界的刺激。

  • 自转移(Self-Transition):
    自转移发生在同一个状态内部,即对象接收到一个事件后,状态不改变,但是可能会触发一些内部活动或动作的执行。这用于表示对象在相同状态下处理事件并可能更新自身属性的情况。

  • 内部转移(Internal Transition):
    类似于自转移,但强调的是在状态内部发生的活动,不涉及状态本身的改变。它强调的是状态内部行为的连续性,而不是状态的切换。

  • 并发转移(Concurrent Transition):
    当系统中的多个状态或子状态可以同时进行转移时,这种转移称为并发转移。在UML中,通常通过并行区域表示,显示不同状态或子状态间的并发行为。

  • 条件转移(Conditional Transition):
    如果转移的发生依赖于特定的条件(称为监护条件或Guard),那么这就是条件转移。只有当监护条件为真时,转移才会触发。

  • 事件驱动转移:
    根据触发转移的事件类型,可以区分不同的事件驱动转移,常见的有:

    • SignalEvent: 由外部信号触发的转移。
    • CallEvent: 由方法调用或服务请求触发的转移。
    • TimeEvent: 由特定时间间隔或时间点到达触发的转移。
    • ChangeEvent: 由属性值变化触发的转移。
  • 层次转移(Hierarchical Transition):
    在包含复合状态的状态图中,从父状态到子状态或子状态到父状态的转移可以视为一种特殊的转移类型,体现了状态机的层次结构。

这些转移类型共同构建了状态图的复杂行为模型,帮助设计者理解并定义系统在不同条件下的动态行为。

1.4、事件(Event)

在UML(Unified Modeling Language,统一建模语言)中,事件(Event)是状态机中的一个关键概念,它触发状态之间的转换或在状态内部触发动作的执行。事件代表了系统外部或内部的一个显著变化,这个变化足以影响系统的状态或行为。以下是UML中事件的一些主要类型和概念:

  • 信号事件(Signal Event):
    信号事件由外部源发送到对象或状态机,表示发生了某种感兴趣的事件。信号是UML中用于异步通信的基本机制。

  • 调用事件(Call Event):
    当一个操作被调用时触发的事件,这可以是直接方法调用或服务请求。它包括入口调用(调用一个状态或状态机的入口动作)和退出调用(调用一个状态或状态机的出口动作)。
    在这里插入图片描述

  • 变化事件(Change Event):
    当某个监视的属性值发生变化时触发的事件。这种事件常用于实现状态机对外部或内部条件变化的响应。
    用关键字When,后面跟布尔表达式。
    在这里插入图片描述

  • 时间事件(Time Event):
    时间事件是基于时间流逝而触发的事件,如超时、周期性事件等。用关键字When 或After表示。
    在这里插入图片描述

    时间事件基于时间条件触发,分为以下几种:

    • 绝对时间事件:在指定的绝对时间点触发。
    • 相对时间事件:在某个持续时间过后或从上一个事件后经过一定时间触发。
    • 时间间隔事件:每隔固定时间重复触发。
  • 条件事件(Condition Event):
    实际上这不是一个独立的事件类型,而是指使用条件(Guard)来限制其他类型事件触发转换的能力。当事件发生且条件满足时,转换才会执行。

  • 中断事件(Interrupt Event):
    中断事件可以打断当前正在执行的活动或转移,使系统立即响应紧急或优先级更高的事件。

  • 复合事件(Composite Event):
    由一个或多个基本事件组合而成的事件,所有组成部分必须同时发生或满足条件才能触发。

事件是状态图中状态转换的动力,它们与状态机中的监护条件和动作结合,共同描述了系统的动态行为和响应机制。在设计状态图时,明确每个转移所对应的事件及其条件,对于正确建模系统行为至关重要。

总结

活动图和状态图作为专业流程图在软件开发和其他领域中扮演着重要的角色。以下是它们的重要性:

  • 清晰沟通:活动图和状态图能够以直观的方式展示系统的动态行为。这使得团队成员之间可以更加清晰地沟通,确保对系统功能和行为有共同的理解。

  • 理解业务逻辑:活动图能够展示业务过程或操作流程中的各个步骤和决策点,帮助开发人员深入理解业务逻辑。状态图则能够清晰地展示系统中对象的状态转换,帮助开发人员理解对象的行为和生命周期。

  • 问题发现与解决:通过活动图和状态图,开发人员可以更容易地发现系统中潜在的问题和瓶颈。这些图表提供了一种可视化的方式来分析系统的复杂性和可能的问题点,从而帮助团队在开发早期就发现并解决问题。

  • 优化系统设计:活动图和状态图有助于开发人员优化系统设计。通过分析和优化流程图中的路径和转换,开发人员可以提高系统的性能和效率,减少不必要的复杂性和资源浪费。

  • 支持变更管理:在系统开发过程中,需求变更或设计变更是常见的。活动图和状态图提供了一种灵活的方式来适应这些变更。通过更新流程图,开发人员可以快速地反映这些变更到系统中,并确保系统的稳定性和一致性。

  • 支持文档化:活动图和状态图可以作为系统文档的一部分,为系统的维护和扩展提供重要的参考。这些图表能够清晰地展示系统的结构和行为,为后来的开发人员或维护人员提供有价值的指导。

总之,活动图和状态图作为专业流程图在软件开发和其他领域中具有重要的应用价值。它们能够帮助开发人员更好地理解系统、优化设计和支持变更管理,从而提高系统的质量和效率。

在这里插入图片描述

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

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

相关文章

Logfire-Python可观测平台快速上手

我最近在优化之前的FastAPI接入可观测性平台&#xff0c;正好分享一下Pydantic团队推出的logfire&#xff0c;希望对大家的Python工程化有帮助。 Github: https://github.com/pydantic/logfire 官网链接: Pydantic Logfire Documentation Logfire是Pydantic团队推出的可观测…

数据结构复习指导之二叉树的遍历

文章目录 二叉树 考纲内容 复习提示 1.二叉树的遍历 1.1先序遍历&#xff08;PreOrder&#xff09; 1.2中序遍历&#xff08;InOrder&#xff09; 1.3后序遍历&#xff08;PostOrder&#xff09; 1.4递归算法和非递归算法的转换 1.5层次遍历 1.6由遍历序列构造二叉树…

3.yolov5训练前的图片处理详解(python)

其实&#xff0c;yolov5模型可以分为深度网络、数据处理&#xff08;图片处理&#xff09;、损失函数、优化器选择、训练和预测及部分构成&#xff0c;相信大家对训练和预测的代码比较熟悉。前面两章我们根据代码和结构图了解了yolov5的深度网络&#xff0c;接下来看数据处理的…

力扣刷题--数组--第三天

今天再做两道二分查找的题目&#xff0c;关于二分查找的知识可看我前两篇博客。话不多说&#xff0c;直接开干&#xff01; 题目1&#xff1a;69.x 的平方根 题目详情&#xff1a;   给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。由于返回类型是整数&#…

首席数据官CCRC-CDO如何构筑企业数据合规的坚固防线

在当今信息化快速发展的时代&#xff0c;数据已经成为企业最宝贵的资产之一。然而&#xff0c;随着数据规模的迅速增长&#xff0c;数据合规问题也日益凸显。首席数据官&#xff08;CDO&#xff09;作为企业中负责数据战略和管理的核心人物&#xff0c;构筑企业数据合规的坚固防…

吴恩达2022机器学习专项课程C2(高级学习算法)W1(神经网络):2.5 更复杂的神经网络

目录 示例填写第三层的层数1.问题2.答案 公式&#xff1a;计算任意层的激活值激活函数 示例 层数有4层&#xff0c;不包括输入层。 填写第三层的层数 1.问题 你能把第二个神经元的上标和下标填写出来吗&#xff1f; 2.答案 根据公式g(wxb)&#xff0c;这里的x对应的是上…

Unity EventSystem入门

概述 相信在学习Unity中&#xff0c;一定有被UI事件困扰的时候把&#xff0c;当添加UICanvas的时候&#xff0c;Unity会为我们自动添加EventSystem&#xff0c;这个是为什么呢&#xff0c;Unity的UI事件是如何处理的呢&#xff0c;在使用各个UI组件的时候&#xff0c;一定有不…

Springboot+Vue项目-基于Java+MySQL的个人云盘管理系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

电脑文件x3daudio1 7.dll怎么修复?快速修复x3daudio1 7.dll的方法

你试过电脑文件x3daudio1 7.dll丢失么&#xff1f;如果你有遇到这种情况&#xff0c;那么可能你的某些程序就会启动不了&#xff0c;毕竟这个文件是用来处理音频功能的&#xff0c;那么我们要怎么去修复&#xff1f;下面我们一起来详细的了解电脑文件x3daudio1 7.dll这个文件吧…

顺序栈的操作

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd;既然选择了远方&#xff0c;当不负青春…

DNS、ICMP、NAT以及代理服务器

目录 1. DNS 1.1. DNS 背景 1.2. 域名简介 1.3. 域名解析过程 2. ICMP 2.1. ICMP 的功能 2.2. ICMP 的报文格式 2.3. ping 命令 2.4. traceroute 命令 3. NAT和代理服务器 3.1. NAT 技术 3.2. NAT IP转换过程 3.3. NAT 技术的缺陷 3.4. 代理服务器 3.4.1. 正向…

1.使用uniapp搭建微信小程序项目并引入前端组件资源

文章目录 1. 项目配置1.1. 新建vue3项目1.2. 关联云空间1.3. 运行到微信开发者工具 2. 前端组件2.1. uniCloud的内置组件和扩展组件2.2. uView3.02.3. 在uniapp项目引入uview3 1. 项目配置 1.1. 新建vue3项目 由于我们要使用vue3而不是vue2&#xff0c;所以要选好版本&#x…

SpringBoot实现统一返回值+全局异常处理

在这里首先感谢的就是程序员老罗&#xff0c;从他的项目里面学到了这些东西。 首先就是去创建一个SpringBoot项目&#xff0c;这里我就不多做赘述了 封装一个统一返回对象 package com.example.demo.vo;public class ResponseVO<T> {private String status;private In…

本地搭建AI环境

本地搭建AI 这几天刚刚看到好兄弟分享的一段关于本地搭建AI的短视频&#xff0c;于是我按照视频里的讲解&#xff0c;进行了实践。感觉非常棒&#xff01;&#xff01;&#xff0c;马上整理成文字与大家分享一下。 在本地启动并运行大型语言模型&#xff0c;运行llama3、phi3…

Apache POI入门学习

Apache POI入门学习 官网地址 excel中使用到的类读取excel表格内容表格内容maven依赖方式一测试结果 方式二测试结果 向excel中写入数据方式一方式二方式三测试结果 从 Excel 工作表中的公式单元格读取数据测试结果 Excel 工作表中写入公式单元格从受密码保护的Excel中读取数据…

Redis-新数据类型-Bitmaps

新数据类型-Bitmaps 简介 在计算机中&#xff0c;用二进制&#xff08;位&#xff09;作为存储信息的基本单位&#xff0c;1个字节等于8位。 例如 “abc” 字符串是由 3 个字节组成&#xff0c;计算机存储时使用其二进制表示&#xff0c;"abc"分别对应的ASCII码是 …

Jenkins +git +web(vue) centos8.5 实战打包部署 运维系列二

1新建一个工程 #cat qy.sh #!/bin/bash cd /data/.jenkins/workspace/web rm -rf dist/ rm -rf qysupweb.tar.gz npm run build tar -czvf qysupweb.tar.gz dist/ #点击构建

嵌入式开发八:STM32启动过程分析

本次给大家分析 STM32F4 的启动过程&#xff0c;这里的启动过程是指从 STM32 芯片上电复位执行的第一条指令开始&#xff0c;到执行用户编写的 main 函数这之间的过程。我们编写程序&#xff0c;基本都是用 C 语言编写&#xff0c;并且以 main 函数作为程序的入口。但是事实上&…

CentOS 7 :虚拟机网络环境配置+ 安装gcc(新手进)

虚拟机安装完centos的系统却发现无法正常联网&#xff0c;咋破&#xff01; 几个简单的步骤&#xff1a; 一、检查和设置虚拟机网络适配器 这里笔者使用的桥接模式&#xff0c;朋友们可以有不同的选项设置 二、查看宿主机的网络 以笔者的为例&#xff0c;宿主机采用wlan上网模…

Vue-路由介绍

目录 一、思考引入 二、路由介绍 一、思考引入 单页面应用程序&#xff0c;之所以开发效率高&#xff0c;性能高&#xff0c;用户体验好&#xff0c;是因为页面按需更新。 而如果要按需更新&#xff0c;首先需要明确&#xff1a;访问路径和组件的对应关系。该关系通过路由来…