11

Recientemente Erik Meijer y otros tienen IObservable/IObserver muestran cómo es el dual de IEnumerable/IEnumerator. El hecho de que sean duales significa que cualquier operación en una interfaz es válida en la otra, proporcionando así una base teórica para el Reactive Extentions for .Netejemplos de interfaces duales útiles o no triviales

¿Existen otras interfaces duales? Estoy interesado en cualquier ejemplo, no solo en .Net.

+1

Tenga cuidado con el término "interfaz dual". Aunque el uso del término * dual * es obviamente correcto aquí, la frase * dual interface * se asocia comúnmente con 'IDispatch' y automatización, lo cual es un poco confuso (de eso pensé que era esta pregunta antes de abrirla). – Aaronaught

Respuesta

3

Otro ejemplo sería TextReader y TextWriter, aunque hay incluso más ruido que en el caso de observables y enumerables. En principio, las firmas de tipos serían:

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

interface ITextWriter { 
    // Write: int -> void 
    void Write(int val); 
} 
3

Otro ejemplo es el tipo de producto y el tipo AB suma A + B de dos tipos A y B. En Haskell se puede escribir como:

data Prod a b = P a b -- this is the same as the pair type (a,b)

data Sum a b = Left a | Right b -- the same as the Either a b type

cheque here para más detalles

2

covarianza y contravarianza es anothe r ejemplo. Creo. Podría estar equivocado.

Bart De Smet says: "Existen muchas dualidades en diversas disciplinas, proporcionando grandes transferencias de conocimiento entre dominios diferentes. Por ejemplo, en lógica formal, la ley de De Morgan permite convertir expresiones construidas a partir de conjunciones construidas a partir de disyunciones, y viceversa. En la electrónica, existen similitudes entre el comportamiento de los condensadores y las inductancias: conocer uno y cómo ir y venir entre dominios, y uno conoce el otro. El cálculo de Fourier proporciona dualidades entre los dominios de tiempo y frecuencia ". Interesante.

También llaman a System.Reactive el dual de System.Interactive. Entonces, la mayoría de las funciones en uno de los ensamblajes tiene doble en el otro. Para aclarar, no es solo que IO es el doble de IE, sino que las funciones que operan en ellos también están duales.

Para responder a su pregunta, existen muchas interfaces duales. Puedes dualizar cualquier interfaz. Simplemente intercambia entradas y salidas y la dirección de la función. Algunos no serán útiles, o serán el doble de ellos mismos. Sin embargo, a veces hay personas realmente poderosas que se esconden esperando a ser descubiertas.

+0

Voto ascendente para citar el gran blog de Bart De Smet. :-RE –

Cuestiones relacionadas