SUPER表記は、最初の一つしか見つけません。二度呼ぶことになります。それは、悪い考えでしょう。すべてのオブジェクトに共通のメソッドを与えるのに、それぞれの@ISAにクラスを加えずにできる方法です。それで、そうできることがわかります。@ISAの終わりに、特別な要素があることを想定しています:UNIVERSALクラスです。UNIVERSALクラスにいれたいようなものは、なんでも、置くことが出来ました。UNIVERSALには、既にいくつかのメソッドがあります。バイナリに組み込まれており、そのため、それらをロードするのに、余計な時間はかかりません。can()、VERSION()です。isa()は、オブジェクトかクラスが階層構造を横断することなく、別のクラス"である"かどうかを教えます。そのクラスで、呼ぶことの出来るメソッドかどうかを帰って報告します。$VERSIONと呼ばれるパッケージのグローバル変数が十分に高いかどうかをチェックします。sayしかし、ふつう、VERSIONを自分自身には呼びません。(次のことを覚えておいてください。Perlによって自動的に使われるだろうということを、示しています。Lamentably.このことで、少なくともそのバージョン番号か、それより高いものが利用可能だと確かめます。正確なバージョン番号でのロードなので、同じではありません。どんなメカニズムもありません。game.オブジェクトはハッシュリファレンスとして実装される必要はありません。オブジェクトは、うまくblessされるリファレンスでありさえすれば、どんな種類のリファレンスでも可能です。コードのリファレンスでも、格好の的となるということです。classes.スカラーは、オブジェクトがたった一つの値しか持たないなら、うまくいきます。配列は、ほとんどのケースで、うまくいきます。継承を少々危うくします。派生クラスのために、新しい索引を作り上げなければならないからです。その基礎を成すインターフェースを、そうしたければ変えることが出来ます。同じインターフェースの仕様に合う、他の実装です。配列リファレンスを使いましょう。devised.配列アクセスはハッシュアクセスより、だいぶ速いと思うかもしれません。この2つは、実際は、類似のものです。配列は、ちょっと速い。10か、50パーセントも速くはありません。1のような数字に置き換えても、です。二つのアプローチの大きな違いは、メモリの使用で見つけられます。ハッシュでの表現は、配列での表現よりもメモリを多く消費します。値と同じように、キーにも、メモリを割り当てなければならないからです。そのことは、本当に、そんなに悪いことではありません。5.004からは、ハッシュにキーを与えるために、メモリは一度割り当てられるだけです。いくつのハッシュがキーを持つのかは問題ではありません。あいまいに消滅していくだろうと、期待されています。プログラマに、単純なクラスのために配列表現を選ばせるのに十分です。拡張性にちょっとした問題があります。ハッシュがちょうどうまく働くことがわかるでしょうから。新しい匿名の(クロージャ)関数を作ることが出来ます。いうのは、データをレキシカルにしか見えない無名ハッシュに置くからです。クロージャを作り、blessし、オブジェクトとして返すからです。影響を与えたいフィールドに、それを渡します。(はい、二重の関数呼び出しは、遅いです。オブジェクトをまったく使わなければいいんです。different:ですが、実装は、根本的に、たぶん、圧倒的なやりかたで、違っています。$self.(訳註:圧倒的に違うのは、)オブジェクトがコードリファレンスの背後に隠されているからです。このことはちょっとミステリアスです。定着しているからです(訳註:?)。データのリファレンスではありません。オブジェクトデータにアクセスするコードを持っています。全てのメソッド呼出と一緒のように。レキシカルな変数に深くバインドされています)。コードリファレンスを呼ぶこと以上に、コードリファレンスですることは多くはありません。このときするのは、&{$_[0]}とすることだけです。これは、単なる普通の関数呼び出しであり、メソッド呼び出しではありません。最初の引数は、文字列"NAME"であり、残りの引数は、メソッドに渡されているもの全てです。ハッシュリファレンスは突然に見えるようになります。クロージャは、その最初の引数(このケースでは、'NAME'です。その文字を、ユニークなのバージョンの$selfのプライベートで隠されたハッシュへの添字に使います。この隠されたデータに近付けることを許されていません。そのかけらを見つけることができます。他の全ての人には、運がありません。camps.もし、このことがスキームなみなさんを興奮させなければ、何が興奮させるのかわかりません。このキャンプの熱狂的なファンのくだらない課題としては、残っていますが。クロージャがそれ自身のパッケージを呼ばない限り、動作を拒否させることも出来ます。ある種の潔癖な関心事を満足させるでしょう。開始するのかを疑問に思っていたなら、ここに、傲慢があります。(もっとまじめにいうなら、傲慢は、ちょっとしたすばらしくよく設計されたコードを書くことから生じる腕前の、プライドです)。autoloading.オートロードは、未定義のメソッドの呼び出しをインターセプトする方法です。作ることを選ぶかもしれません。オートローディング(訳註:自動装填?)と呼ばれる理由です。methods.ですが、これはたった一つの可能なアプローチです。他のアプローチは、オートロードされたメソッドそれ自身に、直接、要求されたサービスを提供させることです。この方法を使ったとき、オートロードされたメソッドを"代理"メソッドのように、考えるかもしれません。同じパッケージにあるAUTOLOADと呼ばれる関数を探します。AUTOLOADがあれば、元の関数が持っていたのと同じ引数で、それが呼ばれます。パッケージのグローバル変数$AUTOLOADに蓄えられます。呼ばれると、関数は、好きなように何かをすることが出来ます。コールスタックからそれ自身を消すことを、含みます(訳註:謎)。関数に付いて話続けているのであって、メソッドについてではありません。ただの関数なので、オートローディングをメソッドとしても使うことが出来ます。Perlは、@ISAを通したリカーシブな捜索に疲れ果てるまで、AUTOLOADメソッドを探し始めません。UNIVERSAL::AUTOLOADメソッドを定義する、プログラマがいることも知られています。二重化されたコードについて、おそらく、少し疑いを持ち始めるでしょう。それぞれのメソッドは、仮想的にまったく同じに見えるハッシュのフィールドにアクセスしていました。このことは、偉大なプログラミングの美徳である、短気をくすぐります。このときに、不精を勝たせて、なにもしません。代理メソッドが、これを癒せます。オートロードのメカニズムを使って、(実際に、偽の)メソッドをオン・ザ・フライに生み出します。_permitted("under-permitted"と発音します)フィールドでチェックします。ファイルスコープのレキシカルな(Cファイルstaticのような)ハッシュリファレンスです。"内部的に使うためだけ"を意味するマークです。現在の、%fieldハッシュにundefのあるところに、それらを埋めることが出来ます。オブジェクトを通してクラスデータにアクセスすることが重要であることを思いだしてください。directly.けれども、本当の魔法は、代理メソッドにあります。オブジェクトに対する未定義のメソッドの全ての呼び出しを取り扱います。AUTOLOADと呼ばれなければなりません。これは全て大文字になります。ユーザが直接呼ぶのではなく、Perl自身によって、暗に呼ばれるからです。変更することだけです。新しい関数を書く必要はありません。どのようにオブジェクトのクラスデータをリファレンスに蓄えるのかを実証したかったのです。オブジェクトメソッドから、直接に、クラスデータにアクセスする必要はありません。十分に気をつける限りは。fine.これをしたら、Employeeパッケージに、AUTOLOAD関数を持つ必要はありません。いうのは、継承を通して、Personのバージョンを把握し、全て、うまく動くからです。好ましいものが少し残されています。いんちきの呼び出しを取り扱う必要があることを意味します。これに対応しています。これらのメタクラスは他のクラスを作るクラスです。これらと、他の関連するメタクラスは、CPANのモジュールディレクトリで見つけられます。tedium.その古いものの一つは、Class::Structです。perl5が実際のものに固まるだいぶ前に、スケッチされました。特定の型のフィールドがあるようなオブジェクトを持つクラスを"宣言"する方法を提供します。それが呼ばれる関数は、驚くようなものではなく、struct()です。データアクセスメソッドを定義しなければなりません。このプロセスに、すぐに飽きてしまうでしょう。Class::Struct::struct関数はこの退屈なことを緩和します。ユーザー定義の型(クラス)になります。ユーザー型は、そのクラスのnew()メソッドを呼ぶことによって、初期化されるでしょう。sense.structの生成を使った実際の例があります。C構造体のような振る舞いをするオブジェクトを返すように、オーバライドしたいとしましょう。構造体のような振る舞いをすることです。call:Class::Structモジュールを使ってこれをする方法です。us.この呼び出しは、上記の名前と型のオブジェクトメソッドを作ります。メソッドさえも作ります。無名ハッシュを使います。ハッシュは、継承をしたいときに、よく働きます。今回は、よりよいスピードと、サイズに余裕をもたせることにしました。関数の置き換えなどの他のコンセプトの正しい具体例を忍び込ませています。これらの全ては、大半が、伝統的なモジュールの観点から意味のあるものです。お分かりのように、オブジェクトモジュールとして、それらを使うことも出来ます。Perlの5.004リリースのコアな関数の構造体ライクなオーバーライドを見ることが出来ます。全て小文字の最終的な構成要素を持っています。これらが、コンパイルに影響し、組み込み関数を変更するからです。これらは、Cのプログラマがよく期待する型名を持っています。単純な変数のように得ることが出来るのになれているでしょう。Aliasモジュールは、これを提供します。プライベートなメソッドのようなところです。eh?AliasモジュールをつかってPersonを作る例です。自動的にハッシュの値のフィールドを更新します。フィールドと同じ名前のパッケージのグローバル変数をいじれるようにするからです。これらを、先に宣言しなければなりません。ローカライズされています。一時的な値で、グローバル変数をで考えていることを意味します。混ぜてい使うと良いでしょう。表すのに使われているように思います。これらの、気まぐれな言葉に悩むことはありません。表すのか知りたいでしょう。インスタンスメソッドと呼ぶことは、一般的でしょう。クラスデータや、クラス属性や、静的データメンバとよく呼ばれるでしょう。同じ考えで記述します。サブクラスは、他の関連するものを記述します。プログラマには、クラスメソッドと、オブジェクトメソッドしかありません。メソッドが、クラス/オブジェクトメソッドとして使われるかどうかは、使いかたによるだけです。クラスメソッド(文字列の引数を期待するもの)を呼ぶことも出来ますし、その逆も出来ます。be.C++の観点からは、Perlの全てのメソッドは、仮想的です。引数リストで関数のプロトタイプを、チェックされない理由です。(振る舞いを宣言し、メカニズムを定義しない)考えの両方を表すものとして見られます。C++は、後者をサポートしますが、前者は、サポートしません。やさしい、オブジェクト指向プログラミングのイントロダクションです。data.クラスデータに関する詳細を提供します。Tie::SecureHash以下のモジュールは関心をひくでしょう。Association。