タグ

オブジェクト指向に関するbigbroのブックマーク (80)

  • enum-j.html#java_enum

    C言語によるプログラミングでは、列挙型(enum型)はたいへん良く使われます。 オブジェクト指向言語でも、それは変わらないようです。C言語を拡張したC++言語ではもちろん、Java言語でも、J2SE 5.0になってから列挙型が導入されたほどです。 その一方で、オブジェクト指向言語で列挙型を使う弊害も、繰り返し指摘されてきました。列挙型とswitch文を使ったソースコードは、ポリモーフィズムを使って書き直すべき典型的な悪い例として、しばしば取り上げられて来ました。 しかし、列挙型を使ったプログラムのすべてが、ポリモーフィズムを使って書き直すべきだとは限りません。継承によるポリモーフィズムは、オブジェクト指向の特徴の1つですが、サブクラスを作るべきではないケースもあるのです。そのような場合に、列挙型を使ったコードを書くことは、悪いことではありません。 ここでは、オブジェクト指向言語における列挙

    bigbro
    bigbro 2012/12/26
    列挙型はC#では更にパワフルになってる
  • やさしいクラス設計「活きのいいクラス見つけます」by Java and C#

    1日目 --- クラス設計とは ここではクラスとその設計について書いていきます。 オブジェクト指向プログラミング言語の一つであるクラスベースの言語において、クラスの設計はプログラム設計の重要なものの一つです。 例えば、Java や C# はクラスベースのオブジェクト指向言語であり、そのクラス設計は重要です。 クラスとは? まず、クラスとは何でしょう。 クラスとは、具体化されたインスタンスオブジェクトの一部を抽象化してカテゴライズしたオブジェクトです。 例えば、数値の 1や 2 のようなオブジェクトを考えます。このオブジェクトは + や - に反応するオブジェクトです。 これらのオブジェクトで値を抽象化したオブジェクトを考えます。これを integer  オブジェクトと呼んでみます。この integer は + や - に反応するオブジェクトで値が抽象化されている オブジェクトの総称になりま

  • C++クラス設計に関するノート

    C++が他のオブジェクト指向言語と比べて難しいのは、やはりメモリ管理をプログラマが自分でしなければいけない点だと思います。よくよく注意しないと、削除し忘れたり、同じオブジェクトを2度削除してしまうというエラーが発生します。このノートでは、オブジェクトを「値オブジェクト」と「参照オブジェクト」というカテゴリに分け、詳細設計の段階で注意すべき点を整理しておきたいと思います。 0. はじめに 私自身今までいくつかのプログラミング言語を使ってきましたが、C++ が他のオブジェクト指向言語と比べて難しいのは、やはりメモリ管理をプログラマが自分でしなければいけない点だと思います。例えば、 Person* person = new Person(); と生成したオブジェクトは、使い終わったら次のように削除しなければなりません。 delete person; 生成してすぐ削除するなら簡単なのですが、実際に

    C++クラス設計に関するノート
  • クラス設計に関するメモ

    経験的にこのようにした方がよいと思った点についての記録です。 仕事で大規模(2000クラス超)かつ製品寿命がながいパッケージソフトを作っていた関係で、 ちょっとした設計の間違いが、 あとあとで大変な苦労する羽目になったりすることを経験してきました。 このような規模が大きいアプリケーションを作ることはなかなかないかもしれませんが、 なにかの参考になれば、と思います。 継承する前に委譲を検討する Singleton パターンを使うときの注意 Template Method パターンを使うときの注意 クラス間の依存に関する注意 クラスの粒度 Singleton の問題を回避できるか? 継承する前に委譲を検討する 継承はスーパークラスの仕様をよく理解しておかないと、 バグを作りこみやすいので十分注意する必要があります。 メソッドのオーバーライドをするときも、 public void foo(){

    bigbro
    bigbro 2012/06/15
    SingletonWrapperってのが興味深い
  • やっと理解できた!JSオブジェクト指向プログラミング再入門 | ゆっくりと…

    既に多くの方が JavaScript のオブジェクト指向的側面についての解説を記事にされていますが、読み手側から見ると、例えばプログラミング言語への習熟度やオブジェクト指向自体に対する理解度がマチマチなわけで、私自身、「おお、なるほど!」 っていう、頭の中のスイッチがパチンッ!と入るような境地には達していませんでした。 かつて私も オブジェクト指向なJavaScriptプログラミングのススメ なんていう翻訳記事を書いてはいるのですが、正直なところ prototype.constructor の存在は知りませんでしたし、Function.call や Function.apply をどう使えばよいのかなどをちゃんと理解できてはいませんでした。 そんな中、2011年12月に書かれた Doc Center | Mozilla Developer Network の記事 オブジェクト指向 Java

  • PHP_Object - openpear

    PHPを純粋なオブジェクト指向プログラミング言語っぽく書けるようにする。 主にメソッドチェーンするためのライブラリ。 サンプル require_once 'PHP/Object.php'; function p($data) { return PHP_Object::factory($data); } $array = p(array('foo', 'bar')); $array->push('baz'); // array_pushのエイリアス $array->var_dump; // 引数がない場合、括弧は省略できる /* 出力結果 &array(3) { [0]=> string(3) "foo" [1]=> string(3) "bar" [2]=> string(3) "baz" } */ $array = p('Hello, World!')->replace('World',

  • Java→C++、C#やる人の落とし穴? 〜virtualキーワード〜 - ひでっぷの技術メモ

    問1 下のようなクラスがある グループ1(Java) public class A{ public String hoge(){ return "hogehoge"; } } public class B extends A{ public String hoge(){ return "fugafuga"; } } グループ2(C++) public class A{ public String hoge(){ return "hogehoge"; } } public class B : A{ public String hoge(){ return "fugafuga"; } } それぞれのグループにおいて下記のhogeメソッドはどんな文字列を返すか A a = new B(); a.hoge(); 答えは グループ1は"fugafuga" グループ2は"hogehoge" C++をや

    Java→C++、C#やる人の落とし穴? 〜virtualキーワード〜 - ひでっぷの技術メモ
  • オブジェクトモデル化技法 - Wikipedia

    オブジェクトモデル化技法 (オブジェクトモデルかぎほう、OMT; 英: Object Modeling Technique) は、オブジェクト指向ソフトウェア開発方法論であり、1990年頃にジェームズ・ランボー、マイケル・ブラハ、ウィリアム・プレメラニ、フレデリック・エディ、ウィリアム・ローレンセンなどの人々によって開発された。 ジェームズ・ランボーたちは著書『オブジェクト指向方法論OMT モデル化と設計』 (原著は1990年刊、日語訳は1992年刊) で OMT を説明している。 現在では OMT は、 モデル図の記法は、Booch法とオブジェクト指向ソフトウェア工学 (OOSE) を含む他の多くのオブジェクト指向開発方法論とともに、Object Management Group (OMG) のもとでUML (Unified Modeling Language; 統一モデリング言語)

  • PHPのinterfaceとabstractを正しく理解して使い分けたいぞー ::ハブろぐ

    interfaceとabstractの特徴と違いを捉える 今回もPHP話。(正しくないことは @ahomu に教えてもらえると助かりマス) PHP5では、interface(インターフェイスの宣言)やabstract(抽象化)が使用できます。これらの説明を読むと、一見して同じような役割を持っているように見えます。 それは両者とも、メソッドの実装を「インターフェイスを実装したクラス」や、「抽象クラスを継承したクラス」に強制的に任せる機能を持っているからです。これらの挙動は、外見上とても似ています。少なくとも自分はそこで引っかかりました。 interfaceもabstractも便利なオブジェクト指向機能ですが、使い分けができないと、もったいないです。ありがちな話だと、いつまでもabstract一辺倒で、interfaceの出番が見つからない、とか。 今回はそのへんを自分の理解を整理しつつ書き留

    PHPのinterfaceとabstractを正しく理解して使い分けたいぞー ::ハブろぐ
  • 第4回 オブジェクト指向の本質 | gihyo.jp

    エンジニアとして良い仕事をするために必要なこと ソフトウェア業界で日米を往復しながら仕事をしていると、世界中のさまざまなエンジニアに会う。私のように「プログラミングを心底楽しんでいる」人から、「⁠新3K」(⁠きつい・厳しい・帰れない)を身をもって体験している人までさまざまだが、共通して言えることは、エンジニアとしての基礎がしっかりできている人とできていない人では、その生産効率に大きな開きがあり、それが結果的には、会社での労働環境や待遇に、そして結果として自分自身にとっての「仕事の充実度」に、大きな影響を与えているということである。 いつも締め切りに追われている、毎回バグで苦しんでいる、徹夜の連続で体力に限界がきているなど、「⁠仕事がきつい」理由はいろいろとあると思うが、会社や上司の悪口を言う前に、自分自身がプロフェッショナルなエンジニアとしてこの業界で勝負をするうえで必要な最低限の基礎がで

    第4回 オブジェクト指向の本質 | gihyo.jp
  • [PHP5] OOPで掲示板を作ってみる – Step1~Step2

    PHP ○○ 作り方」みたいなキーワード検索するとべた書きの作り方がHitしまくる。 それなのにOOPなサンプルはあんまり見つからない。言語を英語にしても。 キーワードをMVCにすると結構ヒットするんだけど、殆どがフレームワークの使い方だったりして。 OOPの例としてよくあるのはオブジェクト指向プログラミングで書いたようなクラス単体のものだと思う。 でも実際何か作ろうとしたらクラスひとつで足りるわけがないし、クラス書いたすぐ真下で実行なんてしないじゃん? ZendとかCakeとかPEARみたいなフレームワークを使って何かを作るにしても クラスをどうアレすれば掲示板とかになるの?って疑問は解決しない。 フレームワーク使えばそりゃ掲示板の一つや二つさくっと出来ますよ? 出来るけどフレームワーク使うほどでもない時もあるし、OOPで組めって言われた時困るから質が知りたい。 それで、探して見つか

    [PHP5] OOPで掲示板を作ってみる – Step1~Step2
  • オブジェクト指向についての覚え書きとPython上のクラスと組み込みオブジェクトについて - 試験運用中なLinux備忘録・旧記事

    Pythonの基的なメモ集(言語・文法・型・文字列など)」「Pythonの基的なメモ集(del文・条件分岐/if文・辞書・タプル/例外/関数の例)」のときと同様、高度な内容は扱わず、オブジェクト指向に詳しくない自分向けの覚え書きという位置付け。 (2014/11/5)ドキュメントのリンク先を修正し、サンプルコードもPython 3に対応する形に修正した。 オブジェクト指向を使用する理由について 用語地獄 オブジェクトの設計図と実体 メンバ変数とメンバ関数の呼び方 クラスの継承 クラス名の慣習 どのようなクラスをどのように作ればよいのか Pythonでのオブジェクト 扱い方 テスト Pythonの組み込みオブジェクトについて オブジェクト指向を使用する理由についてwikipedia:オブジェクト指向プログラミングの「特徴」に書かれている「オブジェクトの区別」「背景」あたりが、何故オブジ

    オブジェクト指向についての覚え書きとPython上のクラスと組み込みオブジェクトについて - 試験運用中なLinux備忘録・旧記事
  • メソッド設計で守るべき10個のルール - A Day In The Life

    以前メソッド設計の原則に関する記事を書きましたが 質問をすることで答えは変更されない原則 メソッドの引数はオペランドのみにする原則 それ以前にメソッド設計する上で最低限守った方がよいルールをまとめてみました。 プロパティをメソッドの戻り値代わりに使ってはいけない ファンクションメソッドでプロパティの値を変更してはいけない プロパティをリターンしない インスタンス変数やプロパティをメソッドの引数に渡さない 参照渡の引数をリターンしてはいけない 例外処理を GoTo 文の代わりに使ってはいけない 理由なく id 型をメソッドの戻り値にしない 特定メソッドの呼びだしが前提になったメソッドを作ってはいけない パブリックメソッドからパブリックメソッドを呼ばない プライベートメソッドからパブリックメソッドを呼ばない 以下その詳細です。 プロパティをメソッドの戻り値代わりに使ってはいけない メソッドが呼

    メソッド設計で守るべき10個のルール - A Day In The Life
  • ダックタイピングという考え方は間違ってると思いませんか? - http://ja.wikipedia.org/wiki/%E3%83... - Yahoo!知恵袋

    ダックタイピングという考え方は間違ってると思いませんか? http://ja.wikipedia.org/wiki/%E3%83%80%E3%83%83%E3%82%AF%E3%83%BB%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0 今のオブジェクト指向言語はダックタイピングが当たり前、Javaのinterfaceは古い、 という意見をネット上で見かけたのですが、正しいと思いますでしょうか。 かつてC言語とPerlしか知らなかった私は、Javaのinterfaceを知って衝撃を受け、 そこからポリモーフィズムなどのオブジェクト指向設計を意識するようになりました。 クラス型が違えど同じメソッドを持っていれば同様に処理する、というダックタイピングのメリットは私には理解できません。 異なるクラスで、たまたま名前とパラメータが同じでも、中身の動作が違う

    ダックタイピングという考え方は間違ってると思いませんか? - http://ja.wikipedia.org/wiki/%E3%83... - Yahoo!知恵袋
  • 継承とは?

    copyright 1996 Kubo C++等の継承の罠。設計・実装・能力・開発時間等のバランスを考えよ。 何が言いたいのかはページ末。 NetNews発言を再編集しました。 fj NetNews--> fj.comp.lang.c , fj.comp.lang.c++ 文章の繋がりが変かもしれませんが想像力でお読み下さい。 問題提起 三角形(図形)から描画は派生するのか? いいえ、図形と描画は異なった継承図になります。だから、三角形自身が描画する構造は設計上おかしいです。描画クラスに三角形を送ると三角形を描画するのです。 色々な人のクラス設計を見ると、継承を勘違いしています。何でもかんでも継承してみたり、「どうしたら継承ですっきり行くか」とか、オブジェクト指向と継承を混同している部分が有ると思います。 まず、設計と言うからには、全体の把握が必要です。 何をしたいのか? どの程度、耐久力

    bigbro
    bigbro 2010/08/22
    継承のジレンマからの脱却。基礎的な事なんだけど、それすらわからない人もいる
  • インターン講義初日「Perlによるオブジェクト指向プログラミング」 - Hatena Developer Blog

    インターン講義初日「Perlによるオブジェクト指向プログラミング」by id:hakobe932の資料と録画を公開します。前半はUst放送が安定しなかったため、録画は後半のみとなってしまっています。 明日はAM10:30より、JavaScript で学ぶ イベントドリブン(id:cho45)を放送しますので、是非ご覧ください。Ustream放送の機材調整もしておりますので、安定した放送ができると思います。 自己紹介 id:hakobe932 (はこべ) はてなスタッフ1年生 はてなココチームのエンジニア Perlだいすき! JavaScript/Ruby/Javaも使います。 最近はScalaがブームです。型かわいい インターン1期生でした きっちり2年前 この講義の目的 明日以降、Perlではまらない 今日、いろいろやって、なるべくはまってください 疑問があったらどんどん質問してください

    インターン講義初日「Perlによるオブジェクト指向プログラミング」 - Hatena Developer Blog
  • JavaScriptのnewって何?一体何なの?という話 - 愛と勇気と缶ビール

    マクラ JavaScriptを使っている人なら知っていることだろうけど、JavaScriptはプロトタイプベースのオブジェクト指向を採用しているので「クラス」がない。オブジェクトしかない。 でも、組み込みの演算子としてnewがあって、それを使って var obj = new Object(); とか書けちゃう。クラスってものはJavaScriptにはないはずなのに、new ClassName();と書くとあたかもClassNameクラスのオブジェクトのインスタンスが生成され、それが返ってくるかのような挙動をしている。 これは気持ち悪い。言語仕様としてはクラスは来存在しないのに、クラスのようなものが導入されている。まともな神経を持った人間なら、一体new演算子って何なの?という疑問を持つのが当たり前である。「{}はnew Object()のシンタックスシュガーです」とか言ってふんぞり返って

    JavaScriptのnewって何?一体何なの?という話 - 愛と勇気と缶ビール
    bigbro
    bigbro 2010/07/19
    この話題も定期的に出るなぁ
  • PHPエンジニアのためのオブジェクト指向JavaScriptの書き方 - EC studio 技術ブログ

    JavaScriptはプロトタイプベースのオブジェクト指向言語で、 PHPJavaC++などのクラスベースのオブジェクトとは 特徴や書き方が大きく異なります。 今回は、PHPでオブジェクト指向開発の経験がある人向けに、 JavaScriptでのオブジェクト指向プログラミングの書き方を解説します。 サンプルはすべてそのまま実行できるので、 FirebugなどのJavaScriptコンソールで実行して 挙動を確かめながら読み進めるとわかりやすいかと思います。 JavaScript の特徴 すべてがオブジェクト JavaScriptは完全なオブジェクト指向言語であり、 すべての型の変数、関数はオブジェクトです。 (プロパティやメソッドを持つ)

  • 【Perl】オブジェクト指向 for Java使い - (・∀・)イイ!!Memo

    継承 † Java public SubClass extends SuperClass { SubClass () { } } Perl package SubClass; use base qw(SuperClass); sub new { bless {}, shift; } 1; use base qw(SuperClass?)とすると、SubClass?はSuperClass?の(コンストラクタ含む)関数をすべて継承する。 ↑ interface † Perlにはinterfaceといった文法はない。実装をうまくつかってinterfaceを実現する。 親クラスで、関数の中身をdieだけにし、子クラスでオーバーライドを強制する*1 Java public interface Person { public void whatIsYourName(); } public Clas

  • Webプログラミングは何故オブジェクト指向でない?~WicketはWebプログラミングにオブジェクト指向を取り戻す - プログラマの思索

    Webプログラミングは何故オブジェクト指向でない?~WicketはWebプログラミングにオブジェクト指向を取り戻す JavaでWebアプリを10年書いて思ったこと。 Webプログラミングは全然オブジェクト指向でない。 Sevlet+JSP主体のプログラミングスタイルは、リクエストとレスポンスへPrimitiveな値をどうやって渡すか、という手続き型の発想でしか書いていない。 従来のWebプログラミングスタイルの問題点について書いてみる。 以下ラフなメモ書き。 【参考リンク】 Wicketって? ウェブ開発をもう一歩前に Wicketで始めるオブジェクト指向ウェブ開発:第1回 Hello, Wicket|gihyo.jp … 技術評論社 【コラム】イマドキのIDE事情 (39) Wicket、Grails、Click - IDEでみる軽量Javaフレームワーク | エンタープライズ | マイ

    Webプログラミングは何故オブジェクト指向でない?~WicketはWebプログラミングにオブジェクト指向を取り戻す - プログラマの思索