Jamoma API 0.6.0.a19
The Jamoma Platform is composed of a layered framework architecture that creates an object model and then specializes that object model for advanced purposes such as audio and matrix processing.
Jamoma makes use of polymorphic typing, dynamic binding, and introspection to create a cross-platform API pulling ideas from languages such as Smalltalk and Objective-C while remaining within the bounds of the portable and cross-platform C++ context.
For the purpose of this documentation various computer science jargon and terminology needs to be defined.
In object-oriented programming functionality related to a set of data is treated as a unit. These units, or objects, are created and then often passed using a reference or pointer to the memory in which the object's contents are stored. These objects comprise methods (or functions) and attributes (properties or data which represent part of an object's state).
Introspection refers to the ability to determine the characteristics of an object at runtime. This means that when handed a pointer in C++, we can take the pointer and query for an object's name, its type or class, the messages that it understands, the attributes it possesses, etc. By extension, reflection refers to the ability to then modify the behavior of an object at runtime ([Malenfant:1996]). In practical terms this means adding messages, changing attributes, over-riding audio processing methods, and extending existing instances of objects as the software is executing and without stopping the software to re-compile the code.
Introspection and reflection are often implemented by making use of a dynamic binding model. Programming languages such as C++ and Java link function and method calls when a program is compiled, which is known as static binding. A dynamically bound model does not link these functions at compile-time, but instead waits until a method is called at runtime to resolve its address. For this reason, we say we are `sending messages' to objects when using a dynamic binding model. Dynamic binding is the hallmark of Smalltalk ([Krasner:1988]), Objective-C ([Cox:1986]), and Ruby.