The Simio object framework is built on the same basic principles as object oriented programming languages; however these principles are applied within a modeling framework and not a programming framework. For example the Microsoft development team that designed C# applied these basic principles in the design of that programming language. Although these same principles drive the design of Simio, the result is not a programming language, but rather a graphical modeling system. This distinction is important in understanding the design of Simio.
Simio is not simply a simulation modeling tool that is programmed in an OOP language (although it is programmed in C#). Likewise it is not simple a set of classes available in an OOP language such as Java or C++ that are useful for building simulation models. Simio is a graphical modeling framework to support the construction of simulation models that is designed around the basic object oriented principles. For example when you create an object such as a "machine" in Simio, the principle of inheritance allows you to create a new class of machines that inherits the base behavior of a "machine", but this behavior can be modified (overridden) and extended. Whereas in a programming language we extend or override behavior by writing methods in a programming language, in Simio we extend or override behavior by adding and overriding graphically defined process models.
This distinction between object oriented modeling and object oriented programming is crucial. With Simio the skills required to define and add new objects to the system are modeling skills, not programming skills.
When you create a model in Simio, you are creating an object class from which multiple instances can be created. This process is referred to as instantiation.
When you instantiate an object into a model, you may specify properties of the object that govern the behavior of this specific instance of this object. For example the properties for a machine might include the setup, processing, and teardown time, along with a bill or materials and a operator required during the setup. The creator of the object decides on the number and the meaning of the properties. The properties in Simio are strongly typed and can represent numeric values, Booleans, strings, object references, dates and times, etc. Since any model that you build is by definition an object, you have the opportunity to parameterize your model through properties as well.
It should be noted that instantiating a model is not the same as copying or cloning the model. When a model is used as a building block in the construction of other models it may be instantiated many times in many different models. The model instance simply holds a reference to the one model definition that is used over and over again. The instance also holds the property values since these are unique to each instance. However the model logic is shared by all instances. Regardless of how many instances are created, there is only one class definition of the object, and each instance refers back to this single definition. Each instance holds the properties that are unique to that instance, but looks back to the definition to get its underlying behavior. If the behavior in the definition is changed then all instances automatically make use of this new behavior.
In addition to properties, objects also have states. States are also strongly typed but always map to a numeric value. For example the Booleans true and false map to 1 and 0, and an enumerated list of state names map to the list index position (0, 1, …., N) in the list. A state changes as a result of the execution of the logic inside the object. Properties can be thought of as inputs to an object, and states can be thought of as output responses that change throughout the execution of the object logic. A state might represent a count of completed parts, the status of a machine selected from an enumerated state list, the temperature of an ingot heating in a furnace, the level of oil in a ship being filled, or the accumulation level on a conveyor belt.
There are two basic types of states: discrete and continuous. A discrete state is a value that only changes at event times (customer arrival, machine breakdown, etc.) A continuous state (e.g. tank level, position of a cart, etc.) has a value that changes continuously over time.