8.4 Subprogram Parameters
Subprogram parameter declarations represent data values that can be passed into and out of subprograms.  Parameters are typed with a data classifier reference representing the data type.
Syntax
parameter ::= 
    defining_parameter_identifier :
        ( in | out | in out ) parameter [ data_classifier_reference ]
        [ { { parameter_property_association }+ } ] ;

parameter_refinement ::= 
    defining_parameter_identifier : refined to
        ( in | out | in out ) parameter [ data_classifier_reference ]
        [ { { parameter_property_association }+ } ] ;
Naming Rules
A defining parameter identifier adheres to the naming rules specified for all features (see Section 8).
The data classifier reference must refer to a data component type or a data component implementation.
Legality Rules
Parameters can be declared for subprogram component types.
If a parameter refinement includes a data classifier reference, then the classifier reference must be the same as that of the parameter being refined.
If the parameter being refined has an incomplete data classifier reference,  then the parameter refinement may complete an incompletely specified data classifier reference.
A parameter refinement cannot redefine the direction of a parameter. 
Standard Properties
-- Properties specifying the source text representation of the parameter
Source_Name: aadlstring
Source_Text: inherit list of aadlstring
Semantics
A subprogram parameter specifies the data that are passed into and out of a subprogram.  The data type specified for the parameter and the data type of the actual data passed to a subprogram must be compatible.