Некоторые модели дизайна зависят от языка? - PullRequest
1 голос
/ 08 сентября 2011

Если да, то существуют ли какие-либо шаблоны, специфичные для C ++, а некоторые нет? Какие они, если таковые имеются? Ну, я имею в виду эти шаблоны проектирования: http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29

Ответы [ 5 ]

5 голосов
/ 08 сентября 2011

RAII - мощный шаблон, основанный на механизме очистки контекста C ++. В средах со сборщиком мусора эта языковая функция обычно отсутствует. Другие языки (например, Ruby) имеют другие способы использования предоставленных пользователем конструкций потока управления.

3 голосов
/ 08 сентября 2011

Я не уверен, есть ли другой ответ, кроме "Да".

Если шаблон проектирования зависит от поведения объекта, не зависящего от языка, один и тот же DP может применяться ко всем языкам.

Однако если шаблон проектирования зависит от некоторых языковых особенностей, то перевод его на другой язык потребует определенных усилий или будет невозможен. Некоторые шаблоны могут появиться из-за некоторых характеристик конкретного языка (но не нужны в других языках).

Люди все время придумывают шаблоны. Так что да.

1 голос
/ 08 сентября 2011

Да.

Самый заметный способ убедиться в этом - поэкспериментировать с изменением парадигмы.Например, сравните Java (OO) с Haskell (Functional).

Давайте возьмем шаблон Flyweight в Java.В Haskell это не составляет никакого труда, данные (которые являются неизменяемыми) неявно обмениваются.

Другой пример: шаблон Command.Haskell поддерживает первоклассные функции (и curryism), команды встроены.

Некоторые утверждают, что DP существует, чтобы покрыть то, что язык не предоставляет встроенным способом.В этом смысле, чем выше уровень языка, тем больше DP встроено.

1 голос
/ 08 сентября 2011

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

Если вы хотите сказать, что «виртуальная функция C ++» или «Java-интерфейс» является «шаблоном», тогда, по умолчанию, у вас есть «шаблон», который применим только к одному языку за исключением все другие. Учитывая, что шаблон - это просто способ решения проблемы, который может быть применен в различных контекстах, технически можно утверждать, что одноязычные шаблоны в теории могут существовать.

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

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

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

.... Пока кто-то не создаст этот диалект! : -)

0 голосов
/ 08 сентября 2011

Шаблоны, которые используют определенные функции языка, такие как множественное наследование в C ++, динамические поведения, такие как отражения, в значительной степени зависят от языка. Шаблоны проектирования GoF рассматриваются как основа для большинства шаблонов, но с годами системы становятся более сложными и распределенными. Следовательно, основные модели и принципы дизайна были развиты и расширены. Веб-фреймворки и библиотеки являются одним из лучших примеров реализации реальных сценариев для удовлетворения потребностей разработчиков / пользователей. Как динамическое создание страниц, AJAX и т. Д. Но я серьезно считаю, что шаблоны должны быть общими и не должны полагаться на языки.

Например, если вы используете слишком много шаблонов, которые зависят от PHP, может не помочь им переключиться на некоторые другие динамические языки, такие как Python. Общие / общие реализации могут быть легко реализованы на большинстве языков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...