Казахстан, Караганды, Карагандинский экономический университет, 2009 |
Проектирование программных продуктов
Немного об архитектуре и истории проектирования программных продуктов
Архитектура программного обеспечения своими корнями связана с архитектурой зданий и сооружений и развивается по сходным канонам и принципам.
Шаблоны проектирования – это инструмент, разработанный в области архитектуры и культурологии. В 70-х годах XX века архитектор Кристофер Александер задумался над радом вопросов:
- Является ли качество объективной категорией?
- Следует ли считать представление о красоте сугубо индивидуальным, или люди могут прийти к общему соглашению, согласно которому некоторые вещи будут считаться красивыми, а другие нет?
Александер, как истинный профессионал в своей области, размышлял о красоте с точки зрения архитектуры. Прежде всего его интересовало, по каким показателям оцениваются архитектурные проекты. Если кто-то вознамерился спроектировать крыльцо дома, то:
- как он может получить гарантии, что создаваемый им объект будет "хорош"?
- имеются ли "объективные"предпосылки для вынесения такого суждения?
- существует ли "основа" для достижения "всеобщего" согласия?
Александер в качестве постулата принял, что в области архитектуры такое объективное
основание существует. Утверждение, что здание является красивым,–это не вопрос вкуса. "Красоту" можно описать и измерить с помощью объективных критериев.
Похожими выводами закончилось схожее исследование, но в области культурологии.
В пределах одной культуры большинство индивидуумов имеют схожие представления о том, что является сделанным хорошо и что является красивым. В основе их суждений есть нечто более общее, чем сугубо индивидуальные представления о красоте.
Все это приводит к выводам о существовании "мета"-образов или шаблонов, которые могут являться объективными "шкалами" для оценки предметов в различных сферах деятельности.
Предпосылки к созданию шаблонов проектирования сферы разработки программного обеспечения заключались в потребности объективной оценки качества создаваемого программного обеспечения. Замысел оценки и описания программного обеспечения, которое отвечало бы заданным требованиям, оказался полностью воплотим на практике.
Но для этого необходимо ответить на следующий вопрос(более того, ответы на него следует воспринимать как "дорожную карту" процесса разработки программного обеспечения):
- Какие качественные величины (не следует путать их с количественными) отличают хороший программный продукт от посредственного?
Качество продукта, без сомнения, является объективной категорией, поэтому можно явно отделить хорошее от плохого. Александер, изучая эту проблему, обследовал множество зданий, городов, улиц и всего прочего, что люди возводили для собственного проживания. В результате он обнаружил, что все, что было построено хорошо, имело между собой ряд общих признаков. Архитектурные структуры различны, даже если они относятся к одному и тому же типу объекта. Но это не является определяющим фактором, когда мы говорим о качестве создаваемого объекта.
К примеру, крыльцо в различных типах зданий может быть спроектировано и построено по-разному, но тем не менее обладать высоким качеством, решая при этом различные функциональные задачи: одно для прохода с тротуара ко входной двери, другое для создания мощной тени. В другом случае два крыльца могут решать одну и ту же задачу, но различными способами. Таким образом, стало очевидно, что сооружения нельзя рассматривать обособленно от проблемы, для решения которой они предназначены. Если сфокусировать внимание на структурах, предназначенных для решения подобных задач, можно обнаружить сходство между различными объектами, которым присуще высокое качество. Александер назвал такие структуры шаблонами.
Он определил шаблон как "решение проблемы в контексте". Каждый шаблон описывает проблему, которая возникает в определенной среде снова и снова, а затем предлагает принцип ее решения таким способом, который можно будет применять многократно, получая ожидаемый результат.
По мнению Александера, когда речь заходит о шаблонах проектирования, то в обязательном порядке должны присутствовать следующие атрибуты, характеризующие каждый шаблон:
- Наименование шаблона.
- Назначение шаблона: описание задачи, которую он призван решать.
- Способ решения поставленной задачи.
- Ограничения и требования, которые необходимо принимать во внимание при решении задачи.
Александер, подтвердив свое предположение на изученном массиве примеров и образцов, принял, что с помощью шаблонов может быть решена любая архитектурная задача. Затем он высказал утверждение о том, что совместное использование нескольких шаблонов позволит решать комплексные архитектурные проблемы. О способе применения нескольких шаблонов в одном решении мы поговорим немного позже. Стоит отметить, что вся сложность транспонирования понятия архитектуры на область информационных технологий заключается еще и в том, что помимо понятия "архитектура программного обеспечения" мы постоянно будем сталкиваться с такими понятиями, как "корпоративная архитектура", "системная архитектура", "организационная архитектура", "архитектура информации", "архитектура аппаратного обеспечения", "архитектура приложения", "архитектура инфраструктуры" и т. д.
На сегодня в отрасли не существует однозначного понимания значения каждого из этих терминов или их взаимоотношений. В результате одни и те же термины могут иметь разные значения, а два или более терминов могут обозначать одно и то же. Просто примем, что эти разные термины существуют и призваны описывать разные материальные или информационные объекты.