Подтвердить что ты не робот

Какая разница между алгоритмом и шаблоном проектирования

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

Есть ли принципиальная разница между "Design Pattern" и "Algorithm", или это нормально, что кто-то использует их взаимозаменяемо?

Я положу трубку и сниму ответ с эфира.

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

   Design Pattern |    Algorithm
------------------|----------------
Abstract          | Concrete
Control Structure | Set of Actions    
Template          | Implementation
Flexible          | Deterministic
Blueprint         | Recipe
4b9b3361

Ответ 1

Алгоритм подобен рецепту: пошаговый процесс для выполнения некоторой активности.

Шаблон проектирования похож на план: структурированный набор объектов и ассоциаций и действий для достижения определенной цели.

Ответ 2

Да, есть разница.

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

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

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

Ответ 3

Схема проектирования - это относительно неопределенное описание того, как решить проблему на архитектурном уровне, с уделением особого внимания гибкости и ремонтопригодности. Алгоритм - это точное описание того, как вычислить что-то конкретное, с акцентом на правильность и эффективность.

Ответ 4

Образцовый шаблон нельзя напрямую перевести в код. Это "стратегия", которая может быть полезна при разработке приложения. Происхождение термина является внешним по отношению к информатике. Читайте о Christopher Alexander, чтобы узнать больше.

Алгоритм с другой стороны может быть выражен в коде. Это последовательность операций, которые решают конкретную проблему для любого ввода.

Ответ 5

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

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

Кристофер Александер - архитектор, который первым изучил шаблоны в зданиях и сообществах и разработал "язык шаблонов" для их генерации.

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

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

Ответ 6

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

Например, вы можете использовать несколько разных алгоритмов в сочетании с шаблон разработки стратегии.

Ответ 7

Алгоритм представляет собой определенный набор шагов для выполнения задачи. Декодирование аудио- или видеофайла будет использовать алгоритм.

Шаблон проектирования является скорее шаблоном для проектирования системы с определенными характеристиками.

Ответ 8

они разные: http://en.wikipedia.org/wiki/Design_pattern_(computer_science) vs http://en.wikipedia.org/wiki/Algorithm

с использованием шаблона проектирования команд (http://en.wikipedia.org/wiki/Command_pattern), легко реализовать отмену/повтор: http://www.cs.mcgill.ca/~hv/classes/CS400/01.hchen/doc/command/command.html

связанный с этим вопрос: Шаблон проектирования для Undo Engine

Ответ 9

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

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

Ответ 10

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

Ответ 11

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

Шаблоны проектирования описывают общие решения общих проблем проектирования. "Каждый шаблон описывает проблему, которая возникает снова и снова в нашей среде, а затем описывает ядро ​​решения этой проблемы таким образом, что вы можете использовать это решение в миллион раз, не делая этого одинаково дважды" (Christopher Alexander). В программировании это делается путем описания конкретных наборов отношений между объектами программного обеспечения (для концептуальных объектов или объектов реального мира). Следует избегать описания конкретной реализации, поскольку она делает шаблон дизайна менее общим.

Алгоритм представляет собой набор шагов, которые определяют, как выполняется задача. Выполнение каждого шага в алгоритме не требует творческих навыков. Скорее, это требует только способности следовать указаниям. (предупреждение: недетерминированные алгоритмы, не соответствуют этому ограничению и являются важной темой исследования)

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

Ответ 12

Шаблоны проектирования:

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

Алгоритм:

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