Models
A model represents an addressable entity in the system that is analogous to an object in an object-oriented programming language. A model encapsulates data (in form of attribute/value pairs) with a set of operations that can be performed on the data.
Capabilities
ICE models are able to support a multiple inherence model through capabilities. Models are composed of two or more capabilities – a base capability common to all models, and one or more type-specific capabilities.
Each capability defines its own set of attributes and methods, the name of each is prefixed with the type (or namespace) of the capability. This prevents two capabilities from inadvertently aliasing the attributes or functions of another capability applied to a single model.
Through the base capability, every model contains the following:

A permanent, universally unique ID (
base:id) that differentiates the object from every other object in the system. For example,
e071175e-2bf8-4c06-96cd-88115ed3e295.
An address (
base:address), consisting of the object's namespace and ID concatenated together with a colon and prefixed with
SERV:. For example,
SERV:person:e071175e-2bf8-4c06-96cd-88115ed3e295.

A method (
base:GetAttributes) for retrieving the attributes of the model and a method (
base:SetAttributes) for setting attributes.
Example of a message sent to a model
An example of a message addressed to a Channel model requesting the list of persons participating in the channel:
{
"type": "chan:ListPersons",
"headers": {
"isRequest": true,
"destination": "SERV:chan:5fc7653f-5e57-4569-b74f-1fcd24ff22d6",
"correlationId": "7dffa31c-9aef-4a2d-b9da-713784035962"
},
"payload": {
"messageType": "chan:ListPersons",
"attributes": {}
}
}