Uml 状态机图-同一对象的两种状态

Uml 状态机图-同一对象的两种状态,uml,state-diagram,Uml,State Diagram,我正在描绘一种类似于Git的情况,在这种情况下,您可以同时拥有一个处于多个状态的文件(即,一个具有阶段性更改和未阶段性更改的文件)。在这个场景中,我有三种主要状态: 未编辑文件 已编辑/未老化文件 暂存文件 是否可以显示单个文件同时处于状态2和状态3,而不将所有状态信息复制到另一个状态(即状态4。暂存和编辑/未暂存文件)。以下是一个简化图: 我相信您的问题源于这样一个事实,即您试图将两个不同的状态机建模为一个 第一个是未编辑/编辑的状态机,第二个是与暂存相关的。文件将是两个状态机的主题,但这些机

我正在描绘一种类似于Git的情况,在这种情况下,您可以同时拥有一个处于多个状态的文件(即,一个具有阶段性更改和未阶段性更改的文件)。在这个场景中,我有三种主要状态:

  • 未编辑文件
  • 已编辑/未老化文件
  • 暂存文件
  • 是否可以显示单个文件同时处于状态2和状态3,而不将所有状态信息复制到另一个状态(即状态4。暂存和编辑/未暂存文件)。以下是一个简化图:


    我相信您的问题源于这样一个事实,即您试图将两个不同的状态机建模为一个

    第一个是未编辑/编辑的状态机,第二个是与暂存相关的。文件将是两个状态机的主题,但这些机器中的状态彼此独立:文件是暂存还是未暂存不取决于已编辑的文件;这取决于用户是否告诉Git转移文件。您可以暂存未编辑的文件,也可以选择不暂存已编辑的文件

    编辑器在文件名上显示“E”或“S”,这是一种选择,可以选择如何传达文件所处的状态。我假设一个未编辑但处于暂存状态的文件,其名称将显示一个“S”,而不管该文件未编辑的面是什么。显示这些符号是一种行为逻辑,它不是由状态决定的,而是由对状态及其可能组合的解释决定的


    从您包含的状态图来看,我不确定,但您是否试图在状态机中表示开发过程?编辑然后登台是很常见的,但是你可以用另一种方式。您是否考虑过使用活动图来表示流程?

    我相信您的问题源于您试图将两个不同的状态机建模为一个

    第一个是未编辑/编辑的状态机,第二个是与暂存相关的。文件将是两个状态机的主题,但这些机器中的状态彼此独立:文件是暂存还是未暂存不取决于已编辑的文件;这取决于用户是否告诉Git转移文件。您可以暂存未编辑的文件,也可以选择不暂存已编辑的文件

    编辑器在文件名上显示“E”或“S”,这是一种选择,可以选择如何传达文件所处的状态。我假设一个未编辑但处于暂存状态的文件,其名称将显示一个“S”,而不管该文件未编辑的面是什么。显示这些符号是一种行为逻辑,它不是由状态决定的,而是由对状态及其可能组合的解释决定的

    从您包含的状态图来看,我不确定,但您是否试图在状态机中表示开发过程?编辑然后登台是很常见的,但是你可以用另一种方式。您是否考虑过使用活动图来表示流程?

    状态机基础知识 在你的SM中,没有区域,没有复合状态,也没有子机器。因此,在给定时间内,最多只能有一种状态处于活动状态。它不是那样写的,但它是从UML规范中SM的语义中产生的,特别是:

    行为状态机由一个或多个区域组成,每个区域包含一个(可能是分层的)(…)。状态机的特定执行由一组通过一个或多个区域图的有效路径遍历来表示,由事件发生的调度(…)触发。由于其事件驱动的性质,状态机执行是在传输中或在状态中交替执行。当调度的事件至少与其一个关联触发器匹配时,它处于传输过程中

    通过转换和状态的图形遍历机制清楚地表明,两个状态不能同时处于活动状态

    更复杂的状态机 状态机可能要复杂得多。首先,SM可以由区域组成:

    区域表示可以与其正交区域同时执行的行为片段。如果两个或多个区域属于同一个状态机,或者在最顶层属于同一个状态机,则它们彼此正交

    此外,复合状态可能有子状态:因此,如果此状态处于活动状态,则其子状态也可能处于活动状态。而冲锋机可能指的是更复杂的情况

    在这种复杂情况下,机器的当前状态实际上是跨活动区域的状态层次结构中多个兼容活动状态的配置

    你的要求是什么? 无论何时,如果您觉得几个状态可能同时相关,则必须进一步分解您的状态,并确定相关的状态(例如潜在子状态)和独立的状态(正交区域)

    换句话说,如果独立于GIT语义,
    未编辑文件
    已编辑/未归档文件
    暂存文件
    是不够的,您可以考虑:

    • 区域1:
      未编辑
      编辑
      和区域2:
      暂存
      未暂存
      ,提供了4种可能的配置:
      未编辑
      /
      暂存
      未编辑
      未暂存,以及
      已编辑
      /
      未暂存
    • 如果某些组合不可能(例如,
      未编辑
      /
      分阶段
      ),您可以