はじめに
オブジェクト指向言語の知識がほぼほぼゼロの私ですが、オブジェクト指向プログラミングを学習するのと同時に、UMLについて学習したいと思います。その備忘録をブログとしてまとめます。
UMLってこんなの
まず、「UMLって一体何なんだ?」って方のために、簡単にどんなものなのかをまとめていきたいと思います。
-はい。形式ばった言い方をすれば上述の通りです。もう少し砕けた表現に直してみると、
ということになります。言語といっても、言葉だけではなくて図だったり表だったりを使用します。要するに、システム開発の前段階でやるドキュメント作成に使われる図の書き方を共通化しましょう。その方が顧客とSEがドキュメントを使用して話し合いがしやすいし、開発者もドキュメントを見ればシステムの外観をとらえることができて素晴らしいじゃん!というのがUMLです。
UMLを学習しようと思った動機
冒頭で、オブジェクト指向プログラミングを学習するのと同時にUMLについて学習すると書きましたが、微妙にウソです。実はJavaの勉強をしていました。といっても1週間ほどなので、理解度はお察しレベルです。Javaの学習をしていてどうも腑に落ちない部分があったんですよね。それは、
- アクセス修飾子の挙動は分かったけど、実際にはどんな形で使われるのか
- どのような単位でクラスを分けるのか
- 抽象クラスとかインターフェースって実際にどう使われるのか
そう。やはり座学をやっていて腑に落ちない部分とは、実際はどうなの!?って部分です。一つ目の理由として、システムのモデリングをどういった形で行うのかを同時に学習することで、体系的にオブジェクト指向について学習できると考えました。二つ目の理由として、システム開発を行う上ではドキュメントが必須だからです。開発者は設計書をもとに開発を進めていきます。なので、設計書のクオリティ次第で開発の効率が変わります。また、顧客との打ち合わせの際に整頓されたドキュメントを見せた方が満足度が高くなるでしょう。今回はJavaと同時に学習していますが、どのオブジェクト指向言語を用いようと、ドキュメントが必要なことには変わりありません。(システム開発で自分の学習した言語が使われるとも限りませんしね。学習した形が残るものが欲しい!)
オブジェクト指向に関して
オブジェクト指向の利点を挙げてみると、
- 利用者が内部構造を知らなくても操作ができて、安全性および保守性の高いアプリケーションを作成できる。
- プログラムの再利用性が向上し、拡張が容易に行える。
- プログラムの更新による他機能への影響が少なくて済む。
つまり、オブジェクトという単位で開発を行うことにより、機能ひとつひとつに独立性を持たせるということです。そして、見せるものと見せないものを分けることによって、保守性を担保しています。例えば、車を運転する人はガソリンがどう噴射されていて、エンジンがどう動いていて、エンジンとタイヤがどう繋がっているのか、なんて知らなくてもアクセルを踏めば車は加速することが分かっています。一般のドライバーは、アクセルを踏んで車が加速するという結果だけを求めています。内部構造がいかに複雑であったとしても、利用者の操作は簡潔であることが求められるということですね。また、タイヤ、シャフト、エンジン、ペダルのように、部品を組み合わせて一つの車とすることで、夏はノーマルタイヤ、冬はスタッドレスのように部分が変わっても他の機構に影響を与えませんし、再度利用することも可能です。これと同様のことをシステムにおいても行います。
- 「オブジェクト」という部品に分ける。その際、機能が独立するように設計する。
- ユーザに見える部分と見えない部分を分ける。見える部分は簡潔にまとめる。見えない部分は保守性と拡張性に留意する。
こんな感じでしょうか。それなりにまとめることはできるんですが、やっぱり実際にシステム開発をやってみないと見えてこない部分が多々ありそうな予感がします。
つべこべ言わずにシステム考えてみたら?
上で私が言ってることは、「実際にやらないとイメージ湧かないから勉強が進まなーい」という責任転嫁でしかありません。そんなに言うのなら実際にやってみれば良い。そうですよね。
今回は以下のようなシステムを念頭に考えていきたいと思います。
・システム要望者
アフィリエイター向けのセミナー担当者
・システム要件
セミナー受講者のモチベーションが上がらず、サイトの更新頻度が低下してしまう。
受講者のサイト状況を確認して、月単位でレポートを作成したい。
更新が止まってしまっているユーザに関しては、連絡を取るための連絡先を検索できるようにしたい。
あまり規模の大きなシステムだと雑多になってしまう可能性があったので、簡単な例を挙げてもらいました。何より今後私自身が学習しながらブログを書いていくので、私のキャパシティ的に厳しくなりそうだったからです。笑
次回はこのシステムを元に、ユースケース図を考えていきたいと思います。