001 package com.croftsoft.core.sim; 002 003 /*********************************************************************** 004 * A simulation object updated in separate access and mutate phases. 005 * 006 * Each loop of the simulation is started with an access (read) phase and 007 * then followed by a mutate (write) phase. 008 * During the access phase, simulation objects access the state of other 009 * simulation objects to determine how their state will change during the 010 * mutate phase. The state of simulation objects does not change during 011 * the access phase. 012 * During the mutate phase, the simulation objects change state. The 013 * state of simulation objects is not accessed by other simulation 014 * objects during the mutate phase. 015 * Dividing the state update into two phases ensures that the result of 016 * the update is not dependent on the order in which the simulation 017 * objects are updated. For this to hold, the access method of every 018 * simulation object must be called at the beginning of the simulation 019 * loop before the mutate method is called on any one of the simulation 020 * objects. 021 * 022 * @version 023 * $Id: Sim.java,v 1.1 2008/07/25 22:54:58 croft Exp $ 024 * @since 025 * 2008-07-25 026 * @author 027 * <a href="https://www.croftsoft.com/">David Wallace Croft</a> 028 ***********************************************************************/ 029 030 public interface Sim 031 //////////////////////////////////////////////////////////////////////// 032 //////////////////////////////////////////////////////////////////////// 033 { 034 035 void access ( ); 036 037 void mutate ( ); 038 039 //////////////////////////////////////////////////////////////////////// 040 //////////////////////////////////////////////////////////////////////// 041 }