「オブジェクト指向プログラミング」の版間の差分

削除された内容 追加された内容
→‎特徴: 節「オブジェクト指向の三大要素」を解体、 説明を変更・移動 「三大要素」「3大特徴」と広く認められているわけではないと思う。
→‎SOLID: 依存性逆転原則、インターフェース分離原則 について {{疑問点、{{要検証 数か所。 「RnTknn」氏にはユーザー名の変更をお勧めします (WP:U#不適切な利用者名)
83行目:
 
=== [[SOLID]] ===
2004年以降に広まった[[SOLID]]の[[依存性逆転の原則|依存性逆転原則]]は、OOPの[[パラダイムシフト]]的な潮流になっている。[[リスコフの置換原則|リスコフ置換原則]]による[[継承 (プログラミング)|継承]]の差分プログラミング否定と[[サブタイプ|サブタイピング]]重視を皮切りにし、[[開放閉鎖原則]]によって[[クラス (コンピュータ)|クラス]]の[[サブタイプ|サブタイピング]]は[[インタフェース (抽象型)|インターフェース]]の実装へと進んだが、今度は[[インタフェース (抽象型)|インターフェース]]が具象メソッドも所持可能にされて事実上の[[トレイト]]化へと進んでいる。[[トレイト]]と融合された[[インタフェース (抽象型)|インターフェース]]は、[[依存性の注入]](DI)におけるDependency表現の[[抽象型]]として使われるようになった。[[インターフェース分離原則]]によって機能分化された個々のインターフェースを、それぞれ{{疑問点範囲|専用の[[オブジェクト (プログラミング)|オブジェクト]]に注入して|date=2021年10月}}その特定の機能と状態を受け持たせて、それらオブジェクトの専門的動作を注入インターフェースに依存させることが、抽象への依存=[[依存性逆転の原則|依存性の逆転]]になる{{疑問点|date=2021年10月|title=依存性逆転原則は 依存性の注入(DI)の形に限定されないはず}}。専門的な機能と状態が依存側に分離されたオブジェクトは、[[Plain Old Java Object|PlainOld]](ごく普通)と言われる。オブジェクトの方は複数のインターフェースを注入指名できることから、ここでオブジェクトの[[イミュータブル]]性も取り沙汰されるようになった。[[Plain Old Java Object|PlainOld]]オブジェクトとDependencyインターフェースのコンテナは、従来の分散オブジェクト([[EJB]]など)コンテナに代わる[[分散システム]]・アプローチになっている。
 
[[依存性逆転の原則|依存性逆転原則]]によるこれらの潮流はいわゆる[[関数型プログラミング|関数型]]の導入にも影響している。2000年代のOOP言語で採用されるようになった[[ラムダ式]]や[[第一級関数]]や[[デリゲート (プログラミング)|デリゲート]]は、上述のDependencyインターフェースのミクロ化である。[[イミュータブル]]書式は、PlainOldオブジェクトの作法に倣っている。
 
[[依存性逆転の原則|依存性逆転原則]]が訴える「抽象への依存」とは、メソッドを通してデータを操作するというデータ抽象と、基底メソッドを派生メソッドで[[オーバーライド]]するというメソッド抽象へのアンチテーゼであり、前者ではメソッドが具象データに、後者ではメソッドが詳細メソッドに依存していることへの反駁であった{{要検証|date=2021年10月}}。依存性逆転原則{{要検証|date=2021年10月|title=依存性の注入(DI)と混同しているのでは。}}下のメソッドは一切の専門的動作を外されて、上述の[[インタフェース (抽象型)|インターフェース]]の注入指名と、注入インターフェースとのデータ送受に特化される。[[サーバー]]や[[データベース]]からの抽象体であるインターフェースの注入後に始めて専門的動作が可能になるので、これが抽象への依存になる。インターフェースはその動作専用の状態も保持できるので、それらを複数注入される[[オブジェクト (プログラミング)|オブジェクト]]は[[イミュータブル]]な方が堅牢とされた。PlainOldにDependencyが注入される作法は、オブジェクトに機能オブジェクトがメッセージングされる作法に似ており、[[依存性の注入]]はSmalltalk処理系由来の[[トレイト]]の遅延結合をなぞっているので、OOPの思想は結局のところ[[Smalltalk]]に行き着くようである。
 
== 歴史 ==