Какие математические дуальности существуют в программировании ОО?

Если вы смотрели В последнее время, когда вы просматриваете глубокие шоу Channel9, одна очень часто упоминаемая тема математическая двойственность в программировании. TomasP имеет хорошее сообщение о двойственности в объектно-ориентированном программировании.

Это было с тех пор, как Microsoft Research обнаружила, что шаблон проектирования наблюдателя на самом деле является математическим двойником шаблона итератора. С тех пор они использовали концепцию двойственности в различные способы.

Мой вопрос:

Какие математические дуальности существуют в программировании?

Объектно-ориентированное программирование - хорошее начало. Основные шаблоны проектирования GoF: Decorator, State, Iterator, Facade, Strategy, Proxy, Factory Метод, Адаптер, Наблюдатель, Метод шаблона, Композитный, Singleton, Абстрактный Factory и Command. Здесь - хороший графический плакат объекта.

Ответы

Ответ 1

Я бы сказал, что первичная двойственность в программировании - это двойственность кода-данных, наиболее ярко выраженная в Lisp, но также понятная в большинстве современных языков, которые обеспечивают функциональность самоанализа.

Ответ 2

Не уверен, что это полностью то, что вы искали, поскольку оно больше FP, чем OO, но, конечно же, Curry-Howard Correspondance (так называемый изоморфизм Карри-Говарда), который "приравнивает" программы с доказательствами и типами с формулами.

Ответ 3

Можно утверждать, что двойственность наблюдателя/итератора (вроде, работа со мной здесь:-)) является проявлением более общих парадигм ОО наследования и альтернативной парадигмы делегирования и агрегации. В первом случае более специализированные объекты используют базовую функциональность (вверху) для наследования общих возможностей, а в последнем более обобщенные объекты используют делегирование для доступа к более специализированным функциям (точка вниз/вниз) - есть много академических дискуссий о том, что оо конструкции могут быть выражены в любой форме, и поскольку дисперсия между формами (разумно) жестковата и определена, я бы сказал, что ее можно классифицировать как двойную

См. Договор Орландо 2 для получения дополнительной информации

Ответ 4

Я думаю о объектах и ​​замыканиях/анонимных функциях как дуальности.

Объект - это совокупность данных с набором подпрограмм, которые "привязаны" к нему (т.е. его методы).

Замыкание в функционально-программируемом смысле слова является (вызываемой) ссылкой на функцию с набором данных, присоединенных (в виде его связанных свободных переменных).