レッスン9

既定義クラス

Mopsはたくさんの既定義クラスを持っており、これによって、あなたは、 あなたのプログラムを構築するための強力な基礎を持つことができます。 これらのクラス、メソッド、そこから生成されるオブジェクトの機能に付いて知れば知る程、 プログラムのデザインがより快適になるでしょう。 Mopsは多くの点でエレクターセットに似ています。 それは、多くの既成部品を提供し、あなたがそれらにイマジネーションを注ぎ込むことによって、有用なプログラムへと変換するのです。

既定義クラスは、Mopsでは重要な機能を提供しています。それら既定義クラスは、共通に用いられるMacの機能 -- ウィンドウ、ダイアローグ、メニュー、グラフィック、ディスク上のファイル操作、その他多くの事柄 -- の全てについて、必要とされる大規模なコーディングの面倒から、あなたを解放してくれます。既定義クラスに置けるメソッドの性質は、このチュートリアルを終えた頃には、大抵はわかるようになるでしょう。

どういうことかと言えば、これらのクラスから生成されたオブジェクトに、比較的単純なメッセージを送りながら、 Assemblyプログラマーなら用いるであろうようなものとそれほど異ならない、非常に洗練された演算処理を自動的に遂行している、ということです。 あなたのプログラムをMacらしくすることについても、それほど気を使う必要はありません。というのは、既定義クラスを用いれば、それが初めから正しい方向に導いてくれるからです。大部分は、既定義クラスは、もっと伝統的なコンパイラ言語で提供されるような、Macintosh開発環境ないしフレームワークと同じように働きます。それらは、Mopsのオブジェクト指向の重要部分でもあります。

すぐにでも、既定義クラスのソースコードに眼を通したいと思うでしょう。コードの大部分はすでに"PowerMops"アプリケーションファイルの中にコンパイルされてしまっていますが、Mopsのソースコードの全てが、‘Mops source’と‘Mops ƒ’フォルダに含まれています。 ソースコードファイルは、Quick Editやその他お好みのテキストエディタで見たり印刷したりすることができます。 場合によっては、‘PPC source’、‘Toolbox’、あるいは‘Demo folder’フォルダー -- ‘Mops source’ フォルダー内にありますが -- の中のソースコードをいくつか、印刷しておくと便利と思われるかも知れません。 (‘PPC source’と‘Toolbox’のファイルのいくつかは、‘Module source’フォルダーにあるコードを参照しています。)

Mopsの既定義クラスは、二つの一般的なグループに分けることができます。一つのグループは、Mopsシステムクラスと呼ばれますが、必ずしもCarbonフレームワーク専用ではないクラスから成ります。システムクラスは、ファイル操作、基本データ構造(integers, variables, アレイ)、そしてその他のコンピュータの周辺的な仕事をコントロールします。これらのクラスは、もちろん、特別にMacと共に働くようにデザインされていますが、大部分は、背景に隠れて行われます。というのは、それらは、あなたとコンピューターの間の相互通信に直接の影響は与えないからです。

第二のグループは、ツールボックスクラスと呼ばれますが、プログラマー/ユーザーとMacオペレーティングシステムの図像的要素との間の連携をつくり出します。"図像的要素"は広いカテゴリーで、メニュー、ウィンドウ、文字入力、マウス操作、マウスあるいはキーボードを通じたプログラムコントロールのような事柄を含みます。ツールボックスクラスは、Mopsの目に見えやすい"ショウ・ビズ"クラスです。

どちらのカテゴリーに属するものでも、既定義クラスの大部分は、一種のマスタースーパークラスである Object (このクラスについては前のレッスンでも触れました)のサブクラスです。クラス Object それ自体は、もうひとつのスーパークラスである、クラス Metaのサブクラスですが、この特殊な関係については気にする必要はありません。クラス Object が、全てのクラスの終局的なスーパークラスであると考えて、ほぼ間違いありません。クラス Object はMopsの既定義クラスで、Mopsソースファイルの ‘qpClass’ で定義されています。それは非常に原始的な機能を持っており、インスタンス変数は持っていません。

データ構造クラス

もっともよく利用される既定義クラスのうち、いくつかのものはデータ構造と呼ばれる集まりに分類されます。下の図式はMopsのデータ構造クラスの組織を示していますが、‘pStruct’という名前のファイル(‘PPC source’フォルダーにあります)に規定されています。これと対になるものに、‘zStruct’(‘Mops ƒ’フォルダー)と‘Struct1’(‘Extras’フォルダー)があります。


これらのクラスは、たくさんの数値と、文字(テキストキャラクター)列格納、そしてMopsプログラム内部の操作について、その基礎を形成しています。 レッスン 6の長方形の例で、もうあなたは、基本データ構造クラスの一つである Intに属するインスタンス変数がどのようにして座標の Pointオブジェクトの成分として用いられ、さらには後者が長方形オブジェクトの成分として用いられるのかについて見ました。

上の図の縦の仕切り線の左側にあるクラスは、スカラークラスと呼ばれます。というのは、それらは、そのクラスの各インスタンスのために固定した量のメモリー空間を取っておくからです(ちょうど、その"尺度(スケール)"にしたがって固定された量で刻印される定規のように)。例えば、整数オブジェクト(Int)は、データのためにいつも2バイトを取っておきます(整数オブジェクトが生成されたときにそのバイトに何か意味のあるデータが置かれているかどうかは問いません)。

上の図の縦線の右側にあるクラスは指標付き(Indexed)クラスのグループです。大部分は、その名前から、それらがMopsプログラムにおけるアレイ(配列)をセットアップする規準を与えていることがわかります。指標付きアレイは、あなたのプログラムがメモリー内のデータのリストに到達し、必要な断片を取り出すことができるために、便宜を与えるものです。アレイオブジェクトはメモリー内では次のようになっていることを考えれば、いくつかのデータ小領域は参照番号を伴っていることに気付くでしょう。:


各番号は、対応するデータ小領域への、"三輪バインダーのインデックスタブのような"インデックス(指標)です。 オブジェクトのデータを参照するには、指標による方が、あなたのプログラムがそのとき必要なデータのメモリー内のアドレスを提供するよりも、すっと易しく効率的です。

様々な指標付きクラス相互の違いの中には、あとで述べるその他の違いと並んで、各データ小領域が格納できるべきバイト幅(1, 2, または4)の違いがあります。

クラス Ordered-colは、そこにつながる二つの継承線を持つことにも気付くでしょう。;これは、それが二つのスーパークラスを持つからです。つまり、多重継承が用いられています。クラス (col) は、その要素のサイズに関わらず全ての"コレクション"型クラスが必要とするメソッドをいくつか定めています。それから Arrayスーパークラスが、 Oredered-col クラスは4-バイト要素をもつということを決定しています。

クラス (col) はそれ自身のオブジェクト【インスタンス】を一つも持たないクラスの例です。それは、まさに、(col) クラスを継承する各クラスが自動的に多くの共通のメソッドの持つであろう場合に、一群のクラスを定義するための便利な方法です。 各クラス定義の中でそれらのメソッド定義を繰り返すよりも、その部分を一回だけで定義できる一つのスーパークラスとして切り離しています。この種のスーパークラスはジェネリッククラスと呼ばれます。クラス Longword はもうひとつのジェネリッククラスの例です。それは、Var と Handleの両クラスに共通のメソッドを定義するのに役立っていますが、それ自身のオブジェクトは持っていません。

その他の既定義クラス


もうひとつの完成されたクラス群は、QuickDrawに関わるものです。これは強力なグラフィックライブラリーです(Carbonフレームワークに含まれています【Core Graphicに書き換えられるべきことになりました。大変です。】)。 次の図はQuickDrawクラスと、それらが派生するスーパークラスを示しています。:


その他のグラフィック(図像)に関わるクラス(上の図に含まれていないもの)としては、ウィンドウ、メニューバー、そしてメニューの生成に役立つものや、コントロールと呼ばれ(‘Toolbox classes’にある"zCtl")る、ボタンやスクロールバーの上でのマウスクリックに対する反応を操作する諸クラスがあります。

この他にも、ファイルを開いたり閉じたりする簡便法を与えたり、プリンターに出力を送ったり、音を出したり、その他の機能を持つたくさんの既定義のクラスおよびオブジェクトがあります。 このマニュアルのクラスレファレンス(第III部)が、頻繁に利用されるMopsクラスの全てについての詳しい説明を含んでいます。 このチュートリアルを終えた後には、これらのレファレンスセクションを頻繁に参照するようになることでしょう。


チュートリアル目次へ
前へ < レッスン8 次へ > レッスン10



最終更新:2018年12月04日 19:42