設計論

継承機構を差分プログラミングに使うなという意見

継承を差分プログラミングに使うなという意見は、実装継承自体に否定的な立場なんだっけ? スーパークラス・サブクラスを行き来する流れを読むのは面倒だけど、実装継承ってそもそも差分プログラミングの機能そのものでしょ? いろんな記事を断片的に読んで…

同じ振る舞いをするコードのどちらを採用するべきかの判断基準を整理してみる

条件分岐箇所が少ない コード量が少ない 外部ライブラリへの依存度(質と量)が小さい オープン・クローズの原則(OCP)に沿っている 3つしか思いつかなかった><4つにした。条件分岐箇所が少ないということは、振る舞いの場合分けが単純化されているってこ…

「『変数のスコープは狭いほど良い』という迷信」という迷信

「変数のスコープは狭いほど良い」という迷信 変数でもメソッド名でもクラス名でも言えることだが、単純に「スコープは狭いほどよい」という方針でプログラムすると、逆に保守性も可読性も悪いプログラムができあがることがけっこうある。 中途半端に優秀な…

例外処理は処理コストが掛かるらしいことを確かめようとしたら、意外とそうでもなかった話

例外処理はパフォーマンスが低下するという話がよくあるので、確かめてみた。メソッド処理でエラーが起こった場合、返却値としてステータスコードを返すパターンと、例外を投げるパターンで処理時間を計測した。で、下で示したコードで検証したところ、エラ…

言語設計で解決できる問題は限られている

例えばnull汚染問題とか。 レイヤを変えれば、フレームワークで解決できる問題は限られるとも言える。フレームワーク乱立の原因でもあるし、個人的にオレオレフレームワークを否定できない理由でもある。

コレクションをカラムの繰り返しとして扱いたがるCOBOL

意味的にはコレクションなデータ構造でも、バイト列として横に羅列すれば、転記が1度で済むから。 id:t_yano なぜ転記に強いかというと、宣言部に長さ指定して構造を定義しておいて、バイト列を転記すると、定義した構造どおりの構造体として扱える。 *Tw* C…

すべてのメソッドを1行で記述したら

関数型言語っぽい作りになるよね。

"extreme late-binding"について、もう少し

先のエントリで"extreme late-binding"を「強力な遅延束縛」と訳してみたが、訳した本人がよくわかっていないのでw"extreme"は「極限の」という意味。"late"は「遅い」「後半」「後期」「末期」という意味。ということで、"extreme late-"で「ぎりぎりまで…

インタプリタが重要なのは、強力なメタプログラミング機能だ

と、断言してみるテスト。会話的にプログラミングできるってことは即ち、実行環境が既に何らかの状態にある上にプログラミングができるってのが理由です。当然、ある処理が会話に現れるまで実行環境はどんな処理が来るかわからないので、"later-binding"でも…

アラン・ケイが考えるオブジェクト指向プログラミング

OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. It can be done in Smalltalk and in LISP. There are possibly other systems in which this is possible, but I'…

カプセル化とデータ隠蔽は直交する概念である

らしい。 Nat said... To be super pedantic, the rules force you to think about "information hiding" not "encapsulation". The two are orthogonal concerns. 超知ったかぶりするけど、このルールで考えさせられるのは「データ隠蔽」で、「カプセル化」…

状態によって公開メソッドが変わるようなオブジェクトは、Javaでは定義できない

データベースと連携する前提であるオブジェクトの場合はActiveRecordとして、storeなり何なりのメソッドを用意、公開すればいい。問題はデータベースと連携するかも知れないししないかも知れないオブジェクトの場合、例えばモデル内ではデータベースとの連携…

OOコード養成ギブスのコメント欄の和訳 その3

Binstock on Software: Perfecting OO's Small Classes and Short Methodsのコメント欄より。OOコード養成ギブスのコメント欄の和訳 - @katzchang.contextsの続きのOOコード養成ギブスのコメント欄の和訳 その2 - @katzchang.contextsの続き。 Paul Keeble …

OOコード養成ギブスのコメント欄の和訳

OOコード養成ギブス - rantsという記事より、あまりにも原理主義的っぽいので賛否があるだろうなぁと思いつつ、元記事のコメント欄を読んで、途中まで和訳してみた。パッと見では、論点はぶコメとあんまり変わんないですね。 31 comments... Binstock on Sof…

OOコード養成ギブスのコメント欄の和訳 その2

Binstock on Software: Perfecting OO's Small Classes and Short Methodsのコメント欄より。OOコード養成ギブスのコメント欄の和訳 - @katzchang.contextsの続き。 Douglas Squirrel said... JavaのCheckStyleで書けばいいんじゃないか。これ誰か試した人い…

処理の返却値としてエラーコードを返す

例外処理がない言語のテクニック。本来の意味での返却値は、参照型で渡された引数を更新することで実現する。 現代的なプログラムとしては、不要どころか害になるだろうなぁ。 つまり、久しぶりにこういうのを読むとなかなか辛いという話です。

割れたクッキー

クッキーオブジェクトがあるとして、叩いて2つに割れたとして、それをオブジェクトでどう表現するか考えると、少なくとも「割れることができる」という前提で生成されたオブジェクトじゃないと難しいかな。 クッキーだけじゃなく、分割発送とか考えると、ビ…

オブジェクトとは

オブジェクト In all other languages we've considered [Fortran, Algol60, Lisp, APL, Cobol, Pascal], a program consists of passive data-objects on the one hand and the executable program that manipulates these passive objects on the other. O…

クラスはオブジェクトではない

なんてゆーか、Javaは「オブジェクト指向言語」ってより「クラス指向言語」って言った方が適切じゃないかという気がしてきたぞ。

クラスと属性は恣意的に選ばれる

"人間"クラスが定義されているとして、俺というインスタンスは30歳で男性の"人間"と解釈できるが、一方で"30歳男性人間"とも解釈はできる。つまり、以下の2通りの文章はどちらも正しい。 katzchang is a 30 years old and male human. katzchang is a human …

YAGNI

使うかわからない機能を実装してシステムが複雑になるより、使う機能に絞って実装してシステムを最小限に保とう、そうすることで解析性や拡張性を確保しようっていうスタイルがYAGNI…ですよね。つまり、軸を機能性から保守性に移しましょう、「システムを最…

リソースは複写できるが、コントロールは複写できるとは限らない

原理的に、リソースそのものに閉じたコントロールは複写できるが、原典に対する(リソースに閉じない?)コントロールはそのリソースを管理しているモノにしかできない。ただし、Proxyパターンで複写したように見せることはできる。分散アーキテクチャの大事…

デザインパターンがぱっとしない理由

例示が簡単すぎる故にパターン化で構造が無意味に複雑化してしまったりして、導入するメリットが少ないような気になっちゃうんだよね。で、気付いたころには遅いとか、よくあるパターン。

Stateパターンで考える依存数の軽減

n個の状態と状態により動作が変化するm個のメソッドを持つオブジェクトを考える。 初歩的な処理 初歩的な処理では、全てのメソッドに対し、状態の数だけ分岐条件を記述する。このとき、オブジェクトは状態に対し、m * n本だけ常に依存している。オブジェクト…

クラス継承の依存度

2つのシステムの依存の種類 - @katzchang.contextsから少しだけ考えたんだけど。クラス継承は非限定的な振舞いの依存に分類してしまったが、実は同時に定義依存もしてる。だから非限定的な振舞いの依存のみである委譲よりも強力に依存してしまうわけだ。あと…

2つのシステムの依存の種類

あるシステムsysAから別のシステムsysBの機能を利用するとき、sysAはsysBに依存していると呼び、2つのシステムにおいてどちらか一方向または双方向に依存しているとき、それらのシステムは結合していると呼ぶことにする。で、2つのシステムの依存を考えると…

Project Euler Problem 10を例にトランザクションスクリプトとドメインモデル

トランザクションスクリプトとドメインモデルの理解のために。しつこいくらいが丁度いいwアルゴリズムおよびコードの大部分はhttp://d.hatena.ne.jp/pgf2/20080527/1211868834より拝借しています。ありがとうございます! コードと概略 Transaction Script…

トランザクションスクリプトとドメインモデルと。

この区別は、呼び出し側からどう呼ぶかの区別じゃないかという結論。言い換えれば、どのようにカプセル化するかの違い。 まず1つのアーキテクチャパターンはTransaction Scriptパターンです。一言でいうと「ドメインロジックを機能別に分け1つのプロシージ…

「ドメインロジックとSQL」のJava版サンプル

トランザクション・スクリプトとドメイン・モデル - @katzchang.contextsという記事で色々コメント頂いた&考えた結果、やっぱりよくわからんという結論になった。ということでお勉強に、Martin Fowlerさんの「ドメインロジックとSQL」という記事で示されたR…

PofEAA

エンタープライズ アプリケーションアーキテクチャパターン (Object Oriented SELECTION)作者: マーチン・ファウラー,長瀬嘉秀,株式会社テクノロジックアート出版社/メーカー: 翔泳社発売日: 2005/04/21メディア: 大型本購入: 10人 クリック: 635回この商品…