タグ

関連タグで絞り込む (277)

タグの絞り込みを解除

OOPに関するkiyo_hikoのブックマーク (216)

  • 俺がポリモーフィズムだ! - はてなかよっ!

    Twitterで一瞬盛り上がった.俺の中のポリモーフィズムは簡単に言えば「一つの識別子が複数の型を持てる」というもの.オーバーロードもポリモーフィズムに入ると思っていたのだけど,「ワロスwwwwメッセージに応答するオブジェクトが実行時に決まることなんだから入らないだろjkwww」(誇張あり)とreplyを貰った.俺自身はプログラミング苦手なのでこの辺よく分かってないのだけど,実行時に決まるのはあくまで動的束縛などを利用したポリモーフィズムの一つでしかない,と思っているのだけどどうなんだろうか? 「動的(実行時)なものがそうだ!」というのもあったけど,同じコードでもフローによって静的/動的が変わってしまうかもしれないし.とすると違う人から,それは擬似ポリモーフィズムですよ,静的ポリモーフィズムですよ,ともう皆さん当プログラミングが好きですね,と. 言いたいことは何かというと,ここの説明を信

    俺がポリモーフィズムだ! - はてなかよっ!
    kiyo_hiko
    kiyo_hiko 2011/07/04
    「もしもそれがポリモーフィズムのように歩き、ポリモーフィズムのように鳴くのなら、それはポリモーフィズムである」・・・ワロタ。
  • いまさらですが、職業Javaプログラマーなら理解しておいてほしい「継承」の意味について - 達人プログラマーを目指して

    正しく意味を理解している方にとっては、まったく常識レベルの話であり、何をいまさらと思われる方々も多いかと思いますが、大規模案件のレガシーコードなど、私が仕事で見かけるJavaのコードを読むと、「このコードを書いたSEやPGの方々は、はたして継承の意味を正しく理解していないのではないか」と思われる設計のコードに出会うことが少なからずあります。現在では改良されましたが(Javaプログラミング能力認定試験の問題がかなり改善されていました - 達人プログラマーを目指して)、以前のJavaプログラム認定試験の問題は、そうした不適切な設計がされている典型的な例となっていたのですが、実際、SI業界ではあのような品質のコードのシステムが今でも現役で多数稼動しているというだけでなく、現在でも新たに生み出されているというのは残念ながら紛れもない事実のようなのです。 確かに新人研修で「哺乳類を継承して犬クラスと

    いまさらですが、職業Javaプログラマーなら理解しておいてほしい「継承」の意味について - 達人プログラマーを目指して
    kiyo_hiko
    kiyo_hiko 2011/06/24
    "Parent parent = child;"この例は一見直感に反するので、理解出来ない人には難しいかもしれないと思いました。自分でも誰かに説明する方法を考えさせられる・・・。
  • 集約とコンポジションの実装方法:アーキテクト360

    .NETアプリケーションのアーキテクチャやフレームワーク、設計に役立つ情報を中心に紹介しています。また業務システムに役立ちそうなユーティリティやノウハウをサンプルコードつきで公開しています。言語はC#とVB.NETを扱っています。 UMLでクラス間の関係が集約とコンポジションである場合の実装例をC#とVBで紹介する。集約は白抜きのひし形を付けた関連で、コンポジションは黒塗りのひし形を付けた関連であり、どちらも関連の一種である。その違いを簡単に説明すると、集約が弱い結びつきであるのに対して、コンポジションは一心同体の強い結びつきを表す。集約は、関連する先のオブジェクトが最初からある場合もあるし、外したり、後から追加されたりするような関係である。一方、コンポジションはオブジェクトが生成されるときに、関連する先のオブジェクトも同時に生成され、破棄されるときは同時に破棄されるような関係である。 実

  • Martin Fowler's Bliki in Japanese - FrontPage

    ここは、Martin Fowler's Bliki の翻訳Wikiです。 Martin Fowler氏人の許可を得て公開しています。 Wikiですので、どなたでも参加可能です。 ご自由にページの追加、修正、変更を行ってください。 まずは およみください をどうぞ。 ご意見は ご意見箱 までどうぞ。 ページ一覧からページをご覧いただけます。 まだ翻訳していないページは、InHandOrNotまたはKeywordListUntranslatedで確認できます。是非、「新規作成」してください ;-)。

  • こうもり問題 - Wikipedia

    こうもり問題(こうもりもんだい)とは、情報や物品を分類する際に生じる問題の一つである。例えば A にも B にも分類できる場合に、どちらに分類すればいいのか、といった問題である。 すべてのものや情報は、利用される文脈に応じて複数の属性を持ち得る。しかし、階層構造のように、各項目を木構造の末端にあてはめて分類する方式(図書館資料など)では、項目が持つ複数の属性のうちの一つだけに着目しなければならないという制約がある(たとえば「自民党税制調査会の記録は政治と税金のどちらに分類するか」など)。こうもり問題とは、その制約が原因となって生じる諸問題を指す。 身近な例では、以下のようなトラブルがこうもり問題として挙げられる。 ファイルをフォルダ分けして整理する際に、どこのフォルダに入れたらいいか迷う。 ショッピングセンターで買い物をする際に、目的の商品を探し当てるためにいろんなジャンルのコーナーを歩き

    kiyo_hiko
    kiyo_hiko 2011/06/07
    項目を木構造に格納する際に、格納の基準となる属性が1つしかないために起こるジレンマだとか関連する問題。身近な例があまりにもあるあるすぎる。
  • Amazon.co.jp: 実装パターン: ケント・ベック (著), Kent Beck (著), 永田渉 (監修), 長瀬嘉秀 (監修), 永田渉 (読み手), 長瀬嘉秀 (読み手), 株式会社テクノロジックアート (翻訳): 本

    Amazon.co.jp: 実装パターン: ケント・ベック (著), Kent Beck (著), 永田渉 (監修), 長瀬嘉秀 (監修), 永田渉 (読み手), 長瀬嘉秀 (読み手), 株式会社テクノロジックアート (翻訳): 本
  • モバイルゲームの歴史を年代別にご紹介します。モバイルゲームの成長と今後について詳しく解説していきます。

    モバイルゲーム 物凄い勢いで勃興したモバイルゲーム業界は、いろいろな課題や問題に直面しながらも巨大化し、今日の時点でのスマートフォン向けゲームの市場へと継承されていきます。 モバイルゲーム歴史 2001 Javaアプリと3Dゲームの登場 Javaが利用できるようになったことにより、ダウンロード型のゲームが供給できるようになりました。 2002 携帯電話端末の大容量化・3D化競争 Java搭載携帯電話端末が登場してからごく僅か1年の間に、アプリのサイズに関しては10倍に広大化し、表現方法も2Dから3Dにシフトし始めました。J-PHONEは『ゼビウス』や『スペースハリアー』などといった昔のアーケードゲームを、ドコモはSIMCITYなどパソコンで世界的規模のヒットを飛ばしたゲームを主力商品としていました。 2003 モバイルゲームの一般化 メモリの制限が厳しいJava仮想マシン上ではなく、OS

    kiyo_hiko
    kiyo_hiko 2011/05/31
    バカな自分には高度すぎてわかりませんでした
  • 『インターフェイス指向設計』読了

    最初にオススメポイントだけ書いておく。このには テスト容易性の確保複雑性保存の法則への対処へのヒントが詰まっている。 kakutani.com にアサマシセンターがあるのかと思ったけどなかったので自分ので貼っちゃうよ。献なのに自分のアサマシ貼ってるなんてふてぇやつだよ、オレ。 読み手に推奨される準備まずはじめに「書の読者対象」を挙げておくと、 書は、ある程度のプログラミング経験と、オブジェクト指向設計の基的な知識を持つ開発者を対象にしています。オブジェクト指向に深い造詣がある読者でも、インターフェイス指向のアプローチを学ぶことで、これまでにはなかった設計の概念を得ることができるようになるでしょう。また、インターフェイスを理解することは、SOA(サービス指向アーキテクチャ)の設計においても有用です。 と書かれている。 正直に告白すると自分はこれをなめていた。普通に UML もデザイ

    kiyo_hiko
    kiyo_hiko 2011/05/26
    読書中・・・「継承の問題について自覚的であった方がよい。継承がいかに扱いにくいかを普段感じていないと、サンプルのコードだけではいたずらに複雑になっただけに感じられてしまう」
  • 究極のインターフェース指向設計

    オブジェクト指向言語では、メソッドを定義しただけで中身を実装しない、インターフェースが登場します。 インターフェースを使うと、クラスやメソッドの再利用性が高まります。インターフェースさえ同じなら、同じコードを、いろいろなクラスに適用できるためです。 しかし、インターフェースを使うのは、コードを再利用するためだけではありません。たとえ再利用しなくても、敢えてインターフェースを作ることもあります。むしろ、再利用するか否かに関わらず、インターフェースを使うべきだ、という考えもあります。 ここでは屋さんのシステムを例に、インターフェースの存在意義について考えてみます。 屋さんのクラス設計 屋さんですから、まずは「」クラスが必要です。「」クラスは、下記のようないろいろな属性を持ちます。 題名 著者 発行者 値段 重さ ページ数 次に、を購入するための「会計システム」を作りましょう。 レジ

    kiyo_hiko
    kiyo_hiko 2011/05/26
    「オブジェクトは、場面ごとに役割が変わるのです。」・・・役割に着目すると、自然とインターフェース指向になるということだろうか。本屋の喩えはわかりやすい
  • 【GOF】デザインパターン

    なるほどなーと思ったがあんまり使わないぞ factory method abstract factory builder prototype singleton adapter bridge composite decorator facade flyweight proxy chain of responsibility command interpreter iterator mediator memento observer state strategy template method visitor

    kiyo_hiko
    kiyo_hiko 2011/05/23
    >>580「まあ要するに会社のレベルは超えられない・超えてはならないつー事」…ふむ。>>583「バレたら即書き直し」…中身がなんだろうと気にしないためにAPIで境界を切るんだと思うのだが、その趣旨をわからん人が多い。
  • 疎結合がソフトウェア開発を変える(1)

    図1●オブジェクト指向の問題点を解決する オブジェクト指向技術が浸透するにつれ,その問題点が明らかになってきた。これを解決するキーワードが「疎」である。 図2●部品化のメリット システムを分割してうまく部品化できれば,さまざまなメリットが生まれる。中でも重要なものは,同じ部品を他のシステムで再利用できること,変更を加えたときに影響が及ぶ範囲を部品内に限定できること,部品を別のものに入れ替えることでシステムの変更や拡張が容易になること,である。 オブジェクト指向言語の考え方が登場してから30年余。オブジェクト指向は,ソフトウェア開発の現場にようやく定着してきた*1。システム・インテグレーションの現場では「案件のほぼすべてが,オブジェクト指向開発」(日ユニシス・ソリューション AD CoE コンピテンスセンタ統括部長の川口真一氏)。「システムを発注する側が,設計情報をUML(Unified

    疎結合がソフトウェア開発を変える(1)
    kiyo_hiko
    kiyo_hiko 2011/05/20
    「コーディング規約など,プログラムを均質化するための約束事を,苦労して周知徹底させる必要がない」・・・良記事。OOPの本質は境界を閉じる事だと思う。閉じれない開発規約の下、まじめにOOPしたら疲れるだけだった
  • StateパターンとStrategyパターンは何が違うのか考える | Tricorn Tech Labs

    最近、物欲に目覚めてしまってAmazonでいろいろ買ってたら、今月の請求が7万を超えて素に戻ってしまった戸田です。 ちょっとbluetoothデバイスに凝り始めてしまって…。(汗) さて、オブジェクト指向設計のバイブルと言えば、いわずと知れたGoF(オブジェクト指向における再利用のためのデザインパターン、Erich Gamma, Ralph Johnson, Richard Helm, John Vlissides著、ソフトバンククリエイティブ刊)です。 ここで紹介されている23のパターンはどれも小手先のテクニックではなく、エッセンスが抽出されており応用範囲が広いものばかりです。 なによりも今まで暗黙知になりがちな、設計の定石・パターンに共通の名称(言語)を与えて、名称による概念の共有ができるようになったという功績は計り知れません。 もちろん、KREISELにおいてもこれらのパターンを活

    StateパターンとStrategyパターンは何が違うのか考える | Tricorn Tech Labs
    kiyo_hiko
    kiyo_hiko 2011/05/20
    StateとStrategyの違い。両者とも煩雑な分岐を避けるという効果は共通:分岐はオブジェクトでも、式ですらないからオブジェクト指向的にはノイズっぽい。Stateはオブジェクトが動的に切り替わる性質が強調されるんですね。
  • perlmod - Perl のモジュール (パッケージとシンボルテーブル) - perldoc.jp

    Perl provides a mechanism for alternative namespaces to protect packages from stomping on each other's variables. In fact, there's really no such thing as a global variable in Perl. The package statement declares the compilation unit as being in the given namespace. The scope of the package declaration is from the declaration itself through the end of the enclosing block, eval, or file, whichever

    kiyo_hiko
    kiyo_hiko 2011/05/19
    あとで読む
  • perl - Inside-out Object : 404 Blog Not Found

    2007年03月11日03:30 カテゴリLightweight Languages perl - Inside-out Object ところが、そのないはずの隠蔽化を強制する仕組みがすでに発見されているのです。 Perl Best Practices Damian Conway [邦訳:Perlベストプラクティス] ビンゴ中西のほげほげ Kansai.pm第8回ミーティングに行ってきました@荷造り中そして、Perlのオブジェクト指向には 隠蔽化を強制する仕組みはない いつか書こうと思っていたけど、ちょうどいい機会なので。 ここでは例として、name,uriという二つのインスタンス変数を持つオブジェクトを実装してみます。 InsideOut.pm { package InsideOut; use strict; use warnings; my %objects; sub new { my

    perl - Inside-out Object : 404 Blog Not Found
    kiyo_hiko
    kiyo_hiko 2011/05/19
    参照変数を数値コンテキストで評価するとアドレスが帰ってくる。これはインスタンスのIDに使える。
  • 継承の仕組み - Perl入門ゼミ

    Perl › オブジェクト指向 › 継承の仕組み Perlにおける継承の仕組みを解説します。 1. 継承の仕組み 継承の仕組みは上位クラスに対してメソッドの探索をしているということです。前回のコードをもう一度見てみましょう。 use strict; use warnings; # コンポーネントクラス package Component; sub x { return 5 } # ボタンクラス package Button; # 継承の記述 our @ISA = ('Component'); sub new { bless {}, 'Button' } package main; # ボタンクラスを使用する my $button = Button->new; print $button->x; Buttonクラスには、x というメソッドがないのに、 x というメソッドを呼び出しているのでし

    継承の仕組み - Perl入門ゼミ
    kiyo_hiko
    kiyo_hiko 2011/05/18
    1ファイル内でどうやって継承するか悩んでいたら、use baseでできた。サンプルが見やすいのでブクマさせて頂きます
  • Perlのinstanceof演算子のベストプラクティスは何か - Unknown::Programming

    instanceof演算子 - Islands in the byte stream 確かに遅いですよねぇ。 ただ、一応ベンチとってみたところ、blessed使うのが一番早かったです。 以下、$xがオブジェクトの場合のベンチ。 use Benchmark qw(cmpthese timethese :hireswallclock); my $x = bless {} , 'Foo'; my $class = 'Foo'; cmpthese(100000,{ ref_eval => sub { if ( ref($x) && eval { $x->isa($class) } ) {} }, scalar_util => sub { if ( Scalar::Util::blessed($x) && $x->isa($class) ) {} }, param_util => sub { if

    Perlのinstanceof演算子のベストプラクティスは何か - Unknown::Programming
    kiyo_hiko
    kiyo_hiko 2011/05/18
    Scalar::Util qw/blessed/でクラス名を取得できるという。参考に
  • オブジェクト指向プログラム言語としてのJavaScript

    このページでは、JavaScriptのオブジェクト指向言語としての側面を研究します。 JavaScriptは、HTMLの拡張という側面が注目されていますが、 プログラム言語として見た場合にも、興味深い独自の特徴がたくさんあります。 このページでは、これらJavaScriptの言語としての特性、 特にオブジェクト指向言語としてJavaScript を見た場合の特徴について詳しく研究を試みます。 JavaScriptは、ほぼ完全なオブジェクト指向言語です。プログラマによるクラス定義、プロパティ定義、メソッド定義ができます。継承は、言語の基機能としては用意されていませんが、基機能の組み合わせにより実現できます。 メソッドのバインディング(binding)はレイトバインディング(late binding)です。これは、JavaScriptが変数の型のない言語だからです。 JavaScript

  • Map does not extend Iterable. Why ? (Beginning Java forum at Coderanch)

    kiyo_hiko
    kiyo_hiko 2011/04/22
    最後にBA。「for (K key, V value: map)」的な記法は便利そう。今のところCollectionをImplementしたentrySetでループ
  • 4. FactoryMethod パターン

    2012/04/26 一部修正しました デザインパターン 4章 FactoryMethod パターン 4.1 FactoryMethodパターンとは 4.2 サンプルケース 4.3 FactoryMethod パターンのまとめ 4.1 FactoryMethodパターンとは 第4章では、FactoryMethod パターンを紹介します。FactoryMethod パターンは、オブジェクトの生成方法に一工夫加えることで、より柔軟にオブジェクトを生成することを目的とするものです。FactoryMethod パターンでは、インスタンスの生成をサブクラスに行わせることで、より柔軟に生成するインスタンスを選択することが可能となります。 オブジェクトを生成する場合、下記のように記述するのが普通です。 Product product = new Product(); しかし、このようなオブジェクト生成方

    kiyo_hiko
    kiyo_hiko 2011/04/20
    「先生、僕は木じゃなくて芋に彫りたい」
  • DIって本当に必要? - ひがやすを技術ブログ

    DIって当に必要?たまにそう思うときがあります。DIによって開発は当に楽になったのか。 DIのメリットでよく語られることとして、インターフェースと実装を分離し、機能の利用者側はインターフェースを通じて機能を利用することで、実装に直接依存しなくなり、後で実装を変更しても影響を受けなくなるということがあります。 実際後から、実装クラスを変更するということはめったにないので、よくあるのは、テストのために実装クラスをモックに変えることです。 でも、別にそれだけならDIContainerなんていりません。たとえば、次のようにServiceクラスに直接依存したClientがあるとします。 class Client { Service service = new Service(); void setService(Service service) { this.service = service;

    DIって本当に必要? - ひがやすを技術ブログ