列挙型の使いどころ
選択肢から値を選ぶ入力方式のフィールドを定義するには、下 記の2通りの方法があります。
- 列挙型のフィールドとして定義する
- 別で定義されたモデルを参照するクラス型フィールドとして定義する
以下にそれぞれの方法の特徴を示します。
列挙型フィールド
列挙型における選択肢はメタモデルで定義されます。
そのため、プロファイル開発者が選択肢を定義し、個々の開発者は設計時に選択肢を変更できません。
例えば、関数における可視性(public, protected, private,...)といった設計情報は、選択肢がメタモデル定義の段階で決まっており、設計時に増える情報ではないため、列挙型フィールドを使うのが適しています。
補足
モデル追加時、列挙型フィールドには列挙の値のいずれかが初期設定されます(初期値なしの場合は先頭の列挙の値)。列挙の値の一つに「未設計」を表す値を定義しておき、初期値として設定しておくことで、意図して入力された値か否かを区別できます。
クラス型フィールド
メタモデル定義時に選択肢が定まらず、設計しながら選択肢を柔軟に変更したい場合、クラス型の参照フィールドで実現できます。
クラス型のフィールドを用いる場合、選択肢そのものが設計成果となります。
また、ある程度は定まっているが、製品等によってカスタマイズするような特性があるものも、クラス型フィールドを用いるのが適しています。共通となる選択肢はモデルとして予め定義しておき、設計時に設計者が新たな選択肢のモデルを定義できます。
例えば、データ型といった設計情報はクラス型フィールドで定義し、モデリングしながら設計できるようにするとよいでしょう。 データ型は関数の戻り値やデータの型として定義する項目ですが、データ型自体の値域なども同時に設計情報となっています。