All SmartObjects have common capabilities which allow them to interact in an application. All SmartObjects can:
Initialize and destroy themselves
Get and set attributes
Add and remove SmartLinks
Communicate using the Application Data Models (ADM) standard communication interface (mainly using the notify and dispatch methods)
These capabilities provide a standard interface for creating and destroying SmartObject instances and for making SmartObjects interact. Unless a procedure object has these capabilities, it is not a SmartObject.