Ответ 1
Я бы сказал, что первичная двойственность в программировании - это двойственность кода-данных, наиболее ярко выраженная в Lisp, но также понятная в большинстве современных языков, которые обеспечивают функциональность самоанализа.
Если вы смотрели В последнее время, когда вы просматриваете глубокие шоу Channel9, одна очень часто упоминаемая тема математическая двойственность в программировании. TomasP имеет хорошее сообщение о двойственности в объектно-ориентированном программировании.
Это было с тех пор, как Microsoft Research обнаружила, что шаблон проектирования наблюдателя на самом деле является математическим двойником шаблона итератора. С тех пор они использовали концепцию двойственности в различные способы.
Мой вопрос:
Какие математические дуальности существуют в программировании?
Объектно-ориентированное программирование - хорошее начало. Основные шаблоны проектирования GoF: Decorator, State, Iterator, Facade, Strategy, Proxy, Factory Метод, Адаптер, Наблюдатель, Метод шаблона, Композитный, Singleton, Абстрактный Factory и Command. Здесь - хороший графический плакат объекта.
Я бы сказал, что первичная двойственность в программировании - это двойственность кода-данных, наиболее ярко выраженная в Lisp, но также понятная в большинстве современных языков, которые обеспечивают функциональность самоанализа.
Не уверен, что это полностью то, что вы искали, поскольку оно больше FP, чем OO, но, конечно же, Curry-Howard Correspondance (так называемый изоморфизм Карри-Говарда), который "приравнивает" программы с доказательствами и типами с формулами.
Можно утверждать, что двойственность наблюдателя/итератора (вроде, работа со мной здесь:-)) является проявлением более общих парадигм ОО наследования и альтернативной парадигмы делегирования и агрегации. В первом случае более специализированные объекты используют базовую функциональность (вверху) для наследования общих возможностей, а в последнем более обобщенные объекты используют делегирование для доступа к более специализированным функциям (точка вниз/вниз) - есть много академических дискуссий о том, что оо конструкции могут быть выражены в любой форме, и поскольку дисперсия между формами (разумно) жестковата и определена, я бы сказал, что ее можно классифицировать как двойную
См. Договор Орландо 2 для получения дополнительной информации
Я думаю о объектах и замыканиях/анонимных функциях как дуальности.
Объект - это совокупность данных с набором подпрограмм, которые "привязаны" к нему (т.е. его методы).
Замыкание в функционально-программируемом смысле слова является (вызываемой) ссылкой на функцию с набором данных, присоединенных (в виде его связанных свободных переменных).