8. Features and Shared Access
A feature is a part of a component type definition that specifies how that component interfaces with other components in the system.  The four categories of features are: port, subprogram, parameters, and subcomponent access. 
Port features represent a communication interface for the exchange of data and events between components.  Ports are classified into data ports, event ports, and event data ports.  Port groups represent groups of component ports or port groups.  Port groups can be used anywhere ports can be used.  Within a component, the ports of a port group can be connected to individually.  Outside a component, port groups can be connected as a single unit.
The subprogram feature represents a call interface for a service that is accessible to other components.  Server subprogram features represent subprograms that execute in their own thread and can be called remotely. Data subprogram features represent subprograms through which the data component is manipulated.  Call sequences (see Section 5.2) specify calls to subprogram classifiers, data subprogram features, and server subprogram features.
Parameter features represent data values that can be passed into and out of subprograms. Parameters are typed with a data classifier reference.
Subcomponent access represents communication via shared access to data and bus components.  A data or bus component declared inside a component implementation is specified to be accessible to components outside using a provides access feature declaration.  A component may indicate that it requires access to a data or bus subcomponent declared outside utilizing a requires access feature declaration.
Syntax
feature ::=
    port_spec |
    port_group_spec |
    server_subprogram_spec |
    data_subprogram_spec |
    subcomponent_access |
    parameter

feature_refinement ::=
    port_refinement |
    port_group_refinement |
    server_subprogram_refinement |
    data_subprogram_refinement |
    subcomponent_access_refinement |
    parameter_refinement
Naming Rules
The defining identifier of a feature must be unique within the interface namespace of the associated component type. 
Thread features may not be declared using the predeclared ports names Dispatch, Complete or Error.
Each refining feature identifier that appears in a feature refinement declaration must also appear in a feature declaration in the associated component type or one of its ancestors. 
A feature is named in one of two ways.  Within the component implementations for a component type, a feature declared in the type is named in the implementations by its identifier.  Within component implementations that contain subcomponents with features, a subcomponent feature is named by the subcomponent identifier and the feature identifier separated by a “.” (dot).”
Legality Rules
The feature classifier reference and the port direction in a refined feature declaration must be identical to the feature classifier reference and the port direction in the refined declaration. 
In the case of data and event data ports, the refined feature declaration in a component type extension can complete an incomplete data classifier reference. 
Feature refinements can associate new property values.
Each feature can be refined at most once in the same component implementation or type extension.
Semantics
A feature declaration specifies an externally accessible element of a component.  Features are also visible from within component implementations associated with the component type that contains the feature declaration.
A refined feature declaration may complete an incomplete component classifier reference and declare feature property associations.