タグ

2013年6月2日のブックマーク (4件)

  • 参照とポインタ

    この文章はプログラマでもプログラミング言語の専門家でもないただのプログラミング好きの私が適当に書きつづったものです。よってこの文章には正しい箇所もあるでしょうが、間違っている箇所もかなりあるはずです。ご指摘いただけたらと思います。また、この文章を読んでも内容を鵜呑みにしないでください。鵜呑みにした結果何か起きても知りません。 "諸悪の根元"-ポインタ Cの特徴の1つとして、また初心者が必ずつまずく(*)とされる難所としてポインタがあげられるわけだが、ポインタはどうも最新流行のプログラミング手法の中では諸悪の根元として忌み嫌われているようだ。 (*) 自慢するわけではないのだが、私は別にポインタでつまずいた記憶はない。もちろん、効果的な使い方などはその後いろいろなコードを読んでいく中で身に付いていったわけだが。 ポインタは確かに諸刃の剣である。非常に便利な反面、危険でもある。例えば次のような

    yowano
    yowano 2013/06/02
    ポインタと参照の使い分けについて。
  • サルでもわかる 逆引きデザインパターン 第2章 逆引きカタログ ロジック編 Factory/Factory Method(ファクトリ/ファクトリメソッド)

    イントロダクション オブジェクトを利用する側からすれば、使用する際にオブジェクトの詳細を意識したくはありませんよね。 たとえば、条件によってデータファイルの読み込みに使うオブジェクトが異なる場合、CSV形式であればCSVDataReaderオブジェクトを、XML形式であればXMLDataReaderオブジェクトを生成します。 通常はif、else、switchなどの条件分岐を使用して、条件ごとに生成するオブジェクトを変更します。 ここで新たなデータファイル形式への対応が必要になった場合は、新しいオブジェクト生成処理と、条件式を追加しなければいけません。 オブジェクトの使用者は、オブジェクトが使用できる状態で受け渡してもらい、オブジェクトは使うことだけに専念したいものです。 また、このようにオブジェクトの生成処理と使用処理が同じコードに書かれていた場合、オブジェクトの生成処理によってオブジェ

    yowano
    yowano 2013/06/02
    楽器の工場を作ろうって考えた時、シンプルファクトリは一つの工場で全ての楽器を作るけど、ファクトリメソッドはそれぞれ楽器ごとに専用工場を設ける、と考えるか。その上で継承や多態性を使って更にシンプルに。
  • 状態管理用の変数をインスタンスに持たせるなこのタコって話 - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く

    たとえば、今、「ユーザーが方向を入力したらプレイヤーが動くゲーム作りたい」みたいなはなしがあるとする。その場合、モデルクラスはまあシンプルな実装として下のようなものが考えられると思う。 「できたよー」って見せにいったら、今度は「あのさー、『高速移動モード』っていうモード欲しいんだよね。そのモードだと二倍速で動くの」って言われたとする。シンプルにやるとこうなりますね。 「できたよー」って見せにいったら、今度は「なあ、すげえ面白いこと考えたんだけど、『蟹モード』って面白くない?横は4倍速で動くんだけど縦は半分の速度で動くの」とか言われたわけです。あなたは「お、おう」と言って、以下のようにコードを修正しました。 これ、ヤバい感じしますね。破滅の匂いがする。「今度は『よっぱらいモード』欲しいな〜。入力に関係なくランダムに動くの」みたいなこと言われたら確実に複雑さが爆発してメンテ不能になりになり死

    状態管理用の変数をインスタンスに持たせるなこのタコって話 - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く
  • C/C++ - 言語仕様編 第7回 ~インスタンスとオブジェクト~

    変数の宣言と定数変数型 C++において、変数の宣言は、スコープ内のいたるところで可能となる。 あるT型変数、またはリテラル t1 があるとき、 T const t=t1; のように、型名の後に const をつけると、tは、値としてt1を持ち、かつ、書き換えが出来ない変数となる。これをT型定数変数と呼ぶ。 ここで、tを const T t=t1; と初期化しても、tは、T型定数変数として機能する。このことから、tは、const T型変数であると してもよい。 C++において、定数変数は、それ自身が、リテラルとして機能することが許されるため、 たとえば、配列の要素数として、 int arr[t]={0}; などとして、t個の連続する0からなる配列を構築することが許される。 あるP型ポインタ変数、または、変数のポインタ p に対して、 P* const p1=p; P const* p2=p;