簡単すぎるクラスビルダー。覚えることは「has」関数だけ。Mojo::Baseの移植。Mojoliciousが好きですか。これは良い選択だ!速くって、省メモリ。速い「new」メソッドとアクセッサメソッド。0;オブジェクトを作成しましょう。$obj->foo(1)->bar(2);継承の書き方。-base;説明Object::Simpleは、簡単すぎるクラスビルダーです。覚えることは「has」関数だけ。すべての機能をたった一時間で覚えることができます。難しいものは何もありません。Mojoliciousが好きですか。実際に、Object::SimpleはMojo::Baseの移植です。Mojo::Baseは、Mojoliciousの基本的なクラスビルダーです。Mojoliciousが好きなら、これは良い選択です。Mojo::Baseを知っているなら、覚えることは何もありません。「new」メソッドとアクセッサは速いです。実装は、ピュアなPerlで、単純なハッシュベースのオブジェクトです。余分なオブジェクトは何も作られません。軽いオブジェクト指向モジュールです。Class::Accessor::Fastとの比較Class::Accessor::Fastは簡単です。いくつかの機能が欠けています。「new」メソッドは、ハッシュの引数を受け取ることができません。デフォルト値の設定ができません。複数の値が、アクセッサに与えられたとき、警告なしに、配列のリファレンスへと変換されてしまいます。Mooseとの比較Mooseはとても複雑な構文を持ち、とてもたくさんのモジュールに依存しています。あなたは、オブジェクト指向プログラミングをするために、とても多くのことを学ばなければなりません。ソースコードを理解することは、難しいです。コンパイル時間はとても遅く、メモリ使用率も高いです。実行速度も速くありません。単純なオブジェクト指向をするには、大きすぎます。Mooは、この点で、改善がされています。最初に、クラスを作ってみましょう。-base;「-base」オプションを使うと、「SomeClass」はObject::Simpleを継承し、「has」メソッドをインポートします。Object::Simpleは「new」メソッドを持ちます。「new」メソッドはコンストラクタです。Cメソッドは、ハッシュとハッシュリファレンスを受け取ることができます。2});「has」関数を使って、アクセッサを作成することができます。'foo';アクセッサを作成すれば、値を設定、また取得することができます。$obj->foo;値を設定するアクセッサは、チェーンすることができます。$obj->foo(1)->bar(2);デフォルト値を設定することもできます。1;もし「C」の値が存在しなければ、デフォルト値が利用されます。$obj->foo;もし、リファレンスやオブジェクトをデフォルト値として使いたい場合は、コードリファレンスによって、デフォルト値を囲む必要があります。戻り値が、デフォルト値になります。};複数のアクセッサを一度に生成することもできます。0;メソッドのオーバーライドメソッドは、オーバーライドすることができます。サンプルオブジェクトの初期化。}サンプル「new」の引数の変更。}上記のようにすれば、配列も渡せます。5);クラス、アクセッサ、継承、メソッドオーバーライドのサンプルObject::Simpleのサンプルを紹介しよう。ふたつのアクセッサ「x」と「y」を持つ。「x」と「y」値を0に設定する「clear」メソッドを持つ。}ポイントクラスを使ってみましょう。Point3Dはポイントクラスを継承します。Point3Dクラスは、「x」「y」に加えて、「z」アクセッサを持ちます。「clear」メソッドはオーバーライドされ、「x」「y」「z」の値をクリアします。}Point3Dクラスの使用。$point->clear;オブジェクト指向プログラミングとは何ですかオブジェクト指向プログラミングの概念について紹介します。最初の概念は「継承」です。継承は「もしクラスQがクラスPを継承していたら、クラスQはクラスPのすべてのメソッド利用できる」ということを意味します。「method3」を持つ。「クラスQ」は「クラスP」を継承しています。「Q」は「Q」のメソッドに加え「P」のすべてのメソッドを呼び出すことができます。言い換えれば「Q」は、「method1」「method2」「method3」を呼び出すことができます。次のように記述すると「Q」は「P」を継承します。}Perlはオブジェクト指向プログラミングのための便利な関数とメソッドを持ちます。オブジェクトがどのクラスに属しているのかを知りたいのであれば、「ref」関数を使用できます。$obj;どのクラスを継承しているのかを知りたければ、「isa」メソッドを使用することができます。$obj->isa('SomeClass');オブジェクト、あるいはクラスが、特定のメソッドを持っているかを調べるには、「can」メソッドを使用できます。二番目の概念は、カプセル化です。内部のデータにアクセスするときは、公開メソッドを使うべきだ」ということを意味しています。このルールを守るには、アクセッサを作成して、常にそれを使ってください。$obj->foo(1);ポリモーフィズム三つ目の概念は、「ポリモーフィズム」です。「ポリモーフィズム」は、さらに二つの概念「オーバーロード」と「オーバーライド」に分割することができます。Perlプログラマーは、オーバーロードについては意識する必要がありません。Perlは動的型を持つ言語であり、サブルーチンは、どんな値もとることができるからです。「オーバーライド」は「サブクラスで、メソッドの振る舞いを変更することができる」ということを意味しています。}Pの「method1」は「1」を返します。Qの「method1」は「2」を返します。Qの「method1」は、Pの「method1」をオーバライドしています。$obj_q->method1;もし、サブクラスで、スーパークラスのメソッドを使いたい場合は、「SUPER」疑似クラスを使うことができます。}この三つの概念を理解すれば、オブジェクト指向プログラミングの主要な部分をマスターしたことになります。関数hasアクセッサを作成します。0;「has」関数は、アクセッサ名とデフォルト値を受け取ります。デフォルト値は、オプショナルです。複数のアクセッサを一度に作成したい場合は、第一引数に、アクセッサの名前を格納した、配列のリファレンスを指定します。デフォルト値にリファレンスかオブジェクトを指定したい場合は、他のオブジェクトと共有しないために、コードリファレンスとして、渡す必要があります。$obj->foo(1);もし、デフォルト値が指定されており、値が存在しなければ、デフォルト値を取得することができます。設定のためのアクセッサは、戻り値として自分自身を返します。それで、メソッドをチェーンすることができます。2});新しいオブジェクトを生成します。「new」はハッシュとハッシュリファレンスを引数として受け取ることができます。0);アクセッサを作成します。「attr」メソッドは「has」関数と使用方法がが全く同じです。オプション-base「-base」オプションを使うと、Object::Simpleを継承し、「has」関数をインポートします。2;「strict」と「warnings」が自動的に有効になります。特定のクラスを継承したい場合は、次のように書きます。'Foo';次の構文も使うことができます。これはObject::Simpleだけの機能です。'Foo';「-base」オプションは、サブクラスでも、他のクラスを継承するために、使うことができます。これは、Object::Simpleだけの機能です。-base;FAQ本当にこんなに少ない機能で十分なオブジェクト指向プラグラミングを行うことができるんですか。Mojoliciousはとても大きなプロジェクトです。実際に、ソースコードはクリーンで、単一継承だけを使っています。一般的にいって、読みやすいソースコードは、複雑な機能ではなく、単純な概念の上に成り立っています。Mooの「BUILD」「BUILDARGS」「DEMOLISH」メソッドのようなものは、よいオブジェクト指向で必須ですか?もし、多重継承やロールを使いたいのであれば、これらのメソッドは必須です。わたしは、オブジェクト指向プログラミングにおいて、単一継承だけを使うことを強く勧めます。単一継承は、クリーンで、読みやすいからです。単一継承だを使うのであれば、カスタムコンストラクタを作って、正しい順序で、コンストラクタを呼ぶことができます。カスタムデストラクタを作って、正しい順序で、デストラクタを呼ぶことができます。カスタムコンストラクタの作成は、とてもとても簡単で、難しいところは、ぜんぜんありません。}Object::Simpleは、最も速いオブジェクト指向モジュールですか?いいえ、Object::Simpleは最も速いモジュールではありませんが、十分に速いです。本当にパフォーマンスが必要になったら、ハッシュの値に直接アクセスすることができます。ある部分で、パフォーマンスが必要だ。Object::Simpleは、単純なハッシュベースのオブジェクトです。$self->{x};Mojo::Baseと比較した場合の利点は何ですか。5.8をサポートしています。ほんの少しのファイルしかないので、インストールはとても高速です。いくらかの人々は、Mojo::Baseを使うためだけに、Mojoliciousすべてに依存したくはないと考えています。Object::Simpleはその需要を満たします。Object::Simpleはいくつかの点でMojo::Baseと異なるのですか。古い時代、Object::SimpleはMojo::Baseの移植ではありませんでした。異なることに挑戦していました。今は、Object::SimpleをPerl5.8をサポートする点を除いて、Mojo::Baseと完全に同じにしたいと思っています。後方互換性のポリシーもし機能が、廃止予定になった場合に、あなたは、DEPRECATED警告によって、それを知ることができます。すべての廃止予定の機能は、ドキュメントに記載されます。廃止予定の機能は、5年後に取り除かれます。少なくとも一人の人が、その機能を使っていて、そのことを私に伝えてくれれば、そのたびに、1年間、延長します。実験的な(EXPERIMENTAL)機能は、警告なしに変更されます。(このポリシーは2011/10/22に現在のものに変更されました。2021/6/1に取り除かれます。2021/6/1に取り除かれます。2017/1/1に取り除かれます。2017/1/1に取り除かれますバグバグを発見したら教えてください。メール(kimoto.yuki@gmail.com)かGitHub([http://github.com/yuki-kimoto/Object-Simple])で。木本裕紀(kimoto.yuki@gmail.com)応援メッセージを送ってくれると喜びます。あなたのメッセージだけで、力がみなぎります。ユーザーObject::Simpleを使っているプロジェクト。ポータブルなGitHubシステムをあなたのサーバーへ。HTMLフォームバリデーション。他のモジュールCPANはさまざまなクラスビルダーを持っています。Object::Simpleと比べてみてください。v2.これはMojoliciousのライセンスと同じです。業務に役立つPerlログ解析など日本語を含むテキスト処理の実践!案内YouTubeでもっと簡単にプログラミングを学ぶならPerlゼミちゃんねるLinuxコマンドを学ぶならLinuxサーバー管理入門Webデザインを学ぶならWebデザイン入門Web開発を始めるななMojoliciousスタートアップブログを作るならGiblogプログラミングの勉強会ならPerl入学式お問合せはこちらPerlは、テキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。Linuxサーバー管理でのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意。Mojoliciousを使ったWebスタートアップも。Perlは、gitやopensslなどUnix/Linuxミドルウェアの支援ツールとして採用されています。このサイトはGiblogで製作されています。