2010年7月18日

クラスについて。

クラスについてのいろいろ思うところ。
1
はるえす@イカのフレンズ @Rayerd

コレクションクラスではなるべく要素を隠蔽したいものだと思うけど,そうするとコレクションに対して行いたい処理が増える度に公開メソッドが増えてしまうというジレンマに悩んでいる.

2010-07-17 01:54:11
はるえす@イカのフレンズ @Rayerd

STLを思い起こすに,コレクションクラスは実現したい機能のための最小レベルのメソッドを公開し,そのクラスを受け取る汎用関数に与えて処理を行うのがベストなのだと思う.とすると最小レベルのメソッドを抽出する必要があるわけだ.それは一朝一夕にできることではない.

2010-07-17 02:14:17
くっくっkura 🇯🇵 @PG_kura

std::string はいらんメンバ関数がわんさかあったような RT @Rayerd: STLを思い起こすに,コレクションクラスは実現したい機能のための最小レベルのメソッドを公開し,そのクラスを受け取る汎用関数に与えて処理を行うのがベストなのだと思う.とすると最小レベルのメソッ

2010-07-17 02:16:36
くっくっkura 🇯🇵 @PG_kura

おわ!失礼しますた RT @andochin: std::stringはC++標準ライブラリだけどSTLじゃない RT @PG_kura: std::string はいらんメンバ関数がわんさかあったような RT @Rayerd: STLを思い起こすに,コレクションクラスは実現した

2010-07-17 02:19:50
くっくっkura 🇯🇵 @PG_kura

でも個人的には多重継承しまくってメンバ関数を鬼のように用意してくれるほうが嬉しい。

2010-07-17 02:21:06
はるえす@イカのフレンズ @Rayerd

そうなの・・・ RT @andochin: std::stringはC++標準ライブラリだけどSTLじゃない RT @PG_kura: std::string はいらんメンバ関数がわんさかあったような RT @Rayerd: STLを思い起こすに,コレクションク

2010-07-17 02:21:11
はるえす@イカのフレンズ @Rayerd

http://bit.ly/dkDnNf の続き.コレクションクラスが公開する最小レベルのメソッド集合でとある機能を実現すると,要素へのアクセスを許さざるを得ないことがある.しかしそれは「して欲しくないことはできないようにするべき」の理念に反するので喜ばしくない.どうするか.

2010-07-17 02:28:52
くっくっkura 🇯🇵 @PG_kura

friend? RT @Rayerd: http://bit.ly/dkDnNf の続き.コレクションクラスが公開する最小レベルのメソッド集合でとある機能を実現すると,要素へのアクセスを許さざるを得ないことがある.しかしそれは「して欲しくないことはできないようにするべき」の理念に

2010-07-17 02:30:01
くっくっkura 🇯🇵 @PG_kura

例えば vector という型があって、vector のインターフェイスを丸々持ち運ぼうとするからメンバ関数の選定で意見が割れるんじゃないかと思ってる。

2010-07-17 02:33:22
くっくっkura 🇯🇵 @PG_kura

vector ができることは根こそぎできるようにしておいて、使う側が、フィルタされたインターフェイスのいわばサブセットみたいなものを扱うようにすればいいんじゃないかなー。

2010-07-17 02:35:35
くっくっkura 🇯🇵 @PG_kura

まぁ、そんなことやりだしたら今の一般的なプログラミング言語では冗長になりまくって誰もやらないだろうけどさ。

2010-07-17 02:36:12
はるえす@イカのフレンズ @Rayerd

http://bit.ly/cXe8FQ の続き.要素へのフルアクセスを許すとコレクションクラスとしてのカプセル化が破壊される場合,要素の機能を制限するwrapperクラスをコレクションが返すという方法があり得る.あるいは,要素の一部メソッドを持つ親クラスをコレクションが返すか.

2010-07-17 02:37:22
くっくっkura 🇯🇵 @PG_kura

僕は妄想厨です。厨意してね♪

2010-07-17 02:37:29
mono @mono0x

std::stack/std::queueみたいな? RT @PG_kura: vector ができることは根こそぎできるようにしておいて、使う側が、フィルタされたインターフェイスのいわばサブセットみたいなものを扱うようにすればいいんじゃないかなー。

2010-07-17 02:38:56
くっくっkura 🇯🇵 @PG_kura

近い感じです。RT @mono0x: std::stack/std::queueみたいな? RT @PG_kura: vector ができることは根こそぎできるようにしておいて、使う側が、フィルタされたインターフェイスのいわばサブセッ

2010-07-17 02:41:21
水底 @mnzktw

@PG_kura vectorとそれ以外のコレクションで一番違うところってなんでしょうね。ランダムアクセスなんてのは表面上は linkedlistでだって実現できる。コストの高安はおいといてインターフェース上は共通化可能。

2010-07-17 02:43:53
くっくっkura 🇯🇵 @PG_kura

C++ に const ってのがあるけども、あれがインターフェイスのフィルタリングとして機能しているってのは大きなポイントだと思うのですよ。

2010-07-17 02:44:04
くっくっkura 🇯🇵 @PG_kura

@mnzktw というか、利用シーンで考えられるコストの差から妥当性を選択するものなのでは。データ構造とアルゴリズムを分けて考えておいて、使うときにそれぞれから適切なものを選択する、ということだと思いますよん。

2010-07-17 02:47:32
はるえす@イカのフレンズ @Rayerd

duck typing をしたり,サブインタフェースを持つ親クラスを継承すると? RT @PG_kura: 例えば vector という型があって、vector のインターフェイスを丸々持ち運ぼうとするからメンバ関数の選定で意見が割れるんじゃないかと思ってる。

2010-07-17 02:48:34
くっくっkura 🇯🇵 @PG_kura

@mnzktw もちろん map と vector を比べたら機能が違うのでそれはそれで別の話ですがねw

2010-07-17 02:48:49
はるえす@イカのフレンズ @Rayerd

http://bit.ly/bejti4 の続き.iteratorを使うとどうだろう.ただし要素へのフルアクセスを許可せず,機能制限されたインタフェース,あるいはwrapperクラスを返すiteratorにするというの.

2010-07-17 02:50:56
くっくっkura 🇯🇵 @PG_kura

@Rayerd C++ とか Java とかの型システムを前提にしていない妄想なのです。クラス自身にモードを設けたいのです。

2010-07-17 02:52:22
くっくっkura 🇯🇵 @PG_kura

あ、僕の話はホント妄想なのです。

2010-07-17 02:53:42
はるえす@イカのフレンズ @Rayerd

boost::ptr_vector<>の要素を指すスマートポインタってないんですか?

2010-07-17 02:58:19
残りを読む(31)

コメント

コメントがまだありません。感想を最初に伝えてみませんか?