Брэд Аплтон (Brad Appleton)
E-mail: brad@bradapp.net
Персональные страницы: http://www.bradapp.com/
Оригинал статьи:
http://www.bradapp.com/docs/patterns-intro.html
Последние исправления оригинала 14.02.2000
Перевод А.Ю. Гуртового, А.И. Легалова
Содержание статьи
- Введение в образцы
- Истоки образцов
- Немного об истории образцов
Введение в образцы
Образцы (patterns) для разработки программного обеспечения - предмет последних жарких дискуссий, в области объектно-ориентированной разработки. Они являются литературным описанием методов решения задач в области разработки программного обеспечения, и опираются на современную архитектуру, технологию программирования, а также на опыт лучших разработок и уроков, извлеченных из профессиональной деятельности.
Фундаментом любой науки или технической дисциплины является наличие словаря основных терминов и определений, а также языка для их совместной увязки. Цель образцов программного обеспечения состоит в том, чтобы создать литературный костяк, помогающий разработчикам программного обеспечения решать общие трудные проблемы, с которыми они сталкиваются в ходе своей деятельности. Образцы помогают сформировать общий язык для обеспечения понимания и передачи опыта решения различных проблем анализа и разработки. Формализация представления этих решений и связей между ними позволяет нам успешно фиксировать костяк знаний, определяющих наше понимание хороших архитектур, обеспечивающих потребности пользователей. Формирование общего языка описания образцов для передачи структур и механизмов нашей архитектуры позволяет нам понятно рассуждать относительно них. Основной акцент фиксируется не столько на технологии, сколько на культуре документирования и общении в ходе проектирования.
Истоки образцов
Начало популярности образцов в программировании, связано с широким распространением книги: Design Patterns: Elements of Reusable Object-Oriented Software (переведена на русский под названием: "Приемы объектно-ориентированного проектирования. Паттерны проектирования"), написанной Эриком Гаммой, Ричардом Хелмом, Ральфом Джонсоном, и Джоном Влисседесом [Erich Gamma, Richard Helm, Ralph Johnson, и John Vlissides]. Они часто упоминаются как Четверка [Gang of Four] или сокращенно GoF. Образцы можно использовать в различных областях: от организационных структур и общих процессов до обучения и архитектуры. В настоящее время разработчики программного обеспечения используют образцы в основном для формирования архитектуры программ и проектирования, а также (что началось еще раньше) для описания процессов разработки программ и организации процессов разработки. Назову другие книги, которые повысили популярность образцов. Это книга Pattern-Oriented Software Architecture: A System of Patterns (сокращенно называемая POSA), написанная Франком Бушманом, Региной Мейнер, Гансом Рохнертом, Питер Соммерладом и Майклом Сталом (Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, and Michael Stal) Иногда они называются Пятеркой Сименса (Siemens Gang of Five) или GoV. В книгах Pattern Languages of Program Design и Pattern Languages of Program Design 2 опубликованы избранные статьи из первой и второй конференций по Языкам образцов проектирования программ (сокращенно обзывается PLoP или PLoPD). Многие из этих книг входят в серию по программным образцам издательства Addison-Wesley.
Использование термина "образец" (pattern) заимствовано у архитектора Кристофера Александра (Christopher Alexander), который написал серию книг, посвященных отношениям между городским планированием и строительной архитектурой:
- Notes on the Synthesis of Form, Harvard University Press, 1964 [Notes] (Заметки о синтезе формы).
- The Oregon Experiment, Oxford University Press, 1975 [Oregon] (Орегонский эксперимент).
- A Pattern Language: Towns, Buildings, Construction, Oxford University Press, 1977 [APL] (Язык Шаблонов: Города, Сроительство, Конструкция).
- The Timeless Way of Building, Oxford University Press, 1979 [TTWoB] (Бесконечный путь строительства).
Хотя эти книги посвящены архитектуре строительных объектов и городскому планированию, они применимы многим другим дисциплинам, включая и разработку программного обеспечения. В [Notes], Александр убеждает, что современные архитектурные методы ведут к продуктам, которые конфликтуют с реальными запросами и требованиями их пользователей, общества и его личностей, и неудачны в реализации наиболее существенных целей всего проекта и инженерной мысли: улучшить человеческие условия. Александр хотел создать структуры, которые хороши для людей и имеют положительное влияние на них, улучшая их комфорт и качество жизни. Он показал, что архитекторы должны постоянно стремиться производить продукт их работы, который бы лучше удовлетворял и адаптировался к потребностям всех жителей, пользователей и их сообществам. В [APL] Александр описывает некоторые ценные идеи проекта по поиску и достижению этих целей. В [TTWoB] Александре предлагает парадигму архитектуры, основанную на трех понятиях: качестве, шлюзе и пути
Качество (качество без Имени)
Определяется как сущность, присущая всему живому и вещам, их польза, например: свобода, цельность, законченность, комфорт, гармония, пригодность, долговечность, открытость, эластичность, изменчивость, адаптируемость. Оно наполняет нас ощущением бодрости и насыщенности, дает нам удовлетворение, и, в конечном счете, улучшает человеческое условия.
Шлюз
Это - механизм, который позволяет нам достигать качества. Он проявляется через существование общего языка образцов, который позволяет нам создавать многообразные проекты, реализующие разнообразные потребности. Шлюз - универсальный "эфир" образцов, это их связи, которые пронизывают данную область. Шлюз - кабельный провод к качеству.
Путь (путь вне времени)
Путь (способ) позволяет применять образцы посредством шлюза, используя при этом методику поэтапного роста в заданной последовательности: эволюционно (прогрессивно) развивая начальную архитектуру, которая затем воплощается в "живой" качественный замысел. Александр уподобляет его процессу разворачивания, подобному эволюции эмбриона, в котором целое предшествует его части, и фактически порождается их делением ([TTWoB] стр. 365). Следуя путем, можно проходить через шлюз, чтобы достигнуть качества.
Немного об истории образцов
События, представленные здесь, описаны более подробно на страницах "Истории образцов" (HistoryOfPatterns) Сервера WikiWiki Варда Куннингама (Ward Cunningham).
В 1987 году Вард Куннингам и Кент Бек (Kent Beck), используя Smalltalk, разрабатывали пользовательский интерфейс. Они решили применить некоторые из идей Александра для разработки пяти малых языковых шаблонов руководства программистов, являющихся новичками языка Smalltalk. Они записали результаты и представили их на OOPSLA ' 87 (Орландо) в статье "Использование языковых образцов для Объектно-ориентированного программирования" (Using Pattern Languages for Object-Oriented Programs).
Вскоре, Джим Коплиен (Jim Coplien), нежно упоминаемый как "Cope", (Коп) начал формировать каталог идиом C++ (которые являются одной из разновидностей образцов) и в 1991 г. издал их как книгу, "Продвинутые стили программирования на C++ и идиомы" (Advanced C++ Programming Styles and Idioms).
В период с 1990 по 1992 гг. нашли друг друга и сделали определенную работу члены "Четверки", собрав воедино каталог образцов. Обсуждения образцов изобиловали на OOPSLA-91 в рабочей группе, руководимой Брюсом Андерсеном (Bruce Andersen). Эта же история повторилось и в 1992 г. Многие участвовали в описании образцов в ходе работы этих групп, включая Джима Коплиена, Дуга Ли, Десмонда Д'Соузу, Норма Керфа, Вольфганга Прии и др. (Jim Coplien, Doug Lea, Desmond D'Souza, Norm Kerth, Wolfgang Pree, and others).
В августе 1993 г. Кент Бек и Гради Буч субсидировали "горное" обсуждение в Штате Колорадо. Первая встреча известна теперь как "Горная группа" (Hillside Group). Другая рабочая группа по образцам работала на OOPSLA-93, а затем, в апреле 1994 г., Горная группа собралась вновь (с добавленным в это время Ричардом Габриэлем) чтобы спланировать первую, PLoP конференцию.
Короче говоря, в это время и была издана, книга "Образцы проектирования" [GoF], оставшаяся в истории.
|