Date:  Wed, 07 Sep 2005 12:56:04 +0900
Subject:  【オブジェクト倶楽部: 2005-32号】

       ┏━━━━━━━━━━━━━━━━━━━━━━━━━━■
       ┃                         ■┃
      ●┃● ● オ ブ ジ ェ ク ト 倶 楽 部   ■ ┃
       ┃                       ■  ┃
       ┗━━━━━━━━━━━━━━━━━━━━━━■━━━┛
                          No.107 2005/09/07

■ I N D E X
┃
┣【Topics】『ソフトウェア原則』記事Web公開!
┣【Topics】XP祭りが開催されました!
┣【お知らせ】アジャイル勘違い集公開
┣【プログラミング】Rubyで進むオブジェクトの道 〜脱初心者をめざして〜[7]
┗【アンケート】気になるシステム業界 ホントのところ

〇━━━━━━━━━━━━━━━━━━━━━━━━━━━T o p i c s━
 〇  『ソフトウェア原則』記事Web公開!
  〇 〇━━━━━━━━━━━━━ ━━・ 

このメールマガジン、週刊オブジェクト倶楽部 2003-07号〜2004-18号で掲載し
ていた平鍋の記事を、ご好評につきオブジェクト倶楽部サイトでWeb公開いたし
ます。この記事では、いくつかの設計原則について、ライター平鍋の観点から、
原則の解説、考察、原則について感じたことが書かれています。既に読まれた
方も、まだ読まれていない方も、これを機にご覧ください。
http://www.ObjectClub.jp/technicaldoc/object-orientation/principle 

〇━━━━━━━━━━━━━━━━━━━━━━━━━━━T o p i c s━
 〇  XP祭りが開催されました!
  〇 〇━━━━━━━━━━━━━ ━━・ 

9/3(土)に日本科学未来館にて、XP祭り2005が開催されました。オブジェクト倶
楽部メンバーも参加してきました。読者のみなさんの中にも、参加された方が
多いのではないでしょうか。学びの多い、楽しい祭りでした。
参加された方も、参加できなかった方も、XP祭りって何?という方も、こちら
にイベントの感想が公開されています。
http://www.xpjug.org/index.html/7

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━1 s t ■━
■
┗【お知らせ】アジャイル勘違い集公開

巷で流行りのアジャイル。様々な方面から噂をよく耳にします。

・取り入れてみたいけれども不安がいっぱい。これって本当に大丈夫なの?
・取り入れてはみたものの、うまく行かない。これって本当に大丈夫なの?

もしかしたら、アジャイルが勘違いされて普及しているのではないだろうか?
その疑問の元に、正しいアジャイルって何だろう、とオブジェクト倶楽部メン
バーと有志お二方とで熱い議論が繰り広げられました。

この内容を「アジャイル勘違い集」としてまとめました。編集協力として、出
版社の方にお手伝いいただきましたので、いつにも増して(?)すばらしい出来
上がりになっています。

内容は以下で構成しています。
これを読んで、あなたのアジャイル、一度見直してみてはいかがですか?

  1. アジャイルは誰でもできる? 
  2. デキる人じゃないと無理? 
  3. ドキュメントを書かない? 
  4. コミュニケーションには呑み会が適している? 
  5. 設計はなるべくしない? 
  6. アジャイルとアジャイルプロセスは同じ? 
  7. プラクティスこそが大事? 
  8. いつでも仕様変更OK? 
  9. テスターは必要ない? 
 10. リファクタリングは危険? 
 11. ペアプロすると眠くなる? 

http://www.ObjectClub.jp/technicaldoc/xp/agile_misunderstanding
(さとみ)
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=H004-3&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=H004-3&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=H004-3&choice=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━2 n d ■━
■
┗【プログラミング】Rubyで進むオブジェクトの道 〜脱初心者をめざして〜[7]

●最近びっくりしたこと
「WEB+DB PRESS vol.28」にRuby on Railsの入門記事が載っています。Railsは、
view-controller-model-databaseのレイヤーをカバーするフレームワークで、
海外では熱いブームになっています。
http://www.rubyonrails.org/

筆者は、この記事を読んで初めてRuby on Railsを触ってみたのですが、

「なんですか!これ!!」

と思わず叫んでしまいました。

なんたって、30分以内にview-controller-model-databaseの連携確認ができ
ちゃったことに驚きです。わずらわしい作業がほとんどなく、よく考えられて
いるなぁと、感心してしまいました。

Rubyにご興味をお持ちの方も、そうでない方も、ぜひRuby on Railsを一度体験
してはいかがでしょうか

●今回のテーマ
さて、今回はEnumerableモジュールの取り込み(Mix-in)について学習してい
きます。

Enumerableは繰り返し処理についての汎用的なモジュールです。Enumerable 
モジュールを取り込んでいる代表的なクラスはArrayです。
過去の記事でブロックを紹介した際に、Arrayクラスのfindやcollectメソッド
等に触れましたが、それらのメソッドがEnumerableの代表的なメソッドです。

モジュールは、メソッドをまとめて定義できるなどクラスによく似たものです
が、次の点で異なります。

モジュール
・インスタンスを生成できない
・継承できない
・Mix-inできる(モジュールを取り込むことができる)

クラス
・インスタンスを生成できる
・継承できる
・Mix-inできない(クラスを取り込むことはできない)

Mix-inは、クラスなどがモジュールを取り込むことで機能を混ぜ合わせること
を指します。ある部品を再利用して、記述量を減らしプログラムをシンプルに
する点で、「<」キーワードを使った継承と共通していますが、次の点で異なり
ます。

継承
・新しく作る(子)クラスに、再利用部品「(親)クラス」を「継承する」
・1つの(親)クラスのみ継承できる。単一継承

Mix-in
・新しく作るクラスに、再利用部品「モジュール」を「取り込む」
・複数のモジュールを取り込むことができる。多重継承(のようなもの)

今回のサンプルプログラムでは、前回作成したOrder(注文クラス)にEnumerable
を取り込むことで、手軽にOrderクラスを便利なやつに変身させてみたいと思い
ます。

まずはテストプログラムから

●テストプログラム
----------------------------------------------------
require 'test/unit'
require 'order'

class OrderTest < Test::Unit::TestCase
  def setup
    @line_note = LineItem.new("note", 110, 3)
    @line_pen = LineItem.new("pen", 50, 4)
    @line_card = LineItem.new("card", 100, 5)
    @order = Order.new
    @order << @line_note << @line_pen << @line_card
  end
  def test_total
    assert_equal(1030, @order.total)
  end
  #名前で、該当する1件の明細を検索できること
  def test_find_by_name
    line_item = @order.find{|item| item.name == "pen" }
    assert_equal(@line_pen, line_item)
  end
  # 値段と数量の複合条件で、該当する明細を検索できること
  def test_find_all_by_price_and_quantity
    line_items = @order.find_all{|item|
      100 <= item.price  &&  item.quantity <= 3
    }
    assert_equal(1, line_items.size)
    assert_equal(@line_note, line_items[0])
  end
  # 小計一覧が取得できること
  def test_collect_product_name_list
    sub_total_list = @order.collect{|item| item.sub_total}
    assert_equal(330, sub_total_list[0])
    assert_equal(500, sub_total_list[2])
  end
  # 値段でソートできること
  def test_sort
    line_items = @order.sort{|a,b| a.price <=> b.price }
    assert_equal(@line_pen, line_items[0])
    assert_equal(@line_note, line_items[2])
  end
end
----------------------------------------------------

前回定義した合計を計算するメソッドのほかに、注文オブジェクトのfind、
find_all、collect、sortのテストを行っています。

find、find_all、collectはEnumerableの代表的なメソッドですが、そのほかに
もmax、min等が便利なメソッドがあります。

find、 find_all、collect、sort、max、minを自分で実装すると手間がかかっ
てしまいますが、Enumerableを使うと簡単に実現することができます。

Enumerableを取り込む場合は、
・includeでEnumerableモジュールを取り込み
・eachメソッドの記述
の2つが必要です。

eachメソッドの記述が必要なのは、Enumerableモジュールのメソッドがすべて
eachを利用して記述されているからです。

●注文と明細のプログラム
----------------------------------------------------
class Order
  # includeでEnumerableモジュールを取り込み
  include Enumerable
  @line_items
  def initialize
    @line_items = []
  end
  # Enumerableモジュールを利用できるようにするためにeachメソッドの記述
  def each
    @line_items.each{|item| yield item }
  end
  def total
    self.inject(0){|sum, item| sum + item.sub_total }
  end	
  def << a_item
    @line_items << a_item
  end
end

class LineItem
  attr_accessor :name, :price, :quantity
  def initialize(name, price, quantity)
    @name = name
    @price = price
    @quantity = quantity
  end
  def sub_total
    price * quantity
  end
end
----------------------------------------------------

テストを実行するとパスします。

Orderクラスにfindメソッドなどを記述していませんが、Enumerableを取り込む
ことでfind等の機能を持つことができます。

●まとめ

EnumerableのMix-inについてふれました。どうです?記述量が少なくて便利だ
と思いませんか?

Enumerableのほかに、Mix-inすると便利なモジュールとして、Observable、
Singleton、Comparableなど多数あります。

今回は「クラス」に「include」キーワードを使ってモジュールを取り込みまし
たが、Rubyでは、「オブジェクト」に「extend」キーワードを使ってモジュー
ルを取り込むこともできます。

次回はevalについてについて触れてみたいと思います。
 
参考
http://www.ruby-lang.org/ja/man/?cmd=view;name=Module#include
http://www.ruby-lang.org/ja/man/?cmd=view;name=Object#extend
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Enumerable
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Module;em=Module
(IENAGA)
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E006-6&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E006-6&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E006-6&choice=2
 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━3 r d ■━
■
┗【アンケート】気になるシステム業界 ホントのところ

今週は「キーボードにどのようなこだわりがありますか?」のホントのところ。
毎日使用するものなので、みなさんこだわりがあるのではないでしょうか。前
回のマウスに関するアンケートに引き続き、今回はキーボードに関する質問で
す。みなさん、キーボードにどのようなこだわりがありますか?

  普通です。他にあるんですか?
     http://www.ObjectClub.jp/special/kininaru/vote?vol=73&choice=0
  いろんなボタンがあると嬉しい。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=73&choice=1
  キータッチ最優先です。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=73&choice=2
  英語キーボードが手になじみます。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=73&choice=3
  Windowsキーとか、余分なキーがないのがいいです。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=73&choice=4
  Fnキーやテンキーすらないのがいいです。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=73&choice=5
  HHK!
     http://www.ObjectClub.jp/special/kininaru/vote?vol=73&choice=6
  無刻印。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=73&choice=7
  上記以外。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=73&choice=8
  それは秘密です
     http://www.ObjectClub.jp/special/kininaru/vote?vol=73&choice=9
  ちょっと語らせて!
     editors@ObjectClub.jp まで詳細を!!

アンケート結果はオブジェクト倶楽部サイト上にて公開します。お楽しみに。
なお、前号「いつも使っているマウスに、いくつボタンがありますか」の結果
は公開中。是非ご覧下さい。
⇒http://www.objectclub.jp/special/kininaru/vol72/PlonePopoll_results2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
■
┗編集後記

こんにちは、編集人です。読者のみなさんから、このメルマガの感想をよくい
ただきます。記事評価アンケートと共に、ライターにとっては何にも変えがた
い励みになります。ありがとうございます。いただく感想の中には、強引な一
言が楽しみだというお言葉もよくいただきます。いつネタが切れるかわかりま
せんが、続けられる限り、続けていきたいと考えています。どうぞお付き合い
ください。

その「強引な一言」がテーマのオブジェクト倶楽部10月カレンダー。こちらの
電子データを公開します。ダウンロードは下記からどうぞ。 
http://www.ObjectClub.jp/special/#calendar

今週の強引な一言
*** 9月はXXで酒が飲めるぞ(岡本圭司)***
9月も飲んじゃいますか?初対面の人と話すと、脳の角回(かくかい)が使われ、
脳が若返るそうです。社外へ飛び出し、セミナーやコミュニティに参加してみ
てはいかがですか?専門知識に加え、新たな出会い、お酒の席、脳も活性化と、
効果がたくさん期待できますよ。
※XXに当てはまる対象で被害を被られている方もいらっしゃるかと思います
  ので、今回は伏字にさせていただきます。
(さとみ)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
● ご意見、ご感想は         ⇒このメールに返信ください
〇 配信中止、アドレス変更は ⇒http://www.ObjectClub.jp/community/object_ml/help/
〇 免責事項、過去の記事は   ⇒http://www.ObjectClub.jp/community/object_ml/
■ 発行:オブジェクト倶楽部 ⇒http://www.ObjectClub.jp/
■ 編集代表:平鍋  健児
Copyright (c)2003-2005 オブジェクト倶楽部. All Rights Reserved.
powered by Eiwa System Management, Inc.