SmartObjects are external procedures that encapsulate standard UI and functionality. The set of SmartObjects provided with the Application Development Model (ADM) are useful for typical database applications. For example, most database applications view data, so the ADM provides a SmartV8Viewer object. A SmartV8Viewer's main purpose is to display data.
Each of these SmartObjects represents a component part of a typical database application.
Each SmartObject must know how to interact with other SmartObjects. For example, the SmartV8Query and SmartV8Viewer work together in predefined ways. The SmartV8Query tells the SmartV8Viewer what records to display on the application screen. Each of these objects expects the other to behave in specific ways; each has responsibilities to the other.
As a developer, you can quickly assemble SmartObjects together to build many different application screens. If a SmartObject behaves in way that you don't like, you can customize it or override its default behaviors. If the set of available SmartObjects does not suit your needs, you can create new SmartObjects, giving them different behaviors better suited to the role you assign them in your application.
Each SmartObject has information (attributes) that it stores internally. A given SmartObject accesses this information by running internal procedures in another SmartObject.
Each SmartObject is capable of performing specific actions. These actions are represented as internal procedures. Conceptually, there are two types of actions that a SmartObjects can perform: actions made available to other SmartObjects (methods), and default actions that govern how the SmartObjects behaves at critical moments in an application (ADM events).