uOttawaUniversity of Ottawa - Canadas University
list of dots

Umple User Manual    [Previous]   [Next]   

Loading

Final States

In Umple, there are two ways to define final states.

The first way is to use the "Final" keyword. This automatically defines a final state for the top-level state machine. Once the state machine is in this state, it is considered to be complete, and it is terminated. The "Final" keyword can be used as shown in the example below. Note, if a user defines a state named "Final", error E074 User Defined State Cannot be Named Final will be thrown.

The second way is to use the "final" keyword. Using this keyword allows users to define final states as shown below. In the case of concurrent state machines, all state machines within the same concurrent region must be in their final states before the enclosing region is considered to be complete. In the case of non-concurrent state machines, as soon as a final state is entered, the state machine is considered to be complete.

Example

// Using the keyword "Final" automatically defines the 
// final state for the top-level state machine "sm"

class X {
  sm {
    s1 {
      goToS2 -> s2;
    }
    s2 {
      goToFinal -> Final;
    }
  }
}
      

Load the above code into UmpleOnline

 

Another Example

// "s1" is an orthogonal region, and it is considered to be complete when
// all of the concurrent state machines are in their final states
// (i.e. s2 is in state "s4", s5 is in state "s7", and s8 is in state "s10")

class X {
  sm {
    s1 {
      s2 {
        s3 {
         goToS4 -> s4;
        }
        final s4 { }
      }
      ||
      s5 { 
        s6 {
          goToS7 -> s7;
        }
        final s7 { }
      }
      ||
      s8 {
        s9 {
          goToS10 -> s10;
        }
        final s10 { }
      }
    }
  }
}
      

Load the above code into UmpleOnline

 

Another Example

// "sm" will be considered as complete when
// it is in either state "s3" or "s5"

class X {
  sm {
    s1 {
      s2 {
        goToS3 -> s3;
        goToS4 -> s4;
      }
      final s3 { }
    }
    s4 {
      goToS5 -> s5;
      final s5 { }
    }
  }
}
      

Load the above code into UmpleOnline