Re: Creating Objects
- To: mathgroup at smc.vnet.net
- Subject: [mg31658] Re: Creating Objects
- From: "Ersek, Ted R" <ErsekTR at navair.navy.mil>
- Date: Fri, 23 Nov 2001 05:46:33 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
Oleg Burd wanted help using the (Classes.m) package. While I am fluent with nearly everything in Mathematica, I have very little experience in OOP. So others may be able to give better answers. Well it appears to me that the (Classes.m) package forces one to write messy code. Because of that and my limited background with OOP I will not try to correct Oleg's use of (Classes.m). However, the code below might be helpful because it demonstrates how you can use some OOP concepts in Mathematica. Below 'MyList' is like a class with 4 members ( 2 Strings, 1 Integer, 1 Real ). I provide functions that get the Strings, Integer and Real from a MyList 'object'. In[1]:= MyList[expr_]:= MatchQ[expr,{_String,_String,_Integer,_Real}] GetStrings[expr_?MyList]:= Take[expr,2]; GetInt[expr_?MyList]:= Part[expr,3]; GetReal[expr_?MyList]:= Last[expr]; In[5]:= GetStrings[{ "Ted", "Ersek", 24, 9.34 }] Out[5]= { Ted, Ersek } Next I define 'PositiveList' which is like a subclass of 'MyList'. An expression is a 'PositiveList' if it is a 'MyList' where the Integer and Real numbers are positive. PositiveList effectively inherits all the features of MyList. Next I define a function (foo). When the argument of (foo) is a 'PositiveList' the product of the Integer and Real is returned. In[6]:= PositiveList[expr_]:= MyList[expr] && Positive[GetInt[expr]] && Positive[GetReal[expr]] In[7]:= foo[expr_?PositiveList]:= GetInt[expr] * GetReal[expr] In[8]:= foo[{ "Ted", "Ersek", 24, 9.34}] Out[8]= 224.16 ----------------------------- Next I demonstrate that polymorphisism is easy in Mathematica. Below I define a function (f) where f[x]= x^2 when (x is a multiple of 3) f[x]=x^2-1 for all other Integers f[x]=x when (x) is Real In[9]:= f[ x_Integer?(Mod[#,3]===0&) ]:= x^2; f[ x_Integer ]:= x^2-1; f[ x_Real ]:= x In[12]:= { f[9], f[10], f[11], f[12], f[2.3] } Out[12]= { 81, 99, 120, 144, 2.3 } Inspite of these demonstrations I recommend that you don't try follow a familiar paradigm (e.g. OOP) in Mathematica. Instead you should learn Mathematica and you will see how things should be done in Mathematica. If you still have concerns about code reusability, maintenance and reviews others might be better able to further explain how those issues can be dealt with in Mathematica. ----------- Regards, Ted Ersek Check Mathematica Tips, Tricks at http://www.verbeia.com/mathematica/tips/Tricks.html