CodeGym /Java Blog /ランダム /UML クラス図
John Squirrels
レベル 41
San Francisco

UML クラス図

ランダム グループに公開済み

序章

「二度測って一度切る」という言葉は誰でも聞いたことがあると思います。これはプログラミングにおける真実のアドバイスです。実装に時間を費やす前に、実装について検討することをお勧めします。実装中には、クラスを作成し、それらがどのように相互作用するかを考える必要があることがよくあります。すべてを視覚的に表現すると、最も正しい解決策を見つけるのに役立つことがよくあります。ここで UML クラス図が役に立ちます。

UMLとは何ですか?

検索エンジンで関連する画像を見ると、UML が図、矢印、四角形と関係があることがわかります。UML は Unified Modeling Language の略であることを知っておく必要があります。ここで重要な言葉は「統一」です。これは、私たちの画像が私たちだけでなく、UML を知っている他の人にも理解されることを意味します。それは図を描くための共通語です。

ウィキペディアによると、

「UML は、ソフトウェア エンジニアリングの分野における汎用の開発用モデリング言語であり、システムの設計を視覚化する標準的な方法を提供することを目的としています。」
最も興味深いのは、誰もが想像することではないでしょうが、UML には仕様があるということです。さらに、UML 2 仕様もあります。仕様の詳細については、Object Management Group のWeb サイトをご覧ください。実際、このグループは UML 仕様を開発しています。UML がクラスの構造を記述することに限定されていないことも興味深いです。UML 図には多くの種類があります。ウィキペディアには、さまざまなタイプの UML 図の簡単な説明があります: UML 図UML クラス図に戻ると、 『Head First Design Patterns』という書籍に言及する価値があります。本書では、UML 図を使用して設計パターンを説明しています。肝心なのは、UML が実際に使用されているということです。そして、それを知って使用方法を理解すると、非常に役立つことがわかりました。

応用

IDE で UML を操作できることを見てみましょう。IDE として IntelliJ IDEA を使用します。IntelliJ IDEA Ultimate を使用している場合は、「すぐに使える」「UML Support」プラグインがインストールされています。美しいクラス図を自動的に生成できます。たとえば、Ctrl+N または [ナビゲート] -> [クラス] メニュー項目を使用して、ArrayList クラスに移動します。クラス名のコンテキストメニューで、「ダイアグラム」→「ダイアグラムポップアップを表示」を選択します。その結果、美しい図が得られます。 UML: 理論から実践へ - 2 しかし、自分で図を描きたい場合はどうすればよいでしょうか? Ultimate バージョンをお持ちでない場合はどうすればよいでしょうか? IntelliJ IDEA Community Edition を使用する以外に選択肢はありません。したがって、UML 図がどのように構成されているかを理解する必要があります。初め、。グラフ視覚化ツールのセットです。使用するプラグインはそれに依存します。インストール後、Graphviz インストール ディレクトリの bin ディレクトリを PATH 環境変数に追加する必要があります。その後、IntelliJ IDEA で、メニューから [ファイル] -> [設定] を選択します。「設定」ウィンドウで「プラグイン」カテゴリを選択し、「リポジトリの参照」ボタンをクリックして、PlantUML 統合プラグインをインストールします。PlantUML の何がそんなに優れているのでしょうか? UML は「ドット」と呼ばれるグラフ記述言語を使用して記述されており、ドット言語は PlantUML 以外でも使用されるため、より汎用的になります。さらに、以下で行うことはすべて IDE だけでなく、planttext.comでオンラインでも実行できます。。PlantUMLプラグインをインストールすると、「ファイル」→「新規作成」でUML図を作成できるようになります。「UMLクラス」図を作成してみましょう。これにより、例を含むテンプレートが自動的に生成されます。そのコンテンツを削除し、独自のコンテンツを追加します。これをテキストで表現する方法を理解するには、PlantUML マニュアルの plantuml クラス図を参照してください。 UML: 理論から実践へ - 3これらの資料を基に、UML 図の作成を始めましょう。2 つのクラスを説明する次のコンテンツを追加します。

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
IDEA で結果を確認するには、[表示] -> [ツール ウィンドウ] -> [PlantUML] を選択します。クラスを表す 2 つの正方形が得られるだけです。これらのクラスはどちらもListインターフェイスを実装していることがわかっています。このクラス関係は実現と呼ばれます。この関係は点線の矢印で表されます。それを描いてみましょう:

interface List
List <|.. ArrayList
List <|.. LinkedList
List はCollectionクラスの子の 1 つです。つまり、Collectionを継承します。この関係は一般化と呼ばれます。通常の連続した線を持つ矢印のように見えます。それを描いてみましょう:

interface Collection
Collection <|-- List
次のタイプの関係では、要素のパッケージのプライベート配列に関するエントリをArrayListクラスの説明に追加します。

~Object[] elementData
ここで、 ArrayList にいくつかのオブジェクトが含まれている ことを示したいと思います。この場合、集計関係が存在します。 配列リスト他のオブジェクトが含まれているため、これは集合体です。リストのオブジェクトはリストがなくても存在できるため、集約と呼んでいます。これらはリストの不可欠な部分ではありません。それらの存続期間はリストの存続期間とは結びつきません。「集合体」という言葉はラテン語から来ており、「組み立てられた」、つまり何かで構成されたものと訳されます。たとえば、私たちの生活には、ポンプとモーターで構成されるポンプ アセンブリ (集合体) があります。アセンブリ自体は分解でき、一部のコンポーネントはそのままにしておくことができます。たとえば、販売したり、別のアセンブリに組み込んだりする場合です。リストでも同様です。これを集合部の空の菱形と実線で表現します。これを次のように表します。

class Object{
}
ArrayList o- Object
ここで、 ArrayListとは異なり、LinkedListクラスにはNode (格納されたデータを参照するコンテナ) が含まれている ことを示します。この場合、NodeはLinkedListの一部であり、独立した存在ではありません。ノードコンテンツそのものではありません。コンテンツへの参照のみが含まれます。たとえば、 LinkedList に文字列を追加するとその文字列への参照と、前後のノードへのリンクを含む新しいノードが追加されます。。この関係を合成といいます。コンポジット(構成部品でできたもの)上に塗りつぶされた菱形の連続線を描くことで表現されます。次に、関係をテキストとして表します。

class Node{
}
LinkedList *-- Node
そして今度は、もう 1 つの重要なタイプの関係、つまり依存関係を描く方法を学ぶ必要があります。これは、あるクラスが別のクラスを使用する場合に使用されますが、そのクラスには使用されたクラスが含まれず、継承もされません。たとえば、LinkedListArrayList はListIterator の作成方法を知っています。これを点線の矢印で表します。

class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
これをすべて実行すると、次の結果が得られます。 UML: 理論から実践へ - 4必要に応じて詳細を追加できます。もちろん、このような図を描くのは特別なことではありません。自分のタスクに取り組むときに、手ですぐに引き出すことができます。これは、間違ったモデルの実装に 1 日を費やしてからではなく、アプリケーションのアーキテクチャを徹底的に検討し、クラス構造の欠点を早い段階で特定する能力を養うのに役立ちます。それは試してみる良い理由だと思いませんか? :)

オートメーション

PlantUML 図を自動生成するにはさまざまな方法があります。たとえば、IDEA にはSketchITプラグインがありますが、図は完全に正しく描画されません。インターフェイスの実装が正しく描画されていないとします (継承として表示されます)。これをプロジェクトのビルド プロセスに統合する方法の例がインターネットにあります。たとえば、 Maven でuml-java-docklet を使用する方法を見つけることができます。デモのために、 Maven Archetype を使用してMaven プロジェクトをすばやく作成します。走る

mvn archetype:generate
[数字を選択するかフィルターを適用する] に対しては、デフォルトのままにし、Enter キーを押すだけです。常に「maven-archetype-quickstart」になります。最新バージョンを選択します。次に、いくつかの質問に答えてプロジェクトの作成を完了します。Maven は UML: 理論から実践へ - 5この記事の主題ではないため、Maven に関する質問への回答はMaven ユーザー センターで見つけることができます。生成されたプロジェクトで、プロジェクト説明ファイル pom.xml を開いて編集します。uml-java-docklet インストールの説明の内容をこのファイルにコピーします。説明で使用されているアーティファクトが Maven Central リポジトリに見つかりません。しかし、次は私にとってはうまくいきました: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0。つまり、説明で groupId を「info.leadinglight」から「com.chfourie」に置き換え、バージョンを「1.0.0」に設定するだけです。その後、pom.xml ファイルのあるディレクトリで次のコマンドを実行できます。

mvn clean install

mvn javadoc: javadoc
生成されたドキュメント (explorer target\site\apidocs\index.html) を開くと、UML 図が表示されます。ちなみに、実装関係は正しく表示されるようになりました:)

結論

ご覧のとおり、UML を使用すると、アプリケーションの構造を視覚化できます。しかし、UML ではさらに多くのことができます。UML を使用すると、社内のさまざまなプロセスを記述したり、作成中の機能を含むビジネス プロセスを記述したりできます。UML が個人にとってどの程度役立つかを自分で判断する必要がありますが、どのような判断を下したとしても、時間を見つけて UML についてさらに学ぶことが役立ちます。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION