OOAD講座:第1回「オブジェクト指向分析とは」

昨日は講師をしているTech Garden Schoolで、オブジェクト指向分析・設計(Object Oriented Analysis / Design : OOAD)の話をしてきました。

Tech Garden Schoolの生徒の皆さんは起業を目指されていて、リーンスタートアップを学んだり、自身のアイディアをまとめたりといった授業も受けているので、「作りたいもの」をお持ちの方が多いです。

私は普段、CakePHPについて教えているのですが、どうしてもコードをどう書くかという内容が多くなってしまい、「作りたいもの」をどう考え、加工していったらプログラミングという作業につながるのかという話が出来ません。

そのような問題意識から、今回から「アイディア」と「コード」をつなぐ、システム分析と設計の話をさせて戴くことになったのです。

ただ、実際にその話をすることが決まったのが一昨日ということもあり、資料が準備出来ませんでした。主にホワイトボードに書きながらの話をしたのですが、それでは復習が出来ないので、このブログに何本かの記事に分けて、書いていこうと思います。

オブジェクト指向分析・設計

昨日の解説では特に触れなかったのですが(後半で個別でお話した方もいますが)、昨日の一連のシステム分析・設計の手法は、「オブジェクト指向」の考え方に沿っています。

オブジェクト指向は、その研究自体は30年くらい前から連綿と行われてきたのですが、システム開発の現場で日の目を浴びてきたのは20年くらい前から、実際に活用され始めたのは10年くらい前からだと思います。
今では、オブジェクト指向は常識のように広汎に使われています。CakePHP自体もオブジェクト指向の考え方で開発されていますし、オブジェクト指向で分析したシステムを作るために適した設計になっていると言ってよいでしょう。

私のエンジニアとしてのキャリアが14年なので、ちょうど現場への普及活動が行われている時期でした。私も、豆蔵という会社がやっている何日間かの研修や、ある小さなプロジェクトでオブジェクト指向の日本での大家とも言える方と直接やりとりをしたりといった経験から、自社内でのオブジェクト指向の普及活動を始め、苦闘している時期がありました。
昔話はこれくらいとしましょう。

Diorama
Diorama / Fundació Ramon Calsina

オブジェクト指向でのシステム分析・設計・開発は、現実世界をシミュレーションする小宇宙(箱庭といっても良いですが)を作ることに似ています。
コンピュータ(あるいはコンピュータ群)をブラックボックスと捉えて、その中に小宇宙を作ります。エンジニアはここでは神、創造主のようなものです。ユーザである人間は、ブラックボックスの外壁に開いたいくつかの穴を通してしか、中を窺うことはできません。

オブジェクトとは何か

私たちが生きている社会のことを考えてみましょう。

Diorama d’usine à l’ancienne
Diorama d’usine à l’ancienne / zigazou76

社会では様々な営みが行われていますが、そこでは何人もの「人」や、いくつもの「物」や「場所」があるでしょう。営みは「人と人」の間のコミュニケーションや、「人と物」、「人と場所」といった関係(相互作用:コラボレーション)から成り立っています。物や場所が相互作用の主体となるのは変な気がしますが、オブジェクト指向の世界ではそういうものだと思ってください。まぁ、人間世界でも物や場所にも神が宿っているとか、妖精がいるとかいうメルヘンの世界もありますから。

この、人・物・場所のことを、オブジェクト指向では「オブジェクト」と言います。
つまり、人・物・場所というオブジェクトを中心に置いて、その営みをオブジェクト間の相互作用として分析するので、「オブジェクト指向」というわけです。

オブジェクトとクラス

オブジェクトとクラスについては、しっかり分けて理解しておかねばなりません。

再び人間社会を思い浮かべてみましょう。

ここはあるコンサートホール(日本武道館だとしましょう)です。その中では今年から改名したモーニング娘。’14(ワンフォー)が歌い踊っています。ここに登場するオブジェクトはというと・・・。

  • 道重さん
  • 譜久村さん
  • 飯窪さん
  • コンサートスタッフ
  • 観客
  • マイク
  • 大型ディスプレイ
  • 客席
  • 日本武道館
  • 国旗(日本武道館ですから)
  • ・・・

いちいち挙げ出すときりがないのですが、いくらでも出てくるわけです。
モーニング娘。メンバーからは、とりあえずリーダーとサブリーダー2人の3人だけ登場してもらいました。

さて、注目してほしいのは人間の出て来かたにズレがあることです。
道重さん、譜久村さん、飯窪さんは個人名で出てきているのですが、コンサートスタッフや観客は十把一絡げに扱われています。

道重さんなどは有名人で、観客はただの観客でしかないのだから、このままで良いのでしょうか。別にそういうわけではありません。道重さん、譜久村さん、飯窪さんはオブジェクトですが、コンサートスタッフや観客というのはクラスです。観客としてサイリウムを振り回している「井上さん」となるとオブジェクトですが、「観客」として十把一絡げに表現するとクラスになります。

道重さんなどは、とりあえず「アイドル」というまとめ方をしてみました。これを「モーニング娘。」としてまとめても良いし、「人間」というまとめ方をしても良いわけです。「人間」というまとめ方をするなら、「井上さん」も当てはまりますね。
つまり、このまとめ方をどうするかは、対象としているシステムのコンテキスト(文脈)によるわけです。

クラスの継承と関連

クラス図として表現すると、このようになります。

白抜きの矢じりが出てきましたが、これを継承といいます。アイドルやコンサートスタッフ、観客は「人間」が持つべき特性を持ち合わせているわけです。アイドル→人間の関係を「汎化(抽象化)」、人間→アイドルの関係を「特化(具象化)」と言います。

しかし、アイドルクラスのオブジェクトとして例えば生田さんを位置づけると、生田さんは観客になることが出来ません。生田さんは新垣さんの舞台は観客として見に行きたいでしょうが、それは叶わないこととなります。
つまり、このような安易な継承は、例としては良いのですが、実際には上手くいかないことが多いのです。

今度は矢じりがなくなりました。これは単なる関連を示しています。人間クラスはアイドルクラスと関連付けることも出来るし、観客クラスと関連付けることもできます。
つまり、生田さんオブジェクトはあくまで人間クラスのオブジェクトとなります。で、あるときはアイドルという役割を演じ、またあるときは観客という役割を演じるのですね。

このように、社会をオブジェクト指向で分析すると、現実に存在する1つのオブジェクトをどういうクラスのオブジェクトとして位置づけるかは千差万別です。それは分析者が社会をどのような見方で見ているのかによるのです。

ITシステムの開発を前提として、分析をしているならば、そのシステムが何をやるためのものなのかによるわけです。先の例で言えば、コンサートの出演者のスケジュールとかギャラを計算するためのシステムならば、アイドルクラスとかコンサートスタッフクラスをきちんと分析して、観客クラスはその対象外としても良いでしょう。一方で、コンサートチケットの販売システムならば観客クラスをきちんと分析しなければなりません。

まとめ

ということで、オブジェクト指向分析の最初の一歩である、オブジェクトとクラスについて書いてきました。
予想通りというか、この話をきちんと書いていくなら相当な長さになりそうなので、連載ということにしようと思います。昨日の解説の主眼となったロバストネス分析に辿り着くまで、書いていきますので、よろしくお願いします。

この記事を書いた人

井上 研一

株式会社ビビンコ代表取締役、ITエンジニア/経済産業省推進資格ITコーディネータ。AI・IoTに強いITコーディネータとして活動。2018年、株式会社ビビンコを北九州市に創業。IoTソリューションの開発・導入や、画像認識モデルを活用したアプリの開発などを行っている。近著に「使ってわかった AWSのAI」、「ワトソンで体感する人工知能」。日本全国でセミナー・研修講師としての登壇も多数。