シーケンス図で処理の流れを整理!
シーケンス図の概要
本連載では、Google Android(以下、Android)を使った携帯アプリ作成を例に、マインドマップやUMLによる設計について学んでいきます。前回はクラス図を使ってプログラムを整理する方法を紹介しました。今回はシーケンス図を使ってプログラムの処理の流れを整理する方法を紹介します。
クラス図はプログラムの構造が複雑になった時に非常に役に立ちます。ただしプログラムの構造が複雑になった時は、たいてい処理も複雑になっているものです。クラス図はプログラムの構造を整理するのには向いていますが、処理の流れを表現することができません。こういった時に役に立つのがシーケンス図です。
シーケンス図はオブジェクト同士の動的側面をとらえるための図です。描き方はまずオブジェクトを四角で囲み、左から右に順番に配置していきます。次にそれぞれのオブジェクトに生存線を引いていきます。生存線が引けたら次に活性区間を指定し活性区間からメッセージの矢印を引きます。
説明ではわかりにくいので実際の図を見てみましょう。図1はMame Talkでユーザが「友達を招待する」メニューを押した時の動きを表すシーケンス図です。
シーケンス図にはその他にもいろいろな表現方法がありますがはじめのうちはオブジェクト、生存線、活性区間、メッセージの書き方を覚えておけば問題ないでしょう。シーケンス図についての詳しい説明は「第4回:シーケンス図とステートマシン図を学ぼう(http://www.thinkit.co.jp/article/40/4/)」を参照してください。
クラスとオブジェクトの違いを意識してますか?
図1や参照先のページを見ればシーケンス図の描き方やルールは簡単に理解できると思います。しかしシーケンス図をきちんと使いこなすには、クラスとオブジェクトの違いを理解している必要があります。シーケンス図はオブジェクトの振る舞いを表す図です。クラスとオブジェクトを混同してしまうとシーケンス図を描くことはできないといっても過言ではありません。
クラスとオブジェクトは「クラスはあるオブジェクトの特性をまとめて定義したもの。クラスはオブジェクトの概念を表しオブジェクトはそのクラスの実体である」と言えます。あまり良い例ではありませんが、クラスが「人間」でオブジェクトが「田中太郎」や「山田花子」になります。
クラスはあくまで概念なので状況によって変わります。例えば「田中太郎」というオブジェクトを生物学上の特徴に注目してクラスを定義すれば「人間」となりますし、人間社会における特徴に注目してクラスを定義すれば「学生」や「従業員」となります。このようにクラスはオブジェクトの特徴をどうとらえるかによって変わるのです。
ここでは、クラスとオブジェクトは違うものだということを覚えておいてください。シーケンス図を描く上で、クラスとオブジェクトの違いを理解しているのとしていないのでは大きな差が出ます。シーケンス図をクラスの動きを表す図と勘違いしてしまうことがありますので注意してください。
話が少しそれましたが次のページでは、実際のプログラムをどのようにシーケンス図に描けばよいかを見ていきましょう。