JavaRush /Java Blog /Random-JA /UML: 理論から実践へ
Viacheslav
レベル 3

UML: 理論から実践へ

Random-JA グループに公開済み

導入

「二度測って、一度切る」という言葉は、誰もが子供の頃に聞いたことがあると思います。それはプログラミングでも同じです。実行に時間を費やす前に、実装について検討することをお勧めします。多くの場合、実装中にクラスを作成し、それらの相互作用を考案する必要があります。そして多くの場合、これを視覚的に表現することは、最も正しい方法で問題を解決するのに役立ちます。ここでUML が役に立ちます。

UMLとは何ですか?

検索エンジンで画像を見てみると、 UMLが図、矢印、四角形に関するものであることが明らかになるでしょう。重要なのは、UML が統一モデリング言語に翻訳されることです。ここで「統一」という言葉が重要です。つまり、私たちの写真は私たちだけでなく、UML を知っている他の人にも理解されることになります。これは図を描くための国際言語であることがわかりました。

UML: 理論から実践へ - 1

ウィキペディアにあるように

UML は、ソフトウェア開発、ビジネス プロセス モデリング、システム設計、および組織構造の表示におけるオブジェクト モデリングのためのグラフィカル記述言語です。
誰もが考えたり認識したりしていない最も興味深いことは、UML には仕様があるということです。さらに、UML2 仕様もあります。仕様の詳細については、Object Management Group のWeb サイトを参照してください。実際、このグループは UML 仕様の開発を行っています。UML がクラスの構造を記述することに限定されていないことも興味深いです。UML 図には多くの種類があります。UML 図の種類の簡単な説明は、同じ Wikipedia: UML 図、または Timur Batyrshinov によるビデオ「UML 図のレビュー」で参照できます。UML は、さまざまなプロセスを記述するためにも広く使用されています (例: JWT を使用したシングル サインオン)。UML クラス図の使用に戻ると、同じ UML 図でパターンが説明されている書籍『Head First: Design Patterns』に注目する価値があります。実際にUMLが使われていることが分かりました。そして、その応用に関する知識と理解は非常に役立つスキルであることがわかりました。

応用

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

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Idea で結果を確認するには、[表示] -> [ツール ウィンドウ] -> [PlantUML] を選択します。クラスを表す 2 つの正方形を取得するだけです。ご存知のとおり、これらのクラスはどちらも List インターフェイスを実装しています。このクラス関係を実装と呼びます。このような接続を示すには、点線の矢印を使用します。それを描いてみましょう:

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

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

~Object[] elementData
ここで、いくつかのオブジェクトが含まれているものを示したいと思いますArrayList。この場合、接続タイプはアグリゲーションになります。この場合の単位は ですArrayList。他のオブジェクトが含まれています。リスト内のオブジェクトはリストなしでも存続できるため、集計を選択します。リストの不可欠な部分ではありません。それらの存続期間はリストの存続期間とは関係ありません。集合体はラテン語から「組み立てられた」、つまり何かで構成されたものと翻訳されます。たとえば、生活の中にはポンプとモーターで構成されるポンプユニットがあります。ユニット自体は、一部のコンポーネントを残したまま分解できます。たとえば、売却したり、別のユニットに入れたりする場合です。リストも同様です。そして、これはユニットの近くの空のひし形と連続した線の形で表現されます。それを次のように図示してみましょう。

class Object{
}
ArrayList o- Object
ArrayListここで、 とは異なり、クラスには格納されたデータを参照するコンテナがLinkedList含まれていること を示します。Nodeこの場合、Node彼らは自分自身の一部でありLinkedList、別々に生きることはできません。Nodeコンテンツは直接保存されていませんが、コンテンツへのリンクのみが含まれています。たとえば、LinkedList行に追加するときは、Nodeその行へのリンクと、前と次の へのリンクを含む新しい を追加しますNode。このタイプのコミュニケーションはコンポジションと呼ばれます。複合物 (複数のパーツで構成されたもの) を表示するには、色付きのひし形が描かれ、それに続く連続線が付けられます。これを接続のテキスト表示として書いてみましょう。

class Node{
}
LinkedList *-- Node
そして今、別の重要なタイプの関係である依存関係 を表示する方法を学ぶ必要があります。これは、あるクラスが別のクラスを使用し、そのクラスが使用されているクラスを含まず、その子孫でもない場合に使用されます。たとえば、LinkedList彼らはArrayListを作成する方法を知っていますListIterator。これを点線の矢印として表示してみましょう。

class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
これをすべて終えると、次のようになります。
UML: 理論から実践へ - 4
必要に応じて詳細を確認できます。すべての指定は、「 PlantUML - クラス図」に示されています。さらに、このような図を描くのに特別なことは何もなく、タスクに取り組むときに手ですぐに描くことができます。これにより、アプリケーション アーキテクチャについて考えるスキルが向上し、間違ったモデルの実装に 1 日を費やした後ではなく、早い段階でクラス構造の欠陥を特定することができます。それは試してみる良い理由だと思いますか?)
UML: 理論から実践へ - 5

オートメーション

PlantUML 図を自動生成するにはさまざまな方法があります。たとえば、Idea にはSketchITプラグインがありますが、完全に正しく描画されません。たとえば、インターフェイスの実装が正しく描画されません (継承として表示されます)。これをプロジェクトのビルド ライフ サイクルに組み込む方法の例もインターネット上にあります。uml-java-docklet を使用するMavenの例があるとします。これがどのように行われるかを示すために、Maven Archetype を使用してMaven プロジェクトを迅速に作成します。コマンドを実行しましょう: フィルタを選択するように求められたら (数値を選択するか、フィルタを適用します)、Enter キーを押してデフォルトのままにします。これは常に「 maven-archetype-quickstart 」になります。最新バージョンを選択します。次に、質問に答えてプロジェクトの作成を完了します。 mvn archetype:generate
UML: 理論から実践へ - 6
Maven はこの記事の焦点では​​ないため、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 installmvn javadoc:javadocここで、生成されたドキュメント (explorer target\site\apidocs\index.html) を開くと、UML 図が表示されます。ちなみに、実装はすでにここで正しく表示されています)

結論

ご覧のとおり、UML を使用すると、アプリケーションの構造を視覚化できます。また、UMLはこれに限定されません。UML を使用すると、社内のさまざまなプロセスを記述したり、作成している関数が動作するビジネス プロセスを記述したりできます。UML が個人的にどの程度役立つかはあなた次第ですが、時間をかけて詳しく読むことはいずれの場合にも役立ちます。#ヴィアチェスラフ
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION