Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Проектирование с учетом будущих изменений

Читайте также:
  1. mariatorres re: Мнение молодежи, еще не забывшей свою школу и думающей про школу своих будущих детей
  2. X. ПРОЕКТИРОВАНИЕ НОВЫХ ГОРОДОВ
  3. Анализ изменений в хозяйственно‑финансовом положении предприятия
  4. В 2011 году система контрольных показателей таможенных органов претерпела ряд изменений.
  5. Возвратное проектирование
  6. Вопрос №1. Динамика изменений во внутри- и межполуляционных отношениях вредных видов в зависимости от факторов внешней среды и хозяйственной деятельности человека, их значение.
  7. Гидравлический расчет и проектирование дюкера
  8. Глава 9. Внесение изменений
  9. Завершение ввиду будущих событий
  10. Задание на курсовое проектирование

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

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

Вот некоторые типичные причины перепроектирования, а также паттерны, которые позволяют этого избежать:

а при создании объекта явно указывается класс. Задание имени класса привя­зывает вас к конкретной реализации, а не к конкретному интерфейсу. Это может осложнить изменение объекта в будущем. Чтобы уйти от такой про­блемы, создавайте объекты косвенно.

Паттерны проектирования: абстрактная фабрика, фабричный метод, прототип;

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

а зависимость от аппаратной и программной платформ. Внешние интерфей­сы операционной системы и интерфейсы прикладных программ (API) раз­личны на разных программных и аппаратных платформах. Если программа зависит от конкретной платформы, ее будет труднее перенести на другие. Даже на «родной» платформе такую программу трудно поддерживать.


 

Как решать задачи проектирования

Поэтому при проектировании систем так важно ограничивать платформен­ные зависимости. Паттерны проектирования: абстрактная фабрика, мост;

а зависимость от представления или реализации объекта. Если клиент «зна­ет», как объект представлен, хранится или реализован, то при изменении объекта может оказаться необходимым изменить и клиента. Сокрытие этой информации от клиентов поможет уберечься от каскада изменений. Паттерны проектирования: абстрактная фабрика, мост, хранитель, замес­титель;

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

Паттерны проектирования: мост, итератор, стратегия, шаблонный метод, посетитель;

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

Паттерны проектирования: абстрактная фабрика, мост, цепочка обязан­ностей, команда, фасад, посредник, наблюдатель;

а расширение функциональности за счет порождения подклассов. Специали­зация объекта путем создания подкласса часто оказывается непростым делом. С каждым новым подклассом связаны фиксированные издержки реализации (инициализация, очистка и т.д.). Для определения подкласса необходимо так­же ясно представлять себе устройство родительского класса. Например, для замещения одной операции может потребоваться заместить и другие. За­мещение операции может оказаться необходимым для того, чтобы можно было вызвать унаследованную операцию. Кроме того, порождение под­классов ведет к комбинаторному росту числа классов, поскольку даже для реализации простого расширения может понадобиться много новых под­классов.

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


 

Введение в паттерны проектирования

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

а неудобства при изменении классов. Иногда нужно модифицировать класс, но делать это неудобно. Допустим, вам нужен исходный код, а его нет (так об­стоит дело с коммерческими библиотеками классов). Или любое изменение тянет за собой модификации множества существующих подклассов. Бла­годаря паттернам проектирования можно модифицировать классы и при таких условиях. Паттерны проектирования: адаптер, декоратор, посетитель.

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

Прикладные программы

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

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

Инструментальные библиотеки

Часто приложение включает классы из одной или нескольких библиотек пре­допределенных классов. Такие библиотеки называются инструментальными. Инструментальная библиотека - это набор взаимосвязанных, повторно исполь­зуемых классов, спроектированный с целью предоставления полезных функций общего назначения. Примеры инструментальной библиотеки - набор контейнер­ных классов для списков, ассоциативных массивов, стеков и т.д., библиотека по­токового ввода/вывода в C++. Инструментальные библиотеки не определяют




Дата добавления: 2015-09-11; просмотров: 79 | Поможем написать вашу работу | Нарушение авторских прав

Глава 1. Введение в паттерны проектирования | Введение в паттерны проектирования | Чтотакое паттерн проектирования | Паттерны проектирования в схеме MVC | Каталог паттернов проектирования | Организация каталога | Введение в паттерны проектирования | Введение в паттерны проектирования | Как решать задачи проектирования | Введение в паттерны проектирования |


lektsii.net - Лекции.Нет - 2014-2025 год. (0.01 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав