Какие математические поединки находятся там в программировании OO?

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

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

Мой вопрос:

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

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

15
задан ShinNoNoir 18 February 2011 в 14:47
поделиться

4 ответа

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

2
ответ дан 1 December 2019 в 05:19
поделиться

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

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

1
ответ дан 1 December 2019 в 05:19
поделиться

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

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

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

1
ответ дан 1 December 2019 в 05:19
поделиться

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

1
ответ дан 1 December 2019 в 05:19
поделиться