支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡


クラス図はデータの流れを端的に表したもの

プログラミングにはプログラムに落とし込む前段階の、全体的な俯瞰図としてUMLがあります。UMLにも種類があり何を表したいかによって使うものが変わります。クラス図を使うことでオブジェクト間のデータ関係を表すことができるようになります。また、クラス図の記述方法はプログラミングに移行しやすい、いわゆるプログラミングの一歩手前のものとなるためそのままコードに落とし込みやすいメリットがあります。反面、クラス図で使われる記号などの意味を事前に把握していないと読み解くことが難しいと言えます。クラス図では端的にオブジェクトの部品やデータの流れを表現します。そのため記号の意味を知らないとプログラムに落とし込むことができません。クラスおよび関係性の概要について触れていきます。

クラスに詰め込まれているもの

クラス図にはクラスを記述できるようになっています。このクラスはプログラミングでのクラスと同じ意味合いを持っており、フィールドとメソッドの記述箇所があります。クラスには上から順にクラス名・フィールド・メソッドの順に記述します。フィールドの左側に記号を記して、アクセス権限を表現します。『-』が自クラスからのアクセスのみを許可する表現のため、カプセル化等を行っている場合はこの表記を多用することになります。また、フィールドに初期値を設定するかどうかもクラス図では表現することができます。フィールド名と変数の型だけの場合は初期値設定がない状態となります。フィールド名と変数の型に続いて記述がある場合は初期値の設定をクラス内で行うことを表しています。

クラスの最後にメソッドを記述します。メソッドの記述方法もプログラミング時の記述に近いものがあり『メソッド名(引数:引数の型):戻り値』の順で記述します。これはプログラミング時と非常に相性の良い記述方法です。入り口と出口がすでにクラス図によって定められているため、その過程をメソッド内に記述することによりプログラムに落とし込むことができます。この場合の入り口は引数を、出口は戻り値を意味します。

これらの内容が詰まっているクラスと他のクラスの因果関係をクラス図に記述することによってシステム全体を俯瞰的に把握することが可能になります。

クラス図の肝は関連

クラス図ではクラスとクラスの間を線で結ぶことで因果関係を表すことができます。これを『関連』といいます。この関連を読み取ることでどのクラスと関係性を持っているのか、配列などの受け皿の必要可否及び最大数(もしくは不定)等の多くの情報を得ることができます。因果関係の形によって用意する変数も変わるため、接続の形を示す関連は非常に重要な部分と言えます。

多重度と誘導可能性

多重度は同じクラスをどの程度抱え込むかを表現しています。これにより配列等が必要かどうか、またどの程度の大きさのものが必要なのかを読み取ることができます。誘導可能性はプログラムの流れが一方向だった場合、それを明確に記述する方法です。流れがある向きに矢印を記述し、逆側に×印を記述することで単一方向であることを表現しています。これにより、一方のクラスは送信するメソッドを持ち逆側のクラスは受け皿となるメソッドや変数を持たせる必要があることが分かります。

汎化とインタフェース

汎化はプログラムでの継承を表しています。スーパークラスとサブクラスの関係性を記述することができる書き方です。汎化の記述方法もプログラミング時に必要な情報を簡潔に表しているためクラス図をきちんと読み取ることでクラス間の因果関係を把握することが可能です。またクラス図にはインタフェースを表す記述方法も存在しています。プログラミング時のインタフェースと同じく、クラス図のスーパークラスには傾向を記述し実処理はサブクラスに記述します。

集約とコンポジット

集約とコンポジットはどちらも一方のクラスがもう一方に内包されている関係性の場合の記述方法です。癒着比率が大きい関係性の場合に用います。コンポジットの場合は全体側のクラスが部分側のクラスの生成・削除などのコントロール権限を有している場合に用います。この記述が使われている箇所は全体を表すクラスが中心となっている集団であると捉えることができます。

依存

クラス間での依存関係を表す場合に使用する記述方法です。関係性はあるが結びつきが強くない場合に用いられます。

まとめ

UMLは複数の種類が存在しますが、その一種であるクラス図はプログラミングに近い形でシステムを記述する方法です。オブジェクトの概要記述とオブジェクト間の因果関係を記すことができるためプログラムに書き換えやすい設計図と言えます。多重性についても記述ができるためインスタンスの必要生成具合やそれを受け止める受け皿の大きさも把握することができます。また、継承やインタフェースはほぼそのまま因果関係をプログラムに落とし込めるため、コーディング作業の効率化を上げることができます。クラス図はプログラミングと非常に相性の良い記述方法です。クラス図への理解を深めることで効率的な作業が可能になります。