8.1      Abstract Features

(1)   Abstract features represent placeholders for concrete features, i.e., ports, parameters, and the different kinds of access features.  Abstract features are typically used in incomplete component type declarations, especially those that play the role of a template.  They can be used in conjunction with prototypes and allow users to refine such features to concrete features.

Syntax

abstract_feature_spec ::=
     defining_abstract_feature_identifier :
      [  in | out ] feature [ feature_prototype_identifier ]
 
abstract_feature_refinement ::= 
    ( defining_abstract_feature_identifier : refined to
      [  in | out ] feature [ feature_prototype_identifier ] )
    | port_refinement | feature_group_refinement 
    | subcomponent_access_refinement | parameter_refinement
        

Legality Rules

(L1)      The feature direction in a refined feature declaration must be identical to the feature direction in the feature declaration being refined, or the feature being refined must not have a direction. 

(L2)      If the direction of an abstract feature is specified, then the direction must be satisfied by the refinement (see also the rules for feature prototypes in Section 4.7); in the case of ports the direction must be in or out;  in the case of data access, the access right must be read-only for in and write-only for out;  in the case of bus access, subprogram access and subprogram group access the direction must not be in nor out.

(L3)      An abstract feature with a feature prototype identifier and the prototype being referenced must both specify the same direction or no direction.

(L4)      An abstract feature refinement declaration of a feature with a feature prototype reference must only add property associations.

Semantics

(2)   A component type can contain an abstract feature declaration that can later be refined into a feature group, port feature, access feature, or parameter.  An abstract feature may be specified with a direction; this direction must be satisfied by any refinement according to legality rules. 

(3)   A component type can contain an abstract feature declaration with a feature prototype reference.  In that case it is a placeholder for the feature that acts as a parameter to the component type. The actual feature will be supplied as part of the prototype binding when the component type is referenced, e.g., in a subcomponent declaration.