argra****@users*****
argra****@users*****
2008年 12月 6日 (土) 03:44:53 JST
Index: docs/perl/5.10.0/perltoot.pod diff -u docs/perl/5.10.0/perltoot.pod:1.5 docs/perl/5.10.0/perltoot.pod:1.6 --- docs/perl/5.10.0/perltoot.pod:1.5 Thu Oct 16 04:22:24 2008 +++ docs/perl/5.10.0/perltoot.pod Sat Dec 6 03:44:52 2008 @@ -21,12 +21,12 @@ =end original -オブジェクト指向プログラミングは、昨今の、ビッグセラーです。 +オブジェクト指向プログラミングは、昨今のビッグセラーです。 マネージャーには、薄切りパン(訳註:良い発明のこと)よりもむしろ オブジェクトを持ちたがる人もいます。 どうしてでしょうか? オブジェクトの、何がそんなに特別なんでしょうか? -そもそも、オブジェクトとは一体 I<なんでしょう> か? +そもそも、オブジェクトとは一体 I<何でしょう>? =begin original @@ -46,8 +46,7 @@ 遠くへやってしまう方法以外のなにものでもありません。 (専門家は、このことを抽象化と呼びます。) 本当に難しい問題を片付けようと、何週間もぼーっと過ごしている、 -かしこい人たちは、普通の人でも使える、これらの素敵なオブジェクトを -作ります。 +賢い人たちは、普通の人でも使える、これらの素敵なオブジェクトを作ります。 (専門家は、このことをソフトウェアの再利用と呼びます。) オブジェクトを使う人(たぶん、プログラマ)は、自分が欲しい小さな包みを いじることができますが、その包みを開けて、中身にちょっかいを @@ -73,7 +72,7 @@ クラスをユーザ定義の型と考えることもできます。 Perl のパッケージの仕組みは、より伝統的なモジュールと同じように、 クラスモジュールにも使われます。 -オブジェクトは、クラスの中に、 "住んで(生きて)"います; つまり、 +オブジェクトは、クラスの中に、「住んで」います; つまり、 オブジェクトがいくつかのパッケージに属していることを意味します。 =begin original @@ -94,13 +93,13 @@ それらの包みがオブジェクトです。 オブジェクトは、自分が属しているクラスを知っていて、どのように振る舞うかも 知っています。 -クラスを使う人は、クラスに、何かをするように、たとえば、 -"オブジェクトをちょうだい"のように、頼むか、 +クラスを使う人は、クラスに、何かをするように、例えば +「オブジェクトをちょうだい」のように、頼むか、 オブジェクトの 1 つに何かをするように頼むことができます。 クラスに何かをするように頼むことは、I<クラスメソッド> を呼ぶことです。 オブジェクトに何かをするように頼むことは、I<オブジェクトメソッド> を 呼ぶことです。 -クラス(ふつう)または、オブジェクト(たまに)に、オブジェクトを返すように +クラス(普通)または、オブジェクト(たまに)に、オブジェクトを返すように 頼むことは、単にメソッドの一種である I<コンストラクタ> を呼ぶことです。 =begin original @@ -117,12 +116,12 @@ それはそれとして、オブジェクトは Perl の他のデータ型とどのように 違うのでしょうか? -I<実際には>、オブジェクトは...オブジェクトの基礎の型は何なのでしょうか? +I<実際には>、オブジェクトは…オブジェクトの基礎の型は何なのでしょうか? 最初の質問に答えるのは、簡単です。 オブジェクトは、一つの、たった一つのやり方において、Perl の他のデータ型とは 違っています。 オブジェクトをデリファレンスするのに、単純な配列やハッシュのように、 -単なる文字列や数字の添字ではなく、名前の付けられたサブルーチンの呼出しを +単なる文字列や数字の添字ではなく、名前の付けられたサブルーチンの呼び出しを 使います。 一言でいえば、I<メソッド> でデリファレンスします。 @@ -142,13 +141,13 @@ 二番目の答えは、次のようになります。 オブジェクトはリファレンスですが、ただのリファレンスではありません。 注意してください。 -特別なクラス(パッケージ)に I<祝福(bless)され> ているリファレントを +特別なクラス(パッケージ)に I<祝福(bless)されている> リファレンスを 持っているものです。 リファレンスの種類は? たぶん、その質問の答えは、あまり具体的にはなりません。 Perlでは、基礎となる固有のデータ型として、リファレンスならどんな種類の ものでも、クラス設計者の好きなように使うことが出来るからです。 -リファレンスなら、スカラーでも、配列でも、ハッシュでもかまいません。 +リファレンスなら、スカラでも、配列でも、ハッシュでもかまいません。 コードのリファレンスすらありえます。 ですが、持ち前の柔軟性により、普通、オブジェクトはハッシュリファレンスです。 @@ -520,7 +519,7 @@ =head2 Planning for the Future: Better Constructors -(将来を考える:よりよいコンストラクタ) +(将来を考える: よりよいコンストラクタ) =begin original @@ -539,8 +538,8 @@ (お望みなら、今のところ継承を安全に無視し、後で、継承に悩むこともできます)。 継承が、全てスムーズにうまくいくことを保証するには、bless() に2つの引数を 渡さなければいけません。 -2番目の引数はクラスですが、リファレントを祝福(bless)するクラスです。 -デフォルトでは、(訳註:2番目の引数を省略すると)2番目の引数として自分自身の +2 番目の引数はクラスですが、リファレントを祝福(bless)するクラスです。 +デフォルトでは、(訳註:2 番目の引数を省略すると)2 番目の引数として自分自身の クラスを想定します。 そのかわりに、(訳註:コンストラクタの第一引数に)渡されるクラスを使います。 こうすることで、コンストラクタは継承できるようになります。 @@ -585,7 +584,7 @@ 全ての話には、始まりがあり、終わりがあります。 オブジェクトの話の始まりには、コンストラクタがあり、オブジェクトが 存在しはじめる時には、明示的にコンストラクタが呼ばれます。 -オブジェクトの話の終わりは、I<デストラクタですが>、このメソッドは、 +オブジェクトの話の終わりは、I<デストラクタ> ですが、このメソッドは、 オブジェクトがその命を無くすときに暗黙のうちに呼ばれます。 オブジェクトごとの後かたづけのコードがデストラクタにあり、デストラクタは、 (Perl では)DESTROY と呼ばれなければいけません。 @@ -984,7 +983,7 @@ デストラクタ内で、割り当て解除するためのメモリがないことに、どのようにして 気づくのでしょう? -そのことは、Perl自身が面倒をみます。 +そのことは、Perl 自身が面倒をみます。 =begin original @@ -1021,8 +1020,8 @@ オブジェクトは、全てのオペレーションのために、ランデブーポイントに いなければなりません。 特に、とりわけオブジェクトメソッドからは。グローバル変数(クラスデータ)は、 -ある意味で、派生クラスの中で、"間違った"パッケージにあります。 -Perlでは、メソッドはメソッドが定義されたクラス内のコンテキストで +ある意味で、派生クラスの中で、「間違った」パッケージにあります。 +Perl では、メソッドはメソッドが定義されたクラス内のコンテキストで 実行するのであり、メソッドが動かされたオブジェクトの コンテキストでは I<ありません>。 そのために、名前空間 - メソッド内で、目に見えるパッケージの @@ -1038,9 +1037,10 @@ =end original -その名前空間を得られるでしょうか? たぶん、無理です。 +その名前空間を得られるでしょうか? +たぶん、無理です。 よし、たとえば、他のクラスが、上で定義されているような(訳註:Person クラスの) -DESTORY メソッドを、(たぶん継承されて)"借りた"としましょう。 +DESTORY メソッドを、(たぶん継承されて)「借りた」としましょう。 これらの他のクラスのオブジェクトが破壊されたら、オリジナルの $Census 変数は 変化させられます。 新しいクラスのパッケージの名前空間の $Census ではありません。 @@ -1119,9 +1119,9 @@ たとえば、オブジェクトが作られるか、破壊される時に、(訳註:デバッグ情報を) 見たいでしょう。 そうするためには、デバッグの値をファイルスコープのレキシカル変数に加えます。 -このために、警告と致命的なメッセージを発する標準のCarpモジュールを +このために、警告と致命的なメッセージを発する標準の Carp モジュールを 呼びましょう。 -この方法により、自分自身のメーッセージの代わりにcallerのファイル名と +この方法により、自分自身のメーッセージの代わりに caller のファイル名と 行数と一緒に出ます; もし、自分自身の観点から、警告や致命的なメッセージが欲しいのなら、 croak() の代わりに、ただ、die() と warn() を、直接に使いましょう。 @@ -1180,8 +1180,9 @@ =end original -こうするためには、デバッグメソッドは、"二頂の"メソッドでなければなりません。 -クラス I<と> オブジェクトの両方で動くメソッドです。 +こうするためには、デバッグメソッドは、「二頂の」メソッドで +なければなりません。 +クラス I<および> オブジェクトの両方で動くメソッドです。 そのため、debug() と、DESTORY メソッドを次のように、調整します: sub debug { @@ -2521,7 +2522,7 @@ オブジェクトはハッシュリファレンスとして実装される必要はありません。 オブジェクトは、うまく bless されるリファレンスでありさえすれば、どんな 種類のリファレンスでも可能です。 -このことは、スカラーリファレンスでも、配列リファレンスでも、 +このことは、スカラリファレンスでも、配列リファレンスでも、 コードのリファレンスでも、格好の的となるということです。 =begin original @@ -2532,7 +2533,7 @@ =end original -スカラーは、オブジェクトがたった一つの値しか持たないなら、うまくいきます。 +スカラは、オブジェクトがたった一つの値しか持たないなら、うまくいきます。 配列は、ほとんどのケースで、うまくいきます。 ですが、継承を少々危うくします。 派生クラスのために、新しい索引を作り上げなければならないからです。 @@ -2713,7 +2714,7 @@ =end original -ですが、実装は、根本的に、たぶん、圧倒的なやりかたで、違っています。 +ですが、実装は、根本的に、たぶん、圧倒的なやりかたで、違っています: package Person; @@ -2754,7 +2755,7 @@ =end original -(訳註:圧倒的に違うのは、)オブジェクトがコードリファレンスの背後に +なぜなら、オブジェクトがコードリファレンスの背後に 隠されているからです。 このことはちょっとミステリアスです; クロージャの由来する関数型プログラミング言語よりも、 @@ -2764,7 +2765,7 @@ データのリファレンスではありません。 オブジェクトは、匿名のコードリファレンスであり、内部に、特定の バージョン(レキシカルにバインドしており、インスタンス化している)の -- プライベートな変数 $selfに蓄えられた - オブジェクトデータにアクセスする +- プライベートな変数 $self に蓄えられた - オブジェクトデータにアクセスする コードを持っています。 それは、毎回、同じ関数であるにもかかわらず、違ったバージョンの $self を 含みます。 @@ -2822,7 +2823,7 @@ この世で、誰も、実行されているメソッドの外側にいるものには、 この隠されたデータに近付けることを許されていません。 -たぶん、ほとんどない。 +ええ、ほとんどありません。 デバッガを使っているプログラムを通すステップを選び、そのメソッドにいる間、 そのかけらを見つけることが I<できます>。 ですが、他の全ての人には、運がありません。 @@ -2864,10 +2865,10 @@ =end original -もしも、いつ、傲慢- プログラマの三大美徳 - が開始するのかを疑問に -思っていたなら、ここに、傲慢があります。 +もしも、いつ、(プログラマの三大美徳である) 傲慢が開始するのかを疑問に +思っていたなら、ここにあります。 (もっとまじめにいうなら、傲慢は、ちょっとしたすばらしくよく設計された -コードを書くことから生じる腕前の、プライドです)。 +コードを書くことから生じる腕前のプライドです)。 =head1 AUTOLOAD: Proxy Methods @@ -2884,7 +2885,7 @@ オートロードは、未定義のメソッドの呼び出しをインターセプトする方法です。 オートロードルーチンは、その場で、新しい関数 - ディスクから -ロードされるか、たぶんevalされているもの - を作ることを選ぶかもしれません。 +ロードされるか、たぶん eval されているもの - を作ることを選ぶかもしれません。 この「その場で定義する」戦略が、オートローディングと呼ばれる理由です。 =begin original @@ -2896,10 +2897,10 @@ =end original -ですが、これはたった一つの可能なアプローチです。 -他のアプローチは、オートロードされたメソッドそれ自身に、直接、要求された +ですが、これはたった一つの可能な手法です。 +もう一つの手法は、オートロードされたメソッドそれ自身に、直接、要求された サービスを提供させることです。 -この方法を使ったとき、オートロードされたメソッドを"代理"メソッドのように、 +この方法を使ったとき、オートロードされたメソッドを「代理」メソッドのように、 考えるかもしれません。 =begin original @@ -2924,7 +2925,7 @@ その関数の完全修飾名は、パッケージのグローバル変数 $AUTOLOAD に 蓄えられます。 いったん呼ばれると、関数は、好きなように何かをすることが出来ます; -適当な名前で、新しい関数を定義すること、実際に装飾的な一種の、C<goto>を、 +適当な名前で、新しい関数を定義すること、実際に装飾的な一種の、C<goto> を、 それに対して正しく行うこと、コールスタックからそれ自身を消すことを、 含みます。 @@ -2990,16 +2991,16 @@ =end original 新しいデータフィールドをが欲しいと思うたびに新しい関数を毎回書く代わりに、 -オートロードのメカニズムを使って、(実際に、偽の)メソッドをオン・ザ・フライに +オートロードのメカニズムを使って、(実際に、偽の)メソッドをその場で 生み出します。 妥当なメンバにアクセスしていることを証明するために、 C<_permitted>("under-permitted" と発音します)フィールドでチェックします。 -このフィールドは、%fieldと呼ばれるレコードの中の許されたフィールドの、 +このフィールドは、%field と呼ばれるレコードの中の許されたフィールドの、 ファイルスコープのレキシカルな(C のファイル static のような)ハッシュ リファレンスです。 なぜ、アンダースコアがあるのか? かつて使った、_CENSUS フィールドと同じ理由のためです: -"内部的に使うためだけ"を意味するマークです。 +「内部的に使うためだけ」を意味するマークです。 =begin original @@ -3009,7 +3010,7 @@ =end original ここにある、モジュールの初期化コードとクラスのコンストラクタは、 -このアプローチを取る場合に見るようなものです: +このアプローチを取る場合に見るようなものです: package Person; use Carp; @@ -3052,8 +3053,8 @@ オブジェクト自身に、クラスデータのリファレンスを保存させたやりかたに 気づいたでしょうか? -直接に %fields を参照するメソッドを持つか、そのほか、礼儀正しい継承を持たない -代わりに、オブジェクトを通してクラスデータにアクセスすることが +直接に %fields を参照するメソッドを持つか、そのほか、礼儀正しい継承を +持たない代わりに、オブジェクトを通してクラスデータにアクセスすることが 重要であることを思いだしてください。 =begin original @@ -3099,8 +3100,9 @@ =end original -とっても素敵でしょ? 新しいデータフィールドを加えるときにしなければ -ならないことは、%fields を変更することだけです。 +とっても素敵でしょ? +新しいデータフィールドを加えるときにしなければならないことは、 +%fields を変更することだけです。 新しい関数を書く必要はありません。 =begin original @@ -3112,7 +3114,7 @@ =end original -C<_parmitted>フィールドを、完全に、避けることが出来ましたが、どのように +C<_parmitted> フィールドを、完全に避けることが出来ましたが、どのように オブジェクトのクラスデータをリファレンスに蓄えるのかを実証したかったのです。 ですので、オブジェクトメソッドから、直接に、クラスデータにアクセスする 必要はありません。 @@ -3128,10 +3130,9 @@ =end original -しかし、継承ではどうなるのでしょう? Employeeクラスを同じように -定義できるでしょうか? -できます。 -十分に気をつける限りは。 +しかし、継承ではどうなるのでしょう? +Employeeクラスを同じように定義できるでしょうか? +できます、十分に気をつける限りは。 =begin original @@ -3208,7 +3209,7 @@ =end original -Perlプログラマは、さまざまなクラス生成クラスを作ることで、 +Perl プログラマは、さまざまなクラス生成クラスを作ることで、 これに対応しています。 これらのメタクラスは他のクラスを作るクラスです。 見るべき組は、Class::Struct と、Alias です。 @@ -3233,10 +3234,10 @@ =end original その古いものの一つは、Class::Struct です。 - 実際、その構文とインターフェースは、perl5 が実際のものに固まるだいぶ前に、 +実際、その構文とインターフェースは、perl5 が実際のものに固まるだいぶ前に、 スケッチされました。 Class::Struct は、特定の型のフィールドがあるようなオブジェクトを持つクラスを -"宣言"する方法を提供します。 +「宣言」する方法を提供します。 それが呼ばれる関数は、驚くようなものではなく、struct() です。 構造、またはレコードは、Perl では、基本の型ではないので、 レコード風なオブジェクトを提供するクラスを作るたびに、new() メソッドと、 @@ -3251,7 +3252,7 @@ =end original -これを使う簡単な例です: +これを使う簡単な例です: use Class::Struct qw(struct); use Jobbie; # user-defined; see below @@ -3327,7 +3328,7 @@ =end original Class::Struct モジュールを使ってこれをする方法です。 -最重要ポイントは、この呼び出しです: +最重要ポイントは、この呼び出しです: struct 'Net::hostent' => [ # note bracket name => '$', @@ -3353,7 +3354,7 @@ =end original -次の方法でも、オブジェクトを実装できましたが、しませんでした: +次の方法でも、オブジェクトを実装できましたが、しませんでした: struct 'Net::hostent' => { # note brace name => '$', @@ -3377,7 +3378,7 @@ 無名ハッシュを使います。 配列は、ハッシュより速く、小さいですが、ハッシュは、継承をしたいときに、 よく働きます。 -この構造体風なオブジェクには、継承を考えていないので、今回は、 +この構造体風なオブジェクトには、継承を考えていないので、今回は、 よりよいスピードと、サイズに余裕をもたせることにしました。 =begin original @@ -3490,10 +3491,10 @@ 他の、オブジェクトベースのものや、File::stat、Net::hostent、Net::netent、 Net::protoent、Net::servent、Time::gmtime、Time::localtime、User::grent, -User::pwent で、Perl の5.004 リリースのコアな関数の構造体風な +User::pwent で、Perl の 5.004 リリースのコアな関数の構造体風な オーバーライドを見ることが出来ます。 -これらのモジュールは、コンパイラのプログラムのためにとってある、慣例によって、 -全て小文字の最終的な構成要素を持っています。 +これらのモジュールは、コンパイラのプログラムのためにとってある +慣例によって、全て小文字の最終的な構成要素を持っています。 これらが、コンパイルに影響し、組み込み関数を変更するからです。 これらは、C のプログラマがよく期待する型名を持っています。 @@ -3605,8 +3606,8 @@ =end original -Alias と、CLass::Structや、Class::MethodMakerを -混ぜてい使うと良いでしょう。 +Alias と、CLass::Structや、Class::MethodMaker を +混ぜて使うと良いでしょう。 =head1 NOTES @@ -3630,7 +3631,7 @@ 違わない概念を表すのに使われているように思います。 もし、あなたがまだオブジェクト指向プログラマではないなら、 これらの、気まぐれな言葉に悩むことはありません。 -ですが、もし、すでに、オブジェクト指向プログラマなら、Perlで、同じ +ですが、もし、すでに、オブジェクト指向プログラマなら、Perl で、同じ コンセプトをどのように表すのか知りたいでしょう。 =begin original @@ -3643,12 +3644,12 @@ =end original -例えば、オブジェクトをクラスのI<インスタンス>と呼ぶことや、それら +例えば、オブジェクトをクラスの I<インスタンス >と呼ぶことや、それら インスタンスのオブジェクトメソッドを I<インスタンスメソッド> と呼ぶことは、 一般的でしょう。 オブジェクトごとに特有のデータフィールドはよく、I<インスタンスデータ> とか、 -I<オブジェクト属性>と呼ばれ、全てのクラスのメンバに共通のデータフィールドは -I<クラスデータ> や、I<クラス属性 >や、I<静的データメンバ> と +I<オブジェクト属性> と呼ばれ、全てのクラスのメンバに共通のデータフィールドは +I<クラスデータ> や、I<クラス属性> や、I<静的データメンバ> と よく呼ばれるでしょう。 =begin original @@ -3729,14 +3730,14 @@ =end original -以下のマニュアルページは、まちがいなく、このマニュアルページに多くの +以下のマニュアルページは、間違いなく、このマニュアルページに多くの 背景を与えてくれます: L<perlmod>, L<perlref>, L<perlobj>, L<perlbot>, L<perltie>, -L<overload>. +L<overload>。 =begin original @@ -3746,7 +3747,7 @@ =end original L<perlboot> は、よりやさしい、オブジェクト指向プログラミングの -イントロダクションです。 +紹介です。 =begin original