kr_ryo 徒然日誌 <2002年7月28日分>

オブジェクト?プロシージャ?…Delphi学習記その2

得意の連載です(^^;Aリアルタイムで学習中の記録書いてます。まさしく日誌ですね。

さて、前回Delphi6についてあまり説明していませんでした(というか、ありがちな誤解した説明をしていた(^^;)ので、若干説明いたします。

現在Delphi6はEnterprise版(360,000円)、Professional版(68,000円)、Personal版(4,800円)の3タイプが発売されています。もちろん高いほど高機能です。というより、「これができる!」というような機能が追加されているというべきですね(前回、機能制限、と書いていたのはこの意味。Personal版がベーシックと見るなら機能追加、Professional版をベーシックと見るなら機能制限)。特にデータベースやインターネット開発機能などが増えていきます。それに加えて、Personal版ではシェアや業務用アプリ製作はできません。開発者がお金を取るならちゃんと開発元のBorland社にお金払ってね、ということでしょう。MSのC#もその販売方法とってるみたいですね。

ただし、Personal版は「ただ」です。たとえば、前回紹介した『Delphiパーソナルプログラミング』などのDelphi6を対象とした最近の書籍のCD−ROMの中に入っています。このPersonal版はまったく機能制限も期間制限もありません。4,800円の箱入りに対して、箱とマニュアルがないだけで同じものです。本によっては、高いEnterprise版の60日間の期間制限の入ったCD−ROMもありますが、Personal版はただなのです。すごいですね〜。それから、Borland社のウェブサイトから直接ダウンロードすることもできます。まあ60メガあるので、ADSLとかをお使いの人以外は私がコサックス〜The Art of War〜をダウンロードしたときのような羽目になりますけど(T-T)

もっとも、上のラインナップを見ると、MSではお得意の、アカデミックパックとかアップグレード版とか乗り換え版がありません。Delphi5を買った人は、Delphi6を買おうと思ったら、初めて買う人と同じ値段で買わないといけないの?という感じなんですけど…まあMSより売り上げが低いのは当然として、これでは下手をすれば乗り換えられたり、新バージョンをしばらく買ってくれなかったりしそうな気がして、やっぱり売り上げが上がらないような気がするんですけど…?

さて、Kの物語の続き。HSPや古のBASIC(VisualBasicとは違う…はず)といった言語がプログラム!と思っていたK。まずはObjectPascal言語を用いるDelphiの発想に戸惑った。たしかにフォーム(ウィンドウ)にボタンを配置して、それを「押す」というイベントに「Hello!World.」(この言葉、古来からのお約束らしい)と表示させる、というおきまりのパターンは同じでも、なんだか違う。

HSPもBASICも、手続型の言語である。基本的に上から順番にコンピュータはプログラムに書かれた命令を処理していく。ときたまGOTO命令で順番を飛ばしたり戻ったりするものの、基本は上から。次々と細かいところまで決めていき、最後は1枚の進行要領たるプログラムになる。そのため、ボタンをつくれば、押した先の命令も書いておかないといけない。まったく中身のない空命令でもいいが、その場合は空命令の下の命令に(多分)意図していないけれども続く。たとえてみれば、道路を走る車のようなもの。コースをプログラム、車での移動を実行とすると、スタートからゴールまでは様々なコースがあるが、車はUターンせずにひたすら走り続ける。そんなイメージ。コースは目的に合わせて色々用意されることになるが、最短で到着するのがよいプログラム。くるくる回り続けたり(無限ループ)、コースが途切れていたり(エラー)するとよくないプログラム。

コースたるプログラムが短ければこれでも見通しが立つとしても、長ければ、たとえば北京からパリまでのコースだと大変なことになる。まずスタートからゴールまで道路を建設するだけでも大変なのに、本当につながっているか、途中で途切れるコースがでないか、つながっているように見えて実は進めない道ではないか、など、様々な障害が考えられる。この長大なコースを、どの道を通ってもなんとかゴールできるようにする…大変やね(^^;A

これに対して構造化プログラミングやオブジェクト指向プログラミングは、上でいうところの手続を極限まで小さくして、小さな手続の組み合わせで処理しようとする発想のようだ。まず上でいうところのスタートからゴールまでのコースを短く短くする。これをICやら抵抗やら液晶やらの部品と見立てる。あとはこれらの部品を組み立ててうまく何か装置を作る。そんなイメージ。部品がよくできたものであること(上でいうところのスタートからゴールまでどの道を通ってもたどりつくコース)はいうまでもないながら、部品の組み合わせが適切であることも重要。15インチ液晶画面を電池に直結させてもあまり意味はないのと同じ。この細かい部品作成が構造化、さらに構造化された既成の部品(オブジェクト)がすでに用意されているのがオブジェクト指向、みたい。Kの現在の知識ではそういうイメージがわいた。手続型プログラミングは電気回路設計型マイコン製作、オブジェクト指向はDOS/Vパソコンを自作するような感じ、ともいえるだろうか。

というようなことがわかるまでは、なんたらのなんたらのなんたら:=12というような設定がまったく理解できなかった。たとえば、ボタン.フォント.スタイル:=太字という感じだが、ボタン部品付属の、フォント制御部品の、スタイル設定を太字、ということで、ボタン部品がフォント制御部品や、表示部品の集まりであるため、何かを変えようとすると、なんたらのなんたらのなんたらを何に、といった感じになるのである。それまでは、たとえばボタンのスタイルを変えたければ、そういう変更命令があるのかと思っていた。そのため、上のような「なんたら〜:=太字」、と代入してやるだけで文字が太字になるので、うっかりすると、命令を出した覚えがないのに字が太字になっとるやん!という驚きが起きたものである。まあ、慣れるまでは「なんでいちいちなんたら〜なんて長ったらしい文になるんだ!」とか思っていたが、たとえば「ボタン」と打って、「.」を入力すると、自動的に次の部品候補、たとえば「フォント」がExcelのオートコンプリート機能のように表れる。フォントの次に「.」を入力すると、またフォント部品内の属性候補が表れて「スタイル」をカーソルで選択すれば全部打ち込む必要はない。これは便利だ!

また、「なんでこんなにいっぱい設定項目があるんぢゃあ!覚えられるかい!」ということも思ったが、それだけ色々な部分を変えられるということであろう。変えたくなければ、変えなくてもよいのであるから、変えたいと思ったらどこをどう変えれば変わるかを探せばよい。

それから今回のタイトルにもあるプロシージャ。手続という意味で、これに書かれた内容がひとつの部品となる。前述の、短い短いコースにあたるもので、具体的な命令や設定をここに書く。当初はサブルーチンみたいなものか?と思っていたら、このプロシージャしか書く必要はなく、メインルーチンがない。プロシージャからプロシージャを呼び出すこともあるが、どれがメインか?というわけでもないようだ。プロシージャを順番に実行しているのではなく、どのプロシージャもすでに動いていて、出番を待っていたり、現に処理していたり、というイメージの方があっているかもしれない。これも、うっかりすると、フォーム作成プロシージャ(一番最初に動くプロシージャ)のところに延々いろいろな処理を書いてしまいそうになったが、そうではなく、独立した処理は独立したプロシージャとして作り、呼び出し呼び出しで進めるのがオブジェクト指向プログラミングらしい。

道を造るように延々処理を書きつらねるより、ある処理に必要な量だけ書いたプロシージャを大量につくって、それを組み合わせた方があとあと便利になるのはよくわかった。つまり、各プロシージャを独立してつくると、実は他の場所でエラーがあったのだが、実はエラーのないこの場所で表にでた、といった危険なバグが表れにくく、どこでエラーが生じたかわかりやすい。また、独立しているため、似たような処理をするところに再利用しやすい、というメリットである。Kは以前から、同じような処理を一か所で処理でできるサブルーチンをつくって省力化をはかっていたが、オブジェクト指向はこうすることが基本だという。

こういった基本の発想が全然異なるため当初はとっつきの悪い言語だ!と思っていたKも、わかるにつれ、なるほど〜と思えるようになっていった。変数の宣言も、HSPで自由に宣言せずにいきなり使っていた癖がなかなかとれなく、なんでいちいち…と思っていたけれども、宣言することにより、よりプログラムの正確性が高まり、変数名称の誤りゆえのエラー(hogeとhokeは違うが、自由に使えると後者はhogeの誤りではなく、新たな変数とみなされる)の減少の効果もあるなあと思えるようになってきた。

とはいえ、まだまだお手本プログラムを写すばかりのK。ようやく基本がわかったとはいえ、自分で一から作るところまでは至っていない。まだまだこれからである。。。

index

〔TopPage〕

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