Loading [MathJax]/extensions/tex2jax.js

初心者が学ぶUMLの基礎~導入編~

2025/03/28

UML

ソフトウェアの仕様書を作成する必要が出てきており、仕様書の作成に際してUMLの勉強をしています。今回はUMLについて勉強したことをまとめていきます。

内容にボリュームがあるため、何個かの記事に分けて記載していき、今回は導入編です。今回は下記の本にて勉強をしてます。

UML概要

UML(統一モデリング言語: Unified Modeling Language)は、システムやソフトウェアの設計を視覚的に表現するための標準的なモデリング言語です。OMGという団体が規格を策定しており、現在は2.5.1というバージョンが最新です。700ページ以上ありますが、原文を見たい方は下記参照お願いします。

About the Unified Modeling Language Specification Version 2.5.1


少し話がそれてしまいましたが、モデリングという馴染みが無い言葉が出てきましたが、一言でいうと複雑なシステムを簡略化して表現することだと思ってます。

私は車の整備を良くするので、車をベースに考えると下記のようなイメージになります。



厳密にいうとブレーキがあったりサスペンションがあったり更に細かく分解するとネジがあったりしますが、そこまで細かく分解してしまうと全体像を把握するのが大変になってしまうため、物事の本質をとらえるために抽象化することをモデリングということが多いみたいです。

UMLを利用する目的

UMLはオブジェクト主にオブジェクト指向のソフトウェア開発にて使用されます。UMLが登場する前は多くのオブジェクト指向開発方法論の方法論者がいて、表記方法もたくさん存在していたみたいです。

このように表現方法がたくさんあるとエンジニアはプロジェクトが変わるたびに異なる表記方法を学ばなくてはいけないため、効率が低下してしまいます。

統一的な表現手法を使う事で学習する時間を減らしエンジニアは効率よく開発をすることが出来るようになります。

また、最近時はシステムが大規模かつ複雑になってきております。大規模開発をするうえで様々な分野の担当者や海外の方とも開発をすることがあると思います。そのような大規模な開発を行う上で統一の言語があることでスムーズに連携を取ることが出来るようになります。

補足になりますが、2000年代ではUMLはソフトウェア開発だけではなくビジネスをモデリングする際にも使われてました。

例えば下記のように2004年の記事でビジネスモデル作成する際にUMLが活用されていたことが分かります。

UMLを使ってビジネスの機能を可視化する

このようにUMLを使う事で開発だけでなくビジネスモデルなど様々な分野のモデリングをする際に役に立ちます。

構造図と振る舞い図

先ほども述べた通りUMLはシステムの全体像を分かりやすく表現をするための手法です。UMLでは整理するための図が何個か用意されており、大きく分類すると構造図振る舞いの2つに分類することが出来ます。

構造図は静的な構造を表すもので本質的な部分と紐づく関連のものを表現するのにつかい、振る舞い図は動的な構造を表すもので実際にどのように動くかを表現します。(先ほど紹介した図は構造図の方です。)

二つの違いを絵で表すと下記のようになります。


先ほど紹介してない振る舞い図の方に着目して説明するシステムの動きがどのように変化していくかを表現していくものとなってます。(時系列で表現することもあれば状態の変化に着目して書く場合もあります。)

UMLに登場する構造図と振る舞い図のダイアグラム名

UMLでは構造図と振る舞い図(正確には振る舞い図の中に相互作用図もあります)を表現するためにいくつかのダイアグラム(図)が用意されております。ダイヤグラムについて表にしたのが下記の表です。


分類ダイアグラム名概要
構造図
クラス図システムの静的な構造を表現するための図
オブジェクト図ある瞬間のオブジェクトの状態を明確に表現するための図
コンポーネント図ソフトウェアの部品であるコンポーネント自体の構造やコンポーネント間のつながりを表現する図
配置図システムの物理的な側面を表現する図
コンポジット構造図
(合成構造図)
クラスやコンポーネントなどの内部構造を詳細に表現し、外部からどのように内部の仕組みにアクセスするのかを具体的に表現するための図
パッケージ図モデル要素をグループに整理するための図
振る舞い図
ステートマシン図オブジェクトの状態変化を表現するための図
アクティビティー図システムの流れをアクション(モデリング対象が行う処理などを表現する要素)を用いて「意味のある一連のながれ」としてまとめるための図
シーケンス図処理の内容ををライフライン(クラスやオブジェクト、コンポーネント)間の相互作用として動的に表現するための図
★コミュニケーション図モデル要素をグループに整理するための図
★相互作用概要図複数の相互作用で構成されるシステム全体の流れを俯瞰するための図
★タイミング図ライフラインの状態遷移や相互作用のメッセージ送信のタイミングを時系列で表現する図
★ユースケース図システム化対象機能とその機能に関係する外部要素の可視化するための図

(かんたんUML入門より抜粋。★が付いている項目は相互作用図)

次回の記事からは上記表の中でよく使う項目について勉強し整理していきます。

UMLの共通要素

この記事の最後として先ほど紹介したダイアグラムで共通に利用できるモデル要素があるので紹介します。今回紹介する図形はDraw.ioというツールを使って作成しております。アプリケーションをインストールして使う事も出来ますが、インストールしなくてもオンライン上で使う事も出来ますので、よろしければ使ってみてください。

https://www.drawio.com/

ノート

まずはノートです。当該のモデル要素に破線の先を接続して、コメントを記載します。コメントなので、ノートの中には任意の文章を記載することが出来ます。
UMLにおけるノート

フレーム

次にフレームです可視化対象の図を矩形(長方形)で囲み、種類と名称を付加して表現します。これから作成する図形がクラス図なのかシーケンス図なのかといった種類を表現するのと、その図形の名称を表現することが出来ます。
UMLにおけるフレーム

ステレオタイプ

これはちょっと私が正しく理解できているか怪しいですが、ステレオタイプを利用することでモデルの要素を意味付けによって分類することが出来ます。ステレオタイプはギュメ 》で囲う事で表現することが出来ます。

例えばシステムの利用者がとして複数役職者がいる場合にActor》というステレオタイプを付けて表現をすることでシステムの利用者であることを表現することが出来ます。(グルーピングするイメージですかね?)

また、ステレオタイプを付けたモデル要素に独自のアイコンを付けることも可能です。

例えばActorというステレオタイプに下記アイコンを割り当てることで一目でわかるようになります。

下記本によると
独自のステレオタイプを作る場合は下記のようにコメントを付けて表現するみたいです。(必ずこのような表記をする必要は無さそうですが、共通認識を持てるという意味ではこのような表現の方がいいと思いました。)

メタ属性

これもまた理解できているか怪しいですが、シンプルに図やモデルに使われる要素が持つ情報や特性の事を言っていると思います。
例えばNameとかならName=田中などです。

本ではメタ属性の例として{}で囲んで紹介されていましたが、{}は次に紹介する制約と被るので制約の中にあるメタ属性の場合を紹介したのかなと理解しました。(間違っていたら指摘してください。)

制約

制約を用いることでモデル要素に制約を表現することが出来ます。制約は先ほども少し触れた通り中括弧{}で表すことが出来ます。制約の例として先ほど書いた冷房と暖房にそれぞれ{30度以下}、{20度以上}という制約を表現してみました。

タイプとインスタンス

UMLではタイプとインスタンスという2種類で管理してます。
タイプは雛形となるモデルを表し、インスタンスはタイプの具体例を表します。良く例で取り上げられるのはたい焼き機だと思います。
たい焼き機という雛形(タイプ)を使ってあんこたい焼き(インスタンスの1つ目)、クリームたい焼き(インスタンスの2つ目)を作っていくイメージです。

慣れている人はタイプの視点でモデリングを行っていくみたいなのですが、私みたいな初心者は最初にインスタンス目線でモデリングをしていき、最終的にタイプを作っていくという方がやりやすいみたいです。

参考文献

最初に紹介した書籍以外で参考にしたサイトなどを記載します。

Enterprise Architect 17.0 日本語版 ヘルプ

③共通する要素の表記

UML2 表記法ガイド Kindle版


自己紹介

はじめまして 社会人になってからバイクやプログラミングなどを始めました。 プログラミングや整備の記事を書いていますが、独学なので間違った情報が多いかもしれません。 間違っている情報や改善点がありましたらコメントしていただけると幸いです。

X(旧Twitter)

フォローお願いします!

ラベル

QooQ