Date:  Wed, 27 Sep 2006 16:04:04 +0900
Subject:  【オブジェクト倶楽部: 2006-36号】
X-Mail-Count: 00163

       ┏━━━━━━━━━━━━━━━━━━━━━━━━━━■
       ┃                         ■┃
      ●┃● ● オ ブ ジ ェ ク ト 倶 楽 部   ■ ┃
       ┃                       ■  ┃
       ┗━━━━━━━━━━━━━━━━━━━━━━■━━━┛
                          No.157 2006/9/27

■ I N D E X
┃
┣【Topics】第1回アジャイル・セルオープンフォーラム開催のお知らせ
┣【プログラミング】TurboGearsでPythonを始めてみよう![5]
┣【PF】たまには仕事に役立つコミュニケーションのヒント[3]
┗【アンケート】気になるシステム業界 ホントのところ
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃  ★★ 『 Solaris 10 』が使われる理由、ご存知ですか?  ★★  ┃
┃              http://sdc.sun.co.jp/solaris/              ┃
┃ 全世界で500万件以上ものライセンス出荷数!今すぐ使える無償OS!  ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
 〇 
〇━━━━━━━━━━━━━━━━━━━━━━━━━━━T o p i c s━
 〇 アジャイルプロセス協議会/アジャイル・ソフトウェアセル生産WG主催
    オープンフォーラム開催(10/13:東京)
  〇 〇━━━━━━━━━━━━━ ━━・ 
アジャイルプロセス協議会/アジャイル・ソフトウェアセル生産WG主催のオー
プンフォーラムが開催されます。
ワーキンググループの設立より1年。アジャイルプロセスやソフトウェアセル生
産方式のエッセンスの解説や、事例の紹介。更に豪華メンバーによるパネルディ
スカッション等が行われます。
日時:10月13日(金)13:00?17:00 (12:30開場)
主催:アジャイルプロセス協議会/アジャイル・ソフトウェアセル生産WG
詳細:http://www.agileprocess.jp/modules/eguide/event.php?eid=7

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━1 s t ■━
■
┗【プログラミング】TurboGearsでPythonを始めてみよう![5]

こんにちは、オブジェクト倶楽部の海の男、やっとむです。
私事で恐縮ですが、富士Qの「ええじゃないか」に乗ってきました!
げろんげろんに振り回され、気分は暴風で沈没して遭難。もう一生乗るもんか。

今回はTurboGearsから少しはなれて、Pythonのオブジェクト指向とクラスの仕
組みについて解説したいと思います。

■□ クラス定義 ■□

Pythonにはオブジェクト指向プログラミングの機能があります。もちろんクラ
スやメソッド、継承やポリモーフィズムなどもあります。とはいえPythonは
「ピュアな」オブジェクト指向言語ではありません。関数型言語の機能も持っ
ているし、構造化プログラミングも得意です。そのためPythonのオブジェクト
指向プログラミングでは、言語実装の裏の動きがちらほらと見え隠れすること
があります。

今回は、そうした裏の動きにも触れながらPythonのオブジェクト指向プログラ
ミングを見ていきましょう。まずはクラスの書き方です。インタープリタから
下記のように入力すると、Eggクラスを定義できます。

 >>> class Egg(object):
 ...   def fall(self):
 ...     print 'Hampty Dampty had a great fall'
 ...   def hello(self, kind):
 ...     print "Hello, I'm " + self.name + "."
 ...     print "I'm an egg of " + kind + "."
 ...

「(object)」は、継承元となるスーパークラスを指定しています。objectはす
べての基底となるクラスです(省略もできますが、省略すると意味が変わって
しまいます。かならず付けるようにしてください)。[*1]

クラスのインスタンスを作成するには、以下のようにクラス名に「()」を付け
て呼び出します。

 >>> e = Egg()

Eggクラスにはfall()メソッドとhello()メソッドが定義してあります。メソッ
ドを呼び出すには「.」で区切ってインスタンスとつなげます。

 >>> e.fall()
 Hampty Dampty had a great fall

fall()メソッドには「self」というパラメータがあります。これはインスタン
ス自身を示すパラメータで、Javaの「this」やRubyの「self」と同じものです。
Pythonでは、かならずメソッドの第1引数にselfを明示的に書く必要があります。
呼び出すときには、インスタンスの参照が自動的にselfに渡るので、引数とし
て渡すことはありません。

このルールは、メソッド(インスタンスに結びつく)と関数(独立して存在する)
とが、内部的には同等であることに起因しています。実は、

 >>> e.fall()

という呼び出しは、

 >>> Egg.fall(e)

と同じように働くのです。Egg.fall()はインスタンスと結びついていないメ
ソッドです。なので、Egg.fall(e)と呼び出すと、selfパラメータにeの参照が
渡り、同じように動作します。

■□ データ属性はすべてpublic ■□

インスタンスのデータ属性(メンバ変数、フィールドと同じもの)は、宣言なし
で自由に設定できます。普通の変数を宣言なしで使えるのと同じ感覚です。ま
たデータ属性には可視性はありません。どこからでも自由に参照・変更がで
きます。

(だからと言って無闇にデータ変数を操作していいというわけではありません。
Python言語のスタンスは、「良識あるプログラマにとって、文法的な束縛は邪
魔になるばかりである」というものです。Pythonは良識あるプログラムを書く
オトナが使うものだというわけです。)

eに、nameというデータ属性を設定しましょう。

 >>> e.name = 'Duncan'
 >>> print e.name
 Duncan
 
 Eggのhello()メソッドでは、self.nameを表示しようとしています。上で設定
した値が表示されますね。

 >>> e.hello('penguin')
 Hello, I'm Duncan.
 I'm an egg of penguin.

ここでちょっと、Eggのインスタンスであるeを調べてみましょう。dir()を使
うと、いくつかの内部的なメソッドに加えて、定義したメソッドとデータ属
性が見えます。

 >>> dir(e)
 ['__class__', '__delattr__', '__dict__', '__doc__', 
  '__getattribute__', '__hash__', '__init__', '__module__', '__new__',
  '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__',
  '__weakref__', 'fall', 'hello', 'name']

この中にある、__dict__という変数には、インスタンスのデータ属性が辞書の
形で入っています(辞書は連載第2回で紹介しました)。

 >>> e.__dict__
 {'name': 'Duncan'}

なので、__dict__を使ってデータ属性を取り出したり、追加・変更したりもで
きてしまいます。

 >>> e.__dict__['name']
 'Duncan'
 >>> e.__dict__['color']='purple'
 >>> e.color
 'purple'
 >>> e.__dict__.pop('name')
 'Duncan'
 >>> e.name
 Traceback (most recent call last):
   File "<stdin>", line 1, in ?
 AttributeError: 'Egg' object has no attribute 'name'

■□ クラスに後からメソッドをくっつける ■□

先ほどdir()で見たように、クラスのメソッドとデータ属性は、同列に並んで
います。これを利用して、クラスを定義した後でメソッドを追加することがで
きます。まず、第1引数にEggのインスタンスを取る関数を定義します。

 >>> def fry(egg): 
 ...   print "I'm a fried " + egg.name + "."
 ...

次に、これをEggクラスに追加してしまいます。

 >>> Egg.fry = fry

これだけで、Eggクラスのメソッドとしてfryが定義されました。インスタンス
から呼び出すこともできます。

 >>> e.fry()
 I'm a fried Duncan.

ちゃんとe.nameが表示できています。

上のfry関数では、「egg」というパラメータを使っています。メソッドであれ
ばこれは「self」になるところです。実は、「self」というのは予約語でもな
んでもなく、ただのコーディングスタイルです。代わりに「this」を使ってメ
ソッドを書いても、プログラムは何の問題もなく動きます(他の人に読みにく
いので、止めたほうがいいですけれど)。

このようにクラスの定義を後から自由にいじれるために、Pythonはメタプログ
ラミングやアスペクト指向プログラミングにも柔軟に対応できます。

■□ おわりに ■□

今回はPythonのオブジェクト指向プログラミングを、ちょっと裏を覗きながら
紹介しました。もっと突っ込んで調べると、さらに深い裏の世界が見えてき
ちゃったりするかもしれません。

裏、でもないですが、ちょっとおまけのテクニックを。次のようにすると、ク
ラスやメソッドのソースを見ることができます。上で見たように、Eggクラス
のメソッドがEggクラスの中に書いてあるという保証がないので、こうやって
確認できるのは便利なこともあります。

 >>> import inspect
 >>> print inspect.getsource(Egg.fry)

ただしインタープリタから入力したコードは表示できません。ソースファイル
から読み込んだものに使ってください。まあ、インタープリタに手で入れた
ソースコードをあらためて読む必要もないですよね。(やっとむ)

[*1]:継承元を指定しないで「class Egg: ...」と書くこともできます。スー
パークラスとして「object」を指定することで、作成するクラスが「新スタイ
ルクラス(new-style class)」と呼ばれるものになり、いくつかの便利な機能
が追加されます。
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E009-4&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E009-4&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E009-4&choice=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━2 n d ■━
■
┗【PF】たまには仕事に役立つコミュニケーションのヒント[3]
          - ひとはそれぞれ違う 「テイラーメイド」その2

週末の東京は、とてもいい天気でした。どこかへお出かけになった方も多いよ
うですね。秋は陽気が過ごしやすくなることに加えて、お芋やお米などの炭水
化物が収穫される時期です。夏の間に食欲が無かった人は、ここで一気に太る
ことがあるそうですよ。悩ましい季節です。

さて、前回のコラムでは「テイラーメイド」を取り上げ、関わりあう人にとっ
てそれぞれ受け止め方の違いがあるということをお話しました。
今回のコラムではその話をさらに発展させて、「受け止める側の主導権」につ
いても触れてみたいと思います。
どういうことかというと、どんな言葉でもその会話を交わす二人の関係が大き
く影響をしています。もしも「前回のコラムからヒントを得て行動してみたけ
ど、どんな言葉をかけてもうまく行かないな」と思っている人がいらっしゃれ
ば、少しヒントになればうれしく思います。

■私の受け止め方の場合

ここで唐突ですが、実際に私がオブジェクト倶楽部のメンバーとのやり取りを
どんな風に受け止めているのかをサンプルとして挙げてみたいと思います。ど
れだけ勝手に!?受け止めているのかを見てみましょう。

オブジェクト倶楽部の事務局としてお仕事を始めて、既に半年が過ぎました。
直接の会話やメールなどを通して、私はメンバーの皆さんのことをこんな風に
感じています。

主宰のひら○べ氏は、お忙しい中でもスピーディーにメールなどでレスポンス
をくださいます。そして、自分の感想を添えてくださることが多いように感じ
ます。
「僕の意見は〜」「僕は○○が好き。」
このレスポンスの速さと、ご自分の意見も添えてくださることで、私にはリー
ダーとしての心強い印象を感じます。

事務局長のあ○の氏は、とても丁寧です。「ありがとうございました。」「お
願いします。」簡単な会話の中でも丁寧な言葉を使われることで、とてもこち
らを尊重していただいている気持ちになります。

か○だ氏は、とても直接的に言葉をかけてくださいます。
「凄いね〜!」「面白いね〜。」
褒めてくれるときには笑顔が多いですし、こちらとしても素直に「嬉しいな」
という気分になります。夏のイベントのときは、このコメントひとつでプリッ
トひっつき虫[*1]を必死で練りまくりました[*2]。

お隣の席の○っとむ氏は、とても信頼が出来ます。
可能なことと不可能なことをきちんとわかり易く論理立てて説明してくださる
ので、ついついいろいろと相談してしまいます。

かく○に氏は、とてもタイミング良くアドバイスをしていただいたり、ご意見
をくださいます。このタイミングの良さも「きちんと見てくれているんだな!」
と安心感を感じます。

一番やり取りの多いま○わさんは、とても頻繁にいろいろな情報を教えてくだ
さったり、声をかけてくださいます。私はポジティブにその頻度の高さを「色々
と気を使ってくれてる」とありがたく受け止めています。

まだまだ沢山ご紹介したいエピソードはありますが、きりが無いので今回はこ
のあたりで止めておきましょう。

勿論一緒に仕事をしている仲間なので信頼して書いていますが、彼らの本当の
気持ちや感情というよりも、「受け止める側の私(上田)がそう思っている」と
いうことが、受け止める印象の主導権を持っているということなのです。

「メラビアンの法則」によると、言葉で発している情報は7%ほどに過ぎず、言
葉以外の表情や行動や服装などの印象による非言語メッセージが93%もあると
言われています。
それを受け取る側がある意味勝手に受け止めているのですから(ちょっと乱暴な
言い方ですが)、ややこしいですよね。

そこを補うのは、日ごろの人間関係に尽きると思います。
どんなに激しいケンカをしていても息がぴったりの夫婦とか、口が悪くてもお
客さんに愛される居酒屋のマスターなどは、きちんとした人間関係の上にある
会話だからこそ成り立っているのですね。
言葉だけではなく、お互いの人間関係作りって本当に大事です。(上田雅美)

[*1]:オブジェクト倶楽部愛用の事務用品
     http://www.kokuyo.co.jp/find/catalog/1_detail.php?c1=1118&c2=12&c3=00&sid=7914

[*2]:プリットひっつき虫を上手に使う秘訣は、事前の「練り」にあるそうです。
   か○だ氏はこの「練り加減」に強いこだわりを持っています。
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=M003-2&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=M003-2&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=M003-2&choice=2

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

今週は「携帯電話のポータビリティーを利用しますか?」のホントのところ。
携帯電話の電話番号を変更せずに、携帯電話の契約会社を変えることが出来る
ようになるそうです。10月後半からこのサービスがスタートするそうですが、
読者の皆さんは利用しようと思ってますか?ホントのところ。

  すぐ変えようと思っている。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=123&choice=0
  しばらくは様子をみてから検討する。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=123&choice=1
  今の契約会社で満足しているので、変えないつもり。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=123&choice=2
  このニュースを初めて知った。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=123&choice=3
  特に関心が無い。。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=123&choice=4
  それは秘密です。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=123&choice=5
  ちょっと語らせて!
     詳細をこのメールに返信ください!!

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

こんにちは、編集人です。オブジェクト倶楽部では秋のイベントの準備をして
います。なかなかスタッフが集まれないことがとても大変なのですが、Skipeを
使ったりと色々なものを屈指して、熱い企画の真っ最中。11月17日(金)開催で
す。ここを読んでる読者の皆さんに、こっそりとお伝えしてみます(笑)。

今週の強引な一言
*** 流れる水は腐らず(ことわざ)***
いつもいきいきと活動していれば、腐敗や停滞など悪いことが生じないという
たとえ。だけど、四六時中仕様変更ばっかり受けているチームは、腐っちゃう
かもしれませんね。
(上田雅美)

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