第1弾:「プロジェクトを成功させる現場リーダの守破離」岡島幸男http://www.ObjectClub.jp/download/voice/大好評だったオブジェクト倶楽部2006夏イベントでのセッション全録音です。事前条件はより緩く、事後条件はより厳しくこんにちは、天野勝です。今回のお言葉は「事前条件はより緩く、事後条件はより厳しく」です。Liskov(リスコフ)の置換原則の一側面を表しているこのお言葉を、今回も筆者の独断と偏見で、解釈、解説してみます。●リスコフの置換原則とは「派生型(サブ)はその基底型(スーパー)と置換可能でなければならない」というもので、MITでソフトウェアの研究をされていた、リスコフさんによって提唱された、というところから名付けられている原則です。オブジェクト指向の基本的な考えに「オーバーライド(操作の上書き)」があります。スーパークラスで定義していたもともとの操作を、サブクラスで上書きしてしまうというものです。この考えを使うと、メッセージを送っている側は、スーパークラスだろうが、サブクラスだろうがお構いなしに、メッセージを送れるという優れものです。優れているからこそ注意が必要で、サブクラスで操作を上書きしたときに、メッセージの送り手が期待しないような上書きをしてしまうと、混乱が起きてしまいます。そこで、このような混乱を避けるためにこの原則の適用を考える必要があります。ちなみに、この原則は、オブジェクト指向の中心的な概念である「クラス」や「オブジェクト」の基礎となっている、「抽象データ型」の研究をしている中で生み出された原則のようです。余談ですが、抽象データ型とは、あるデータに対して適用できる操作の集合で抽象化して定義した型の事です[*1]。「カウント」という名前のデータがあり、これに対して「カウントアップする(1加える)」「カウントダウンする(1減らす)」「リセットする(0にする)」「現在の状態を確認する」といった操作の集合で「カウンター型」と定義します。このように操作の集合で定義すると、操作を通してアクセスしている分には、データの管理方法が変更されても、利用する側にはその変更の影響がないというのが利点です。説明すると、「クラスやオブジェクトと何が違うの」と混乱するかも知れませんが、ここでは同じものと思ってしまってかまいません。●サブルーチンの修正について適用してみるリスコフの置換原則は、オーバーライドに際して検討されるものだと思われる人もいるようですが、サブルーチンの修正時にも検討することをおすすめします。ここではあるサブルーチンを修正するという状況で、例を挙げてみます。仮に、1から1000までの整数を受け取るサブルーチンがあり、このサブルーチンを修正して、1から100までしか受け取れなくなったとします。するとどのような事が起きるでしょうか。このサブルーチンを呼び出す側は、500という値を渡していたとした場合、これを受け付けてもらえなくなってしまうのです。これでは、バグを潜ますようなものです。このように事前条件は、修正前と同等か、それよりも緩くしなくてはならないというのがご理解いただけると思います。事後条件を緩くしてしまうと、どのようなことになるでしょうか。サブルーチンの戻り値で1〜1000を期待しているような状況で、-1000が返ってきたらどのように対処するか困ってしまいます。事後条件は、同等かより条件が厳しくなるようにする必要があります。●オーバーロードについて考えてみるJavaなどの言語にはオーバーロード(操作の多重定義)といって、同じ名前のサブルーチンを引数の組み合わせを変えることで、複数定義する機能が備わっています。この機能と「事前条件はより緩く、事後条件はより厳しく」の関係を考えてみます。事前条件についてです。引数の組み合わせを増やすことができるというのは、そのサブルーチンの事前条件を緩くする方向に働くので、これはよいでしょう。問題は、事後条件のほうです。引数の組み合わせが変わると、戻り値の型も自由に変えられるのが一般的な言語仕様でしょう。言語仕様が許しているからといって、サブルーチン名が同じでありながら、戻り値の型を変えてしまうというのは、事後条件が緩くなるとみなせるので、あまりよい設計とは思えません。時と場合によるのですが、混乱やバグを避けるためにも、サブルーチン名と戻り値の型については対応させておくのをオススメします。積極的に活かした設計手法として、DbCがあります。調べてみてはいかがでしょうか。(天野勝)[*1]:「抽象データ型」についてWebで調べてみると、いろいろな定義があるようです。厳密な定義をご存知の方はeditors@ObjectClub.jpまでお報せください。Contract)は、バートランド・メイヤーにより提唱されている設計の考え方です。_______________________________________________________________________この記事への評価にご協力をお願いします。URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用のブラウザに表示されれば投票完了です。Agileなツール紹介[14]●はじめに今回は前回の予告通り、腰メモについての紹介をします。聞いた方々には「なにがなんだかさっぱり」ですよね。簡単に言ってしまうと、腰に常にメモ可能なものを着けておくというスタイルを指します。メモ帳は、Yシャツの胸ポケットにしのばせて置くのでも使い勝手においては一向に問題ありませんし、カバンに常にメモを携帯しているという方もいるでしょう。今回は敢えて「腰である理由」とその方法について書いてみます。●腰リールメモ腰リールメモとは造語です。簡単に言うと、腰に腰リール(ベルトにクリップなどで固定する、鍵などを着けて自由に伸縮させることができるリール)を備えつけ、その先に鍵ではなく、小型のボールペンと単語帳をつけておき、常に腰にぶらさげておき、常に単語帳にメモができる状態にしているというスタイルのことです。筆者は2004年の中頃から腰リールメモを始めて、周囲の人にリールからワイヤーをひっぱりだして、縮ませたりネタとして見せつつ、歩きながらでも、トイレでもいつでもメモをとれるようにして実践していました。Press[*2]に取り上げられてから、ネットで見る限り利用者が増えたように思います。際に会う方々の中でも「使い始めました」という人をよく見かけます。最近では、単語帳の代りにリング式のメモを着けている人も多いようです。腰リールメモの特徴としては、まず第一に「即座にメモ態勢に入れ」、「片付けに時間がかからない」という点につきます。腰リールから単語帳を延し、備えつけのボールペンのキャップを外して書きたいページを開けばすぐにメモが取れます。携帯電話にメモをとるのに比べても、素早いと思います。書いた後は、ボールペンのキャップをして手を離すだけで、元の位置にメモとペンが戻ります。このアクションは慣れると病みつきになること請け合いです。メモ帳ここ最近の筆者のメモは、腰リールからシザーケース+メモ帳に移行しています。Notebook[*4]というメモ帳を挿しています。ペンはボールペンではなく、PILOTのキャップレスデシモ[*5]という万年筆をシザーケースに挿して使用しています。こちらは腰リールメモに比べると装備が重いのが難点ですが、比較的大きなメモを携帯できるのがメリットです。[*6]筆者が使用しているAGILITYのカフェバックは、計ったかのようにMoleskineのポケットサイズがぴったりと収まるサイズで、計算をして買ったわけではなく偶然なのですが重宝しています。腰リールのように自動ではメモが戻りませんが、ガンマンがホルスターから銃を抜いて射った後にサッと戻す、このようなアクションになります。こちらも慣れるとなかなか楽しいものです。シザーケース以外にも、チョークバッグ[*7]やウェストポーチでも同様に腰メモが可能です。好みのものを使えばよいでしょう。筆を使いだしたからなのですが。[*7]:ロッククライミングチョークを入れておくためのバッグ。●何故腰メモなのか?腰リール、シザーケースともに腰に着けるアイテムです。Yシャツのポケットや鞄の中ではいけないのでしょうか?まずYシャツのポケットなどは、筆者のような私服で仕事をする人間にとっては必ずしもあるとは限らないため、メモを携帯する障害となります。着衣にメモの携帯を依存するのはあまり好ましくありません。次に鞄の中にメモとペンを置いておく場合を考えてみると、自分の身とメモが離れてしまうのは大きなマイナス要因になります。このことを思い知るのは、イベントの後の飲み会の席などでしょう。鞄を置いてから飲みはじめると、人の話をとっさにメモしようとしても、メモが手元になくて困ってしまうのです。腰メモならば、これらの状況に対応できます。電車に乗っている時、歩いている時、トイレに居る時、様々な時間と場所で気づきを得る可能性があります。腰メモは有用なツールです。携帯電話でメモを取るという方法もありますが、筆者は親指スキルが低いため打つのが遅いのと、絵が自由に描けないという点で候補から外しています。最近、夏イベントで羽生田さんが話題にしていた、宮本常一という民俗学者の著作を乱読しています。その中の「忘れられた日本人」[*8]という本に登場する左近熊太翁という方のエピソードが、「『忘れられた日本人』の舞台を旅する」[*9]という書籍に載っていました。左近熊太翁は幕末から昭和(戦中)までを生き抜いた長野県河内長野の方です。左近熊太翁の孫である又三郎氏はこう語っています。『(熊太翁は)いつも腰から方位磁石と大福帳と矢立をぶらさげてね。大福帳いうたら横に長いメモ用紙ですわ。矢立も知らん?筆と墨壺を入れる容器ですわ。宮本常一は、日本中を旅して得た見聞を自分の村に戻って活かす知恵者のことを「世間師(ショケンシ)」と呼んでいました。左近熊太翁はまさにその世間師で、様々な見聞を腰の大福帳に記録しておき、生活に活かしていたのでした。腰リールやシザーケースといった方法に違いはあれども、腰にメモを携帯しておき、見聞きしたこと、気づいたことを常に書き留める。その見聞、気づきを仕事や生活に生かすことは、今も昔も変らない行為なのではないでしょうか。(懸田)[*8]:http://www.amazon.co.jp/o/ASIN/400331641X/xpjp-22[*9]:http://www.amazon.co.jp/o/ASIN/430922444X/xpjp-22_______________________________________________________________________この記事への評価にご協力をお願いします。URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用のブラウザに表示されれば投票完了です。ホントのところ今週は「メモ、携帯していますか?」のホントのところ。今回のアジャツールで紹介した腰メモを含め、確かに周りでメモを携帯している人が増えたように思います。みなさんは、メモ、携帯していますか?またどんな風に携帯してますか?腰リールメモ付けてます。http://www.ObjectClub.jp/special/kininaru/vote?vol=117&choice=0腰バッグ+メモです。http://www.ObjectClub.jp/special/kininaru/vote?vol=117&choice=1いつもポケットにメモ入れてます。http://www.ObjectClub.jp/special/kininaru/vote?vol=117&choice=2首からメモぶら下げてます。http://www.ObjectClub.jp/special/kininaru/vote?vol=117&choice=3カバンの中に常にメモ持ち歩いてます。http://www.ObjectClub.jp/special/kininaru/vote?vol=117&choice=4身に着けてませんが、いつもメモが傍らにあります。http://www.ObjectClub.jp/special/kininaru/vote?vol=117&choice=5手に直接書いちゃうので、メモはいりません。http://www.ObjectClub.jp/special/kininaru/vote?vol=117&choice=6あったらいいなと思いますが、メモは携帯してません。http://www.ObjectClub.jp/special/kininaru/vote?vol=117&choice=7メモはしないので、必要ありません。http://www.ObjectClub.jp/special/kininaru/vote?vol=117&choice=8それは秘密です。まで詳細を!!アンケート結果はオブジェクト倶楽部サイト上にて公開します。前号「地デジ対応済んでますか?」の結果は公開中。┗編集後記こんにちは、編集人です。週も壊れ物シリーズです。お風呂から上がってしばらくテレビなど見ていたら、なんともう立ち上がるどころか姿勢を変えるのも難しい状態に。歩くのもままならず、仕方なく横になっても、寝返りするのすら厳しいという感じでした。動くのがままならないので、週末の予定もキャンセルし、ひたすら寝ていました。腰を痛めると立つことも座ることも、下手すると寝るのもツライ。腰の大切さが改めて身にしみました。運動不足が一番の原因の気がします。本当に運動しなくちゃ。みなさんも、くれぐれもお気をつけて。来週はお盆休みのためメールマガジンはお休みさせていただきます。回の配信は、8月23日(水)です。浅き川も深くわたれ(ことわざ)***簡単なロジックだからバグはないだろうとか、10件同じようなテストでOKだったから他も大丈夫だろう、などと言ってテストをおろそかにしたところに限って、後で影響が出るような問題が潜んでいたりするものです。簡単そうに見えるところも手は抜かずに。その分、手間は自動化してみましょう。