Each flow object has a set of ports to each of which an ordered list
of flow objects can be attached.
The set of ports may be empty.
One port of each
flow object that has any ports may be distinguished as the
principal port. The principal port is unnamed.
Every other port has a name which uniquely
identifies it in the context of its flow object.
The list of flow objects attached to a port is known as a
stream, and
the members of the list are called members of the stream. There is a
single flow object in the flow object tree that is not a
member of any stream.
This flow object is called the root of the flow object tree. Every
other flow object in the flow object tree is a member of
exactly one stream.
This stream is referred to as the flow object's
stream. The flow object to which a flow object's stream is attached
is called the flow parent of the flow object. The set of ports
that a flow object has is controlled by its class, and for some
classes also by its characteristics. A flow object that has no ports
is called an atomic flow object, and a flow object class whose
instances are always atomic is an atomic flow object class.
The relative positioning of flow objects in different streams
can be constrained by synchronizing the flow objects. In
addition,
the value of a characteristic may result in the creation of a flow
object.