アカウント名:
パスワード:
私感だけど、オブジェクト指向というのは、再利用するライブラリを作成する場合は威力を発揮するのはよく分かる。しかし、再利用しない場合は不要だし、多人数で開発する場合は他人とのインタフェース部分だけオブジェクト指向的にすれば十分だと思う。他人に見せない内部まで生真面目にオブジェクト指向で作ったら、むしろコードサイズが大きくなり。処理が分散することで、かえって可読性が落ちる。
オブジェクト指向というのは、再利用するライブラリを作成する場合は威力を発揮するのはよく分かる。
発揮しません。再利用性で重要なのは、汎用性のある仕様です。オブジェクト指向で作ろうが、使えないものは使いたくありません。
他人に見せない内部まで生真面目にオブジェクト指向で作ったら、むしろコードサイズが大きくなり。処理が分散することで、かえって可読性が落ちる。
オブジェクト指向というか、カプセル化はきっちりした方がいいですよ。一人で書く場合も重要。書いているうちに共通部分が次第に見出せてくるので、そういうものをクラスに分離。そうして
class Function {public: virtual int apply(int argument) = 0;};
class FunctionAdd : public Function {private: int value;
public: FunctionAdd(int value) { this->value = value; } int apply(int argument) { return argument + value; }};class FunctionDiv : public Function {private: int value;
public: FunctionDiv(int value) { this->value = value; } int apply(int argument) { return argument / value; }};
class Abstract1DMatrix {public: virtual ~Abstract1DMatrix() = 0; virtual int get(int index) = 0; virtual int set(int index, int value) = 0;
int getSum() { int sum = 0; for (int i = 0; i apply(getQuick(i)));
return this; }};
class Vector1DMatrix : public Abstract1DMatrix {private: int offset; std::vector* vector;public: Vector1DMatrix(size_t size, int offset) { this->offset = offset; this->vector = new std::vector(size); } ~VectorMatrix() { delete vector; } int get(int index) { return (*vector)[index + offset]; } int set(int index, int value) { (*vector)[index + offset] = value; } int size() { return vector->size(); }};
class List1DMatrix : public Abstract1DMatrix {private: int offset; std::list* list;public: List1DMatrix(size_t size, int offset) { this->offset = offset; this->list = new std::list(size); } ~List1DMatrix() { delete list; } int get(int index) { return (*list)[index + offset]; } int set(int index, int value) { (*list)[index + offset] = value; } int size() { return list->size(); }};
int main() { Abstract1DMatrix* matrix = new Vector1DMatrix(512); /* 中略 */ Function* func = new AddFunction(123); matrix->assign(func); /* 中略 */
最近読んだコードで、こんな感じのヤツを見かけたんだけど、
カプセル化、アクセサメソッドや継承を旨く利用してると思うんだ。
これは単純化しすぎて、逆に難しいかも。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
※ただしPHPを除く -- あるAdmin
再利用しなけりゃオブジェクト指向は不要 (スコア:1)
私感だけど、
オブジェクト指向というのは、再利用するライブラリを作成する場合は威力を発揮するのはよく分かる。
しかし、再利用しない場合は不要だし、多人数で開発する場合は他人とのインタフェース部分だけオブジェクト指向的にすれば十分だと思う。
他人に見せない内部まで生真面目にオブジェクト指向で作ったら、むしろコードサイズが大きくなり。処理が分散することで、かえって可読性が落ちる。
Re: (スコア:0)
発揮しません。再利用性で重要なのは、汎用性のある仕様です。オブジェクト指向で作ろうが、使えないものは使いたくありません。
オブジェクト指向というか、カプセル化はきっちりした方がいいですよ。一人で書く場合も重要。書いているうちに共通部分が次第に見出せてくるので、そういうものをクラスに分離。そうして
Re:再利用しなけりゃオブジェクト指向は不要 (スコア:0)
class Function {
public: virtual int apply(int argument) = 0;
};
class FunctionAdd : public Function {
private:
int value;
public:
FunctionAdd(int value) { this->value = value; }
int apply(int argument) { return argument + value; }
};
class FunctionDiv : public Function {
private:
int value;
public:
FunctionDiv(int value) { this->value = value; }
int apply(int argument) { return argument / value; }
};
class Abstract1DMatrix {
public:
virtual ~Abstract1DMatrix() = 0;
virtual int get(int index) = 0;
virtual int set(int index, int value) = 0;
int getSum() {
int sum = 0;
for (int i = 0; i apply(getQuick(i)));
return this;
}
};
class Vector1DMatrix : public Abstract1DMatrix {
private:
int offset;
std::vector* vector;
public:
Vector1DMatrix(size_t size, int offset) {
this->offset = offset;
this->vector = new std::vector(size);
}
~VectorMatrix() { delete vector; }
int get(int index) { return (*vector)[index + offset]; }
int set(int index, int value) { (*vector)[index + offset] = value; }
int size() { return vector->size(); }
};
class List1DMatrix : public Abstract1DMatrix {
private:
int offset;
std::list* list;
public:
List1DMatrix(size_t size, int offset) {
this->offset = offset;
this->list = new std::list(size);
}
~List1DMatrix() { delete list; }
int get(int index) { return (*list)[index + offset]; }
int set(int index, int value) { (*list)[index + offset] = value; }
int size() { return list->size(); }
};
int main() {
Abstract1DMatrix* matrix = new Vector1DMatrix(512);
/* 中略 */
Function* func = new AddFunction(123);
matrix->assign(func);
/* 中略 */
最近読んだコードで、こんな感じのヤツを見かけたんだけど、
カプセル化、アクセサメソッドや継承を旨く利用してると思うんだ。
これは単純化しすぎて、逆に難しいかも。
Re: (スコア:0)
htmlという事を忘れて<をエスケープしてなかったのが原因か?
int getSum() {
int sum = 0;
for (int i = 0; i < size(); i++) sum += get(i);
return sum;
}
Abstract1DMatrix* assign(Function *f) {
for (int i = 0; i < size(); i++) set(i, f->apply(get(i)));
return this;
}