MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Suggestions for Maintaining "Object" State?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg78402] Re: Suggestions for Maintaining "Object" State?
  • From: David Bailey <dave at Remove_Thisdbailey.co.uk>
  • Date: Sat, 30 Jun 2007 06:10:19 -0400 (EDT)
  • References: <f5vsk1$l46$1@smc.vnet.net>

Carey Sublette wrote:
> I am starting to develop a fairly complex simulation using Mathematica 6 and 
> am confronting a basic issue that I am unsure how best to resolve: "How to 
> preserve the state of an object?"
> 
> Physical objects represented in a simulation have internal state that is 
> preserved and affects how they respond to stimulus from the simulation 
> environment.
> 
> Possible ways of implementing this behavior includes creating modules 
> representing objects and:
> *  exporting state to the session (or other enclosing scope) as a list of 
> values, which either exists as a global variable or is passed in as a 
> parameter;
> * using UpValues or Tags to assign object state to symbols(?).
> 
> At the moment the objects in the simulation have a 1-to-1 relationship, 
> there is only one of each type, which simplifies the problem, though in the 
> future I may need to maintain state for multiple objects of the same type.
> 
> Does anyone have recommendations for how to do this, optimized either for 
> convenience or efficiency? 
> 
> 
Obviously everyone is going to give a different answer to this - there 
is no right answer!

Personally, I would not attempt to follow the style of an existing OO 
language, but try to use what comes naturally in Mathematica. I suggest 
every one of your objects would be represented by a symbol (probably 
created with Unique):

pl=Unique["Plane"]
fl=Unique["Flight"]
etc.

Once you have an object, you could attach properties to it:

plane[fl]=pl;
TypeOf[pl]="707";
etc.

Passing an object around would simply consist of passing the relevant 
symbol.

There are a few things to consider early on:

Is the simulation going to carry on so long that the number of objects 
might be a problem. If so, you will need to supply a function to perform 
a cleanup when a "flight" has completed.

Another minor consideration is to figure out a good naming convention 
for the properties before everything gets big and complicated. Since you 
will create a lot of function names, you need to avoid clashing with 
future Mathematica names. I do that by using the \[Breve] character 
(which acts as a letter and looks a bit like an underscore) to space out 
words:

Is\[Breve]A\[Breve]Kind\[Breve]Of

I could just not capitalise the first word, but I think that looks ugly.

Full OO includes the concept of polymorphism - i.e. a function f will 
have different definitions for each possible type of argument. You could 
always implement that by using the TypeOf property and adding an 
IsAKindOf function to create the hierarchy:

IsAKindOf["707"]:="Plane"

I have used strings for the types of things, but thinking about it, 
fixed symbol names might be better:

Obj\[Breve]707

I hope this gives you a few ideas!

David Bailey
http://www.dbaileyconsultancy.co.uk






  • Prev by Date: Re: Solving a Integral
  • Next by Date: RE: Re: Second argument of BeginPackage, revisited
  • Previous by thread: Re: Suggestions for Maintaining "Object" State?
  • Next by thread: [Mathematica 6] Integrate strange result