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

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

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

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

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

   Шаблон дизайна | Алгоритм
------------------ | ----------------
Аннотация | бетон
Структура управления | Набор действий    
Шаблон | Реализация
Гибкий | детерминистический
План | Рецепт

13 ответов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Они разные: http://en.wikipedia.org/wiki/Design_pattern_(computer_science) против 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

связанный вопрос: шаблон проектирования для отмены движка

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

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

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

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

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

Хотя почти все считают, что алгоритм решает определенную проблему, шаблон проектирования также решает определенную проблему (например, уведомление наблюдателей). Лексически алгоритм выглядит так:

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

А узор такой:

Паттерн в архитектуре — это идея фиксации идей архитектурного дизайна в виде архетипических и многоразовых описаний. Термин «паттерн» в этом контексте обычно приписывают Кристоферу Александру, американскому архитектору австрийского происхождения. Шаблоны служат вспомогательным средством для проектирования городов и зданий.
В 1987 году Кент Бек и Уорд Каннингем начали экспериментировать с идеей применения шаблонов в программировании, особенно в языках шаблонов, и в том же году представили свои результаты на конференции OOPSLA. В последующие годы эту работу продолжили Бек, Каннингем и другие (источник:Википедия) .

А вот и алгоритм документирования шаблона проектирования. (Имя шаблона и классификация, намерение, структура, ...). Результатом этого алгоритма является документация по шаблону проектирования.

Алгоритм в основном представляет собой набор правил. А шаблон проектирования — это хорошо проверенный набор шагов (правил) для достижения конкретной цели.

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

На самом деле алгоритм может состоять и из целой машины. С другой стороны, алгоритм может содержать другие алгоритмы.

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

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

Если бы этот сценарий был одинаковым каждый раз, мы бы назвали все шаги алгоритмом:

  1. После перерыва каждый клиент возвращается.
  2. В соответствии с их номером строки они упорядочены сначала маленькими номерами (метод «первым пришел — первым обслужен»).
  3. Сотрудник банка получает требования EFT одно за другим.

Итак, в данном случае очередь — это структура данных. Людей можно сортировать с помощью любого алгоритма сортировки. Рабочий процесс офицера можно назвать шаблоном проектирования, в определенных условиях на выходе будут определенные вещи — вроде набора математических формул. Это никогда не меняется. Если этот рабочий процесс — лучший способ упорядочить ТЭО, полезно знать эти шаги как EFT ordering algorithm. Таким образом, каждый банк может внедрить его.

Однако в реальной жизни:

  1. Предполагается, что каждый клиент вернется, однако некоторые из них сдаются из-за других планов, а некоторые из них могут чувствовать себя плохо.
  2. Алгоритм сортировки (метод FIFO) до сих пор работает!
  3. Сотрудник банка госпитализирован.

Таким образом, мы можем генерировать различные лучшие решения для каждой возможности. Затем мы можем верифицировать наш алгоритм, например EFT ordering algorithm v1 - bank officer is sick, EFT ordering algorithm v2 - ...но это не имеет смысла.

Можем ли мы сказать, что шаблон проектирования содержит более одного алгоритма? Ответ «да, мы можем» и «нет, мы не можем». Если мы ожидаем набор результатов, например [1, 'phrase', , , { name: 'John Doe' }], ну наверное наш алгоритм делает несколько разных вычислительных работ.

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

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

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

Вот почему мы можем сказать, что шаблоны проектирования — это алгоритмы, и почему мы не предпочитаем называть шаблоны проектирования алгоритмами. Держите его маленьким, простым...

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

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

Другие вопросы по тегам