Есть ли у нас шаблоны проектирования в C ++, как в Java? - PullRequest
9 голосов
/ 31 января 2010

Так как у нас так много шаблонов проектирования в Java, как и у нас, в мудрости есть такие в C ++. Или мы можем использовать шаблоны такого же типа в C ++.

Ответы [ 11 ]

28 голосов
/ 31 января 2010

Оригинальная книга по шаблонам проектирования ( Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения от «Банды четырех») предшествует Java. Примеры есть в C ++ и Smalltalk.

Шаблоны проектирования применимы ко многим объектно-ориентированным языкам программирования; может быть, просто в Java они обычно настолько распространены, что они нужны вам для решения чего-либо нетривиального.

Однако некоторые шаблоны проектирования решаются с помощью языковых возможностей (например, вам не нужно явно реализовывать шаблон Observer в C #). Другие даже не применимы к Java, так как им требуется наследование нескольких классов.

16 голосов
/ 31 января 2010

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

Вы можете использовать ту же идею на C ++.

7 голосов
/ 31 января 2010

Шаблоны проектирования не зависят от языка. Специфичные для языка шаблоны называются идиомами - это решения повторяющихся проблем на определенном языке.

Для C ++ есть хорошие книги, такие как Effective C ++ , которые знакомят вас с основными. Wikibook Больше идиом C ++ также стоит посмотреть.

3 голосов
/ 31 января 2010

Этот вопрос довольно забавный, поскольку шаблоны проектирования происходят от в C ++. Книга GoF (Гамма, Джонсон, Хелм, Флиссидес) в Введение :

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

и затем в Что такое шаблон проектирования :

Хотя шаблоны проектирования описывают объектно-ориентированные разработки, они основаны на практических решениях, которые были реализованы в основных объектно-ориентированных языках программирования, таких как Smalltalk и C ++, а не в процедурных языках (Pascal, C, Ada) или более динамических объектно-ориентированных языки (CLOS, Dylan, Self). Мы выбрали Smalltalk и C ++ по прагматическим соображениям: наш повседневный опыт работы на этих языках и они становятся все более популярными.

Кроме того, шаблоны проектирования подвергались критике на том основании, что они являются просто идиомами, прославленными, чтобы скрыть этот факт. Критики (извините, нет источников) говорят, что DP просто восполняют отсутствие прямой языковой поддержки. Это определенно правильно, по крайней мере, до определенной степени: посмотрите, как встроенная поддержка Scala для Singleton исключает public static getInstance(), или вспомните, что Visitor просто имитирует двойную отправку.

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

3 голосов
/ 31 января 2010

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

Между тем, богатая (и, может быть, кто-то скажет!) Система шаблонов в C ++ обеспечивает очень интересную реализацию шаблонов стандартов, см., Например, Modern C ++ Design от Alexandrescu и его очень интересный дизайн на основе политик.

2 голосов
/ 31 января 2010

Как уже упоминалось, оригинальная книга о шаблонах проектирования использует C ++ и некоторые SmallTalk для примеров кода. Сказав это, код, используемый в этой книге, сегодня не считается хорошим C ++, поэтому я буду осторожен с применением «классических» шаблонов проектирования в C ++.

2 голосов
/ 31 января 2010

Шаблоны дизайна варьируются на всех языках. Пытался найти несколько, которые у меня есть, но, похоже, не могу добраться до них прямо сейчас. Я думаю, что один из них был из серии «Head Start». Принимает сложную проблему обучения и делает ее легко читаемой, что в свою очередь способствует лучшему сохранению. Помимо этого, существует множество книг, но, как показывает приведенный пример, некоторые из них лучше, чем другие. Шаблоны дизайна могут быть сложными!

1 голос
/ 31 января 2010

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

1 голос
/ 31 января 2010

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

0 голосов
/ 31 января 2010

Обратитесь к документации библиотеки boost, там они реализовали многие шаблоны проектирования, такие как Java.

...