タグ

OOPに関するjoan9のブックマーク (36)

  • Value Object(バリューオブジェクト) - Strategic Choice

    師曰く数学的な値のように振る舞うオブジェクトを作成しなさい。どういうこと?変化する状態の入れ物ではなく、整数のように振る舞うオブジェクトのことです。数学の世界では、「1」に「1」を足しても、「1」自身が変更される訳ではなく、新たに「2」という数字が作成されます。プログラミングでこれを表現するのが「Value Object」になります。よって、「Value Object」は不変オブジェクト(Immutable)です。Javaのプリミティブはこの数学世界の住人で、そのラッパー(やStringは)はまさに「Value Object」と言えます。どうして?オブジェクトには大きく2種類、状態が変化する「状態型」と、変化しない「値型 *1」があります。値型を実現するのが「Value Object」パターンです。状態型の方が一般的ですが、状態を持つが故に「呼び出し順序」が重要になってしまっています。そし

    joan9
    joan9 2017/03/09
  • クラスの命名のアンチパターン - Qiita

    昔から「名は体を表す」と言ひます。クラスの名前がクラスの果たす役割と一致してゐるかどうか常に考へ続けませう。 ImageInfo, AccountData, etc. Info って何やねん? Data って何やねん? ImageInfo って Image とはどう違ふねん?? FooInfo や FooData よりも好ましいかもしれない名前の例: FooAttribute, FooProperty, FooMetadata, FooDescription FooConfiguration, FooSetting, FooParameter FooResult, FooStatistics, FooSummary FooBuffer, FooList, FooCollection, ... ProductListItem, TranslationTableEntry, etc. Prod

    クラスの命名のアンチパターン - Qiita
    joan9
    joan9 2014/09/18
  • 新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるまでの軌跡 - Qiita

    あわせて読みたい 新人プログラマに知ってもらいたいメソッドを読みやすく維持するいくつかの原則 ペアプログラミングして気がついた新人プログラマの成長を阻害する悪習 「オブジェクト指向プログラミング」と「関数型プログラミング」のたった一つのシンプルな違い あきらめるにはまだ早い!ソースコードの品質向上に効果的なアプローチ 2015年に備えて知っておきたいリアクティブアーキテクチャの潮流 この記事について この記事は新人向けの研修内容を再編集してお送りいたします。 ここで述べる内容はどのようにして現在のプログラミングスタイルが生まれてきたかを理解することで、よりよいプログラムを書くためのもので、正確なソフトウェア工学の歴史を学ぶためのものではありません。正確な歴史を把握したい場合は、原典をあたるようにしてください。 また、想定している読者は「よくあるオブジェクト指向プログラミングの学習」を既にし

    新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるまでの軌跡 - Qiita
    joan9
    joan9 2014/05/14
  • オブジェクト指向プログラミングとは何か? · eed3si9n

    2013-09-18 oop はどう定義されるべきだろうか? 純粋オブジェクト指向プログラミング 純粋オブジェクト指向プログラミングは以下のように定義できる: オブジェクトを使ったプログラミング。 オブジェクトとは何か? 他のオブジェクトへの参照を保持し、事前にリストアップされたメッセージを受信することができ、他のオブジェクトや自分自身にメッセージを送信することができるアトムで、他には何もしない。メッセージは名前とオブジェクトへの参照のリストから構成される。 これでおしまい。言い回しは僕が考えたものだけど、アイディアはオブジェクト指向という言葉を作った張人 Alan Kay (2003) からのものだ。これ以外は、直接 oop に関係無いか、実装上の詳細だ。 この定義から導き出せるものを考えてみよう。 まずは名前空間だ。C の関数と違ってメッセージ (別名メソッド) はオブジェクトごとに

    joan9
    joan9 2014/02/07
  • 状態管理用の変数をインスタンスに持たせるなこのタコって話 - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く

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

    状態管理用の変数をインスタンスに持たせるなこのタコって話 - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く
  • オブジェクト指向できていますか?

    3. 自己紹介 1992年~1997年 某ゲーム会社 プログラマ SFC,GB,PS1,N64のゲーム開発経験 1998年~現在 日工学院八王子専門学校 @mozmoz1972 専任講師 プログラミング教育を中心に担当 twitterもfacebookも実名です。よかったらフォローしてください。

    オブジェクト指向できていますか?
    joan9
    joan9 2012/08/29
  • オブジェクト指向とは何か、何が良いのか - www.kotha.netの裏

    Haskellはオブジェクト指向言語ではないが、コードを書く上でオブジェクト指向の考え方を利用するのが便利なこともあると思うので紹介する。 オブジェクト指向とは何か オブジェクト指向という言葉に共通定義がないのは共通認識だと思う。気をつけないと議論が発散しがちなので、この記事ではオブジェクト指向の理念については扱わず、オブジェクト指向プログラミングで用いられるテクニックと、オブジェクト指向言語が提供する言語機能について専ら話題にする。オブジェクト指向の特徴として良く言われるのは次のようなものだと思う。 多態 インタフェースが同じだが異なる振る舞いをする異なる種類のオブジェクトを一つのコードで扱う機能。Haskellでは「オブジェクトを操作する関数一式」を受け渡しすることで簡単に実現できる。型クラスを使っても良い。 隠蔽 インタフェースと実装を分離し、実装を外部から見えないようにする。Has

    オブジェクト指向とは何か、何が良いのか - www.kotha.netの裏
  • オブジェクト指向について語った時に使ったメモ

    今日、オブジェクト指向について1時間ほど語りました。整理するため自分用に書いたメモを公開します。大まかな構成はメモどおりに話しましたが、メモに書いていないこともたくさん話していますし、書いていても話さなかったこともあります。 前提として自分自身のオブジェクト指向へのスタンスを書いておきます。 自分のプログラマとしてのキャリアとオブジェクト指向の隆盛の重なりを考えると客観的に見て自分はオブジェクト指向世代のプログラマなんだと思います。一方で、世間で過剰にもてはやされる技術には反発してきました。オブジェクト指向も例外ではありません。オブジェクト指向を否定はしませんが、金科玉条のように扱う人の前では、オブジェクト指向なんて技法のひとつに過ぎないと、冷たく突き放してきました。 ただここ数年、かつてに比べてオブジェクト指向の威光は下がっている気がします。関数型プログラミング支持者から、オブジェクト指

    joan9
    joan9 2011/12/20
    > コードの依存性を整理するひとつの有効な策が、コードの中に不変の部分を作り込んでいくことです。マクロに見ればインターフェースです。ミクロな技法を挙げれば不変オブジェクトや副作用の排除などがあります。
  • Programming haskell chapter10

    Some languages, like SML, Haskell, and Scala, have built-in support for pattern matching, which is a generic way of branching based on the structure of data. While not without its drawbacks, pattern matching can help eliminate a lot of boilerplate, and it's often cited as a reason why functional programming languages are so concise. In this talk, John A. De Goes talks about the differences between

    Programming haskell chapter10
  • 多重継承まとめ - 西尾泰和のはてなダイアリー

    JavaはInterfaceという特殊な実装を持たないものだけ多重継承できる。実装を多重継承する仕組みはない。同じシグネチャのメソッドを持っている2つのInterfaceを継承した際にエラーにならないので衝突に気付けない。 Pythonはクラスを多重継承できる。同じ名前のメソッドを持っている2つのクラスを継承した際にどのメソッドが呼ばれるかはC3線形化を使って決定される。see: A Monotonic Superclass Linearization for Dylan RubyはModuleという「なにかを継承することはできなくてインスタンス化もできないもの」だけは多重継承できる。Moduleが別のものを継承できないためメソッドの解決は素朴な探索でOK(include A include BしたらBでの実装が優先) SmalltalkにはTraitという実装の多重継承ができるしくみがあ

    多重継承まとめ - 西尾泰和のはてなダイアリー
  • オブジェクト指向をわかりたいなら今すぐ『オブジェクト指向でなぜつくるのか』を読め - 思っているよりもずっとずっと人生は短い。

    オブジェクト指向の入門書と言えば『オブジェクト指向でなぜつくるのか』に決まってるよね、と話していたら、「ええ、そうなんですか?」と、このに推薦のことばを寄せていた平鍋さんの会社の人に言われてショックでした。ちょっと駄目すぎです。角谷さんなんとかしてください(<無茶振り)。 オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識― 作者: 平澤章出版社/メーカー: 日経BP社発売日: 2004/06/03メディア: 単行購入: 34人 クリック: 448回この商品を含むブログ (198件) を見る 私もご他聞に漏れず、オブジェクト指向のはいろいろ読んでみたのですが、『オブジェクト指向でなぜつくるのか』に勝るは内外合わせてまだお目にかかれていません。率直に言ってプログラマ必読書だと思います。 その素晴らしさは随所にあるのですが、章立てに追って説明しましょ

    オブジェクト指向をわかりたいなら今すぐ『オブジェクト指向でなぜつくるのか』を読め - 思っているよりもずっとずっと人生は短い。
  • 実はオブジェクト指向ってしっくりきすぎるんです! 不変オブジェクトのすゝめ。 - Bug Catharsis

    バグのないソフトウェアを作りたいお仕事では主にVB.NETとC#を。趣味のプログラミングでは関数型言語F#を利用しています。 私自身のF#スキル(関数型的な考え方)は、まだまだ実践レベルとはとても言えないシロモノだけど、 面白い発見と多くの可能性を感じられる言語なので、F#はさわっていてとても楽しい。 私はこれまでオブジェクト指向言語によるオブジェクト指向プログラミングをこよなく愛してきました。 というのも、「いかにバグを減らすか」、「バグのないソフトウェアを作ること」が私の最大の関心事だからです。 バグの多いコード、あるいは技術的負債の多いコードというのは、コスト的な問題があるばかりか、 開発者の身体や心までもを不健康にし、われわれに大きな不幸をもたらすことを経験的にわかっているからです。 わたしにとってオブジェクト指向技術は、それらの問題を防いだり解決をする手段として適した技術でした。

    実はオブジェクト指向ってしっくりきすぎるんです! 不変オブジェクトのすゝめ。 - Bug Catharsis
  • ハイブリッドOOPLの呪い - みねこあ

    手続きプログラミングとオブジェクト指向プログラミングはなんだかどうも癒着してしまって、別のプログラミングパラダイムという気がしてこないのが、実は諸悪の根源なのではないかと思ってしまいます。 C++ なんかでは、OOPLになったといっても手続きを流し込む大箱が追加されただけで、メンバ関数の中に降りていけば、そこに見慣れた手続きプログラミングが広がっています。Smalltalk なんかですと、メソッドの中の小コードであってもこれはもう手続きではなくって、メッセージ式が連なっていく様はむしろ関数言語に似ています。 「純粋OOPL」「ハイブリッドOOPL」の違いは、「全てがオブジェクトであるか」とか「最初からOOPLとしてスクラッチビルドされたか、既存言語を増築したか」ではなく、実はこの差なのでは、と思います。sumimさんが啓蒙されているような「二つのOOP」があんまりフツーには知られていなかっ

    ハイブリッドOOPLの呪い - みねこあ
    joan9
    joan9 2009/03/29
  • Roleに基づくスタブライブラリ - 世界線航跡蔵

    オブジェクトが他のオブジェクトと相互作用するにあたり、そのオブジェクトの機能の全体が必要になることは少ない。むしろ、オブジェクトの提供する特定のRoleのみが見えるべきである。そのRoleを提供することのみを契約すべきである。 MVCアーキテクチャではControllerはModelに対してオブザーバとして振る舞うし、Viewに対しては何らかのメッセージソースとして振る舞う。MVC風webフレームワークではControllerはViewに対して、表示すべきデータを供給する役割だし、一方でHTTPリクエストの消費者として振る舞う。 さて、ある種の静的型付け言語ではこのRoleをinterfaceという言語要素で表すことができる。そして、契約違反はコンパイルエラーとして検出することが可能だ。その言語の上のフレームワークが、適切にinterfaceで契約を結んでいるかは別として。 これをRuby

    Roleに基づくスタブライブラリ - 世界線航跡蔵
    joan9
    joan9 2009/03/07
  • 継承を禁忌すること - Radium Software

    IS-A IS-A HAS-A - Raganwald IS-STRICTLY-EQUIVALENT-TO-A - Raganwald OOP に関する書籍を読むと,たいてい「継承は軽々しく使うべきではない」というようなことが載っている。「継承は IS-A の関係にのみ使うべき」とか,「実装の共有に継承を使ってはならない」とか,「継承よりも合成・包含を優先すべき」とか……。 それが Raganwald に言わせれば,「IS-A の関係は HAS-A の関係と同じこと」とか,「継承は便利機能に過ぎない」とか,「リスコフの置換原則さえ生ぬるい」というような厳しい意見にまでなる(こんな風に言い切ってはいないけれど……まあ,そのようなことを丁寧に説いている)。 このような,制限の無い継承を禁忌する意見は,一般に納得することのできる内容ではある。ただ,それを現場で適用するのは,非常に難しいことのよう

    継承を禁忌すること - Radium Software
    joan9
    joan9 2008/06/13
  • Matzにっき(2007-04-12) - Why OO Sucks

    << 2007/04/ 1 1. エープリルフール 2. [Ruby] オブジェクト指向機能を取り除いた Ruby-- が登場!? 2 1. [教会] セミナリー1日目 2. LMLML 3. [Ruby] 最速配信研究会 - なんだかいろいろ申し訳ない気分になった話 4. [Ruby] Headius: ActiveRecord 100%, Performance Doubling, Java Support Improving 3 1. [Ruby] Bitwise Magazine:: What's Right With Ruby? 2. [OSS] オープンソースソフトウエアがビジネスの成長を加速 3. Passion For The Future: なぜ株式投資はもうからないのか 4 1. [Ruby] Rails 1.2と1.1、速いのはどっち? - Railsbenchによる

  • Matzにっき(2007-03-23)

    << 2007/03/ 1 1. [Ruby] Rubyist Magazine - Rubyist Magazine 0018 号 2. ストレートタイプのスマートフォン「NOKIA E61」レポート 3. ITmedia エンタープライズ:TopCoderで世界と渡り合う日IBMの異才 - 夷藤勇人 4. My Sleepless Nights in the Big Apple: Apple、サブノート市場へ再参入へ 5. ITmedia Biz.ID:失敗しないプロジェクトマネジメント -- AppleはてなGoogleに学ぶ3つのヒント 6. 平成19年度「情報大航海プロジェクト(モデルサービスの開発と実証)」に係る委託先の公募について 7. [言語] PyCon 2007 Review 8. [Ruby] deep_science:Re:バザール「オープンソース、そして「R

    joan9
    joan9 2007/03/28
  • hykw blog » Blog Archive » プログラマにおくる英語の冠詞の使い分けの法則

    The domain hykw.tv is may be for sale. Please send an inquiry to info@first1.com

  • オブジェクト指向入門 第2版(その2): ホットコーナー

    ブログ(iiyu.asablo.jpの検索) ホットコーナー内の検索 でもASAHIネット(asahi-net.or.jp)全体の検索です。 検索したい言葉のあとに、空白で区切ってki4s-nkmrを入れるといいかも。 例 中村(show) ki4s-nkmr ウェブ全体の検索 ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。 --- この前、名前だけ紹介した http://www.amazon.co.jp/exec/obidos/ASIN/4798111112/showshotcorne-22/ref=nosim バートランド・メイヤー著, 酒匂寛訳「オブジェクト指向入門 第2版 原則・ コンセプト」 を、翔泳社の古田島さ

    joan9
    joan9 2007/02/20
  • Perl 5 を OOP 言語にするには - Tociyuki::Diary

    「sumim’s smalltalking-tos - オブジェクト指向言語として必須な要素とは何か?」のコメント欄に質問を書いていたとき、私が sumim さんの立場になったとして、もしこの質問をされたらどう答えてみようかと考えてみました。 # tociyuki 『PerlをOOPとみなすには > 関数のコールを「メッセージング」だと“読み替え”る 必要があるという部分の意味が読み取れませんでした。 Perlでは「レシーバ->メソッド名」をevalする実行時に、レシーバのクラス(レシーバが文字列スカラーならそれと同じ名称のパッケージ、もしくはレシーバーがリファレンスならばそれにblessされたパッケージ名)の継承樹を、メソッド名と同じ名称の関数を探し出してから呼び出す仕組みになっています。 この、「実行時に、その都度、継承樹を辿って関数を探し出してコール」する動作を「関数のコール」と読ん

    Perl 5 を OOP 言語にするには - Tociyuki::Diary