タグ

OOPに関するmonjudohのブックマーク (51)

  • 最強オブジェクト指向言語 JavaScript 再入門!

    この資料では、JavaScript でオブジェクト指向プログラミングを行う際に備えておくことが望ましい、基礎知識や概念について解説します。 【対象者】 ・JavaScript でアプリケーションを構築できる方 ・JavaScript におけるオブジェクト指向プログラミングの 実現手法や原理への理解を深めたい方 ・Java 的なクラスベースの言語との違いに違和感や混乱を 感じてらっしゃる方Read less

    最強オブジェクト指向言語 JavaScript 再入門!
  • 私が愛するオブジェクト指向とそれを使わない理由 - takuto_hの日記

    この記事では、私がオブジェクト指向のどこを愛しどこを素晴らしいと感じていて、そのうえでなぜオブジェクト指向を使うことを避けているのかを書き留めておきます。関数型言語使いの方で、「オブジェクト指向の何がいいのかわからない」「オブジェクト指向難しすぎ・複雑すぎ」とおっしゃる方にぜひ読んでいただきたいと思っています。また、「オブジェクト指向言語完璧に理解したわ」と思っている方にも読んでいただきたく思います。 なお、ここでのオブジェクト指向の定義は、「各言語でオブジェクト指向と呼ばれているものすべて」とします。JavaScalaJavaScriptやSmalltalkやRubyやCommon LispやOCamlがオブジェクト指向と呼んでいるものすべての総称です。もっとまともな定義が知りたい方は以下の記事がおすすめです。 オブジェクト指向の概念の発明者は誰ですか?(改訂版) - Smallta

    私が愛するオブジェクト指向とそれを使わない理由 - takuto_hの日記
  • Ruby脳が理解するJavaScriptのオブジェクト指向

    (追記:2012-12-15) 記事およびこれに続くその2,その3をまとめて電子書籍化しました。「Gumroad」を通して100円にて販売しています。内容についての追加・変更はありませんが、誤記の修正およびメディア向けの調整を行っています。 電子書籍Ruby脳が理解するJavaScriptのオブジェクト指向」EPUB版 このリンクはGumroadにおける商品購入リンクになっています。クリックすると、オーバーレイ・ウインドウが立ち上がって、この場でクレジットカード決済による購入が可能です。購入にはクレジット情報およびメールアドレスの入力が必要になります。購入すると、入力したメールアドレスにコンテンツのDLリンクが送られてきます。 購入ご検討のほどよろしくお願いしますm(__)m 関連記事: 電子書籍Ruby脳が理解するJavaScriptのオブジェクト指向」EPUB版をGumroadか

    monjudoh
    monjudoh 2012/09/10
    タイトルから想像される内容ではなくきっちりプロトタイプベースOOPの話をしていた。コンストラクタが出てくるのが終盤というのが実に正しい!!
  • 「三大」 - みねこあ

    例の OOP の三大要素「カプセル化(≒情報隠蔽)」「継承」「ポリモーフィズム」は、有名なわりには「詠み人知らず」で、しかもあまり良いモノではありません。 sumim さんによれば、もともとはC++でのOOPを説明する要素から「抽象データ型」「継承」「動的結合」の三つが抜き出され、その後変化した物だと思われるそうです。(オブジェクト指向の概念の発明者は誰ですか?(改訂版) - Smalltalkのtは小文字です)。 そのようは背景から、「三大」は 静的OOPLに偏っており、しかも C++ 界隈ですら、C++ プログラミングスタイルの進化から取り残され、古びて現状に一致しなくなっており、21世紀に入ってからのまともな C++ で そのままを使っているのをわたしはみたことがありません。 この「三大」を 「OOPとは何か」の文脈で 取り上げるメリットはもうないのです。(デメリットならたくさんあ

    「三大」 - みねこあ
    monjudoh
    monjudoh 2011/06/16
  • オブジェクト指向プログラムでgetter/setterメソッドを使わなければならない10の理由

    オブジェクト指向プログラムで getter/setterメソッドを使わなければならない 10の理由 福盛 秀雄 fukumori at m.ieice.org JavaC++などのオブジェクト指向言語でプログラムを書いているときに、単純なメンバ変数を参照したり操作するために anObject.getX() [以後これをgetterメソッドと呼ぶ] とか anotherObject.setY(y) [以後これをsetterメソッドと呼ぶ] と書くのはなぜだろうと思ったことはないだろうか? int型の変数ひとつを操作するのになぜわざわざメソッドを定義するのだろう? 単純に代入を使えばいいじゃないか? この文章はそんなあなた(かつての僕も含む)が、getter/setterメソッドを使うべきである理由についてまとめたものである。 ということで早速論へ。 1. クラス内部のデータ表現を変えた場

  • Javascriptでいい感じにプロトタイプを継承する - ひよこ3分07秒のはてなブログ

    Javascriptでプロトタイプを継承するには function newClass(){ superClass.apply(this, arguments); } newClass.prototype = new superClass(); // superClassを継承 var newObject = new newClass(); console.log(newObject instanceof superClass); // true こんなコードを書けばいいわけだけど、 これだとsuperClassオブジェクトを作っているところがスマートじゃない。 newClass.prototype = superClass.prototype; // superClassを継承 これだと余計なオブジェクトはつくらないけど、 newClassのprototypeを拡張するとsuperClas

    Javascriptでいい感じにプロトタイプを継承する - ひよこ3分07秒のはてなブログ
    monjudoh
    monjudoh 2011/01/31
    空コンストラクタのprototypeにsuperClass.prototypeを代入→空コンストラクタをnewしてsubClassのprototypeに代入。これなら、superClassが無引数で使えないコンストラクタであっても問題ない。
  • 継承は害悪か。

    くっくっkura 🇯🇵🦀 @PG_kura OOP で継承は害悪だとは思うけども、実際に継承を言語から消去したとして一般 PG に受け入れられる言語になり得るだろーか。 2010-12-31 18:04:33

    継承は害悪か。
    monjudoh
    monjudoh 2011/01/06
  • JavaScript Patterns

    The document discusses JavaScript patterns. It begins by introducing the author and their motivation for learning patterns. It then covers essential patterns around scope, literals and constructors, functions, and code reuse. It discusses the single var pattern, constructor functions, private members, and classical versus prototypal inheritance. The document is an educational guide to common JavaS

    JavaScript Patterns
  • クロージャは万能だが最良じゃない - fairy.ouchi.to

    先日買ったJavaScript: The Good Partsの第5章、 5.4 関数型クラスの記述がどうにも引っ掛かって、何か反証はないもんかと探してたんだけど、なんのことはない。 MDCの関数についての項目にちゃんとあった。 JavaScript には prototype という概念(というか考え方・実装)があって、 プロトタイプチェーンという方法で、要求されたプロパティを"そのオブジェクト自身"が持っていない場合、 "そのオブジェクトのプロトタイプ"に探しに行き、そこにもなければ"そのオブジェクトの親のプロトタイプ"に...と、 祖先がある限り遡って探し続けるようになっている。 いろいろと詳細は省いて、要するに、あるオブジェクトにメソッドを持たせようとする時に、 そのメソッドの実装方法は大きく2つあって、そのオブジェクト自身に直接持たせるように設計する場合と、 そのオブジェクトのプ

  • Douglas Crockford: "Advanced JavaScript"要点メモ - prog*sig

    ■Singleton P46 グローバルなものはできるだけ使わない。 いわゆるクロージャー的なものでprivateなプロパティやメソッドを扱える。 var singleton = function () { var privateVariable; function privateFunction(x) { ...privateVariable... } return { firstMethod: function (a, b) { ...privateVariable... }, secondMethod: function (c) { ...privateFunction()... } }; }(); ■Power Constructor P48 Power Constructorはベースとなるものをprototype先にしたthatに、内部でprivateなメソッドやプロパティを

  • インターン講義初日「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
  • 多重継承まとめ - 西尾泰和のはてなダイアリー

    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という実装の多重継承ができるしくみがあ

    多重継承まとめ - 西尾泰和のはてなダイアリー
  • Matzにっき(2010-06-17) Ruby2.0の新機能(かもしれないもの)(3) module operations

    << 2010/06/ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1. [Ruby] Ruby2.0の新機能(かもしれないもの)(1) argument delegation 16 1. [Ruby] Ruby2.0の新機能(かもしれないもの)(2) nested def as local function 17 1. [Ruby] Ruby2.0の新機能(かもしれないもの)(3) module operations 18 1. [Ruby] Ruby2.0の新機能(かもしれないもの)(4) keyword arguments 19 20 21 22 23 24 1. 上海 2. 買い物 3. 大容量USBメモリ 25 26 27 28 29 30 >> _ [Ruby] Ruby2.0の新機能(かもしれないもの)(3) module operations 注

    monjudoh
    monjudoh 2010/06/17
    『基本的にRubyのmoduleのようなものなのだが』『Trait機能の面白いところは、Traitの演算ができる点だ。 つまり、aおよびbがTraitであった時、+演算でaとbの両方の機能を持つ、無名のTraitを作ることができる。』
  • DCIが面白い件 - ヽ( ・∀・)ノくまくまー(2010-05-12)

    ● DCIが面白い件 DCI凄い!ヤバイ! 「DCIアーキテクチャ - Trygve Reenskaug and James O. Coplien」(翻訳) http://d.hatena.ne.jp/digitalsoul/20100131/1264925022 前に読んだときは難しすぎて(長すぎて)途中で挫折したけど、今改めて読んだらDCIは凄いと気付いた。以下、まとめ。 今回、内容理解の決め手となったのは「前半部分を読まない」ことだった。 そんな無謀な読み方(読んでないのだけれど)をした私の理解なので、 もちろん間違いはあるはず。 という前提で、 ツッコミを入れる気満々なテンションでどうぞ。 古来からプログラムの中心は<データ>であった なぜなら、それが設計の中で一番変化しにくい要素(箇所)であるから そして、<データ構造>とそれに対する<処理>の2つで考えるようになった (手続き型

  • データ構造はクラスに任せた!だから、アルゴリズムはstatic関数で書くぜ!!(キリッ - みねこあ

    きむら(K)さんち経由、実はオブジェクト指向ってしっくりこないんです!。いろいろ強烈なインパクトが満載で、スルーできませんでした。 特に「メンバー関数をstatic宣言すればインスタンス宣言をしなくてもいい」ということ知ってからは、メンバー関数を従来のファンクションのように使っている。共有変数も、pubulic static宣言していまう。したがってプロパティなんて作らない。 staticを理解していない人のコードを見ると、いちいちインスタンス宣言しているので笑ってしまう。 ぎゃーっ....。人はまわりを笑っているつもりでも、逆にまわりに嗤われていますよ、絶対。 ここ以外にも突っ込みどころ満載のエントリーですので、読みながら突っ込むお手々が止まらなくって、腕がつりそう。そんな突っ込み連打なエントリーもおもしろそうですが、わたしはそういうのは上手く書けないので(性格がネチっこいから、なんだ

    データ構造はクラスに任せた!だから、アルゴリズムはstatic関数で書くぜ!!(キリッ - みねこあ
    monjudoh
    monjudoh 2010/04/28
    『クラスとオブジェクトはもともと Simula の発明品ですが、それは構造体のパワーアップとして作られたわけではなく、「サブルーチン」を拡張して作られました。』
  • ソースコードは上から下に読みたいよね。 - m2

    function Child() { this.name = "child"; this.favorite = "popsicle"; } (function(methods) { methods.apply/*to*/(Child.prototype); }) (function() { this.jump = function() { alert("Jumps, jump, jumpoo!!"); }; this.sayOwnFavorite = function() { alert("I like "+this.favorite+"!"); }; }); この文脈なら apply がしっくりくるとおもう。 <参考> http://d.hatena.ne.jp/iskwn/20091215/1260828978

    ソースコードは上から下に読みたいよね。 - m2
  • はてなブログ | 無料ブログを作成しよう

    トルコ水紀行 -前編 イスタンブール- みなさんこんばんは、地図子です!8月は久しぶりに毎月更新にしようと思います。今までずっと名古屋について書いてきましたが、ワープして・・・ トルコについて書きたいと思います。 2024年6月に念願のトルコに行ってきました。いつからトルコに行きたかったかわから…

    はてなブログ | 無料ブログを作成しよう
  • オブジェクト指向のプログラムに込める「意図」 - 都元ダイスケ IT-PRESS

    その昔、プログラムを覚えたての頃、プログラムってのは単に「処理」を記述するものだと考えていた。処理を1ステップごとに記述し、場合によってはサブルーチンに切り出し、再利用する。 今振り返ると、オブジェクト指向を覚え始めてしばらくして、その意識は変わっていた。当然「処理」を落とし込まなければプログラムは動かない。だから「処理」はプログラムに込める。ただ、オブジェクト指向言語を使うと、これに加えて「意図」を落とし込むことができる。 オブジェクト指向を学び始めた当初、Javaのインターフェイスの存在意義がわからなかった。プログラムは「処理」を記述するものだという視点で見ると、インターフェイスには「処理」を書くことができない。インターフェイスだけでは何も起こらないからだった。 さらに、IDEを使ってコードを追っていると、途中でインターフェイスのソースを開くことになり、「なんだよ、中で何やってっかわか

    オブジェクト指向のプログラムに込める「意図」 - 都元ダイスケ IT-PRESS
  • この方法ではArrayを継承することは… できないッ! - sawatのブログ

    「まるごとJavaScript & Ajax ! Vol.1」買いました。 まるごとJavaScript & Ajax ! Vol.1 作者: 天野仁史,舘野祐一,川崎有亮,arton,田中孝太郎,国分裕,山有悟,海野裕也,nanto_vi出版社/メーカー: インプレス発売日: 2007/02/15メディア: 大型購入: 8人 クリック: 98回この商品を含むブログ (78件) を見る えーと、最初にartonさんのJavaScriptの落とし穴があって、その次が弾さんプロタイプベースオブジェクト指向の解説(404 Blog Not Found:javascript - プロトタイプ的継承とか)があって、その次がid:amachangのPrototype.jsの解説で、その先が…でとにかく盛りだくさんですね! あっ。 弾さん、それまずい。 前から気づいてたんですけど、その方法じゃArr

    この方法ではArrayを継承することは… できないッ! - sawatのブログ
    monjudoh
    monjudoh 2009/10/06
    Arrayをprototype継承しても『ブラケット([ ])で要素を追加したときにlengthが更新されない』
  • 5年後に後悔しないJavaプログラムの書き方 - L'eclat des jours(2009-07-02)

    _ 5年後に後悔しないJavaプログラムの書き方 ここ数日、死ぬほど後悔しまくっているので、あらためて(というのは、数年前にも一度後悔しまくって、そのときの知見はあらかた処方箋とかコーディングの掟に書いているからだが)後悔しないための書き方をいくつか紹介する。 とにかく、ファクトリメソッドパターンを使うこと。 これは当に重要。しかも簡単でありながら効果は絶大。 だめな例。 public class FooBar { private Connection conn; ... protected void setup() { ... conn = DriverManager.getConnection(url); ... } urlを指定することや、DriverManagerの実装を交換すれば良いだろうと想定していても(というか、Connectionならそういう方法もあり得るが、そうはいかな