【初心者歓迎】C/C++室 Ver.67【環境依存OK】
>>948 ポリシークラスは、ホストクラスからアクセスされるクラスであって、
ポリシークラスからホストクラスにアクセスするのは設計が良くないと思う。
ポリシークラスで必要になるデータは、ポリシークラスのメンバ関数の引数で受け取るようにするのが無難。
どうしてもホストクラスにアクセスしたいというなら、仮想関数しかないね。
以下個人的に思う事。
Policy設計は、ポリモフィズムが必要なケースには向いてないと思う。
STLやboostのような汎用的なライブラリを作るのに向いてると思う(趣味グラマではそういうケースがほとんどない)。
template<class Writer> class Hoge : public Writer
{
  list<int> data_;
};
struct Writer
{
  void Write(); // どうにかしてdata_を取得して出力
};
Hoge<Writer> h; h.Write();
こういうのは悪手ということですかぁdです
本読んだときはなんかすごいと思ったんだけど実際やってみようとすると
難しい割りにうまくいかなくてしょんぼり・・・
template<class DataType>
struct Writer
{ void Write(const DataType &data); };
typedef Writer<std::list<int> > Writer_IntList;
template<class Writer_IntList>
class Hoge : public Writer_IntList
{ std::list<int> data_; };
こんな感じかなあ
自己言及テンプレートは普通、
template <typename T>
class base {
public:
T foobar();
}
class derivedA : public base<derivedA>;
こういう構成な気がするが…
かぶった予感
957 :
デフォルトの名無しさん:2009/09/16(水) 17:18:05
クラスというものを少しずつ覚え始めたんですが、
C言語に移植するんてことを考えない限り、構造体や関数を定義するより
なんでもかんでもクラスにしてしまったほうがいいんでしょうか?
ケースバイケース
959 :
デフォルトの名無しさん:2009/09/16(水) 17:55:30
うーん、そうですか。ありがとうございますた
基本的にはクラスでやるもんじゃねーの?
ケースバイケース
関数で色々作っておいて、後からそれらを使ってクラス化するほうが
大抵失敗しない気がする。
情報単位じゃなくて処理単位だよね
初期のC+オブジェクトな考え方を大声で吹聴するジジイどもは早く引退してくれ
>>954 template<class DataType, template<class> class Writer>
class Hoge : public Writer<DataType>
{ DataType data_; };
こうじゃないかな。
>>957 構造化プログラミングもOOPもその他のパラダイムもできてしまうのがC++の柔軟さであり、罠でもあるところ。
柔軟に使いこなせればベストなんだろうけど、OOPだけを考えて作った方が失敗が少ないかもしれない。
OOPだけ考えて作ると、例えばソート処理とかひどいことになるんじゃね?
ソートするなら、構造化まで戻るか、総称型まで進むか、かな
メソッドや継承だけでどうにかしようとは思わないな
>>965 STLとboostは使うべきだと思う。
OOPで作るのが難しい物ってそうもない気がする。
まあ、ゲームなんかは物によってはOOPで作るのが難しいかもしれないが。
少なくとも学生が使っていいもんじゃないと思う。
「OOPじゃオーバーキルだ」という場面と「OOPじゃ機能不足だ」という場面が
ある。
前者は、構造化くらいで十分適切なところを無理にOOP化しても、という考え方で、
これに対しては「別に全部OOPでいいよね」って話になる。(Applicationクラスを
作ったりObjectクラスを作ったりするのはやりすぎだけど)
後者は逆に、ジェネリックプログラミングとかメタプログラミングとか便利じゃん、
という考え方で、こっちは「OOP縛りじゃ時々困るよ」って話になる。
この二つの話が混乱してる気がする。
>>969 > 「OOPじゃオーバーキルだ」という場面と「OOPじゃ機能不足だ」という場面が
「OOPじゃ役不足だ」という場面と「OOPじゃ力不足だ」という場面が
でいいのに、オーバーキルとかゲームする人じゃないと通用しなくね?
普通の英語じゃね?
IT関係の記事とかにも使われてるじゃん
>>969 前者も後者も開発効率を問題にしているという意味では同じでしょ。
C言語が手続き型しかできないからといって、作れないプログラムがあるわけじゃない。
俺が言いたいのは、適切にパラダイムを選んで柔軟に書く能力があればベストだけど、
経験の浅いPGにとって、選択肢の多さは良くない設計を選ぶリスクの増加になってるんじゃないかという事。
>>967 boostと出会ったおかげでSTLを使う気になった。STL単独では使う気にならないな。
>>974 前者もランタイム効率は変わるぞ
というか、基本は手続き型、必要ならクラス、必要ならジェネリック、必要ならメタ、
ってそんなリスキーかね?
全部クラスにする方がリスキーだと思うけど
STLだとVCでテストしてる時に、IDE上で中身が簡単に見れるから使う
自作listだと、わざわざnextポインタから開いていかないといけないからメンドイ
懐かしいなw俺もクラスに目覚めた頃は
>>957だった
実際、一人で開発するならそれもいいかもしれない
もう少しプログラムを作りまくれば、ケースバイケースが見えてくるだろう。
あえて言うなら趣味でも、時間的な区切りをつけてみるといい。プログラムの効率をもっともっと考えれるようになる・・かもしれない
>>974 パラダイムの違いによって出るランタイム効率の差なんて問題にならないレベルでしょ。
>>975 これを言ってはおしまいだが、C++がリスキーだと思う。
いろいろできるC++より、制限の多い言語の方が初学者向きという意味で「OOPだけ〜」と言った。
熟練したPGがC++をどう使うべきか、は宗教論争にしかならないんじゃない?
何だ、C++を覚える時にいきなりOOP縛りの方がいい、って主張してるんじゃなくて、
OOP縛りの言語に乗り換えろって意味だったのか。
初心者だろうが熟練者だろうが、C++を使うなら最初から最後まで、必要なところだけ
OOPという使い方で十分だろ。
C++以外の「制限の多い初学者向き言語」の話はどうでもいい。
なんかやらしい言い方をしてるな
できることが多くて混乱してしまう可能性があるから、使い方を制限して慣れてみたらどう?と言ってるんだろうと思うよ。
制限するくらいなら制限された言語を使えばよろしい、というのはもっともだけれど、ここはC/C++スレ。
>>975 たいていのプログラムはデータをどうにかするものなんだから、
基本はクラス、必要なら手続き型、ジェネリック、メタ、
でよくない?
>>979 OOP縛りの方がいいと主張してる。
なぜOOP縛りの方がいいと思ったか、理由を説明するために他の言語の話を出した。
> 初心者だろうが熟練者だろうが、C++を使うなら最初から最後まで、必要なところだけ
> OOPという使い方で十分だろ。
「必要なところだけ」とは言うが、全部Cライクで書くこともできるし、全部OOPで書くこともできる。
必要不必要の判断基準なんて人それぞれで、議論しても宗教論争になるだけだと思うんだが。
他人がどういう判断基準持っていようがケチつけるつもりはないよ。
>>957の質問に対して自分の考えを述べたまで。
すべての根底となるクラスが存在しない時点で、C++を用いた完全なOOPは
不可能であるという、一つの結論が出てたような
完全の定義がよく分からん。
エントリポイントを 変えれば いいじゃない
> 全部OOPで書くことができる
俺はこれがもうわからんのだが、
>>984はどう
基底クラスがない代わりにテンプレートを作ったのかもしれないと今思ったが、どうなの
>>983 不完全を証明するにはただの1例を示せばよい。
具体例をどぞ
とりあえずそのエントリ変えた完全なOOPとやらがどうしようもない糞コードなのは間違いないが
C++でもOOP縛りがいい、という主張には全面的にNOだな。
「OOPより簡単な物じゃ駄目だよ」と「OOPより複雑な物は初心者には要らないよ」を
同時に主張しているが、OOPは銀の弾丸じゃない。
昔よく見たような「OOPは難しいから初心者は全て手続き型でいいよ、でも構造化は
絶対に習得しようね」というOOP知らずな連中の甘言をそっくりそのまま一段進めた
だけにも見える。
大体、初心者を馬鹿にしすぎ。
本人が実際に両方やりゃ勝手に分かるだろ
どうせここでは結論なんか出ない
旧世代なオッサン怒涛の逆襲来たー
柔軟に適切な選択をするのは難しいから、OOPと手続き型がどっちが良い?
と言うのであれば、俺の主観だと OOP3 : 手続き7 くらいの割合を選ぶ。
4:6くらいでも良い。
OOP主体だと汎用性を高めようとして記述量が増えるか、インターフェースが
ゴタゴタで使い手側が気をつけないと危険な物になる印象。
それらを乗り越えるためにあえてOOPの練習するのも良いかもしれないが。
「OOPL」と「手続き型」は背反しませんが。
OOP無しの構造化だけのパラダイムを指してるんだろ常考
初心者だからと言って、OOPなんて古典的なやり方だけに閉じこめる理由は無いだろ
次スレは?
なし
そして
伝説へ(パラダイム的な)
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。