Какие математические дуалы существуют в ОО-программировании? - PullRequest
15 голосов
/ 28 июля 2010

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

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

Мой вопрос:

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

Объектно-ориентированное программирование - хорошее начало.Основные шаблоны проектирования GoF: Декоратор, Состояние, Итератор, Фасад, Стратегия, Прокси, Метод фабрики, Адаптер, Наблюдатель, Метод шаблона, Составной, Синглтон, Абстрактная фабрика и Команда. Здесь - хороший объект-график-плакат.

Ответы [ 4 ]

2 голосов
/ 05 августа 2010

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

1 голос
/ 05 августа 2010

Я считаю объекты и замыкания / анонимные функции двойственными.

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

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

1 голос
/ 05 августа 2010

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

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

1 голос
/ 05 августа 2010

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

...