Two key design goals of AM2:

  1. The description of an application's interface should be separate from the content.

  2. An application should be as portable across platforms and environments.

To satisfy these goals, AM2 applications consist of three parts:

  1. Application Description Language (ADL): Scripting language at the heart of AM2 which serves as a platform-independent storage format for applications. At run-time, instances of AM2 classes are populated with content drawn from databases, files, network services, or the application itself. The ADL's rich set of features for initializing the instances of these templates marries them to the content. The joining of the two forms the screens, images, text fields, and buttons of the application. ADL was designed in concert with the internal C++ classes that regulate the AM2 environment. It supports the minimal set of C++ constructs necessary to specify the general set of multimedia applications. The two main between the ADL and C++ are that ADL does not associate pointers with specific data types, and it allows the entire contents of a message to be determined at run-time including the message selector and the number of arguments.

  2. Assets: Correspond roughly to X Window System resources or Microsoft Windows .INI files and help to separate the implementation of an interface from its look and feel. However, AM2 uses its own asset mechanism rather than the native one for each platform in order to provide a portable, common interface. An ADL programmer need only create one asset file for use with the ADL code on all platforms. Any variable in an ADL program can be initialized using assets, thereby allowing these items to be customized on a per platform, per installation, per user, and per application basis.

  3. Wrapped Classes: C++ classes in AM2 that are visible in the ADL. They provide the interface to the AM2 library in the ADL. There are seven types of system-defined wrapped classes which will be described during the rest of this presentation. By convention, wrapped classes possess names that start with two capital letters specifying the module, followed by one or more concatenated words, all but the first of which are capitalized.