5404某ITスタートアップで代表をやっています。基本的には技術関連の事を書きます。JavaScript・jQuery目次JavaScriptでは「継承による差分プログラミング」はモダンではない、という意見がありました。PocketsJavaScriptはプロトタイプベースのオブジェクト指向プログラミング言語ではない!...http://jsstudy.hatenablog.com/entry/2017/03/29/181613先日のブログ記事に、たくさんのブックマークをいただきました。ブックマークのコメントで、こんな意見がありました。うへええええ継承による差分プログラミングとか現代に言わないでくれよ。JavaScript勉強会うへええええ継承による差分プログラミングとか現代に言わないでくれよ。JavaScriptを使って学ぶ”]勉強がてら、調べてみましょう。(以下、「オブジェクト指向プログラミング」を「OOP」と略記)OOPのアンチパターンOOPのノウハウ(良い方法や悪い方法)は、様々なパターン(定石)のカタログとして知られています。pattern)とは、過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものである。ある問題に対する、不適切な解決策を分類したものである。失敗した開発プロセスに焦点を当てて失敗に陥るパターンを類型化する。することで、そのような事例の早期発見と対応策に関しての提案を目的とする。第2版”]継承による差分プログラミングの注意点は、「レガシーコード改善ガイド」などで紹介されています。SELECTION)”]OOPには過去の資産として、こういう本がたくさんあるので、ベストセラー本を一通り読めば、先人の工夫を習得できます。オブジェクト指向言語を使用しています。「..どうやって機能を追加すればよいのでしょうか?オブジェクト指向言語を使用しています。する?継承を使用した「差分プログラミング」を適用します。差分プログラミングをうまく行うためには、いくつかの落とし穴に気をつけなければなりません。代表的な問題は「リスコフの置換原則(LSP)」違反です。LSPは、「クラスの利用者が、それがサブクラスのオブジェクトであることを知らずに使えるべきである」という原則です。LSP違反を避けるための機械的な方法はありません。クラスがLSPを守っているかどうかは、そのクラスを使う側が何を期待しているかに依存します。LSP違反を避けるためには、以下の経験則が役立ちます。可能な限り、具象メソッドをオーバーライドしない。具象メソッドをオーバーライドするなら、そのメソッドの中で、オーバーライド対象のメソッドを呼ぶことができるかどうかを確認する。Choice優れたオブジェクト指向開発のための指針。守らなければならないのではなく、まずそれで考えることが重要。単一責任の原則(SRP)オープン・クローズドの原則(OCP)リスコフの置換原則(LSP)依存関係逆転の原則(DIP)インターフェイス分離の原則(ISP)頭文字をとって「SOLID原則」ともいわれる。Principle)派生型はその基本型と置換可能でなければならない。継承による差分プログラミングは、「リスコフの置換原則」に違反しないよう注意が必要です。オブジェクト指向の基本機能オブジェクト指向の基本的な仕組みには、「継承」だけでなく「メッセージング」などもあります。個人的には、「枯れた技術」(よく使われてノウハウが蓄積されている古い技術)は、適材適所で使えば、有用だと思っています。Books)”]ここまでの前提を基に、「継承による差分プログラミング」を使わないプログラミングスタイルについて検討してみましょう。データ構造としてのオブジェクト何らかの事情で、「継承」の使用が禁止されたコーディング規約があったと仮定します。(思考実験)継承を使わないでも、OOPは可能でしょうか?→YES!デメリット差分プログラミングを行わないと、クラス数が激増するかもしれませんが、IDEの支援機能があれば、大した問題ではないでしょうw=継承の代わりに、単純にクラスをコピペして、似たようなクラスを作ることは可能。HTML、CSS、Jav...メリット継承を使わない分だけ、クラス間の依存関係がなくなり、疎結合に保てますね。クラス間のつながりは、メッセージングのためのAPIを考慮するだけでOK。→テストも手軽になるかも!?クラスは、型クラスを作り、データ構造の一種として利用するだけにとどめても良いのでしょう。オブジェクトは、プロパティー、メソッドをまとめておく入れ物として利用すればOK。PACアーキテクチャーOOPで継承を使わない場合、高機能なエージェント(オブジェクト)が、お互いにメッセージを交換しながら、駆動することになりそうですね?パターンカタログの中から、相性が良さそうなアーキテクチャーパターンを検討すると、PAC(Presentation-Abstract-Controller)アーキテクチャーなどが良いかも。Architecture」に紹介されています。