石橋秀仁(zerobase)書き散らす

まじめなブログは別にあります→ja.ishibashihideto.net

Smalltalkにはprivate methodがないので変数初期化の遅延実行のためにpublic accessorを追加することになってしまう

Smalltalkにおけるマイグレーションというか。

稼働中のシステムで、生きているオブジェクトやクラスに変数を追加する場合に、どうやったらいいのかなと。

Smalltakにはprivate methodがないので、

initializeですべてを初期化するのではなく、accessorでアクセスされたときに初期化する(インスタンス変数の初期化を遅延評価する)

という方法が使いにくい。なぜなら、

すべてのインスタンス変数についてaccessorをpublicに開示すると、内部状態を暴露してしまうので、オブジェクトの低結合原則に反する。なるべくaccessorを公開しないほうがいい。

という原則があるので。

Pharo by Exampleにも書いてあった:

Methods can access all instance variables of the object. Some Smalltalk developers prefer to access instance variables only through accessors. This practice has some value, but it also clutters the interface of your classes, and worse, exposes private state to the world. (Pharo by Exmample p.82)

この問題を解決するためのよいパターンがあるのかなあ。謎

追記