Family definitionΒΆ
A family of systems is implicitly defined by the set of allowed (or valid) feature combinations. However, a family can also be defined using an explicit family definition:
family
n : [0..3];
b : bool;
initial constraint b => n != 1;
endfamily
A family
block contains one or more parameters and optionally some
initial constraints on these parameters. The difference between parameters and
feature attributes is that parameters are assumed to be constant. As such, they
can be used anywhere in the model, including array sizes, number of
multi-feature instances and loop bounds. This means a family definition can be
used to parametrize the structure of a system.
If a family
block is present and the --one-by-one
option is used, the generated instances are solely defined by the
parameters in the family
block. This means that the set of initial states
(of each instance) is the set of valid configurations of the feature model.
However, features can also be used as family parameters by referencing them in
the family
block:
family
n : [1..2];
features my_feat;
endfamily
root feature
[0..1] of my_feat;
endfeature
feature my_feat endfeature
Here, the feature my_feat
is used as a family parameter. Thus, the family
shown above has 4 members.