レッスン4

MopsとOOP

Mopsのスタックに関する基本的な知識に身をかためて、いまやこの言語の真の力の源へと立ち入るべきときです。それは、OOP(オブジェクト指向プログラミング)という性質です。

OOPは、最近では誰でも知っている話題ですから、それほど長い導入部分は必要ないでしょう。ですから、ここでもごく短く済ませます。

現時点であなたに関わりのある主要な用語は次のようなものです。:

クラス
メソッド
オブジェクト
継承
メッセージ
セレクター
オブジェクト指向システムの"全体的構図"と諸部分間の関係がどのようなものであるかを見やすくするため、 アナロジー(類比)を用いることにしましょう。

メソッドと継承

所得税の納税申告【確定申告】書類の調製ために会計士【税理士】を雇いたいとしましょう。

専門技術職(プロフェッショナル)のクラスとして、全ての会計士は、会計処理と計算操作についての一定の基礎的な知識を持っています。顧客の財務記録について作業する際には、一般に承認された会計原則に則るのが、彼らの基本的な仕事です。 彼らの全てが行う仕事としては、数額を計算し、収支項目を相互に比較計算し、検算し、会計台帳の負の数値を括弧でくくる、などが含まれます。【簿記とか会計の話は、よくわかりません。すみません。】

しかし、全会計士からなるこの宇宙の中にも、専門家というものは存在します。 ある者は会社企業の税務に特化し(Corporate accountants)、またある者は医師のような独立事業者のための会計に特化しています(Accountants for professionals)。 その専門の如何に依らず、各々の会計士は、他の専門領域にある会計士と、同じ基礎的な知識を共有しています。 つまり、会計士一般のクラスに関係することのおかげで、 全ての会計士のもつ多くの特性を継承するのです。 その作業手順(メソッド)の大部分は、計算の再確認や括弧の利用などのような、 全く同じようなものになるでしょう。

しかし、彼らのメソッドのうちのいくつかは相異なるかもしれません。 例えば、ある種の会計士は、年商が500万ドルを越える会社企業のための財務記録を扱うことに特化しています。 他の会計士の小グループは、あらゆる種類の会計の仕事をこなしますが、 そのメソッドは、表の項目を手書きして計算するのではなく、 コンピュータ上で税務計算をすることを含んでいます(computerized accountants)。 後者の小グループでも、それぞれの場合に応じて、主なメソッドは同じでも、 ある種のメソッドには小さな違いがあります。 ですから、専門のある会計士の各々の小グループ、ないしサブクラスは、 それ自体で一つのクラスですが、各々は、全会計士からなるもっと大きなクラスに結びつくものを、なお数多く保有しています。

しかし、会計士のサブクラスの、さらにもっと小さな部分も、それ自身の特殊なメソッドを持ち得ます。 例えば、ポータブルコンピュータを持ち込んで、雇主の職場でのみ仕事を行う、コンピュータ化された会計士からなる小さなサブクラス(実際には、サブクラスのサブクラス)もあり得るでしょう。 しかし、このサブ–サブクラスであっても、そのメソッドについては、クラス階層の全レベルに渡って遡ることができます。 それは下のように見えるでしょう。:

オブジェクトとメッセージ

ここまでは、実際に仕事をする会計士たちではなくて、そのクラスについてのみお話ししてきました。 あなたが自分の税務のために選任した会計士、名前をジョンとしますと、 ジョンはあなたの特殊な税務上の必要事項に最適なサブクラスの一つに該当することになるでしょう。

例えば、ジョンは、家計のための租税計画と納税申告書類調製の仕事を行う会計士のクラスの一員であるとしましょう。 言い方を変えると、ジョンは家計税務会計士のクラスの"インスタンス(実例)"、ないし、現実の実体的な例(オブジェクト)であることになります。 あなたがジョンを税務のために呼び出したときには、 彼は、彼の属する特殊技能サブクラスの持つ全ての会計及び納税書類調製メソッドを遂行する能力を自ずから携えてくるとともに、 会計士のクラス階層に属することによって彼が継承した全てのメソッドもまた有しています。 彼には、あなたの税務のために、その全てのメソッドを用いる必要はないでしょう。 しかし、それでも、それらのメソッドは彼のバックグラウンドに存在しているのです。

ジョンに納税申告書類の調製をしてもらうためには、あなたは、彼に適切な教示を与えなければなりません。 彼が必要とする全ての数額【収入、費用および控除全体についての】を提供して、最後に、初めて下さいと言う事などが含まれます。 つまり、彼に、私の数額に基づいて納税申告書類を調製してくださいというメッセージ を与えるという事です。

ジョンは、このメッセージを受けとるとき、あなたが提供した数額が、税額を計算するのに用いるメソッドに渡されるべき引数であることを知っています。 彼は、また、その基盤となっているメソッドにしたがって、納税申告書類を調製してください、とは、彼が特定の仕事、例えば、数額を整理したり、各税項目毎の必要経費の写しをとったり、などの仕事を行うべきである事を意味するのだ、ということも知っています。 このメッセージの中の、納税申告書類を調製してくださいという部分は、セレクターと呼ばれます。 それがジョンに(彼が知っているたくさんのメソッドのうち)どのメソッドを初めに実行するのかを告げているからです。 彼がまさに最初に実行するメソッドの中にも、個別のステップとしては、数値を整理することのような、全会計士からなる上位クラス(スーパークラス:superclass)から継承されたものがいくつか含まれている事もあり得ます。 しかし、これらのステップの一つあるいは複数のものは、彼の属する家計税務税理士からなるサブクラスに特有のものとなるでしょう。

話は変わって、職場で、あなたが、会社の納税申告のために会計士を雇う責任を負っているとしましょう。 ジョンは家計税務計画の専門家ですから、彼は選びたくないでしょう。 その代わりに、マーガレットを雇ったとしましょう。というのは、彼女が会社企業税務会計士のクラス出身だからです。

マーガレットに対して、あなたは、前とほとんど同じメッセージを与えます。: この会社の数額に基づいて納税申告書類を調製してください。 マーガレットはジョンに対するものと同じメッセージを受け取りますが、 マーガレットのクラスのメソッドは、ジョンのクラスのものとは異なっているため、 納税申告書の調製において、異なる処理が実施されます。 マーガレットのとるステップの中のいくつかは、ジョンと共通のものがあるかもしれません。 というのは、彼らは、全会計士と同じステップを共有しているからです。 しかし残りのステップは、マーガレットの属するサブクラスに特有のものとなるでしょう。 そして、あなたがマーガレットに与えた会社の数額は、その多くが個人の数額と同じ名前(収入、医療費、税額控除、利息控除) であったとしても、 彼らの出す結果に混同が起る事はないでしょう。 あなたの家計の数額だけがジョンによる納税申告書に記載され、会社の数額だけがマーガレットによる納税申告書に記載されます。 ジョンとマーガレットが同じ会計メソッドを継承しているにもかかわらず、彼らは互いに全く独立して仕事をするのです。

あなたが、あなたのお母さんの納税申告書調整のためにジョンのクラスに属するその同僚を雇った場合にも、同じ事がいえるでしょう。 彼の名前がパーシバルであったとして、あなたは、パーシバルに同じメッセージとあなたのお母さんの数額を与えることができます。 以上、これらの作業であなたが得る三つの結果の間に干渉が起る事はないでしょう。

この会計士の例が、本当にオブジェクト指向システムの話であったとすれば、 全会計士からなるクラスは、もうひとつの網羅的–包括的な上位クラスにそれ自身を基礎付けていることでしょう。 つまり、全てのクラスがそこから派生する原始的クラスが必要であり、その原始的メソッドはすべて、サブクラスによって修正されない限り、 系列を下って適用されるのです。 ですから、ジョンがそれを意識していないとしても、彼は呼吸をし、彼の心臓は規則的に鼓動し、彼は定期的に栄養をとる、などします。 もしも、あなたがジョンに15秒間、息を止めてくださいというメッセージを送ったとすると、 呼吸のためのメソッドはジョンが属する会計士のクラスのいずれかの中にはみつけられず、 むしろ、それは生きている存在の原始的クラスの中に見つかるでしょう。 それでも、ジョンがクラスの階層をこの原始的クラスにまで遡って、彼の呼吸を制御するメソッドに変化を加えるということは可能なのです。

ここまで述べてきた事について、もう一度、見てみましょう。

クラスとサブクラスは、あるオブジェクトがどのように振る舞うのかを述べるメソッドによって規定されます。 サブクラスは、そのスーパークラスの全てのメソッドを継承し、スーパークラスのメソッドのリストに、メソッドを付け加え(あるいは、必要ならメソッドを修正)します。 ひとつのオブジェクトは、あるクラスないしサブクラスの一個のインスタンス(実例)です。 オブジェクトは、そのクラスまたはスーパークラスにおけるメソッドで特定される全ての操作を遂行する能力を持ちます。

オブジェクトが何らかの仕事をするためには、それに対してメッセージが送られる必要があります。 このメッセージはセレクターを含んでいます。これを、オブジェクトは、その可能なメソッドの一つに結びつけます。 メッセージの中でオブジェクトに対して何らかのデータ(引数)が渡されたとき、そのデータはそのオブジェクトに専属するという性質を持ちます (そして、一般にはオブジェクトの外からアクセスする事はできません)。

次の図式でみると、私達が、ジョン、私の数額で納税申告書類を調製しなさいというメッセージを送るとき、 ジョンは、納税申告書類を調達しなさいというセレクタを、家計会計士のクラスのメソッドと比較します。:
このメソッドが、今度は、オブジェクト自身のクラスに由来するメソッド(例えば、個人的な相談(Personal Consultation))と、 このサブクラスがそのスーパークラスから継承したメソッド(例えば、領収書の検証(Verify Receipts)、数値計算の再確認(Doublecheck Figures)、そして、1040号書式への書込み( Fill Out Form 1040))によって定義されています。
同じセレクターをパーシバルに、ただし、あなたのお母さんの数額とともに送る場合には、 パーシバルはジョンと同じ手続に従いますが、ジョンが自分用に保有しているあなたの数額を見る事はありません。

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


最終更新:2018年12月04日 00:40