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.