| TOP>>OBAQ>>環境獲得 | 概略 | ツアー | <OBAQ> | 構成定義 | アプリケーションサーバ | リファレンス | サイトマップ |
|
>環境獲得とは |
身近にある環境獲得環境獲得という概念は一見複雑ですが、 実は我々はこれに近いことを日常的に行なっています。 ここでは、まずそのような例を示します。 会社でパソコンOSを決定する例えば、会社のパソコンで使用するOSをどのように決定するか考えてみましょう 。 多くの会社では会社全体の標準として、原則的にこのOSを使用するということを決定していると思います。 しかし、例えば会社の標準がWindows-MEだったとしても、 部門によっては業務上の必要のために、linuxを使うケースがあります。 しかし、その部門にいても互換性のチェックのためにあえてWindows-NTを使用する人もいます。 これを逆の方法から見ていくと、次のようになります。
環境獲得とは、このような処理をシミュレーションするプログラミングモデルです。 ヤマちゃんもうひとつ別の例をあげます。 あなたの職場には、山本さんとか山口さんという名前で「ヤマちゃん」と呼ばれる人がいませんか? まずここでは、「ヤマちゃん」が会社の中に何人もいると想像してみてください。 そして、あなたが同僚に「この書類、ヤマちゃんに届けといてよ」と頼まれたとします。 この時に、同僚が言っている「ヤマちゃん」が誰なのか、どのように決定するでしょうか? たぶん、あなたと同僚が所属する職場(仮に1部1課とします)の中で「ヤマちゃん」という人がいないか考えます。 もしいなかったら、1部全体で誰か「ヤマちゃん」がいないか探して、 最後に会社全体でそういう人はいないかという思考を(一瞬のうちに)たどると思います。 形式的に言うとまず、包含関係にあるいくつかのオブジェクトが存在します。 この例では、社員が部門に所属し、部門が会社に所属します。 そして、そのオブジェクトがそれぞれ属性を持っています。 この場合だと、標準OSという属性です。 そして、あるオブジェクトの属性値を参照するには、次のような手順で検索します。
このようなモデルを、ほぼそのとおりに記述できるモデルが「環境獲得」です。 サンプル上記の例をそのままサンプルプログラムにしました。 ソース全体とその説明は、後程示します。 ここでは、雰囲気だけ味わってください。 # OS決定の例
class Employee
# 一部省略
acq_import :os
def what_os_do_you_use?
puts "Hi, I'm #{@name}, I use #{os} every day"
end
end
ms = Campany.new("Windows")
fud_section = Section.new(ms, "Linux")
excel_section = Section.new(ms)
bill = Employee.new("Bill")
bill.employed_by(fud_section)
bill.what_os_do_you_use? # => "Hi, I'm Bill, I use Linux every day"
bill.employed_by(excel_section)
bill.what_os_do_you_use? # => "Hi, I'm Bill, I use Windows every day"acq_import :os で、osというメソッドを環境から借りてくる指定をします。 すると、自動的に所属する環境の持つosを取得できるようになります。 その結果、所属するセクションの標準OSまたは会社の標準OSを参照できるようになります。 # ヤマちゃんの例
class Employee
def who_is_yamachan
puts "yama_chan is Mr.#{yama_chan.name} in #{yama_chan.section.name}"
end
end
kanto = Section.new("Kanto")
tokyo = Section.new("Tokyo", kanto)
kanagawa = Section.new("Kanagawa", kanto)
kansai = Section.new("Kansai")
osaka = Section.new("Osaka", kansai)
yamaguchi = Employee.new("Yamaguchi", tokyo)
kanto.add_role_object(:yama_chan, yamaguchi)
yamashita = Employee.new("Yamashita", kanagawa)
kanagawa.add_role_object(:yama_chan, yamashita)
yamabe = Employee.new("Yamabe", osaka)
kansai.add_role_object(:yama_chan, yamabe)
suzuki = Employee.new("Suzuki", tokyo)
suzuki.who_is_yamachan # => yama_chan is Mr.Yamaguchi in Tokyo
nakamura = Employee.new("Nakamura", kanagawa)
nakamura.who_is_yamachan # => yama_chan is Mr.Yamashita in Kanagawa
tanaka = Employee.new("tanaka", osaka)
tanaka.who_is_yamachan # => yama_chan is Mr.Yamabe in Osaka |
|---|