Примеры полезных или non-trival двойных интерфейсов

Недавно у Erik Meijer и других есть шоу как IObservable/IObserver двойной из IEnumerable/IEnumerator. То, что они являются двойными, означает, что любая операция в одном интерфейсе допустима на другом, таким образом обеспечивая теоретическую основу Реактивных Расширений для .NET

Другие двойные интерфейсы существуют? Я интересуюсь любым примером, не просто базирующимся .NET.

11
задан 4 revs, 3 users 92% 11 February 2010 в 10:30
поделиться

3 ответа

Другой пример будет Textreader и TextWricer , хотя есть еще больше шума, чем в случае наблюдателей и перечислимые. В принципе типовые подписи были бы:

interface ITextReader {
  // Read: void -> int
  int Read();
}

interface ITextWriter {
  // Write: int -> void
  void Write(int val);
}
3
ответ дан 3 December 2019 в 10:44
поделиться

Другой пример - тип продукта A.B и суммарный тип A+B двух типов A и B. В Хаскелле их можно записать как:

данные Prod a b = P a b -- это то же самое, что и тип пары (a,b)

данные Sum a b = Left a | Right b -- то же самое, что и Either a type

check here for details

.
3
ответ дан 3 December 2019 в 10:44
поделиться

Ковариация и контравариантность - еще один пример. Думаю. Я могу ошибаться.

Барт Де Смет говорит : «В различных дисциплинах существует множество дуальностей, обеспечивающих отличную передачу знаний между различными областями. Например, в формальной логике закон Де Моргана позволяет преобразовывать выражения, построенные из союзов, в выражения, построенные из дизъюнкций. и наоборот. В электронике существует сходство между поведением конденсаторов и индуктивностей: знаете одно и как перемещаться между доменами, а вы знаете другое. Исчисление Фурье обеспечивает двойственность между временной и частотной областями ». Интересно.

Они также называют System.Reactive двойником System.Interactive. Таким образом, большинство функций в одной из сборок двойственны в другой. Чтобы уточнить, не только IO является двойником IE, но и функции, которые работают с ними, также двойственны.

Итак, отвечу на ваш вопрос: существует множество дуальных интерфейсов. Вы можете дуализировать любой интерфейс. Вы просто меняете местами входы и выходы и направление функции. Некоторые из них бесполезны или будут двойственны сами по себе. Однако иногда скрываются действительно могущественные, ожидающие раскрытия.

2
ответ дан 3 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: