компонентов и паттернов проектирования. Такие паттерны и компоненты составляют инструментарий, необходимый для разработки более эффективных надежных систем. Краткая история паттернов проектирования в разработке ПО Чтобы лучше понять, как паттерны, практики и повторно ис-пользуемые компоненты изменили разработку систем, имеет смысл взглянуть на то, как подобные трансформации проис-ходили в прошлом.
Формализация алгоритмического программирования
Люди писали программы задолго до опубликования Дональдом Кнутом сборника «Искусство программирования» 1. Тем не ме-нее это событие стало важной вехой в развитии информатики. В частности, описанные в книгах Кнута алгоритмы не ориенти-рованы на какой-либо компьютер, а предназначены для обуче-ния читателя алгоритмическому мышлению. Эти алгоритмы могут быть адаптированы к конкретной компьютерной архи-тектуре или к конкретной задаче, решаемой читателем. Такая формализация была важна не только потому, что предоставляла разработчикам общий инструментарий для написания про-грамм, но и потому, что демонстрировала существование уни-версальных идей, которые можно применять в разнообразных контекстах. Понимание алгоритмов имеет ценность само по себе, безотносительно к какой-либо решаемой с их помощью задаче. 22Глава 1. Введение
Паттерны в объектно-ориентированном программировании
Если появление книг Кнута стало важной вехой в теории ком-пьютерного программирования, то алгоритмы — ключевой составляющей его развития. Однако по мере роста сложности компьютерных программ и увеличения численного состава раз-
рабатывающих их команд с единиц до сотен и тысяч стало ясно, что языков процедурного программирования и алгоритмов уже недостаточно для решения насущных задач. Эти изменения привели к появлению и развитию объектно-ориентированных языков программирования, которые уравняли в правах с алго-ритмами данные, повторное использование и расширяемость. В ответ на эти изменения в компьютерном программирова-нии изменениям подверглись также паттерны и практики программирования. В начале и середине 1990-х годов про-изошел взрывной рост количества книг об объектно-ориен-тированном программировании. Наиболее известна из них книга «банды четырех» «Приемы объектно-ориентированного проектирования» 1.
«Паттерны проектирования» привнесли в работу программи-стов инфраструктуру и общий язык. В этой книге описывается набор интерфейсных паттернов, которые можно использовать в различных контекстах. Благодаря развитию объектно-ориен-
тированного программирования в целом и интерфейсов в част-ности появилась возможность реализовать такие паттерны в виде повторно используемых библиотек. Эти библиотеки можно написать единожды и затем многократно использовать, экономя тем самым время и повышая надежность. Глава 1. Введение 23
Расцвет программного обеспечения с открытым исходным кодом
Делиться исходным кодом с другими разработчиками было принято со времен появления вычислительной техники. Фор-мальные организации в поддержку свободного программно-го обеспечения существовали с середины 1980-х. Но именно
в конце 1990-х — начале 2000-х резко возросло количество разработчиков и потребителей программного обеспечения с от-крытым исходным кодом. Хотя движение open source лишь от-носительно связано с разработкой паттернов проектирования
распределенных систем, его заслуга состоит в том, что именно сообщества open source показали миру: создание программного обеспечения в целом и распределенных систем в частности — труд коллективный.
Здесь важно отметить, что все технологии контейнеров, ле-жащие в основе паттернов проектирования из этой книги, разрабатывались и выпускались именно как программное обеспечение с открытым исходным кодом. Ценность паттер-
нов для документирования и усовершенствования практик разработки распределенных программных систем становится наиболее очевидной именно с точки зрения коллективной разработки.
MEAN 1) есть свои правила установки. Но когда я говорю о паттернах, я имею в виду обобщенные схемы организа-ции распределенных систем, не зависящие от конкретных технологий или приложений.
24Глава 1. Введение
Цель паттерна — предоставить общие предложения по ар-хитектуре системы, задать ее ориентировочную структуру. Надеюсь, что эти паттерны направят ход ваших мыслей в верную сторону и окажутся применимы в широком спек-
Читать дальше