Date:  Wed, 25 Jun 2008 17:53:04 +0900
Subject:  【オブジェクト倶楽部: 2008-24号】
X-Mail-Count: 00248

       ┏━━━━━━━━━━━━━━━━━━━━━━━━━━■
       ┃                         ■┃
      ●┃● ● オ ブ ジ ェ ク ト 倶 楽 部   ■ ┃
       ┃                       ■  ┃
       ┗━━━━━━━━━━━━━━━━━━━━━━■━━━┛
                          No.240 2008/6/25

■ I N D E X
┃
┣【Topics】いよいよ夏イベント!「ワールドパブ」の全容がついに!
┣【書評】「インターフェース指向設計 
┃        アジャイル手法によるオブジェクト指向設計の実践」
┗【プログラミング】ゆるーいHaskell[21]

〇━━━━━━━━━━━━━━━━━━━━━━━━━━━T o p i c s━
 〇 いよいよ夏イベント!「ワールドパブ」の全容がついに!
  〇 〇━━━━━━━━━━━━━ ━━・ 
いよいよ夏イベントが来週に迫ってきました。皆さん準備はいかがですか?
って、私たちのほうが「大丈夫ですか?」という状況ですが、準備に勤しんでい
るところです。
今回のイベントでは、オブラブイベントの人気コーナーのひとつでもある「ワー
ルド・カフェ」がありません。しかし!「ワールド・パブ」を懇親会会場にて開催
計画中です。そうです!オブラブは最後まで夏イベントを盛り上げ続けます!

◆主なテーブルファシリテーターとテーマ(予定)
 ・平鍋健児 「日本でソフトウェアエンジニアが幸せになるには」
 ・岡島幸男 「受託開発」
 ・家永英治 「XPブームからX年。おおきくふりかえってみるの会」
 ・木下史彦 「アジャイル開発に関するFAQ集をつくる会
              〜"そんなん知らんがな" と言いたくなる瞬間、
                         あなたならどう答えます?〜」
                                              他、現在絶賛出場交渉中!

これからでも懇親会に参加したい場合には、ぜひお申し込みください!

最終申し込み締め切りは、6月26日(木)までです。
お振込みは6月30日午前確認までとさせていただきます。
●イベントHP http://www.ObjectClub.jp/event/2008summer/

 ※「懇親会に参加しない」と申し込まれた方で、やはり参加を希望する場合は、
    事務局までご連絡ください。
   ⇒2008summer@objectclub.jp (担当:上田宛)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■━
■
┗【書評】「インターフェース指向設計 
            アジャイル手法によるオブジェクト指向設計の実践」

はじめまして、株式会社永和システムマネジメント
新入社員の黒岩 臣教(くろいわ たかのり)です。
先日、配属先が決まりました。これからいろいろとあると思いますが、失敗に
めげずに一歩一歩着実に成長していきたいと思ってます。
読者の皆様、末永くよろしくお願いいたします

さて、今回は、弊社角谷が監訳した「インターフェース指向設計 アジャイル手
法によるオブジェクト指向設計の実践」[*1]の紹介をさせていただきます。

本書は、インターフェース設計について理論的なことから実践まで系統だてて
学べる本です。
(本書はインターフェイスをJavaやRubyなどのプログラミング言語で記述したら
どうなるかということを解説した本ではありません。)インターフェイスとは?
どんなものがインターフェイスになるの?という基本的なことから「インター
フェイス設計を開発プロセスにどう適応していけばよいか、という実践的な内
容まで11章に渡って簡潔に(1章たかだか20ページで)解説しています。

   1章: インターフェイスとは何かについて学べます。
   2章: インターフェイスを実装する上での留意点(3原則、約束事)が学べま
         す。
   3章: さまざまな種類のインターフェイスについて整理されています。
   4章: 「高凝集かつ疎結合」なインターフェイス設計を目指すことを示唆し
         てくれます。
   5章: 「継承の使用 vs. インターフェイスの使用」について整理されていま
         す。
   6章: リモートインターフェイスについて学べます。
   7章: インターフェイス指向設計を開発プロセスにどのように適応させてい
         くかが学べます。
   8章〜10章: インターフェイス指向設計の実践例を示してくれています。
  11章: インターフェイスを扱う様々なデザインパターンが紹介されています。

本書では、インターフェイス名とメソッド名だけからなる以下のような形式で
書かれているので高度なコード読解能力を必要としません。

interface Pizza
Size size
Topping [] toppings

オンラインマニュアルや入門書を参照せずに読み進めることができます。
そんな本書を以下の方におすすめします。

・そろそろ設計手法について勉強してみようかなと考えている
・ソフトウェア開発が大好きで何でもいいからとにかくスキルアップしたい
・「カプセル化」「継承」「ポリモーフィズム」というオブジェクト指向の三
  大要素についてある程度予備知識がある

●本書を楽しく読むために
私は本の再利用性を促進させるために次のような工夫をしています。
それを簡単にご紹介したいと思います。

・ポジティブな主張(例:〜できる)には「赤」、ネガティブな主張
  (例:〜できない)には「青」と色分けして線を引いてみる。
・○(メリット)と×(デメリット)に分類して整理してみる。
・文が示している絵を描いてみる

私は「本は奇麗にとっておくものではなく、あとで読み返した時にどこに何が
書いてあるかがわかる状態にカスタマイズしておくもの。」だと考えます。
自分色に染めてしまえば、本への愛着もわきます。
本書を読みながら気付いたことやアイディアを余白にでもメモしておけばいつ
か何かの形で自分を助けてくれるかもしれませんね。(黒岩臣教)

●参考
・目次
・監訳者まえがき
・はじめに(各章の概要と対象読者)
・サンプル(7章の内容)
については以下をご参照ください。
http://www.oreilly.co.jp/books/9784873113661/

[1] : インターフェイス指向設計 
                      アジャイル手法によるオブジェクト指向設計の実践
Ken Pugh (著)、角谷信太郎(監訳)(翻訳)、児島修(翻訳) 
http://www.amazon.co.jp/o/ASIN/4873113660/xpjp-22
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=A001-18&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=A001-18&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=A001-18&choice=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■━
■
┗【プログラミング】ゆるーいHaskell[21]

こんにちは。西川です。GHCの最新バージョン6.8.3が先週リリースされました。
今回のリリースは前バージョンである6.8.2のバグフィックスがメインらしいの
ですが、興味のある方はインストールしてみることをおすすめします。

さて、今回はIOのMonadクラスのinstance定義についてお話します。と言っても
前回も書ましたがIOがモナドなのは副作用をモナドで抽象化して扱うためです。
今回はちゃんとIOのinstance定義をソースから確認してみましょう。
GHCのソースをお持ちなら(GHCソースディレクトリ)/libraries/base/GHC/IOBase.lhs
にIOのinstance定義があります。

===== IOBase.lhs ここから =====

newtype IO a = IO (State# RealWorld -> (# State# RealWorld, a #))

instance  Monad IO  where
    return x = returnIO x
    m >>= k  = bindIO m k

unIO :: IO a -> (State# RealWorld -> (# State# RealWorld, a #))
unIO (IO a) = a

bindIO :: IO a -> (a -> IO b) -> IO b
bindIO (IO m) k = IO ( \ s ->
  case m s of
    (# new_s, a #) -> unIO (k a) new_s
  )

returnIO :: a -> IO a
returnIO x = IO (\ s -> (# s, x #))

===== IOBase.lhs ここまで =====

読みやすいようにちょっと整形して大事なところだけ抜き出してみました。
"State# RealWorld"だったり、"(#s, x #)"だったり見慣れない表記がでてきま
したが、ちょっと変わったデータ型とタプルのようなものと今は考えておいて
ください。

まずはreturn関数の定義から確認してみましょう。returnIO関数では引数をIO
コンストラクタに無名関数を渡してIO型を作っています。IO型宣言で定義され
ているとおりですね。

つづいて(>>=)関数を確認してみましょう。bindIO関数でパターンマッチを使っ
て(IO m)からmをとりだしています。mの部分は(s -> (# s, a #))という関数に
あたるので、bindIO関数の2行目の"m s"で関数mにsを適用しています。
この”m s"は(# s, a #)という型をもちますね。unIOではさらにパターンマッ
チを使ってIOコンストラクタから(State# RealWorld -> (# State# RealWorld, a #))
という関数をとりだしていますので、bindIO関数のIOコンストラクタの中身は
(State# RealWorld -> (# State# RealWorld, a #))という型をもちます。
といっても何を言っているのかよく分からないと思いますので、簡単な
"(return 3 :: IO Int) >>= return . (+) 1"という一連のIOモナドに束縛され
た式を展開してみましょう。

> > (return 3 :: IO Int) >>= return . (+) 1
# returnIO関数を展開します。(.)関数も見通しが良くないのでこれも展開します。
> > IO (\s -> (# s, 3 #)) >>= \x -> return ((+) 1 x)
# 残ったreturnIO関数も展開します。
> > IO (\s -> (# s, 3 #)) >>= \x -> IO (\s -> (# s, ((+) 1 x) #))
# (>>=)関数もbindIO関数に展開します。さらにsが沢山でてきて見通しが悪い
のでsをs0,s1でおきかえます
> > bindIO (IO (\s0 -> (# s0, 3 #))) (\x -> IO (\s1 -> (# s1, ((+) 1 x) #)))
# bindIO関数の定義より
> > IO (\s -> case (\s0 -> (# s0, 3 #)) s of
              (# new_s, 3 #) -> unIO (\x -> IO (\s1 -> (# s1, ((+) 1 x) #)) 3) new_s)
# case文の中を展開するとラムダ関数にsが適用されs0,new_sが消えます (*)
> > IO (\s -> unIO ((\x -> IO (\s1 -> (# s1, (+) 1 x #))) 3) s)
# xに3が適用されxが消えます。
> > IO (\s -> unIO (IO (\s1 -> (# s1, 4 #))) s)
# unIO関数によりIOコンストラクタの中のラムダ関数がとりだされます。
> > IO (\s -> (\s1 -> (# s1, 4 #)) s)
# s0が適用されて
> > IO (\s -> (# s, 4 #))
長くなりましたが、”(return 3 :: IO Int) >>= return . (+) 1"を展開でき
ました。これで"(return 3 :: IOInt) >>= return . (+) 1"という式全体が
IO Intになっていることがお分かりになったかと思います。
上記の展開の途中に(*)でコメントしましたが、s0,new_sが一番左のラムダ変
数sで置き変わっています。これにより(>>=)関数の右側の関数がこのラムダ変
数sに依存していることになります。で、IOの型宣言よりsというのは
State# RealWorldのことなのですが、これは何を意味しているのでしょう。
というところで、ちょっと長くなってしまったので今回はこのあたりでおしま
いにします。(nishikawa)
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E008-20&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E008-20&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E008-20&choice=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■ 
■
┗【アンケート】気になるシステム業界 ホントのところ

今週は「どこでランチしてますか?」のホントのところ。梅雨の季節は続いて
いますが、時折晴れ間がのぞくとあまりの気持ちよさに「外でお弁当なんていい
かも!」と思ってしまいます。皆さんはいかがでしょうか?さて、皆さんがど
んな場所でランチを召し上がっているかについてお聞かせください。「どこでラ
ンチしてますか?」

  仕事をする自分の席にて。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=205&choice=0
  社内のリラックスコーナーや、会議室で。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=205&choice=1
  社食派です(自社に限らず)。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=205&choice=2
  会社の近くでいつも外食です。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=205&choice=3
  いつも決まっていません(その時々による)。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=205&choice=4
  移動中に済ませることが多いです。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=205&choice=5
  食べない派。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=205&choice=6
  仕事をしながら、バランス栄養食派です。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=205&choice=7
  それは秘密です。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=205&choice=8
  ちょっと語らせて!
     詳細をこのメールに返信ください!!

アンケート結果はオブジェクト倶楽部サイト上にて公開します。お楽しみに。
なお、前号「どんなことに幸せを感じていますか?」の結果は公開中。ぜひご
覧下さい。
⇒http://www.ObjectClub.jp/special/kininaru/vol204/PlonePopoll_results2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
■
┗編集後記

こんにちは、編集人です。いよいよイベント準備も大詰め。お申し込みやお問
合せでいろいろとご協力いただいた皆様。ありがとうございました。
イベントと同時に、7月突入。一気に夏モードですね。1年の半分が過ぎたと考
えると、なんだか急にあわててしまいます。そんなときこそ自分自身を立ち止
まって、ふりかえる時間を持つことをおススメします。ひとりで「自分上半期ふ
りかえりワークショップ」開催なんていかがでしょうか?ファシリテーションの
よい練習にもなりそうですね。
【参考】http://www.ObjectClub.jp/community/pf/

さて、オブジェクト倶楽部カレンダーの7月分の電子データを公開します。
 7月は「言語を作った人は?」です。先日RubyKaigi2008が開催され、Rubyを
 作ったまつもとゆきひろさんもご来場されていたそうですよ。(あ!1つ答えを
 言ってしまった!)実はこのパズルは本当に組み立てることができるんです!
 7月が終わったら、お試しくださいね!皆さんはどのぐらいご存知でしたか?

カレンダーのダウンロードはこちらから。
http://www.ObjectClub.jp/special/#calendar

今週の強引な一言
*** 「こういう時、あわてたほうが負けなのよね」(ハヤト・コバヤシ)***
やらなければいけないことがたくさんあって、残された時間は僅か。
こういう時はどうしても気が急いてしまうもので、ちょっとしたことに手を抜
いてしまいがちです。
忙しい時ほど、テストをちゃんとして、残タスクを整理したり、ミスしないよ
うに手順を整理したり、情報をしっかり共有する。遠回りなように見えますが、
そうした方が意外と近道だったりするものです。
出典 : 機動戦士ガンダム 第32話
(dot.)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
● ご意見、ご感想は         ⇒このメールに返信ください
〇 配信中止、アドレス変更は ⇒http://www.ObjectClub.jp/community/object_ml/help/
〇 免責事項、過去の記事は   ⇒http://www.ObjectClub.jp/community/object_ml/
■ 発行:オブジェクト倶楽部 ⇒http://www.ObjectClub.jp/
Copyright (c)2003-2008 オブジェクト倶楽部. All Rights Reserved.
powered by Eiwa System Management, Inc.