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

削除された内容 追加された内容
特徴の加筆修正
25行目:
#**[[ジェネリックプログラミング]](''generic programming'')
#*[[派生型|サブタイプ多態性]](''subtyping'')
#**[[{{仮リンク|仮想関数(OOP)|en|Virtual function|label=仮想関数]]}}(''virtual function'')
#**{{仮リンク|動的ディスパッチ|en|Dynamic dispatch|label=}}(''dynamic dispatch'')
#**[[多重ディスパッチ]](''multiple dispatch'')
54行目:
 
=== 抽象化 ===
純粋抽象クラスの仕組みがこれに相当する。実例としては[[ソフトウェアコンポーネント]]や[[Java]]などのプログラミング言語で用いられている[[インタフェース (抽象型)|インターフェース]]がある。これは[[カプセル化]]の{{仮リンク|プロトコル(OOP)|en|Protocol (object-oriented programming)|label=プロトコル}}、[[継承 (プログラミング)|継承]]の{{仮リンク|サブタイピング|en|Subtyping|label=}}、[[ポリモーフィズム|多態性]]の[[{{仮リンク|仮想関数]](OOP)|en|Virtual function|label=仮想関数}}をまとめたパラダイムと考える事ができる。極論的にOOP三原則の行き着く先はこの抽象化であるとも言える。この[[インタフェース (抽象型)|インターフェース]]の仕組みを中心にした抽象化の理念は、データ(変数、プロパティ)とコード(関数、メソッド)それぞれの定義に明確に目的(''object'')を伴わせる事であり、そ任意の目的(''object'')を達成するためのデータとコードの複合体すなわち[[オブジェクト (プログラミング)|オブジェクト]]の実装設計部分と設計実装部分を明確に分離する事である。設計部分のプログラム投影物が[[インタフェース (抽象型)|インターフェース]]の仕組みであり、プログラム概念的に抽象化と呼ばれ、またる。[[C++]]開発者の[[ビャーネ・ストロヴストルップ]]、広義のオブジェクト指向の主要サポート案件として抽象化、継承、実行時多態性(''run-time polymorphism'')代表例とされる三点を挙げていた
 
この「設計と実装の分離」はよく聞かれる言葉であるが、プログラミング(コーディング)レベルでは、ソースコードの随所に抽象ポイントを設ける事を意味する。OOPにおける抽象ポイントとは上述の[[インタフェース (抽象型)|インターフェース]]にアクセスする為のアドレス置場の事である。アドレスは実装面ではグローバルなネットワーク番地、ローカルなメモリ番地、または特殊なアドレス指定キーワードなどで表現される。抽象ポイント=アドレス置場に収納されるインターフェースのアドレスは、プログラム実行時に随時切り替えられて柔軟な多分岐プロセスを可能にし、これがOOPの利点とされる仕様変更とエラー修正が比較的容易な保守性と堅牢性につながるものになる。なお、抽象ポイント=アドレス置場の積極利用は決して新しい考え方ではなく、その原点は[[プロセッサ]]の間接アドレス参照(後年に[[ポインタ (プログラミング)|ポインタ]]と定義されるもの)機能であり、[[機械語]]と[[アセンブリ言語|アセンブラ]]の時代から存在する古典的な標準手法でもある。当時は処理の多分岐化の為だけでなくコードサイズ節約やクロック数削減のテクニックとしても使われていたが、プログラムの構造化などが十分に普及していない黎明期においては、間接アドレス参照の多用はプログラムの可読性を下げるものとしてやがて倦厭されるようになった。C言語の学習でもポインタが鬼門とされており、この方面の理解の難しさを示している。しかし[[プログラミングパラダイム|プログラミング理論]]と[[ソフトウェア工学]]の発展に伴い、[[クラス図]]を始めとする[[統一モデリング言語|各種ダイアグラム]]による綿密な設計の下で抽象ポイントを用いれば、可読性を損ねずに保守性や堅牢性を向上させる事が知られるようになった。
なお、[[C++]]開発者の[[ビャーネ・ストロヴストルップ]]は、広義のオブジェクト指向の主要サポート案件として抽象化、継承、実行時多態性(''run-time polymorphism'')の三点を挙げていた。
 
=== メッセージング ===