У нас вы можете посмотреть бесплатно 共変性と反変性 (計算機科学) или скачать в максимальном доступном качестве, видео которое было загружено на ютуб. Для загрузки выберите вариант из формы ниже:
Если кнопки скачивания не
загрузились
НАЖМИТЕ ЗДЕСЬ или обновите страницу
Если возникают проблемы со скачиванием видео, пожалуйста напишите в поддержку по адресу внизу
страницы.
Спасибо за использование сервиса ClipSaver.ru
共変性と反変性 (計算機科学), by Wikipedia https://ja.wikipedia.org/wiki?curid=1... / CC BY SA 3.0 #ポリモーフィズム_(計算機科学) #型理論 #オブジェクト指向 プログラミング言語の型システムにおける共変性と反変性(きょうへんせいとはんぺんせい)とは、型の狭い方から広い方への順序付けと、その間の相互可換性、または特定の状況下 (引数や総称型、戻り値など) での同等性を指す: 例えば、取り得る値が {a,b,c,d} である型は、取り得る値が {a,b} しかない型より広い。 よって、型変換 {a,b,c,d}-」{a,b} (double 型の値を float 型を期待している関数に渡した場合など) は共変変換である。 同様に、型変換 {a,b}-」{a,b,c,d} (float を返す関数を double を返す関数の代わりに呼び出した場合など) は関数の反変変換である (関数の型は戻り値の型)。 複数の同等でない型が、同一の値を取り得ることに注意すること。 例えば、取り得る値が {a,b} である型と {b,c} である型は互いに同等でないが、取り得る値が {b} である型とは、それぞれ {b}-」{a,b} および {b}-」{b,c} となり、いずれも同等である。 クラスにおける型の同等性は、継承の階層関係によって暗黙的に示される (そしてこれこそが、継承を行う正当な理由である)。 しかしながら、派生クラスでの変更によってはこの表明に違反する可能性があるため、プログラミング言語のなかには、特定の状況下でのこの暗黙の同等性に関する前提を限定するものもある。 例えば、C# 3.0 の総称型パラメータは共変性も反変性もサポートしていない。 IEnumerable「TypeDerivedFromA」 は IEnumerable「A」 に代入できそうにみえるが、代入可能でない。 C# 4.0 ではこれがサポートされるようになった。 なお、普通の配列型は、.NET の導入以来、常に共変性と反変性をサポートしつづけている (厳密に保証されているわけではない。 配列の代入が正当に行われても、実行時に例外が発生する可能性がある)。 プログラミング言語の型システムにおいて、型変換演算子が、 これらの用語は数学の圏論に由来する。 圏論では共変性と反変性をより一般的に定義しており、コンピューター科学におけるこれらの用語の定義は、圏論におけるベクトル空間上での定義と同じである。 この区分は、クラス階層におけるメソッドの引数および戻り値の型を検討するときに重要である。 C++のようなオブジェクト指向言語においては、クラス B がクラス A の派生型であるとき、B のメンバー関数はいずれも、戻り値の型集合が A のものと同じかより小さくなければならない。 すなわち戻り値の型は共変である。 一方、B のメンバー関数のとりうる引数の型集合が、A のものと同じかより大きいとき、引数の型は反変である。 B のインスタンスにとって問題なのは、どうすれば A のインスタンスを完全に置換可能かということである。 型安全性と置換可能性を保証する唯一の方法は、入力に対しては A と同等かより寛容に、出力に対しては A と同等かより厳格に振る舞うことである。 ただし、すべてのプログラミング言語があらゆる文脈でこの2つの性質を保証しているわけではなく、不必要に厳格なものもある。 つまり、特定の文脈においては共変性や反変性をサポートしないことがある。 典型的な例を示す: オブジェクト指向プログラミングにおいては、サブクラスでメソッドをオーバーライドした場合、置換が暗黙的に行われる。 すなわち、元のコードで古いメソッドを呼び出すと、新しいメソッドが代わりに実行される。 どのような形式のオーバーライドを許容するか、オーバーライドされたメソッドの型がどのように変化するかは、プログラム言語によって様々である。 これらの用語は数学の圏論に由来する。 型システムにおける型が圏 C をなし、射が派生型関係を表すものとする。 派生型関係はリスコフの置換原則に従うものとみなす。 すなわち、型 t のいかなる式も、型 s が s ≤ t を満たすならば、型 s の式で置き換えることが可能である。 型 p を受け取って型 r を返す関数を定義すると、型システムにおいてはその関数名と対応づけられた新たな型 p → r を生成したことになる。 このような「関数定義」演算子がすなわち、この新たな型を生成する関手 F : C × C → C である。 リスコフの置換原則から、この関手は、第1引数において...