-多形性
Wikipedia preview
出典(authority):フリー百科事典『ウィキペディア(Wikipedia)』「2015/06/18 12:36:20」(JST)
[Wiki ja表示]
ポリモーフィズムあるいはポリモルフィズム(Polymorphism)とは、プログラミング言語の型システムの性質を表すもので、プログラミング言語の各要素(定数、変数、式、オブジェクト、関数、メソッドなど)についてそれらが複数の型に属することを許すという性質を指す。多態性、多相性、多様性とも呼ばれる。対義語はモノモーフィズム(Monomorphism)、単態性、単相性で、プログラミング言語の各要素が唯一つの型に属するという性質を指す。
例
モノモーフィズムな型システムを持つプログラミング言語では関数や手続きはそれぞれ一意に識別される名前と結びついており、従って異なった動作を実現するためには異なった名前を用いる必要があった。
例えば、何かの値を文字列形式に変換する最も単純な場合を考える。モノモーフィズムな型システムを持つ言語では、次のように別々の関数になっていなければならない。
- 古典的な変換関数:
- 数値を文字列にする場合
string = StringFromNumber(number)
-
- 日付値を文字列にする場合
string = StringFromDate(date)
一方ポリモーフィズムな型システムを持つ言語では、StringValue のような汎用の述語を定義し、型別にそれぞれ適切な変換方式を定義させることでオブジェクトの種別によらない抽象度の高い変換形式を実現できる。
- 多態を行なう変換方式:
- 見た目上、型によらない変換が可能
string = number.StringValue
string = date.StringValue
無論、StringValueの定義は型別に行なわなければならないので、総体として記述量が減少するわけではない(継承による再利用はありうる)。また、何をもって「正しい動作」とするのかはオブジェクトの設計に依存するため、多態を使いこなすにはシステム全体を見通す優れた設計能力が要求される。
参考文献
- Cardelli, Luca; Wegner, Peter (1986), “On Understanding Types, Data Abstraction, and Polymorphism”, ACM Computing Surveys 17 (4), http://lucacardelli.name/Papers/OnUnderstanding.A4.pdf
関連項目
- 仮想関数テーブル
- 抽象化 (計算機科学)
- 型理論
- 型システム
- 総称型
- 継承
- 多重定義
- 型変換
- オーバーライド
- 多重ディスパッチ
- ダック・タイピング
UpToDate Contents
全文を閲覧するには購読必要です。 To read the full text you will need to subscribe.
Japanese Journal
- 静的なオブジェクト指向プログラムに対するインスタンスを考慮した理解コスト計量法
- 山崎 直子,掛下 哲郎
- コンピュータソフトウェア 20(4), 331-344, 2003-07-25
- … 過程モデルからなる.構造の理解過程モデルでは,OOPを構成するクラス,インスタンス,複合オブジェクトなどを理解する.これに対して,振舞いの理解過程モデルではOOPのトレースを通じてイベント駆動型の実行,多態性(polymorphism),動的束縛を理解する.評価実験で対象とした4種類のOOPに対して,被験者の理解容易性評価値とChidamberメトリクス値が無相関との仮説は有意水準5%では棄却できない.一方,被験者の理解容易性評価値と …
- NAID 110003743121
- オブジェクト指向を学習するためのゲーム型CALの開発
- 瀧口 浩史,梶浦 文夫
- 電子情報通信学会技術研究報告. ET, 教育工学 102(330), 1-4, 2002-09-13
- … オブジェクト指向プログラミングにおける重要な概念として、カプセル化、継承、多態性などがあるが、これらの概念は初心者には難しい。 …
- NAID 110003193026
Related Links
- 多態性 - ポリモーフィズム Revised: Nov./19th/2003; Since: May/31st/2002 多態性とはなんだろうか 前節までで、継承、抽象クラス、インタフェースについて紹介しました。スーパークラス型への代入/インタフェース型への代入は ...
- 概要 多態性(polymorphism: ポリモーフィズム)とは、 同じメソッド呼び出し(オブジェクト指向用語的には「メッセージ」という)に対して異なるオブジェクトが異なる動作をすることを言います。 ( ちなみに、polymorphism は多相性とか ...
Related Pictures