著作一覧 |
というような言葉を「暗黙的インタフェースの実装」を眺めていて思いついた(程度の話)。
もちろん、それほどは困らない。もし、元のclassがfinalでなく、かつメソッドのセットが十分に小さければ。
class Purse { public boolean isStolen() { return this == null; } public Coin[] parse() { return new Coin[0]; } public void add(Coin c) { } public boolean isBroken() { return true; } }があるとして
class UsefulPurse extends Purse { Map coins = new HashMap(); public boolean isStolen() { throw new IllegalOperationException("wakarukai"); } public Coin[] parse() { return CashDispenser.sort(coins); } public void add(Coin c) { CoinBag bag = coins.get(c.getFace()); if (bag == null) coins.put(c.getFace(), bag = new CoinBag(c.getFace())); bag.add(c); } public boolean isBroken() { return false; } }
問題は、そういうことを何も考えていないクラスの場合にある。
class PerfectPurse { public boolean isStolen() { return this == null; } public boolean isBroken() { return true; } public void addFiveCent(Coin<FiveCent> c) { } public void addDime(Coin<Dime> c) { } public void addQuarter(Coin<Quarter> c) { } public void add1Yen(Coin<Yen1> c) { } public void add5Yen(Coin<Yen5> c) { } public void addPenny(Coin<Penny> c) { } public void addOkinawaKinenCoin(Coin<OkinawaKinenCoin> c) { } ... public void add(Coin<FiveCent> c) { } public void add(Coin<Dime> c) { } public void add(Coin<Quarter> c) { } public void add(Coin<Yen1> c) { } public void add(Coin<Yen5> c) { } ... }
インテリセンスって素晴らしい。山ほどメソッドがあっても適切なメソッド名をドロップダウンから選択できる。そればかりか型をチェックするIDEの機能もすばらしいものだ。メソッドを記述すると引数に与えられる変数の絞り込みまでしてくれる。でも、その上等な料理にハチミツをぶちまけるかのごとくクラス設計ができるのはいかがなものか(from monky on a raft)。
使える財布にしようと思ったら(幸いなことにまだ232個しかない)メソッドをオーバーライドしてやれば、この財布が直接newされていない限りはまともな財布に交換することができるかも知れない。
でも、233個もメソッドがあったら、すでに作られてしまったアプリケーションを全部廃棄処分にしたくなるだろう。
それはオーバーライドする手間がばかばかしいからだ。
「いや、それは怠慢ですよ」とこの素晴らしいインテリセンス−エイブルな財布の考案者が語りかける。「IDEでこのクラスをポイントしてから<派生>コマンドをクリックしてください。voila!」
するとIDEが新たな編集画面を開いてくれる。
class MyPerfectPurse extends PerfectPurse { public boolean isStolen() { return super.isStolen(); } public boolean isBroken() { return super.isBroken(); } public void addFiveCent(Coin<FiveCent> c) { super.addFiveCent(c); } ... }
「ささ、この完全無欠な財布に何か付け加えるものがあると言うのでしたら、いくらでも追加してください。ささ、ささ。」(と、チケットピアの相撲取りのごとく、ささするのであった)
どうも、何かが違うようだ。問題は、「オーバーライドする手間がばかばかしい」という手間の問題だと考えてしまった点にあるようだ。
教訓:臭い匂いは元から絶たなきゃダメ
日記は書けるが、サーバーのメンテナンス(この場合は、ログの直接編集とか.htaccessの設定とか、tdiary.confの設定とかだ、というか本日のリンク元を最新版にするとか)ができないというのは、実にいらいらするものだ。まだ、ポーカーとチープな肥満薬が来てるのか……(もしかして日本語が読めるのかな? 読めないと思ってカタカナで書いてるのだが、「おお、話題にしてくれてる。こりゃ効果が出てるぞ」と喜んでるとか?)
「 トランザクションがないのに金になるシステム」を読んで。
「事前の負荷限界」がある世界とそうでない世界には、それぞれ違う種類の高度な技術があるということだと思います。
ということが本当に、いろんな場所でコメントをするたくさんのyamatoさんたち(という名前の1人をさすのではなく、そういう主張の人たち)や、その逆の人たちには理解できないのだろうか?
そうは思えない。
本当にバカの壁ってあるんだろうか? やはり、そうも思えない。
そこまで世の中に視野が狭い人であふれてるってことはないんじゃないかなぁ。もしそうなら、集団知という相互作用はいつまでたっても生まれることはなく、単に狭い仕切りで区切られた箱のようなものしか出てこないように思える。いくらふっても仕切りの中身は混ざらないから、どこまでいっても単にカタログとしてしか扱いようがない。それはつまらない。
では、なぜ、そういう壁があるかのようにしか見えない意見が出てくるのだろうか。むしろ、そっちに興味が湧く。
いろいろ考えてみると、それは発言に対する壁ってやつなのかも。たとえば、僕(以下の「僕」はこの仮想的な人格だというのは自明だけど一応、注)が都市銀行のATMのネットワーク構成を考え、保守プランを考え、運用プランを考える技術者だと仮定する。
僕は自分の職業的ミッションのすさまじいまでの困難さとそれを解決するための知恵と技術に誇りを当然だが持つ。たまに複数の事象が原因で起きた予測不能な障害のために5分間停止して新聞に叩かれまくるときっとへこむよりも、その特殊な事象の発生と予見の不可能性に対する無知と無理解に対して、怒りを覚えるだろう。
でも、僕はその僕が持つ高度な技術の実際についてあるいはそれによって獲得したさまざまな知見や技術的な考察、技術的な展望――そういった種々の技術的な知識や知恵について、公の場で誇ったり説明したりすることは、多分できない。なぜならばそのネットワークの企業的知的財産の保護に引っかかることが容易に想像つくし、仮にそうでなくてもそういう行動に出ること自体が保守プランに対する穴を開けることになるし、さらには職業的倫理に反することになると思える(し、それに反しないことがまた高い誇りに繋がる)からだ。
ところが、どうもそれに比べると屁みたいに見える(が、そこには当然別の技術があることは当然ながら理解できるのは、幾つかの点において技術は技術で自明だからだ)技術について、語らっていたり誇っていたりするのを、Web上で良く(では実際にはなくても、職業的な興味からは突出して見えるので「良く」となる)見かける。
おもしろくない。なぜ僕はもっと賞賛されないんだろうか?
一発コメントでも書いてへこましてやるとするか。もっと僕を誉めてくれよ。は無理だから、僕のほうがすごくて君のほうがへたれだと、一言入れてやることにするか。
――と、(ここから先の「僕」は仮想人格ではなく、本来の「僕」に戻る)いうような考えにあるのではないだろうか。
これがもし正しいとすれば、壁は視野の狭さにあるのではなく、職業倫理による発言の封じ込めにあると考えることができる。
ネットは、匿名を許容する。たとえば、僕が誰かは僕と直接面識のある人しか知らないことになっている。だから僕は、壁を基本的には無視できる。なぜなら、匿名の人間は壁抜け男だからだ。
いや、こっちのオノレシュブラックか。
アポリネール傑作短篇集 (福武文庫―海外文学シリーズ)(ギヨーム アポリネール)
で、そういう人たちも壁を抜けていろいろそのへんについて書いてくれれば良いのにな、と僕は思うのであった(抜けないまでも高さを低めることは可能なはずだ)。
注)実際にはいくつかのBlogでそういう壁抜けを見ることがある。だが、たくさんのyamatoさんがそうであれば良いな、と思う。その場が現在は2chとコメント欄にしかないところが、あまりおもしろくない点なのだ。2chはノイズが多いし、コメント欄にはノイズしか乗らないように見える。
ジェズイットを見習え |
「インテリジェント・コピペ」という用語を思いつきました :-) > IDEは戦車