するは非常識2009/02/03古本も含めて,「開発の現場」のバックナンバーを買い集めたもんで,順番に読んでたんですけれど,個人的に謎な設計があったので,ちょっと書いてみます。批判するとかではなくて,本当に分からない。vol.001」にあった「昨日の常識は今日の非常識」というコラムから。オブジェクトの実装と密接に関連する外部クラスを用意する必要が多々ある。ゲッタメソッドで公開する代わりに、これらの外部クラス経由で操作させるほうがむしろカプセル化を守ることができる。カプセルの単位を単独のクラスではなく関連するクラス群として考える。してパッケージ内の関連クラスに直接公開するほうがよいこれは無効な理由がそのまま筆者の見解です。大前提としてパッケージの範囲を狭く取ることが必要です。これ,言ってる意味分かるでしょうか?あたしにはさっぱり分からない。日本語的に,「逆に」や「したがって」が何を受けているのか分からんってのもあるんですけれど,設計的にもちと分からない。することで対応できるんだと思います(コンパイル単位を分けて外部非公開のクラスを作るということ)。アクセサで公開するかの話と,外部クラス経由でオブジェクト操作させるかの話は別物なんじゃないだろうか。やろうとしている目的のレベルが別物なわけで,両者は背反するもんじゃないんじゃないだろうか,とつらつら。する理由を「常識」で一蹴しているけれども,これには一応理由が合あって,オブジェクト内部のデータ構造をクライアントが意識しなくてもいい仕組みにするためだったりします。しておくと,内部のデータ構造を変更した場合も,クライアントにまで影響することがなくなります。オブジェクトをパッケージプライベートにして,操作用のクラス経由で操作するっつのは,パッケージプライベートなオブジェクトの内容に依存しないで,「パッケージの」使い方(インターフェイス)を統一できることがメリットなんだと思う。ポリモーフィズムを使えば,ほぼ完全に内部実装を隠蔽することができます。これって単純にカプセル化の単位が異なってるだけなんじゃないだろうか。どちらかを選択しなくちゃいけないってなものじゃない。しておかないと,メンバは丸見えになってしまう。,「丸見えでもいい」というのが引用の言なわけだけれども,そのメリットってなんなんだろう......。単純に,アクセサ作るのがめんどい,とかいった話なんだろうか。,「外部クラス経由で操作させるほうがむしろカプセル化を守ることができる」っつのも,どの単位で見るかによるんだと思う。全てアクセサ/アクセス用クラス経由でアクセスすることと比べたら,カプセル化の程度が下がってるようにしか思えないんだけれど......。何か勘違いしてるんだろうか,あたし。個人的には(一般的にもそうだろうけど),メンバを丸のまま公開するってのは,大域変数を追加することと同じようなもんだと思っていて,どのレベルであれ,あまりするもんじゃねい,といった考え方だったりします。その方が拡張性を確保するにしても保守性を担保するにしても,安全牌だから。引用の趣旨がよく分からなくて,しばらく悩んでます。