I'd like to introduce the OOP environment for Mathematica, with no-additional packages.
Mathematica has many style of paradigm, however, the programming style of OOP is an old but not sufficient backed-up environment. Let's consider the function group UpSet. UpSet has been seemed the basic idea relating OOP and the function group being equipped from the first version, but you can see the description of the function group is so small and short in the manual.
Now, the UpSet function becomes the most important function because the function group is the key parts to establish the OOP environment. With very small size pattern of CLASS constructed with SetDelayed UpSetDelayed, and Module leads to the OOP paradigm. This paradigm includes Encapsulation, inheritance, and Polymorphism in very straight forward style. OOP on the Mathematica suits for Graphics, Events, and the Dynamic directly and give us new kind of power for Mathematica programming.
The method is very easy as follows. Basically, you define the CLASS which is "SetDelayed definition of Module-d UpSetDelyaed functions", you construct INSTANCES distinguished by the name having each local values, and each INSTANCE functions when you send name conbined MESSAGES defined in the CLASS. In the following code, class name is "pclass", two method named "set" and "get", object list name is "object". In my definition, OBJECT is the group name of INSTANCE created from CLASS.
(*prepare class*)
pclass[nam_] := Module[{local = 0},
set[nam[x_]] ^:= local = x;
get[nam] ^:= local^2;]
(*prepare object list*)
object = Table[Unique[], {10}];
(*create instances*)
Table[pclass[object[[i]]], {i, 10}];
(*send message to set local values of instances*)
Table[set[object[[i]][i]], {i, 10}];
(*send message to get results of instances*)
Table[get[object[[i]]], {i, 10}]
{1, 4, 9, 16, 25, 36, 49, 64, 81, 100}
I hope you enjoy the new paradigm.
In Google slide, you can see more detailed OOP discussion.
Attachments: