この資料では、JavaScript でオブジェクト指向プログラミングを行う際に備えておくことが望ましい、基礎知識や概念について解説します。 【対象者】 ・JavaScript でアプリケーションを構築できる方 ・JavaScript におけるオブジェクト指向プログラミングの 実現手法や原理への理解を深めたい方 ・Java 的なクラスベースの言語との違いに違和感や混乱を 感じてらっしゃる方Read less
この資料では、JavaScript でオブジェクト指向プログラミングを行う際に備えておくことが望ましい、基礎知識や概念について解説します。 【対象者】 ・JavaScript でアプリケーションを構築できる方 ・JavaScript におけるオブジェクト指向プログラミングの 実現手法や原理への理解を深めたい方 ・Java 的なクラスベースの言語との違いに違和感や混乱を 感じてらっしゃる方Read less
この記事では、私がオブジェクト指向のどこを愛しどこを素晴らしいと感じていて、そのうえでなぜオブジェクト指向を使うことを避けているのかを書き留めておきます。関数型言語使いの方で、「オブジェクト指向の何がいいのかわからない」「オブジェクト指向難しすぎ・複雑すぎ」とおっしゃる方にぜひ読んでいただきたいと思っています。また、「オブジェクト指向言語完璧に理解したわ」と思っている方にも読んでいただきたく思います。 なお、ここでのオブジェクト指向の定義は、「各言語でオブジェクト指向と呼ばれているものすべて」とします。JavaやScalaやJavaScriptやSmalltalkやRubyやCommon LispやOCamlがオブジェクト指向と呼んでいるものすべての総称です。もっとまともな定義が知りたい方は以下の記事がおすすめです。 オブジェクト指向の概念の発明者は誰ですか?(改訂版) - Smallta
(追記:2012-12-15) 本記事およびこれに続くその2,その3をまとめて電子書籍化しました。「Gumroad」を通して100円にて販売しています。内容についての追加・変更はありませんが、誤記の修正およびメディア向けの調整を行っています。 電子書籍「Ruby脳が理解するJavaScriptのオブジェクト指向」EPUB版 このリンクはGumroadにおける商品購入リンクになっています。クリックすると、オーバーレイ・ウインドウが立ち上がって、この場でクレジットカード決済による購入が可能です。購入にはクレジット情報およびメールアドレスの入力が必要になります。購入すると、入力したメールアドレスにコンテンツのDLリンクが送られてきます。 購入ご検討のほどよろしくお願いしますm(__)m 関連記事: 電子書籍「Ruby脳が理解するJavaScriptのオブジェクト指向」EPUB版をGumroadか
例の OOP の三大要素「カプセル化(≒情報隠蔽)」「継承」「ポリモーフィズム」は、有名なわりには「詠み人知らず」で、しかもあまり良いモノではありません。 sumim さんによれば、もともとはC++でのOOPを説明する要素から「抽象データ型」「継承」「動的結合」の三つが抜き出され、その後変化した物だと思われるそうです。(オブジェクト指向の概念の発明者は誰ですか?(改訂版) - Smalltalkのtは小文字です)。 そのようは背景から、「三大」は 静的OOPLに偏っており、しかも C++ 界隈ですら、C++ プログラミングスタイルの進化から取り残され、古びて現状に一致しなくなっており、21世紀に入ってからのまともな C++ 本で そのままを使っているのをわたしはみたことがありません。 この「三大」を 「OOPとは何か」の文脈で 取り上げるメリットはもうないのです。(デメリットならたくさんあ
オブジェクト指向プログラムで getter/setterメソッドを使わなければならない 10の理由 福盛 秀雄 fukumori at m.ieice.org JavaやC++などのオブジェクト指向言語でプログラムを書いているときに、単純なメンバ変数を参照したり操作するために anObject.getX() [以後これをgetterメソッドと呼ぶ] とか anotherObject.setY(y) [以後これをsetterメソッドと呼ぶ] と書くのはなぜだろうと思ったことはないだろうか? int型の変数ひとつを操作するのになぜわざわざメソッドを定義するのだろう? 単純に代入を使えばいいじゃないか? この文章はそんなあなた(かつての僕も含む)が、getter/setterメソッドを使うべきである理由についてまとめたものである。 ということで早速本論へ。 1. クラス内部のデータ表現を変えた場
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
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: The Good Partsの第5章、 5.4 関数型クラスの記述がどうにも引っ掛かって、何か反証はないもんかと探してたんだけど、なんのことはない。 MDCの関数についての項目にちゃんとあった。 JavaScript には prototype という概念(というか考え方・実装)があって、 プロトタイプチェーンという方法で、要求されたプロパティを"そのオブジェクト自身"が持っていない場合、 "そのオブジェクトのプロトタイプ"に探しに行き、そこにもなければ"そのオブジェクトの親のプロトタイプ"に...と、 祖先がある限り遡って探し続けるようになっている。 いろいろと詳細は省いて、要するに、あるオブジェクトにメソッドを持たせようとする時に、 そのメソッドの実装方法は大きく2つあって、そのオブジェクト自身に直接持たせるように設計する場合と、 そのオブジェクトのプ
■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によるオブジェクト指向プログラミング」by id:hakobe932の資料と録画を公開します。前半はUst放送が安定しなかったため、録画は後半のみとなってしまっています。 明日はAM10:30より、JavaScript で学ぶ イベントドリブン(id:cho45)を放送しますので、是非ご覧ください。Ustream放送の機材調整もしておりますので、安定した放送ができると思います。 自己紹介 id:hakobe932 (はこべ) はてなスタッフ1年生 はてなココチームのエンジニア Perlだいすき! JavaScript/Ruby/Javaも使います。 最近はScalaがブームです。型かわいい インターン1期生でした きっちり2年前 この講義の目的 明日以降、Perlではまらない 今日、いろいろやって、なるべくはまってください 疑問があったらどんどん質問してください
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という実装の多重継承ができるしくみがあ
<< 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 注
● DCIが面白い件 DCI凄い!ヤバイ! 「DCIアーキテクチャ - Trygve Reenskaug and James O. Coplien」(翻訳) http://d.hatena.ne.jp/digitalsoul/20100131/1264925022 前に読んだときは難しすぎて(長すぎて)途中で挫折したけど、今改めて読んだらDCIは凄いと気付いた。以下、まとめ。 今回、内容理解の決め手となったのは「前半部分を読まない」ことだった。 そんな無謀な読み方(読んでないのだけれど)をした私の理解なので、 もちろん間違いはあるはず。 という前提で、 ツッコミを入れる気満々なテンションでどうぞ。 古来からプログラムの中心は<データ>であった なぜなら、それが設計の中で一番変化しにくい要素(箇所)であるから そして、<データ構造>とそれに対する<処理>の2つで考えるようになった (手続き型
きむら(K)さんち経由、実はオブジェクト指向ってしっくりこないんです!。いろいろ強烈なインパクトが満載で、スルーできませんでした。 特に「メンバー関数をstatic宣言すればインスタンス宣言をしなくてもいい」ということ知ってからは、メンバー関数を従来のファンクションのように使っている。共有変数も、pubulic static宣言していまう。したがってプロパティなんて作らない。 staticを理解していない人のコードを見ると、いちいちインスタンス宣言しているので笑ってしまう。 ぎゃーっ....。本人はまわりを笑っているつもりでも、逆にまわりに嗤われていますよ、絶対。 ここ以外にも突っ込みどころ満載のエントリーですので、読みながら突っ込むお手々が止まらなくって、腕がつりそう。そんな突っ込み連打なエントリーもおもしろそうですが、わたしはそういうのは上手く書けないので(性格がネチっこいから、なんだ
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
その昔、プログラムを覚えたての頃、プログラムってのは単に「処理」を記述するものだと考えていた。処理を1ステップごとに記述し、場合によってはサブルーチンに切り出し、再利用する。 今振り返ると、オブジェクト指向を覚え始めてしばらくして、その意識は変わっていた。当然「処理」を落とし込まなければプログラムは動かない。だから「処理」はプログラムに込める。ただ、オブジェクト指向言語を使うと、これに加えて「意図」を落とし込むことができる。 オブジェクト指向を学び始めた当初、Javaのインターフェイスの存在意義がわからなかった。プログラムは「処理」を記述するものだという視点で見ると、インターフェイスには「処理」を書くことができない。インターフェイスだけでは何も起こらないからだった。 さらに、IDEを使ってコードを追っていると、途中でインターフェイスのソースを開くことになり、「なんだよ、中で何やってっかわか
「まるごと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
_ 5年後に後悔しないJavaプログラムの書き方 ここ数日、死ぬほど後悔しまくっているので、あらためて(というのは、数年前にも一度後悔しまくって、そのときの知見はあらかた処方箋とかコーディングの掟に書いているからだが)後悔しないための書き方をいくつか紹介する。 とにかく、ファクトリメソッドパターンを使うこと。 これは本当に重要。しかも簡単でありながら効果は絶大。 だめな例。 public class FooBar { private Connection conn; ... protected void setup() { ... conn = DriverManager.getConnection(url); ... } urlを指定することや、DriverManagerの実装を交換すれば良いだろうと想定していても(というか、Connectionならそういう方法もあり得るが、そうはいかな
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く