关系生命周期
@StateMachine static interface ContractLifecycle { @StateSet static interface States { @Initial @Functions({ @Function(transition = ContractLifecycle.Transitions.Activate.class, value = Active.class), @Function(transition = ContractLifecycle.Transitions.Cancel.class, value = Canceled.class) }) static interface Draft {} @Functions({ @Function(transition = ContractLifecycle.Transitions.Expire.class, value = Expired.class), @Function(transition = ContractLifecycle.Transitions.Cancel.class, value = Canceled.class) }) static interface Active {} @End static interface Expired {} @End static interface Canceled {} } @TransitionSet static interface Transitions { static interface Activate {} static interface Expire {} static interface Cancel {} } } @LifecycleMeta(ContractLifecycle.class) public static class Contract extends ReactiveObject { public Contract() { initialState(ContractLifecycle.States.Draft.class.getSimpleName()); } @Transition public void activate() {} @Transition public void expire() {} @Transition public void cancel() {} } // /////////////////////////////////////////////////////////////////////////////// // Relational Case 1. // /////////////////////////////////////////////////////////////////////////////// @StateMachine static interface RelationalOrderLifecycleSharingValidWhile { @StateSet static interface States { @Initial @Function(transition = Transitions.Start.class, value = Started.class) @ValidWhile(on = { ContractLifecycle.States.Active.class }, relation = Relations.Contract.class) static interface Created {} @CompositeState @Function(transition = Transitions.Cancel.class, value = Canceled.class) static interface Started { @StateSet static interface SubStates { @Initial @Function(transition = RelationalOrderLifecycleSharingValidWhile.States.Started.SubTransitions.DoProduce.class, value = Producing.class) @ValidWhile(on = { ContractLifecycle.States.Active.class }, relation = RelationalOrderLifecycleSharingValidWhile.Relations.Contract.class) static interface OrderCreated {} @Function(transition = RelationalOrderLifecycleSharingValidWhile.States.Started.SubTransitions.DoDeliver.class, value = Delivering.class) @ValidWhile(on = { ContractLifecycle.States.Active.class }, relation = RelationalOrderLifecycleSharingValidWhile.Relations.Contract.class) static interface Producing {} @Function(transition = RelationalOrderLifecycleSharingValidWhile.States.Started.SubTransitions.ConfirmComplete.class, value = Done.class) @ValidWhile(on = { ContractLifecycle.States.Active.class }, relation = RelationalOrderLifecycleSharingValidWhile.Relations.Contract.class) static interface Delivering {} @End @ShortCut(RelationalOrderLifecycleSharingValidWhile.States.Finished.class) // Ignoring : @ValidWhile(on = { // ContractLifecycle.States.Active.class }, relation = // Relations.Contract.class) static interface Done {} } @TransitionSet static interface SubTransitions { static interface DoProduce {} static interface DoDeliver {} static interface ConfirmComplete {} } } @End static interface Finished {} @End static interface Canceled {} } @TransitionSet static interface Transitions { static interface Start {} static interface Cancel {} } @RelationSet static interface Relations { @RelateTo(ContractLifecycle.class) static interface Contract {} } } @LifecycleMeta(RelationalOrderLifecycleSharingValidWhile.class) public static class ProductOrderSharingValidWhile extends ProductBase { private Contract contract; public ProductOrderSharingValidWhile(Contract contract) { this.contract = contract; initialState(RelationalOrderLifecycleSharingValidWhile.States.Created.class.getSimpleName()); } @Relation(RelationalOrderLifecycleSharingValidWhile.Relations.Contract.class) public Contract getContract() { return this.contract; } @Transition public void start() {} @Transition public void cancel() {} @Transition public void doProduce() {} @Transition public void doDeliver() {} @Transition public void confirmComplete() {} }
@Test public void test_relational_composite_state_machine_sharing_with_composite_state() { final Contract contract = new Contract(); // Outer Initial State assertState(ContractLifecycle.States.Draft.class, contract); contract.activate(); assertState(ContractLifecycle.States.Active.class, contract); final ProductOrderSharingValidWhile product = new ProductOrderSharingValidWhile(contract); // Outer State + Outer Transition => Composite State => Composite // Initial State { // Outer Initial State assertState(RelationalOrderLifecycleSharingValidWhile.States.Created.class, product); // Outer Transition product.start(); assertState(RelationalOrderLifecycleSharingValidWhile.States.Started.SubStates.OrderCreated.class, product); } { // Composite State + Composite Transition => Composite State product.doProduce(); assertState(RelationalOrderLifecycleSharingValidWhile.States.Started.SubStates.Producing.class, product); product.doDeliver(); assertState(RelationalOrderLifecycleSharingValidWhile.States.Started.SubStates.Delivering.class, product); } { // Composite State + Composite Transition => Composite Final State // => Outer State product.confirmComplete(); assertState(RelationalOrderLifecycleSharingValidWhile.States.Finished.class, product); } }
@Test(expected = LifecycleException.class) public void test_relational_standalone_composite_invalid_state_sharing_from_owning_valid_while() { final Contract contract = new Contract(); assertState(ContractLifecycle.States.Draft.class, contract); final ProductOrderSharingValidWhile order = new ProductOrderSharingValidWhile(contract); try { order.start(); } catch (LifecycleException e) { assertInvalidStateErrorByValidWhile(e, contract, order, ContractLifecycle.States.Active.class); } contract.activate(); assertState(ContractLifecycle.States.Active.class, contract); order.start(); assertState(RelationalOrderLifecycleSharingValidWhile.States.Started.SubStates.OrderCreated.class, order); contract.cancel(); assertState(ContractLifecycle.States.Canceled.class, contract); try { order.doProduce(); } catch (LifecycleException e) { assertInvalidStateErrorByValidWhile(e, contract, order, ContractLifecycle.States.Active.class); throw e; } }
相关推荐
标题中的“生命周期组件框架——关系型状态机服务”暗示了我们即将探讨的是一个与软件开发相关的框架,特别关注的是对象或组件在其存在期间的行为管理。生命周期管理是编程中一个重要的概念,它涉及到对象从创建、...
在嵌入式软件开发领域中,层次状态机(Hierarchy State Machine, HSM)因其能够直观、简洁地描述嵌入式软件系统而备受青睐。本文旨在详细介绍层次状态机的基本概念及其在嵌入式软件开发中的应用,并探讨如何设计和...
状态机是一种重要的软件设计模式,它用于描述对象在其生命周期中可能经历的各种状态以及在不同条件下的状态转换。在这个场景中,"Coke Machine State Machine" 指的是一个自动售货机的状态机模型,用于模拟自动售货...
本压缩包"State_Machine_Example_V61.zip"提供了一个经典的LabVIEW状态机示例,帮助用户理解和应用这种编程技巧。 "State Machine Example V61"是一个LabVIEW工程,包含了一个具体的状态机实例。状态机在LabVIEW中...
1. **组合逻辑状态机(Combinational State Machine)**:状态转换逻辑完全在组合逻辑中实现,适用于小型、简单状态机。优点是时序路径短,响应速度快;缺点是不易于时序分析和综合优化。 2. **同步寄存器状态机...
在组合关系中,整体与部分是不可分离的,整体的生命周期结束就意味着部分的生命周期也结束。例如,大脑(Brain类)与人(Human类)之间的关系,没有大脑的人是无法生存的。组合关系在代码中的表现形式与关联和聚合...
状态图(State Diagram)描述对象在其生命周期内的行为变化;活动图(Activity Diagram)用于展现流程和决策;组件图(Component Diagram)和部署图(Deployment Diagram)则关注系统的物理结构。 3. **UML符号和...
### UML类图关系详解 #### 一、引言 UML(Unified Modeling Language,统一建模语言)是一种广泛应用于软件工程领域的图形化语言,它帮助开发者理解和设计系统。其中,UML类图是最常用的一种图示方式,用于描述系统...
10. **状态图(State Diagram)**:展示一个对象在其生命周期内可能经历的不同状态以及引起状态转移的事件。 11. **活动图(Activity Diagram)**:类似流程图,描述系统或对象的控制流和决策流程,常用于表示业务...
状态图表示一个对象在其生命周期中的各种状态以及事件触发状态转移的方式。它有助于理解对象的行为模式。 **6. 活动图(Activity Diagram)** 活动图是一种流程图,用来描述系统的动态行为,尤其是处理过程中的控制流...
有限状态机,(英语:Finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。有限状态机体现了两点:首先是离散的,然后是有限的。以下...
状态图是 UML 中的一种重要建模工具,用于描述对象在生命周期中的状态变化和转换过程。本教程主要介绍状态图的基本概念、建模方法和应用场景。 事件(Event) 事件是指对一个在时间和空间上占据一定位置的有意义的...
5. **状态图**:状态图描述了一个对象在其生命周期中可能经历的状态及其转换。每个状态代表对象的一个条件,而转换则描述了如何从一个状态过渡到另一个状态。 6. **活动图**:活动图类似于流程图,用于描述系统中的...
《软件开发生命周期与统一建模语言UML详解》 软件开发生命周期(Software Development Life Cycle,SDLC)是软件工程领域中一个重要的概念,它为软件项目的规划、设计、实施、测试和维护等阶段提供了指导框架。SDLC...
2. **组件隔离**:每个组件都有自己的独立Gradle项目,通过配置build.gradle文件来控制组件的依赖关系。 3. **实现组件间通信**:利用Android插件和反射技术,实现组件之间的动态加载和调用。例如,使用DexElement...
标题中的“Projet machine d'états_statemachine_”暗示了我们正在讨论的是一个与状态机相关的项目。状态机,或称为状态图,是一种用于建模系统行为的工具,它描述了系统在不同时间可能存在的状态以及如何从一个...
12. **日志工具**:如Logcat的增强版,帮助开发者调试和记录应用行为。 在"ChaoJar-Demo"这个子文件中,你可能找到这些组件的示例代码,包括如何集成、配置和使用。通过研究这些示例,你可以更深入地理解每个组件的...
- **改变状态机表大小(Change StateMachine Table Size)**: 可以调整状态机表的大小以适应不同的布局需求。 #### 时间图(Timing Diagram) 时间图用于描述对象随时间变化的行为,尤其是关注对象状态的变化过程...
状态图可以用来描述对象的生命周期。 5. 活动图:UML 中的活动图用于描述对象的活动和活动之间的转换规则。活动图可以用来描述对象的行为。 6. 顺序图:UML 中的顺序图用于描述对象之间的交互和交互的顺序。顺序图...
5. 状态图(State Machine Diagram) * 图书馆管理系统中的状态图:包括书籍和借阅者的账户状态图,描述系统中对象的状态转换。 6. UML 图书管理系统中的对象 * Book:书籍对象,包括书籍的详细信息。 * Borrower...