kr_ryo 徒然日誌 <2005年8月21日分>

4周年記念特別企画〜三國志製作記を振り返る〜

とうとう我が〔日曜プログラマーの部屋〕kr_ryo's HomePageは4周年を迎えましたm(__)mこのサイトはSWGの完成に伴う配布&紹介が設立の由来ですので、まさに4周年は三國志製作の積み重ねで続いてきた面もあります(^^;;しかしまあ、続きに続いたというべきでしょう(^^;;;A

振り返れば、当初からUI(ユーザインタフェース)をもっと使いやすいものにしようとしていました。しかし複雑なことは複雑であるという手続指向型プログラムでは、イメージどおりのものができません。今から思うとSWGのUIはひたすらボタンだけですけども、そんなにむちゃくちゃひどいものではないと思います(^^;;ただ、リスト表示ができないがゆえ、艦隊などの表示にえらい苦労をしています。そもそも艦種や艦型、提督といった要素をばっさり切り捨てたのは、モデルがそうであったということもありますが、単純に、リストなくしてそんなに大量に表示ができない、ということも原因としてありました。

SWGはそれでもなんとか完成しましたが、三國志のように大量に登場する武将をきちんと表示し、指示するためには、やっぱりリストがなくちゃあできません。そこで今も使い、また結局プロフェッショナル版を購入したDelphiに製作環境を移すことになります。やっぱりDelphiはじめ、MSVisual系列といった市販言語は、UI開発に絶大な威力を発揮します。フォームにペタペタはりつけるだけで済むんですからね〜(^-^)ただ、それでもセンスというものはあるんでしょう、以前お話しましたが、我が三國志のUIも、初代から比べるとだんだん洗練されてきた気がします(^^;;

それにしても、やっぱり慣れるまでは製作環境を変えることは大変です。慣れてからも、何か新しいことをしようとするとすぐには利用できない、ということがあります。特にDelphiは、オブジェクト指向プログラムを前提にしているため、手続指向型プログラマにとってはなんでこんな面倒くさいことになっているの?ということがよくありました。そういう意味ではC++もVBもオブジェクト指向を前提にしているんでしょうけど、C++はともかく、VBはその成り立ちからいって手続指向型プログラムが作りやすいに違いなく、根強い人気があるんでしょうね。

そう考えると、手続指向型言語であるCのいまだ根強い人気といい、オブジェクト指向はなかなかすぐには理解できないものであるようです。もちろん、手続指向型プログラムの洗礼を受けずに最初からオブジェクト指向型プログラムで教われば、よりあっさりわかるんではないかな、という気はします。それでも、現在のコンピュータ自体が手続指向型になじみやすい構造をしているがゆえ、手続指向型に流れやすいんでしょうね。

そう、Delphiで手続指向型プログラムではもったいない、やっぱりオブジェクト指向型プログラムだ!と、3周年特別記念以降、12月頃から転向をはじめます。とはいえなんだかよくわからない。何がいいのかわからないけど、なんだか楽しそうな世界だ、という気はしていました。ようやくオブジェクト指向型プログラムのよさを実感しだしたのはつい最近、ということになります(^^;;いいはずだ、とは思っていたものの、やっぱり実際に使ってみるといい、とわかる、それこそ本当にいいんでしょうね(^-^)

いい、いいと言われてて、いいに違いないと思い込んでいて、実際に使ってみるとさほどでもない、ということはプログラム言語に限らず無数にあります(--;しかし、オブジェクト指向型プログラムは使えば使うほど、オブジェクト指向であるほど、使いやすいものになります。思っていた以上にプログラムが作りやすいんですね。オブジェクト指向プログラムのメリットは再利用にあり、とよく言われますが、意外に繰り返し同じコードを使うことが多いプログラムでは、すでにひとつのプログラムでオブジェクトを再利用をしているわけですから、やっぱり便利なんですよね。

しかもオブジェクト指向は、C++やC#、JAVAなど主力言語の土台となっているものです。まったくその言語のことを知らなくても、オブジェクト指向にのっとって書かれていれば、なんとなく読めたり、将来的には書けたりできそうな気がします。言ってみれば、方言の違い、といえば言い過ぎかもしれませんが、たとえば同じ日本語だ、と思えなくもない面があるのです。

そのオブジェクト指向型プログラムでは、手続指向型プログラムのようにいきなり書き始めるのではなく、全体設計をまずやってしまいます。もちろん手続指向型プログラムも、いきなり書き始めずに全体設計をしてからすればよいんですけども、実際問題としてきちんと全体設計ができるとは思えない構造ではないかと今では思えます。そもそもプログラム、順番に実行する、ですからね。たとえて言えば、CDかカセットテープかの違いのように思えます。手続指向型プログラムできちんとした全体設計をするのと、いきなりプログラムを書くのとそれほど差がない、というより同じことをしている気はします。

こういう、オブジェクト指向型プログラムと手続指向型プログラムの差のお話もずいぶんしました(^^;はじめてのプログラムながら、SWGは手続指向型プログラムの限界や制限にずいぶん苦しめられた気がしましたからね。そもそもオブジェクト指向になじみやすい現在のUIを、手続指向型プログラムでがりがり書くのはなかなかつらいものもあります。リストなんて複雑な構造は、手続指向型プログラムで書くよりオブジェクト指向型プログラムで書かれる方が楽に決まっているのです。というより、まずもってリストはオブジェクトそのものですから…!

それでも手続指向型プログラムは、それはそれで直感的でもあります。順番に指示した命令を実行していくだけですから。オブジェクト指向型プログラムといえども、オブジェクト内部では順番に指示した命令を実行していくことには違いありません。逆に、オブジェクト指向だからと同時処理していると思い込んでいると、ずいぶん以前にお話したようにバグのもとになります。何がどういう順番で実行されているのかよく考える必要はありまして、そう考えると手続指向型プログラムの方がやっぱり語源どおりのプログラムになじみやすいんかな、という気もします。

しかし、手続指向型プログラムは、巨大になればなるほど見通しが利かず、どこの話なのか何の話なのか全然わからなくなっていきます。こういう面でもオブジェクト指向型プログラムはどこの話かわかりやすく今度はこちらが直感的になります。武将の話は武将オブジェクトの話です。リスト表示とか、武力計算ルーチンとかに分散したりはしません。そしてオブジェクトの内部は、短い手続指向型プログラムです。短い場合は手続指向型の本領発揮です。もっというと、オブジェクト指向型プログラムは、手続指向型プログラムのやはり発展型で、手続指向型プログラムの限界を超えてより一層人間の思考に近いものになってきているのかもしれませんね。

3周年特別記念以降、この1周年は、Delphi7導入に伴うデータベース化、それでもやっぱり手続指向型の限界で作りにくかったのをオブジェクト指向の勉強と実践、さらには組織化と反内政というルール面での検討と、いよいよますます新しい仕組みが取り入れられてきています。来年の5周年記念は、三國志完成&SWG2完成といきたい、と、こう考えているところです。もう検討の時代はすぎた、後は実践あるのみ、さあ、がんばりましょうか(^O^)

index

〔TopPage〕

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