kr_ryo 徒然日誌 <2005年7月10日分>

三國志製作記106〜細部は計画書に宿る〜

いやあ、雨です。梅雨です。ずーっと雨が降ります。空梅雨なんのその、じめじめ雨あめです(;^_^Aこれぞ日本の梅雨って感じですね〜(@_@)あんまり雨が続くと、せっかくの来週の旅行が…(ToT)と、やや心配な今日この頃、それでも雨の日はやっぱりプログラムに限ります(^O^)

さて、前回急激に進んだ、というよりすっかり発想を変えたせいで急にうまくいきそうな三國志製作、順調にオブジェクト図も書いています(^O^)あんまりうまくいきすぎると、今度は検討することがなくなってこの日誌に書くべきことがなくなりますね(;^_^Aそれはいいことなんだか悪いことなんだか…(^^;;;

それにしても、オブジェクト指向による分析図、うまく書ければプログラム全体をあっさり表現できます…従来の手続指向型プログラムにおけるフローチャートが、細かく書けば書くほど全体の見通しがたたない、というより、あらゆる手順を書かないといけないにもかかわらず修正がしにくく、その上そんな全体フローチャートが書けるくらいならプログラムをそのまま書くのと大差がない、というほど実は使えないものであるのに対し、オブジェクト指向分析図は修正は非常に簡単だし、細部はそれ程書かなくてもいいのです。

どういうことかというと、フローチャートは分岐や手順をそのまま順序正しく書いていきます。そうなると、どんな細かい分岐や手順も書いておかないと意味がありません。もしかすると、細部の先にまた元に戻ってくる手順があるかもしれないからです。もちろん、その手順どおりにプログラムしていくわけですから、フローチャートがなければ本来プログラムができない……そんなことはなくて、結局フローチャートなしにプログラムしていくわけです(~_~;)単純な流れだとまだしも、分岐が何通りにも分かれて複雑になったりすると、何がなんだかわからなくなります…単純に見えるSWGの戦闘も、戦闘に入るまでの設定が複雑で、実はわけがわからなくなっています(^^;;

これに対し、オブジェクト指向では、何かを行ったりするオブジェクトという単位で動きます。オブジェクトにこれこれをやって、と命じると、内部で処理して結果を返します。ということは、オブジェクトの細部は全体の設計図では見えなくてもいいわけです。少なくとも、これこれができます、ということだけわかればいいのです。もちろんその個別のオブジェクトをプログラムするときは、フローチャートが必要になるかもしれません。けれども、オブジェクト同士のメッセージの送りあいを基本とするオブジェクト指向プログラムでは、オブジェクトの中で何が行われているかどうかはそれ程意識しないで済みます。むしろ、それぞれのオブジェクトがきちんと集まって結果を出せるようになっているかどうか、オブジェクト間の設計が問題になります。

そんなオブジェクト指向分析では、オブジェクトを抽象化する方向に分析します。それがますます細かい内容をなくしていく感じになりますね。たとえば、武将。関羽や張飛といった連中が直接オブジェクト指向分析図には出てきません。彼らは武将としてひとまとまりになります。これが従来の手続き型プログラムだと、関羽サブルーチンだとか張飛サブルーチンだとか、直接フローチャートに登場するかもしれません。オブジェクト指向でも、関羽クラスや張飛クラスという武将オブジェクトの具象オブジェクトを作り込むこともできますが、そもそも設計図にいれなくてもいいですし、それどころか全部完成してから付け足しても全然問題ないのです(@_@)手続指向型プログラムでは全部作り替えるに等しいことになる場合もある追加ですが、オブジェクト指向では、正しくオブジェクトを設計していれば、それ程難しい作り替えにはなりません…もちろん、これまでまったく出てこなかったオブジェクトを追加することは、既存のオブジェクトとまったく関係がないため、新たな関係をつくるために既存部分をなおすこともありましょうが、基本的には今あるオブジェクトの内容をより具体化する追加や変更なので、より簡単にはつくりかえることができます。

抽象的な話なので(^^;;具体的に書いてみましょう。たとえばさっきの武将オブジェクト。こいつらに話しかけるとみんな同じ返事を返します。張飛「ご命令を」夏侯惇「ご命令を」それじゃあ味気ないというので、張飛オブジェクトはもうちょっと返事を変えてみたいと思います。武将クラス(クラス=オブジェクトの原型)の継承(継承=具体化)というテクニックで、張飛は劉備が命令する場合は、「なんだい兄者」と応えるようにします。そうすると、話しかける相手によって返事が異なります。張飛「なんだい兄者」夏侯惇「ご命令を」という感じです。これを手続指向型プログラムでしようと思ったら、話しかける部分に話しかける相手によって分岐する内容を付け加える必要があります…相手が変われば返事が変わる内容すべてにこんな分岐を準備しようと思ったら、気が狂いそうになります(^^;;;それをオブジェクト指向では、プログラムの原型は最初に作ってしまえばよく、具体的な内容は後から付け足すこともでき、非常に楽ができます。この辺の話は実は同じことを去年書いていますが、その時はこういう継承は多用しないように、というお話でした。しかし、どう考えてもこの場合は使うべきでしょうね(^-^)

そう考えると、SWGはともかく三國志はオブジェクト指向で正解という気がします(^O^)もちろんSWGもオブジェクト指向で設計した方がはるかに楽ができそうですね。艦数上限なんかも解決できそうですし…

ということで、いまのところ順調に進んでいます(^^;;後はUIをどうするかということと、オブジェクト間の細かい連携内容(手続き)をどうしていくのかというところです。どんどん詳細を詰めていくだけなので、ジグソーパズルを埋めていっている感じになっています。これまでは下絵を見ないでジグゾーパズルをしていたような感じが、下絵がはっきりわかって、後は埋めるだけ、という感じといえばお分かりいただけるでしょうか?

まずもって、前回組織中心主義になってから、誰が何をする、ということをそれ程深く考えなくてよくなって楽になっています(^^;;動くのは基本は組織ですから。そうすることで、武将個人なら抽象的すぎる、うまく城を治める、というような命令が、組織相手なら簡単に出せるわけで、武将個人に出すような細かい命令にとらわれなくてすみます。これは非常に精神的に楽です(^-^)作る上でも楽です。とりあえず進める間は進めて、立ち止まるころ、また製作記で検討していきたいと思います(^^;;んー!けれども、願わくはそのまま完成まで突っ走りたい!(^O^)

index

〔TopPage〕

このページへのリンクはフリーです。
このページについてのご意見、ご質問などは、kr_ryo_green@yahoo.co.jpまでお願いします。
Copyright 2005© kr_ryo All rights reserved.
訪問件数