skip to main content
OpenEdge Development: ADM and SmartObjects
Overview : Introduction
 
Introduction
The Application Development Model (ADM) is a methodology for building Progress® 4GL applications based on reusable components called SmartObjects. It was updated for OpenEdge™ to take advantage of enhancements to the Progress® 4GL.
All support files for the ADM architecture are in a directory structure under src/adm2; however, Progress also maintains support for SmartObject applications built in Version 8 by including the ADM Version 1.1 support files under a separate directory structure under src/adm and parallel gui directories.
The ADM architecture has four basic components:
*A hierarchical set of object classes from which to develop SmartObjects. These are reusable application objects (visualizable or nonvisualizable) that map to source files or compilation units.
*SmartLinks, to establish a messaging system by defining links (communication paths) among SmartObjects.
*Properties, to define the public data associated with SmartObjects and to get and set these data values.
*Super procedures, to perform SmartObject actions.
The design of this architecture relies on several important features of the Progress 4GL: super procedures, persistent procedures, internal procedures and functions, preprocessor names, temporary tables, and include files. This design is implemented in the body of the architecture’s support code and is fully supported by the AppBuilder. For information about the AppBuilder, see OpenEdge® Development: AppBuilder.
The following sections summarize the benefits of using SmartObjects in Progress 4GL applications and provide notes on additional SmartObjects advantages. The rest of this chapter is an overview of the components of the ADM architecture.
SmartObject application benefits
SmartObjects offer a dimension of object integration and flexibility of use that you cannot achieve with basic objects (Progress 4GL widgets). Unlike basic objects, which are built into the 4GL, each SmartObject is represented by an entire 4GL procedure file.
The benefits of using SmartObjects in Progress 4GL applications are summarized below:
*Application assembly — Each SmartObject master is a predefined application component that can encapsulate more complex functionality than an individual basic object, so you can assemble more sophisticated applications in less time.
*Object interoperability — Because the ADM gives SmartObjects standardized ways of interacting with each other, it is easier to integrate individual object instances into applications.
*Code reusability — Because a single object can have multiple run‑time instances, you can create code that can be used repeatedly.
*Maintainability — Your development process is organized so as to make complex applications easy to maintain. SmartObject code is easily maintainable because changes to a single SmartObject master are reflected in all instances of that SmartObject.
*Standard look — Different applications can instantiate the same SmartObject master, so you can establish a consistent look and feel across multiple applications.
*Module independence — You can write each object without specific knowledge of other objects, thus reducing large‑scale problems into application components that you can work on independently.
Enhanced code reusability
SmartObjects are defined in external procedures, thus creating a potential for code reuse far greater than that afforded by basic objects alone. There is no limit to the number of different application files that can instantiate the same SmartObject master; moreover, you can assign different run‑time properties to each instance while still creating each from a single master.
The potential for code reuse that SmartObjects create makes it much easier to maintain complex, enterprise‑wide applications, because a change you make in a SmartObject master is reflected in every instance of the SmartObject in every application that uses it.
Customizing SmartObjects
Once you become familiar with the mechanics of the ADM, you can customize a SmartObject type or override its default behaviors. You also can create new SmartObjects (represented by new SmartObject templates), giving them different behaviors better suited to the needs of your applications. For information about creating new SmartObject types and customizing existing types, see Chapter 6, “Advanced ADM Topics.”