| ▲ | 「Record 1 of Database "住所録"」なんて人間の言葉をソフトが理解できる秘密は「オブジェクト指向」にある。マックで扱うさまざまな“モノ(オブジェクト)”の特徴がうまく分類/整理されて、適切な用語でモデル化されている。 |
|
|
| ▲ | 後はクラスや命令の種類が記述された「用語説明」に従ってスクリプトを書けば、 アプリケーションを自由自在に自動制御できる。 |
|
《
オブジェクト指向なら電脳界も人間界も同じ
》
|
|
|
?
|
先生、ご無沙汰しました。もう2月になりました。 |
|
先生
|
旧正月も過ぎたか。中華街の祭事も終わったしね。 |
|
?
|
そんなことじゃありませんよ。これから毎月ご教授願う約束でしょ。 |
|
先生
|
そうかそうか、そんな約束をしたねぇ。 |
|
?
|
しっかりしてくださいよ、先生。今月はスクリプティングで使う「クラス」といった用語について教えてくださるはずですよ。 |
|
先生
|
確か前回はファイル名を変更する図1のようなスクリプトを作ったんだね。そこで、なぜFinderが「name of aFile」なんて文を理解できるかっていうのが君の疑問だったんだな。 |
|
?
|
Finderにはfolderっていうクラスがあって、nameというのはその属性で…とかおっしゃってましたね。ファイルメーカーProの例で、 Cell "電話番号" of Record 1 of Database "住所録" とかいうのも教えていただきましたけど、これもよく分からないんです。直訳すれば「"住所録"というデータベースの1番目のレコードの "電話番号"というセル」ですよね。セル(cell)はきっとフィールドのことだって直感で分かるんですが、これはまさに人間の言葉ですよね。なぜファイルメーカーProが人間の言葉を理解できるんでしょうか? |
|
先生
|
AppleScriptは、オブジェクト指向なんだと言ったはずだが。 |
|
?
|
「オブジェクト」とか「オブジェクト指向」って最近よく耳にしますけど、一体何なんですか。ウチのシステム部に聞いてもほとんど技術書の受け売りみたいで「オブジェクト指向は対象を指定することで何かの処理を実行させるという考え方」なんて言われても、浮き世離れしていて分かりません。 |
|
先生
|
プログラムを書く場合、例えばBASICやC言語では「何をどうこうして、それでどうする」というように、いちいち手順や道具をすべてこと細かく明示する必要があったんだ。 |
|
?
|
そんな話を聞いたことがあります。 |
|
先生
|
ところが、オブジェクト指向のプログラミングというのは、そんなことは面倒だ、というところから始まっている。だから、これまでのように処理の流れをダラダラと記述したりはしないんだな。 |
|
?
|
処理を記述しないで何を記述するんです? |
|
先生
|
いや、ダラダラ散文的には書かないということだ。ただし、そのためにまずオブジェクトを分類して定義しておく必要がある。 |
|
図1 前回作ったスクリプト |
|
|
ダイアログボックスを出してフォルダを選ぶと、中にあるすべてのファイルについて「YY
MM DD ×××」という形式のファイル名を「××× YY MM DD」の形に変更する
|
|
|
《
あたりまえだが…まずは性格や特徴の分類から
》
|
|
|
?
|
先生、その「オブジェクト」がよく分からないんですけど…。 |
|
先生
|
まぁ、話は最後まで聞きなさい。オブジェクトだとかオブジェクト指向などともったいぶって言うから分かりにくいんで、そんなことは人類の歴史始まって以来、皆が世界中でやっているんだよ。 |
|
?
|
えっ、ではもしかすると僕も既にオブジェクト指向をしているってことですか? |
|
先生
|
もちろんさ。例えば、君は人からもらった名刺をどうしてる? |
|
?
|
毎日、ファイルメーカーの名刺データベースに入力して,会った日付とか要件やコメントなんかを付けていますけど。 |
|
先生
|
そう、それがもうオブジェクト指向なんだ。つまり、名刺を相手の業種や会社名や部署とかで分類して管理しているわけでしょう。しかも相手の家族構成や誕生日や、背が高いとか太ってるとかメガネをかけているだとか、あるいは趣味や好物なんかも記録しているかも知れないね。 |
|
?
|
えぇ、その通りです。 |
|
先生
|
それが君にとってはオブジェクトを定義、分類することになるんだよ。そして例えば「××商事」と言われれば「△△製作所の子会社で、光磁気ディスクを扱っていて、取引の担当部署は首都圏営業部で、そこの○○部長はゴルフが大好きで、近頃不倫のうわさが絶えない…」なんていう具合に関連した事柄がいろいろと出てくるわけだ。 |
|
?
|
あぁなるほど、相手の性格や特徴を把握しておくことなんですね、オブジェクト指向っていうのは。そう言えば「オブジェクト(object)」は「対象物」という意味ですよね。 |
|
先生
|
しかも、その相手というのは別に人間に限ったことじゃないから、森羅万象すべてがオブジェクトになり得るんだ。 |
|
《
オブジェクトを分類したものが“クラス”だっ!
》
|
|
|
?
|
そうか、生物学でも人間は哺乳類の霊長類とか何とか言って分類して、種類ごとにその特徴を定義しますものね。 |
|
先生
|
まぁ、そんなところだ。ただし、哺乳類の霊長類というのはいただけないよ。人間は生物学上は哺乳網霊長目ヒト科の動物だからね。まぁ話を戻すと、こうしたオブジェクトを一定の基準で分類したものを クラス(class)
と呼んでいる。 オブジェクトの種別だな。呼び名はどうでもいいんだけど、一応知っておかないとね。 |
|
?
|
はい、何となく見えてきました。映画やTVドラマに例えれば、まず出てきそうな登場人物をあらかじめジャンル分けしておいて、その特徴を決めておくわけですね。 |
|
先生
|
登場人物だけじゃないよ。犬や猫から大道具・小道具まで、画面に映るすべてのモノが対象になるんだから。ただコンピューターなんだから、クラスごとの性格はかなり厳格に決めることになる。 |
|
?
|
すると今まで出てきた file folder Cell Record Database などは、すべてクラスとして定義されていたわけですね。 |
|
先生
|
そう。実はアプリケーションもクラスの一種になっているんだ。「tell application "Finder"」っていうのも使ったでしょ。 application "Finder" というのは applicationクラスの"Finder"という名前のオブジェクト という意味になるんだよ。 |
|
《
「侍」がクラスで「大岡越前」がオブジェクト
》
|
|
|
?
|
ところで、さっきから ××クラスのオブジェクト と言っていますが、クラスとオブジェクトはどう違うのでしょうか。 |
|
先生
|
クラスというのは規格というか分類の枠組みを決めるだけのものなんだ。実際に存在するデータがオブジェクトだ。 「侍」がクラスなら「大岡越前」や「遠山の金さん」が個々のオブジェクトになるわけだ。同じように「Database」はファイルメーカーProで定義されているクラスだが「Database"住所録"」となると「"住所録"という名前のデータベース」という実在するオブジェクトを指すことになる。 |
|
《
クラスの種類を書いた「辞書」がある
》
|
|
|
?
|
ところで先生、このほかにはどんなクラスがあるのでしょう? |
|
先生
|
例えばFinderやファイルメーカーProでは、下のようなクラスが決まっている。 左側の単語リストで、斜体になっているのがクラスだ。 |
|
?
|
この「クラス一覧」みたいなものは何ですか。こんなものをどこで手に入れたんですか。 |
![]() |
|
|
先生
|
それはね「スクリプト編集プログラム」の「ファイル」メニューから「用語説明を開く」というのを実行すればいいんだ。そしてダイアログ・ボックスで、用語を調べたいアプリケーションを選べばいい。システムフォルダにあるFinderを選んでごらん。 |
|
?
|
ウインドウに「Finder 用語説明」って書いてありますが。 |
|
先生
|
ここにはFinderが持っているAppleScriptの機能が記載されている。Finderに命令するスクリプトを書く場合は、ここに書いてある用語を使うわけだ。辞書みたいなもんだな。 |
![]() |
|
|
?
|
このダイアログで、例えばファイルメーカーProを選べばその用語説明が出てくるのでしょうか。 |
|
先生
|
そうだよ。Microsoft Excel 4.0や5.0なんかも同様だ。ただし、AppleScriptの機能を持っていないアプリケーションの用語説明は開けない。ファイルメーカーProでも、最新バージョン2.1は開けるが、1.0だとできないから注意してよ。 |
![]() |
|
|
《
フォルダとファイルの包含関係をモデル化
》
|
|
|
?
|
先生、最初の質問に戻りますが、 Cell "電話番号" of Record 1 of Database "住所録" で、なぜ「○○ of △△」と指定できるのでしょう。「データベース"住所録"の1番目のレコード」なんて言い方ができる理由は? |
|
先生
|
いいところに気がついた。つまりオブジェクトには包含関係があるんだ。Database "住所録"はrecordクラスのオブジェクトを含み、recordはcellを包含する。このようなオブジェクトの包含関係が実際のデータ構造に似ているから「○○ of △△」なんて言い方が通じるんだよ。実際にはDatabaseがLayoutを含み、LayoutがRecordを含むんだが、まぁいい。考え方は分かったろう。 |
|
?
|
はい。するとFinderの場合だと、folderがfileを含むわけですね。 |
|
先生
|
考えてみれば、自然な姿だよね。あるオブジェクトが含むほかのオブジェクトを、そのオブジェクトの要素(element)
と言う。 あるクラスのオブジェクトが、どんなオブジェクトを包含できるかは、用語説明に書いてある。 例えばワープロ・ソフトの「EGWORD6.0」の用語説明を見てごらん。右の「Elements:」の下にリストされているのが要素だ。document(書類)クラスでは、text(テキスト)、paragraph(段落)、line(行)、word(単語)、character(文字)などが要素になっている。またtextクラスにはparagraphやlineなどが要素として含まれ、paragraphにはlineやwordが含まれるといった具合になっている。 |
![]() |
|
|
?
|
まるで、入れ子細工みたいなものですね。 |
|
先生
|
逆に、下位のオブジェクトを含んでいるオブジェクトを
コンテナ(container) とも呼んでいる。 例えばdocumentはtextを格納するコンテナだ。 今度はコンテナですか。例の貨物を運ぶ時のコンテナと同じかな。 そうそう。ちょうど、要素を逆から見たようなものだね。 |
AppleScript救急隊事務局(ASQs) info-asqs@fsight.co.jp