Design patterns

24 апреля 2008 8 комментариев Иван Блинков

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

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

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

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

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

Основной вклад в этот процесс сделала знаменитая команда, известная как Gang of Four. Она состоит из четырех авторов не менее известной книги «Design Patterns — Elements of Reusable Object-Oriented Software»:

  • Erich Gamma
  • Richard Helm
  • Ralph Jonson
  • John Vlissides

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

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

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

Метки: , , , ,

  • http://www.codeblogz.ru/ Сергей

    [quote post="67"]...с более подробной информацией о сферах их применения, их востребованности, эффективности...[/quote]

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

  • ds

    С нетерпением ждем продолжения :)

  • http://www.insight-it.ru Иван Блинков

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

  • http://holbreich.de shuron

    Интересную тему затронули. Будет приятно поразмыслить над шаблонами.

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

  • Илья

    «при этом абсолютно не привязываясь к какому-либо конкретному языку программирования или стилю написания кода»

    П&П!

    Как показал Steve Yegge:

    The problem is, about 1/3 to ½ of them were basically cover-ups for deficiencies in C++ that don't exist in other languages. Although I'm not a huge Perl fan anymore, I have to admit the Perl community caught on to this first (or at least funniest). They pointed out that many of these so-called patterns were actually an implementation of Functional Programming in C++.

    steve.yegge.googlepages.c...onsidered-stupid

  • http://zekefast.com/ Zeke Fast

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

    Так же интересно было бы прочитать, если у вас есть собвственные наработки в этой области.

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

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

    Любителям темы советую ознакомиться с такими трудами как:

    1. «Приемы объектно-ориентированного проектирования. Паттерны проектирования» Э. Гамма, Р.Хелм, Р.Джонсон, Д.Влиссидес.

    2. «Рефакторинг» Мартин Фаулер

    3. «Применение шаблонов проектирование. Дополнительные штрихи.» Джон Влиссидес

    4. «Архитектура корпоративных приложений», Мартин Фаулер

    5. «Шаблоны интеграции корпоративных приложений», Грегор Хоп, Бобби Вульф

    6. «Рефакторинг с использованием шаблонов» Джошуа Кериевски

    P.S. Можно также написать интересную статью по реализации стандартных 23 шаблонов проектирвоания на современных языках программирования. ИМХО все современные языки что-то заимствовали из объектной модели Smalltalk. Т.е. я иммею в виду представить публике реализации о которых говориться в первой книге, но они не представлены.

    Спасибо!

  • http://www.insight-it.ru Иван Блинков

    [quote comment="905"]Не советую переписывать вышеупомянутую книгу и еще раз указывать уже известные сферы применения каждого из шаблонов.[/quote]Книгу переписывать я даже и не собирался, то что это бестолковое занятие — вполне очевидно.

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

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

  • Pingback: 40 признаков плохого программирования на PHP | Sephar Sipur Sepher