Шаблоны проектирования специфичны для языка или технологии? - PullRequest
9 голосов
/ 27 марта 2010

Вопрос в том, являются ли шаблоны проектирования, специфичные для языка или технологии программирования,

Подобно тому, как вы можете создавать составные шаблоны только в C #, Java, но не в VB6.0. Верно ли это, если да, то какие шаблоны не могут быть реализованы без наших объектно-ориентированных языков программирования.

Ответы [ 10 ]

6 голосов
/ 27 марта 2010

Среди классических паттернов «Банды четырех» немало зависит от языка. Другие, такие как Visitor, действительно полезны только в объектно-ориентированной среде. Функциональный язык вместо * Visitor имеет fold (катаморфизм), и любой, кто пытается использовать Visitor на функциональном языке, будет рассматриваться как опасный сумасшедший. Наконец, существуют шаблоны, которые можно применять на любом языке, например, Factory.

Одна из причин, по которой я не большой поклонник движения паттернов, практикуемого Гаммой и др., Заключается в том, что взгляду на паттерн не хватает интеллектуальной согласованности. «Что-нибудь полезное» - хорошее утверждение, но, как вы заметили, не дает большого руководства относительно того, какие шаблоны могут все же быть полезными при изменении языка или парадигмы.

Для иллюстрации рисков, присущих классифицирующим шаблонам, посмотрите одну из моих любимых коллекций: Образцы лучших практик Smalltalk * Кент Бека . Несмотря на работу «Smalltalk» в заголовке, многие программисты сочли эти шаблоны применимыми и к таким языкам, как Java и Python.

4 голосов
/ 27 марта 2010

Шаблоны зависят от языков программирования, хотя и не так сильно, как предполагает ваш вопрос. Например, Iterator является шаблоном проектирования, однако во многих языках (C ++, Java, C #) он является частью языка (хорошо, библиотека классов).

Есть несколько шаблонов, которые можно назвать объектно-ориентированными, то есть их трудно реализовать без надлежащих классов, наследования и полиморфизма. Примеры: Абстрактная фабрика, Стратегия, Шаблонный метод. Однако даже это можно сделать, например, С, если кто-то действительно хотел. Это возможно, потому что C имеет функциональные указатели. Мне было бы очень трудно представить реализацию вышеупомянутых шаблонов на языке без ОО без поддержки указателя (или эквивалентной). Опять же, я полагаю, что эти шаблоны в любом случае не будут иметь смысла в таком языке ...

3 голосов
/ 27 марта 2010

Шаблоны проектирования сами по себе не зависят от языка, однако некоторые шаблоны могут зависеть от конкретной парадигмы, например, реализация одноэлементного шаблона в C не имеет смысла, так как вы могли бы просто написать простой старый модуль.

Однако шаблоны проектирования не зависят от языка, но могут быть более полезными или более осмысленными в различных парадигмах (ОО против структурированного против функционала)

3 голосов
/ 27 марта 2010

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

0 голосов
/ 23 марта 2018

Шаблоны проектирования, как правило, специфичны для конкретной парадигмы программирования.В той степени, в которой многие (большинство?) Языков поддерживают несколько парадигм, данный шаблон проектирования может применяться к совершенно разным языкам.Шаблон на разных языках может сильно отличаться, в зависимости от особенностей каждого языка.

Во-вторых, обратите внимание, что шаблон может быть настолько полезным / популярным / необходимым, что язык реализует его напрямую, устраняя необходимость для разработчиковитак.

Итак, как называется языковой шаблон?Шаблоны реализации часто называют идиомами .Смотри: https://softwareengineering.stackexchange.com/questions/106815/difference-between-idiom-and-design-pattern.

0 голосов
/ 27 марта 2010

Шаблоны проектирования по своей природе не зависят от языка, хотя некоторые шаблоны более полезны в некоторых языках, чем другие.

0 голосов
/ 27 марта 2010

Это чтобы дать прямой ответ.

С одной стороны, некоторые шаблоны зависят от языка, а шаблоны, такие как Factory, Strategy и Template, основаны на таких языковых механизмах, как полиморфизм и наследование.

С другой стороны, существуют некоторые шаблоны, потому что язык, который мы используем, не имеет нужной функциональности (пример: шаблон посетителя используется, чтобы восполнить отсутствие двойной диспетчеризации в таких языках, как Java и C ++).

0 голосов
/ 27 марта 2010

Да и нет. Некоторые шаблоны проектирования не относятся к конкретным языкам, но могут быть шаблоны проектирования, характерные для классов языков.

Например, могут быть шаблоны функционального проектирования, специфичные для функциональных языков, или шаблоны объектно-ориентированного проектирования, специфичные для объектно-ориентированных языков. Может существовать некоторое совпадение, но оно не на 100%.

0 голосов
/ 27 марта 2010

Большинство шаблонов не зависят от языка. Для некоторых шаблонов и языков требуется хакерство. Например, Windows COM - это причудливая реализация составного шаблона на языке C (не C ++).

Некоторые языки, такие как VB 6.0, ставят серьезные препятствия, которые необходимо перепрыгнуть для реализации некоторых шаблонов, что делает его не стоящим усилий.

0 голосов
/ 27 марта 2010

Нет, это не так. Это абстракция, которая в целом может применяться к объектно-ориентированным языкам.

...