トップ «前の日記(2003-08-20) 最新 次の日記(2003-08-22)» 編集

日々の破片

著作一覧

2003-08-21

_ 僕は何が嬉しかったかな

そりゃやっぱりテンプレートメソッドパターンと今は名前がついてるやつを導出したときだ。

その時、思ったのは、構造化によってgotoが追放されたように(と言ってもbreakやcontinueとかで残っているのはご存知のとおり)、オブジェクト指向(構造化と比較すると確かにわかりにくい言葉だし、orientedというのが曲者みたいだ)ではifやswitchといった条件判断による分岐が追放されるんだろうな、ってことだった。

その時、作ってたのは、言語はTurboC++だったわけだが、端末エミュレータで、1.インタラクティブ(キー入力)、2.ファイル転送(送信側)、3.ファイル転送(受信側)、4.インタラクティブ(スクリプト)の4つのモードがあって、さらに下の層では、Winsock(PathwayまたはLanamanで微妙に互換性がない)か、RS-232C叩きかの3つの通信レイヤがあって、さらに端末もvt220かムニャムニャかの2つのモードがあって、さらに文字コードがEUCかMS漢字かムニャムニャJISの3つの選択肢があって、とかの組み合わせというやつ。

その前に、下はRS232Cだけど、ほとんど同様なやつで、ただし画面が9801のVRAMかAXのVRAMかムニャムニャのVRAMか、っていうようなのをTurboCでご多分に漏れず#ifdefとか使って作ってたのが、Win16で実行プログラムは1本で済むようになったから、さあ、#ifdefとか抜きで実行時に判断するぞ判断するぞ、とそんな感じで、いろいろいじっているうちに、デザインパターンで言うテンプレートメソッドパターンとファクトリパターンが浮かんできた。

もちろん粒度の問題があるから、ifなしではプログラムは書けないのだが、このあたりが僕のオブジェクト指向開発の原点だから、最初からオレ様MVCで自然にやってたという感じ。

_ 続き

で、それまで仕様をながめると
 if (provider == MS_WINSOCK) {
    ...
 } else if (provider == PATHWAY) {
    ...
 } else { // PORT hitter
    ...
 }
とかが浮かんできてたのが
 provider->send(buffer.get_binary());
というように変わった。
全体のコード量はむしろ増えるー殻の分ーけど、あることをする局面では、そのことだけ関連を持って記述できるということかな。
別の言い方をすると、コントローラ(やその下請けのサブルーチン)が条件を判定して何かを実行させる(たとえば、Winsockライブラリ)のではなく、あらかじめ条件によって生成されたオブジェクト(この場合だとWinsockのラッパオブジェクト)に処理を任せるという記述方法だ。で、そのように作成すると、コントローラから見て、ラッパオブジェクトの実装は隠蔽されるから、実際のWinsockライブラリなり他の通信ライブラリなりを操作する複数のオブジェクトとして実装することが可能となる。もちろん、ここではコントローラから同一のオブジェクトとして扱えなければ意味がないので(この場合、同一はインスタンスの同一性ではなくメソッドシグネチャの同一性=インターフェイスの同一性という意味)、内部的にはテンプレートパターンを使用したクラス階層を取り(だって、ほとんど同じなわけだから、こういう局面では実装継承を使う)、外部的(対コントローラ)にはインターフェイスによる抽象的な呼び出しを可能とさせるということだ。

_ メモ

BASIC認証はXSSに対して今や安全ではない(TRACE)->Public編 追補に入れる

_ switch

FSM(僕はスティーブンスのTFTPの実装で名前は知ったが、それ以前から使ってた。状態遷移図をそのまま現在の状態値と入力値と新たな状態値を返す関数へのポインタに置き換えたもの)を使うようになってから、あまりswitchそのものは使わなかったけど、と意味無く追記。ただ、これも粒度の問題があって、端のほうでは当然使う。

なんて、無駄な書き込みができる程度には、余裕が出てきたりして。

_ 帰還

その日のうちに帰れなきゃ、おかしいよな。

_ 赤ちゃんの手

昼飯食いに行こうと外に出たら、交差点の向こうからベビーカーがやってきた(もちろんやって来るはずがない。が、母親のことをまったく見てなかったので、主観的にはベビーカーが勝手にやって来たのだ)。乗り手はまだ若いんだが、ぐっすり眠って(それは首の傾きからわかる)て、しかし左手を高々と上げている。ラッシャー。で、その手は固く握られている。

そうそう、そうだよ。で、時々開いて見ると、なぜか埃とかが入ってるんだよね。で、臭いの。お前は綿吹き虫か?

などと、思い出したので記録。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|12|

ジェズイットを見習え