はじめに
Javaのシステム設計やコード理解を行う際、クラス図 は非常に重要な役割を果たします。クラス図は、クラスの構造、関係性、振る舞いを視覚的に表現する図で、UML(Unified Modeling Language)の一部です。
この記事では、Javaプログラマーが クラス図の基本要素、書き方、具体例 を学び、シンプルでわかりやすい設計図を作成できるようになることを目指します。
1. クラス図とは?
クラス図 は、UMLの一種で、システム内の クラス、その 属性(フィールド)、操作(メソッド)、そしてクラス間の 関係 を視覚的に表現します。
クラス図の主な要素
- クラス: クラス名、属性、操作が書かれる。
- 関係:
- 関連(Association): クラス間の結びつき。
- 継承(Generalization): クラスの親子関係(
extends
)。 - 依存(Dependency): クラスが他のクラスに依存している。
- 集約(Aggregation): 全体と部分の関係(「部分」が独立して存在可能)。
- 合成(Composition): 全体と部分の強い関係(「部分」が全体に従属)。
- 可視性:
+
: public-
: private#
: protected
2. クラス図の基本構造
クラス図は以下の構造で書かれます。
1 |
+-----------------------------+<br>| クラス名 |<br>+-----------------------------+<br>| - 属性名: データ型 |<br>| - speed: int |<br>| - color: String |<br>+-----------------------------+<br>| + メソッド名(引数): 戻り値型 |<br>| + drive(): void |<br>| + stop(): void |<br>+-----------------------------+<br> |
各項目の説明
- クラス名: クラスの名前を記述。
- 属性(フィールド): クラス内の変数や状態を表します。
書き方: 可視性修飾子 属性名: データ型 - 操作(メソッド): クラスが持つ振る舞いや動作。
書き方: 可視性修飾子 メソッド名(引数): 戻り値型
3. クラス図の書き方の基本ステップ
ステップ1: クラスを定義する
最初に、システムに必要なクラスを洗い出し、それぞれのクラスに 属性 と 操作 を記述します。
例: 「車(Car)」クラス
1 |
+-----------------------------+<br>| Car |<br>+-----------------------------+<br>| - color: String |<br>| - speed: int |<br>+-----------------------------+<br>| + drive(): void |<br>| + stop(): void |<br>+-----------------------------+<br> |
ステップ2: クラス間の関係を記述する
1. 関連(Association)
クラス同士の単純な関係です。例えば、「Person」クラスと「Car」クラスの関連。
1 |
+------------+ +------------+<br>| Person | ------> | Car |<br>+------------+ +------------+<br>| - name | | - color |<br>| + drive() | | + drive() |<br>+------------+ +------------+<br> |
- 矢印: 関連関係を示す。
- 説明: 「Person」が「Car」を運転するという関係。
2. 継承(Generalization)
親クラス(スーパークラス)から子クラス(サブクラス)が継承する関係です。
例: 「Vehicle」クラスを親に、「Car」と「Bike」クラスが継承
1 |
+--------------------+<br> | Vehicle |<br> +--------------------+<br> | - speed: int |<br> +--------------------+<br> | + drive(): void |<br> +--------------------+<br> |<br> +-----------+-----------+<br> | |<br>+----------------+ +----------------+<br>| Car | | Bike |<br>+----------------+ +----------------+<br>| - color: String| | - gears: int |<br>+----------------+ +----------------+<br>| + drive(): void| | + pedal(): void|<br>+----------------+ +----------------+<br> |
- 矢印(△): 子クラスが親クラスを継承することを示す。
3. 集約と合成
- 集約(Aggregation): 弱い関係。「部分」が独立して存在可能。
- 合成(Composition): 強い関係。「部分」が「全体」に従属する。
例: 学校(School)と生徒(Student)の関係
1 |
+------------+ <>--------+------------+<br>| School | 集約 | Student |<br>+------------+ +------------+<br>| - name | | - name |<br>+------------+ +------------+<br>| + add() | | + study() |<br>+------------+ +------------+<br> |
4. クラス図を実際のコードに落とし込む
クラス図からJavaコードを作成する流れを示します。
クラス図
1 |
+-----------------------------+<br>| Car |<br>+-----------------------------+<br>| - color: String |<br>| - speed: int |<br>+-----------------------------+<br>| + Car(color: String, speed: int) |<br>| + drive(): void |<br>+-----------------------------+<br> |
Javaコード
1 |
class Car {<br> private String color;<br> private int speed;<br><br> // コンストラクタ<br> public Car(String color, int speed) {<br> this.color = color;<br> this.speed = speed;<br> }<br><br> // メソッド<br> public void drive() {<br> System.out.println(color + "の車が" + speed + "km/hで走っています。");<br> }<br>}<br><br>public class Main {<br> public static void main(String[] args) {<br> Car car = new Car("赤", 100);<br> car.drive(); // 赤の車が100km/hで走っています。<br> }<br>}<br> |
5. クラス図作成のツール
Javaのクラス図を作成するための便利なツールを紹介します。
- PlantUML
- テキストベースでクラス図が作成できるツール。
- サンプルコード:arduinoコードをコピーする
@startuml class Car { - color: String - speed: int + Car(String, int) + drive(): void } @enduml
- StarUML
- GUIベースの強力なUML作成ツール。
- IntelliJ IDEA / Eclipse
- プラグインを使用してクラス図を自動生成可能。
6. クラス図を書く際のポイント
- シンプルに描く: 複雑すぎるクラス図は避け、必要最小限のクラスと関係を示す。
- 正しい関係性を示す: 継承、集約、依存などを明確に区別する。
- 可読性を意識する: クラス名、属性、操作をわかりやすく配置する。
7. まとめ
Javaのクラス図は、システム設計やコードの理解を助ける強力なツールです。UMLの基本構造を理解し、クラス間の関係性や可視性を適切に表現することで、保守性が高く、効率的な設計 が可能になります。
初心者はまず基本的な構造を理解し、小規模なシステムでクラス図を作成する練習から始めましょう。
次のステップ
Javaのオブジェクト指向設計をさらに学びたい方は、絶対にJavaプログラマーになりたい人へ を活用し、システム設計の基礎を固めましょう!また、より実践的な知識やスキルを身につけたい方は、サイゼントアカデミー がおすすめです!
コメント