「もの型」オブジェクトと「ひと型」オブジェクト




  1. Perl




  2. オブジェクト指向



  3. 「もの型」と「ひと型」

 オブジェクト指向プログラミングにおいてオブジェクトは「もの」ではありません。 オブジェクトには、「もの」型オブジェクトと、「ひと」型オブジェクトの2種類があります。

1.「もの」型オブジェクト

 「もの」型オブジェクトとは、「もの」を表現したオブジェクトです。以下は、本オブジェクトですが、属性としてtitle( タイトル )とprice( 価格 )を持ちます。

my $book = Book->new(title => 'a', price => 2300);

 このような「もの」型オブジェクトはコンストラクタで、タイトルや価格などの本の性質を設定します。「もの」型オブジェクトは、ハッシュに非常に近いものだと考えればよいと思います。もの型オブジェクトは構造化されたデータを表現します。

my $book = {title => 'a', price => 2300};

2.「ひと」型オブジェクト

 「ひと」型オブジェクトとは、「ひと」を表現したオブジェクトです。以下は、ファイルを解析するオブジェクトです。属性として、encoding( 円コーディング方法 )とerr_raise( 解析に失敗した場合に例外を発生させる )を持ちます。

 その後に、parseというファイルを解析するメソッドが呼ばれることが予定されています。

my $file_parser = FileParser->new(encoding => 'utf8', err_raise => 1);
$file_parser->parse($file);

 このような「ひと」型オブジェクトは、コンストラクタで、その後に使用するメソッドが使用するオプションを指定することが多いです。「ひと」型オブジェクトは、関数に非常に近いものだと考えればよいと思います。

my $opt = {encoding => 'utf8', err_raise => 1};
parse_file($file, $opt);

3. クラスの設計の指針

  1. まず作りたいものが「もの」型オブジェクトなのか「ひと」型オブジェクトなのかを意識すること。
  2. データを表現したい場合は「もの」型クラスを作る
  3. オプションを指定してメソッドを呼び出したい場合は「ひと」型クラスを作る
  4. 利便性が勝る場合は、「もの」型が「ひと」型と混在するハイブリッドクラスになる場合もある。