シーケンス図で処理の流れを整理!
友達にメッセージを送る場面のシーケンス図
Mame Talkにグループチャット機能を追加することになり、グループチャットの手順をまとめることになりました。調査をしているとチャットとグループチャットでチャットを開始するまでの手順が違うことがわかり、連絡先一覧のプログラムを修正する必要が出てきました。そこでユーザがMame Talkを起動してからメッセージを送るまでの動きをシーケンス図にまとめ修正ポイントを洗い出しました(図3)。
それではシーケンス図の解説をしていきます。ますはユーザのアクションから見ていきましょう。ユーザのアクションは、「1. Mame Talkを起動する」「2. 連絡先を選択」「3. メッセージ送信ボタンを押す」「4. 戻るボタンを押す」の4つです。
次にそれぞれのアクションの詳細を見てみましょう。1つ目のアクションでは、まずbindServiceメソッドを呼びバックグラウンドで動いているGTalkサービスと接続します(図3の1.1、1.1.1)。次にfillDataメソッドを呼んで連絡先一覧を表示しています。
2つ目のアクションでは、表示された連絡先の中からチャット相手が選択されるとcreateChatSessionメソッドを呼び出してチャットセッションを生成します(図3の2.1、2.1.1)。次にstartSubActivityメソッドを呼んでチャット画面を起動し過去のメッセージを表示しています。
3つ目のアクションでは、入力されたメッセージをsendTextMessageメソッドで相手に送っています(図3の4.1)。
4つ目のアクションでは、チャット画面のバックボタンが押されるとonActivityResultメソッドが呼ばれ制御が連絡先一覧に戻っています(図3の5.1)。次にチャットが終了したことをGTalkセッションに通知しGTalkセッションがChatセッションを破棄しています(図3の5.1、5.1.1)。
先ほど紹介したシーケンス図より処理が多いのですが、ユーザのアクションごとに処理を順番に追っていけば意外と簡単に理解できたのではないでしょうか。実際にアプリケーションを動かしながら見ていただけるとよりわかりやすいと思いますので、興味のある方は「SourceForge.JP: Project Info - Mame Talk(http://sourceforge.jp/projects/mametalk)」からプログラムをダウンロードしてください。
複雑なプログラムはシーケンス図を描いて整理してみよう
シーケンス図はクラス図に比べて慣れるまでに時間がかかります。シーケンス図を描くコツは、何度も言いますがクラスとオブジェクトの違いを理解することです。この2つの違いを理解することでクラスの分析能力も大幅にアップしますので、この機会にきちんと理解するようにしてください。
筆者はプログラムが複雑になった時には必ずシーケンス図を描いて動きを整理するようにしています。シーケンス図を描くことで自分でもわかっているつもりの動きがわかっていなかったことに気づいたり、不要な処理を発見できたりします。筆者の経験上シーケンス図を描いた時は必ずと言っていいほど新しい気づきがありました。はじめのうちは間違ってもあまり気にせずにどんどん描いてみてください。
これまで4回にわたりプログラム開発時にモデルを使うことの利点を説明してきました。わかりづらい点もあったともいますが、最後まで筆者にお付き合いいただきありがとうございました。本連載が読者の皆さんのステップアップにつながれば幸いです。