┏━━━━━━━━━━━━━━━━━━━━━━━━━━■
┃ ■┃
●┃● ● オ ブ ジ ェ ク ト 倶 楽 部 ■ ┃
┃ ■ ┃
┗━━━━━━━━━━━━━━━━━━━━━━■━━━┛
No.201 2007/09/12
■ I N D E X
┃
┣【コラム】メルマガ創刊時の思い出 - オブジェクト指向を教える難しさ
┣【プログラミング】SkypeをPythonで 〜 いまそこにあるPython [2]
┗【アンケート】気になるシステム業界 ホントのところ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━1 s t ■━
■
┗【コラム】メルマガ創刊時の思い出 - オブジェクト指向を教える難しさ
初めまして。黒須です。
世間では9月に入り涼しくなりましたが、私は世界陸上の男子4×100mリレーの
熱い戦いを見て大興奮でした。
200号記念ということで、創刊当時の思い出を紹介したいと思います。
●メルマガ創刊当時を振り返る
メルマガ創刊は2003年ですが、その頃皆さんはオブジェクト指向に関わってい
ましたか?
これより少し前の2001年あたりからですがUMLをシステム設計に使用する企業が
増え、UMLモデリングツールといえばRational社のRoseが主流を占めていました。
またデザインパターンがブームになっており、GoFの23パターンを説明できるよ
う結城浩さんの「Java言語で学ぶデザインパターン入門」に毎日目を通した思
い出があります。
当時私は某メーカーのUMLの普及・教育を行う部署にいましたが、新人研修でオ
ブジェクト指向を理解してもらう難しさを実感しました。
●オブジェクト指向を理解するための2つのハードル
オブジェクト指向を理解してUMLで設計し、実際に開発ができるようになるまで
には、ハードルがいくつかあると思います。よく見られるハードルとしては次
の2つに集約されるのではないででしょうか。
1つはユースケース図とソースコードのギャップです。
人型と楕円で書かれたユースケース図が、どのような過程を経てソースコード
に結びつくのか?
ギャップが大きすぎて初めての人には理解しがたいものです。
2つ目は現実世界とシステムの世界のオブジェクトの混同です。
何らかの開発経験がある人にとってこのハードルは低いと思いますが、開発経
験の無い人はこの2つを混同しがちだと思います。
今回は、筆者が新人研修の講師を務めた際に実感した2つ目のハードルについて
紹介したいと思います。
●銀行の業務には「植木」が必要である
筆者が担当した新人研修は、カブセル化、継承などオブジェクト指向の考え方
を理解することを目的として、講義と演習を交えて1週間行われました。
1日目のオブジェクトについての説明が終わりディスカッションの時間です。
課題:「銀行に預けられた貯金はコンピュータのシステムにより管理さている。
貯金を管理するという業務を実現するのに必要なオブジェクトを挙げな
さい」
グループごとにディスカッションした後、模造紙に回答をまとめて発表します。
どのグループでも見られたオブジェクトが次の3つでした。
┏━━┓ ┏━━┓ ┏━━┓
┃顧客┃ ┃口座┃ ┃貯金┃
┗━━┛ ┗━━┛ ┗━━┛
しかし次のようなオブジェクトを挙げたグループも少なくありません。
┏━━┓ ┏━━━┓ ┏━━━━┓
┃植木┃ ┃ソファ┃ ┃自動ドア┃
┗━━┛ ┗━━━┛ ┗━━━━┛
新人にこれらを挙げた理由を尋ねると、「植木とソファは待合コーナーに、自
動ドアは銀行の入り口に存在し、これらが無いと銀行の業務ができないから」
という答えが返ってきました。
●現実世界とシステム世界のオブジェクトを混同する原因
「植木」は実際の店舗に存在する物理的オブジェクトであり、銀行の業務には
必要です。しかし、システムで「貯金を管理する」という機能を実現するには
あまり関係がなさそうです。
新人はどのように考えて「植木」を必要なオブジェクトとして挙げたのでしょ
う?その理由は主に次の2つだと思います。
1. 現実世界の物理的オブジェクトとシステム中のオブジェクトを混同している
2. 現実世界の物理的オブジェクトをそのまま抽出すればシステムの機能を
実現できると理解している
これらについては、私の説明に問題があると思いました。
例えばオブジェクト指向の入門書では継承について
「『人』のサブクラスが『一般社員』と『管理職』で・・・」
のように、大半が現実世界のオブジェクトを用いて説明しています。
私も講義ではこのような調子で説明してしまいました。
オブジェクト指向の話を始めて聞く人がこう説明されることで、継承について
理解できると思います。
しかしながら、
「現実世界のオブジェクトを挙げていき、現実世界の継承や関連をそのままUML
の図に描けば動くシステムになる!」
と理解してしまう危険が非常に高くなります。
相手の経験を踏まえて説明を変えることの大切さを実感した研修でした。
(黒須)
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=H003-37&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=H003-37&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=H003-37&choice=2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━2 n d ■━
■
┗【プログラミング】SkypeをPythonで 〜 いまそこにあるPython [2]
こんにちは、オブジェクト倶楽部のやせがえる、やっとむです。
やせがえる 負けるな一茶 これにあり というわけで応援してね。
やせてない、というツッコミはかえるにしつれいですよ。
■Python News
みなさんお待ちかね、全国3000万人のPythonistaが待っていたPython3000のア
ルファ版がリリースされましたね[*1]。Python3000とは、言わずと知れた未来
のPython。もともとは、いいアイデアだけど実現はちょっとムリかもねー、と
いうのを「じゃ、それはPython3000で」みたいな言い方をしていたらしいです
[*2]。
その後、後方互換性を一部切り捨ててでも、よりよい言語を作ろうというバー
ジョンをPython3000と位置づけました。PEP3000番台で仕様を検討してきて[*3]、
Python3.0α1ということでいよいよリリースされたわけです。日本語を含む
Unicode文字列の取り扱いが進歩したあたり、またRubyに一歩差をつけちゃい
ましたね!(地雷)
ニュースをもうひとつ。JavaVM上で動作するPython処理系のJython2.2が正式
リリースされました[*4]。Jythonは2.1以来しばらく動きがなかったのですが、
JRuby(Java上で動くRuby)や.NET版PythonであるIronPythonに刺激されたのか
どうなのか、そのあたりはよくわかりませんが、なんにせよPython界が活発な
のはいいことじゃないですか!
■いまさらSkype
という世間の活発な動きを軽くスルーして、仕事ではRubyを書きながらコソコ
ソとPythonを使っている今日この頃ですが、ふとしたことからSkype[*5]をプロ
グラムから操作できまいか?という話が持ち上がりました。SkypeAPIというも
のがあることは聞いていて、調べたところWindowsのCOM(Skype4COM)と、Java
(Skyep4Java)のラッパーがある模様です[*6](LinuxではD-Busというものを使う
そうです[*7])。
さて、ここで当然考えることは、
「Pythonから使えるよな...」
で、やってみました。
通常SkypeはWindowsマシンで使っているので、COMラッパーのほうを使うこと
にしました。PythonからCOMを操作するには、Python Extension for Windows
(pywin32 [*8])を使うのが簡単です。Skype4COMは、Skypeインストール時に既
にインストールされています[*9]。pywin32は
>easy_install pywin32
でインストール[*10]したら、準備は完了[*11]。いつものとおり、Pythonをイ
ンタラクティブに使って試してみました。
>python
Python 2.5 ...
Type "help", ...
>>> import win32com.client
>>> skype = win32com.client.Dispatch('Skype4COM.Skype')
>>> if not skype.Client.IsRunning: skype.Client.Start() ...
>>> call = skype.PlaceCall('echo123')
これだけで、通話テストにコールすることができます。通話終了は、
>>> call.Finish()
これでOK。簡単じゃないですか?
■なにができるの?
Skype4COMのリファレンス[*12]を調べると、Skypeのさまざまな機能(通話、グ
ループ通話、コンタクト管理、チャット、ボイスメール)がAPIからアクセスで
きることがわかります。チャットで発言するなら
>>> skype.ActiveChats[0].SendMessage('test message')
コンタクトを一覧するなら
>>> for f in skype.Friends:
... print f.Handle, f.FullName
...
Skypeのウインドウを操作するなら
>>> client = skype.Client
>>> client.Start() # Skypeを起動、またはウインドウを開く
>>> client.Minimize() # ウインドウを最小化
>>> client.OpenMessageDialog('echo123', 'Hello') # チャットを開く
>>> client.OpenProfileDialog() # プロフィールダイアログを開く
といった具合です。Skypeの操作を自動化したり、チャットボットを作ったり、
さらにはSkype A2A[*13]を使ってSkype上で動作するネットワークアプリケー
ションを構築することもできるでしょう。
■まとめ
今回はいまそこにあるSkypeをPythonでいじってみました。今回はWindows専用
の方法を紹介しましたが、Skype4JavaとJythonを使えばクロスプラットフォー
ムで動きますし、Skype4PyというクロスプラットフォームのPythonラッパーも
あるようです[*14]。いずれもAPI自体には大きな違いはないようなので、自分
の環境に合ったものを使ってみてください。
ちなみに、今回のことの発端は、Skypeの履歴を取得したかったのですが、ど
うもSkypeはそういったログなどをテキストで保存していない!ので、どう
やったら取り出せるかな?と調べ始めたのでした。みなさんもぜひ、いまそこ
にあるタスクをPythonでこなしてみてくださいね!(やっとむ)
[1] : http://journal.mycom.co.jp/news/2007/09/02/002/index.html
[2] : http://newworld.ddo.jp/turky/198
[3] : http://www.python.org/dev/peps/pep-3000/
[4] : http://journal.mycom.co.jp/news/2007/08/24/031/
[5] : http://www.skype.com/intl/ja/
[6] : https://developer.skype.com/Download
[7] : https://developer.skype.com/Docs/ApiDoc/Skype_API_on_Linux
[8] : http://sourceforge.net/projects/pywin32/
[9] : インストール時のオプションによっては、導入されない。
その場合、[6]のページからDLLをダウンロードし、
>regsvr32 skype4com.dll
として設定する。
[10] : easy_install は setuptools の一部。
http://peak.telecommunity.com/dist/ez_setup.py
をダウンロードして、
>python ez_setup.py
でインストールできる。詳しくは下記を参照。
http://peak.telecommunity.com/DevCenter/EasyInstall
[11] : *.dllをC:\Windows\System32 にコピーしないといけない場合がある。
DLLは以下のディレクトリにある。
%PYTHONHOME%\Lib\site-packages\pywin32*\pywin32_system32
[12] : https://developer.skype.com/Docs/Skype4COMLib
[13] : http://www.google.co.jp/search?q=skype+a2a
[14] : http://skype4py.sourceforge.net/
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E0011-1&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E0011-1&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E0011-1&choice=2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━3 r d ■━
■
┗【アンケート】気になるシステム業界 ホントのところ
今週は「コミュニティーのイベントや勉強会に初めて参加するときに気になる
ことは?」のホントのところ。
誰にだって初めてがあるものです。コミュニティーのイベントや勉強会に初め
て参加するときに、読者の皆さんが一番気になることってどんなことですか?
教えてください。
内容がためになるといいな。
http://www.ObjectClub.jp/special/kininaru/vote?vol=167&choice=0
内容についてゆけるかな?
http://www.ObjectClub.jp/special/kininaru/vote?vol=167&choice=1
仕事に役立つ内容だといいな。
http://www.ObjectClub.jp/special/kininaru/vote?vol=167&choice=2
プレゼントやノベルティーに期待!
http://www.ObjectClub.jp/special/kininaru/vote?vol=167&choice=3
払ったお金分の価値が欲しいところだな。
http://www.ObjectClub.jp/special/kininaru/vote?vol=167&choice=4
いろんな人と話ができるといいな。
http://www.ObjectClub.jp/special/kininaru/vote?vol=167&choice=5
懇親会参加しようかどうしようかな?
http://www.ObjectClub.jp/special/kininaru/vote?vol=167&choice=6
終電間に合うかな。
http://www.ObjectClub.jp/special/kininaru/vote?vol=167&choice=7
その他。
http://www.ObjectClub.jp/special/kininaru/vote?vol=167&choice=8
それは秘密です。
http://www.ObjectClub.jp/special/kininaru/vote?vol=167&choice=9
ちょっと語らせて!
詳細をこのメールに返信ください!!
アンケート結果はオブジェクト倶楽部サイト上にて公開します。お楽しみに。
なお、前号「オブラブメルマガはいつごろから読んでますか?」の結果は公
開中。ぜひご覧下さい。
⇒http://www.ObjectClub.jp/special/kininaru/vol166/PlonePopoll_results2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
■
┗編集後記
こんにちは、編集人です。気がついたら少しずつ秋らしくなってきましたね。
「食欲の秋」「勉強の秋」「スポーツの秋」「普通の秋」といろいろあります
が、読者の皆さんはどんな秋になりそうでしょうか?すごしやすいよい季節が
訪れています。普段なかなかやれないことをやってみるのは、いかがですか?
今週の強引な一言
*** 悪事千里を走る(ことわざ)***
悪い行いや悪い評判は、瞬く間に遠くまで知れ渡るという意味。悪いことばか
りではなく、良いこともすごいスピードで知れ渡るようになりました。あっと
いう間に、SNSや動画サイトに感想や動画がアップされていたりします。時代は
変わりましたねぇ。
出典参考:故事ことわざ辞典 東京堂出版
(上田雅美)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
● ご意見、ご感想は ⇒このメールに返信ください
〇 配信中止、アドレス変更は ⇒http://www.ObjectClub.jp/community/object_ml/help/
〇 免責事項、過去の記事は ⇒http://www.ObjectClub.jp/community/object_ml/
■ 発行:オブジェクト倶楽部 ⇒http://www.ObjectClub.jp/
■ 編集代表:平鍋 健児
Copyright (c)2003-2007 オブジェクト倶楽部. All Rights Reserved.
powered by Eiwa System Management, Inc.