やっぱりオブジェクト指向は幻想でした。
■ このスレッドは過去ログ倉庫に格納されています
0658656
NGNG637がどういう意図かは637にきかないと本当の所はわからんが、
おそらく文章の流れでいけば、複数実体を持つ、というような
事に関しての俺の考え(っていうかC流)の穴をついてるんだろ。
つまり
/* some_file.h */
char *get_result(); /* strcpyして使う事 */
/* some_file.c */
static char result[256];
char *get_result(){
return result;
}
としたresultを直接さわる馬鹿がいるのは防げない。
で、複数の所からこのモジュール使う場合、
どうしても内部構造を一瞬はさらけ出すからな、Cは。
文字列、程度ならいいけど、構造体、とかを返す場合、
その構造体の内部に依存した変更、ってのの被害は
でかい。
C++なら、
class some_class{
public:
void print();
void set_char(int index,int char);
:
:
private:
char result[256];
};
みたいなクラスのインスタンスを「それぞれ」が保持す
れば、resultみたいなの触らずとも複数実体が持てるし、
公開部分以外の変更には強い、って事だろう。
実際に触るのは上のabstractな関数のみのクラスのイン
スタンスをファクトリーメソッドあたりの後で隠す事に
なるだろうから、触るのは違反だし(キャストとか、コ
ンパイラの吐くフィールドのオフセット依存な事とか
をやられると困るが、Cよりはずっとマシ)
ちなみに一つのみしか実体が無いでも問題無い、という
場合なら、return resultなどやらずにresultへのアク
セサだけを公開してやるで十分だろう。
どちらかといえば抽象データ型の話だな。まあOO好きな
皆様にC派の俺がいっても釈迦に説法だろうが。
■ このスレッドは過去ログ倉庫に格納されています