2010-07-28 7 views
15

Jeśli ostatnio oglądałeś Going Deep shows of the Channel9, bardzo często wymienianym tematem jest mathematical duality w programowaniu. TomasP ma dobrą blog post o dualności programowania obiektowego.Jakie matematyczne dualy są w programowaniu OO?

To odkąd Microsoft Research stwierdził, że wzór projektu obserwatora jest w rzeczywistości matematycznym podwójnym wzorcem iteratora. Odtąd używali koncepcji dualności w various ways.

Moje pytanie brzmi:

Co matematyczny dualności są tam w programowaniu?

Programowanie obiektowe to dobry początek. Główne wzory projektów GoF to: Dekorator, Stan, Iterator, Fasada, Strategia, Proxy, Metoda Fabryki, Adapter, Obserwator, Metoda Szablonowa, Złożona, Singleton, Fabryka Abstrakcyjna i Dowództwo. Here to dobry obiekt-wykres-plakat.

+2

Interesujące. Nie widzisz wielu dyskusji na temat teorii kategorii na SO. Może być ku temu powód ... ;-) –

+1

Wiem, że natknąłem się na nie, ale nie mogę wymyślić żadnych szczegółów. Podejrzewam, że istnieje dwoistość między obiektami i funkcjami (nie tylko obiektami i zdarzeniami). – phkahler

+0

Świetne pytanie - czekam na kilka fajnych odpowiedzi –

Odpowiedz

1

Nie jestem pewien, czy to dokładnie to, czego szukałeś, ponieważ jest to więcej FP niż OO, ale jest oczywiście Curry-Howard Correspondance (a.k.a. Isomorphism Curry-Howarda), który "równoważy" programy z dowodami i typy z formułami.

+0

Czy nie jest Curry-Howard raczej izomorfizmem niż dualizmem? –

+0

Przykro mi, nie wiedziałem o formalnym znaczeniu dualizmu, a fakt, że Curry-Howard ma dwie różne nazwy, dodatkowo dezorientuje. – pdbartlett

2

Powiedziałbym, że główną dualizm w programowaniu jest dualizm kodu danych, najbardziej wyraźnie ujawniony w Lisp, ale także wyraźny w większości współczesnych języków, które zapewniają funkcjonalność introspekcji.

1

Można argumentować, że dualizm obserwatora/iteratora jest (rodzaj, praca ze mną tutaj :-)) przejawem bardziej ogólnych paradygmatów OO dziedziczenia i alternatywnego paradygmatu delegacji i agregacji. W pierwszym przypadku bardziej wyspecjalizowane obiekty wykorzystują funkcjonalność podstawową (punkt up) do dziedziczenia ogólnych możliwości, aw drugim bardziej uogólnione obiekty wykorzystują delegację do dostępu do bardziej wyspecjalizowanej funkcjonalności (punkt w dół/na zewnątrz) - jest wiele dyskusji akademickich na temat tego, że projekty mogą być wyrażone zarówno w formie, a ponieważ rozbieżność między postaciami jest (rozsądnie) rygorystyczną i zdefiniowane, powiedziałbym, to może być sklasyfikowany jako podwójny

Zobacz Treaty of Orlando 2 uzyskać więcej informacji

1

myślę obiektów i zamknięcia/anonimowe funkcje jako podwójne.

Obiekt jest wiązką danych, z zestawem procedur, które są do niej "dołączone" (tj. Z jej metodami).

Zamknięcie, w sensie funkcjonalno-programistycznym tego słowa, jest odniesieniem (wywoływanym) do funkcji, z dołączonym zestawem danych (w postaci powiązanych zmiennych wolnych).