Врезка 14.1. Описание паттерна Обозреватель
Имя паттера. Обозреватель
Описание. Отделяет отображение состояния объекта от самого и предлагает различные способы представления состояния. При изменении состояния объекта все представления автоматически обновляются, чтобы отобразить происшедшие изменения.
Описание проблемы. Во многих ситуациях требуется представить информацию о состоянии некоторого объекта несколькими разными способами, например используя графическое и табличное представления. Все представления взаимосвязаны и должны обновляться при изменении состояний.
Данный паттерн можно использовать во всех ситуациях, где требуется несколько разных представлений информации о состояний объекта и где нет необходимости знать форматы представления данных о состоянии объекта. Описание решения. Структура паттерна показана на рис. 14.11. В нем определены два абстрактных объектам Subject (Данные) и Observer (Обозреватель), а также два конкретных объекта: ConcreteSubject (Конкретные данные) и ConcreteObserver (Конкретный обозреватель) которые наследуют свойства соответствующих абстрактных объектов. Отображаемое состояние поддерживается объектом ConcreteSubject, который также наследует методы от Subject, позволяющие ему добавлять и удалять объекты Observer (методы Attach и Detach) и выдавать оповещение при изменении состояния (метод Notify).
Объект ConcreteObserver обрабатывает копию состояния ConcreteSubject (копию subjectState, полученную с помощью метода GetState (Получить состояние)) и реализует метод Update (Обновить) интерфейса Observer, который позволяет сохранять копии состояния. ConcreteObserver автоматически отображает это состояние.
Результаты. Для оптимизации обозревателя необходима дополнительная информация об объектах. Изменения в формате отображаемых данных вызовут серию связанных изменений в созданных обозревателях.
Обычно в паттернах классы объектов и взаимоотношения между ними изображаются с помощью специальных графических нотаций. На рис. 14.11 представлен паттерн Обозреватель в нотации языка UML.
Рис. 14.11. Паттерн Обозреватель
Применение паттернов является весьма эффективным способом повторного использования; однако, по моему мнению, данный метод требует значительных затрат на освоение и может эффективно использоваться в проектировании систем только опытными программистами. Причина кроется в достаточно высокой сложности паттернов. Паттерн не похож на исполняемый компонент, для использования которого достаточно изучить только его интерфейс. Очевидно, что на изучение паттерна требуется определенное время. Использовать паттерны могут только опытные программисты, поскольку лишь они способны распознать общие ситуации, в которых можно применить тот или иной паттерн. Неопытные программисты, даже если они прочитали несколько книг, описывающих паттерны, на практике зачастую не могут определить, где следует использовать паттерн, а где необходимо нестандартное специальное решение. КЛЮЧЕВЫЕ ПОНЯТИЯ
• Проектирование с повторным использованием компонентов означает проектирование программных систем с учетом уже имеющихся компонентов ПО. • К преимуществам повторного использования программного обеспечения можно отнести более низкие затраты, более быструю разработку и пониженные риски. Также повышается надежность систем и появляется возможность более эффективно применять опыт и знания специалистов, привлекая их к проектированию повторно используемых компонентов. • Покомпонентная разработка ПО основывается на использовании компонентов с четко определенными интерфейсами запросов и поставщиков сервисов без конкретизации знаний о внутреннем устройстве компонентов. Можно повторно использовать разные типы компонентов: функции, абстракции данных, структуры и законченные системы приложений.
• Под повторным использованием коммерческих продуктов понимается повторное использование крупномодульных готовых программных систем. Применение коммерческих продуктов может значительно уменьшить расходы и время на разработку нового ПО. • Программные компоненты, создаваемые для повторного использования, должны быть независимыми, отображать абстракции предметной области, предоставлять доступ к состоянию через методы интерфейса и не должны сами обрабатывать исключительные ситуации. • Семейство приложений – это группа приложений, которые разрабатываются на основе одного или нескольких базовых приложений. Базовая обобщенная система адаптируется для соответствия требованиям разрабатываемой системы. • Проектные паттерны – это абстракции высокого уровня, которые документируют успешные проектные решения. Они являются основой при повторном использовании проектных решений в объектно-ориентированных разработках. Описание паттерна содержит имя паттерна, описание проблемы и решения, а также результаты и компромиссы использования шаблона. Упражнения
14.1. Каковы основные технические и нетехнические факторы, затрудняющие повторное использование программного обеспечения? 14.2. Объясните, почему сокращение расходов при повторном использовании компонентов не прямо пропорционально размерам повторно используемых компонентов. 14.3. Приведите четыре аргумента против повторного использования компонентов. 14.4. Предположите возможные интерфейсы запросов и поставщиков сервисов для следующих компонентов. • Компонент, реализующий счет в банке. • Компонент, реализующий не зависящую от языка клавиатуру. Клавиатуры в разных странах имеют различную организацию клавиш и разные наборы символов. • Компонент, реализующий средство управления версиями, рассмотренное в главе 29. 14.5. Чем отличается повторное использование объектной структуры приложения от повторного использования коммерческих продуктов? Почему иногда проще повторно использовать коммерческий продукт, чем объектную структуру приложения?
14.6. На примере метеорологической станции, описанной в главе 12, предложите архитектуру семейства приложений, которые связаны с удаленными наблюдением и сбором метеоданных. 14.7. На примере семейства приложений по управлению ресурсами (см. рис. 14.7) подумайте, какие методы необходимо добавить или изменить, чтобы можно было делать повторный заказ на отдельные виды ресурсов, если их количество становится меньше некоторой заданной величины. 14.8. Почему паттерны – эффективный способ повторного использования в проектировании? Каковы недостатки этого подхода? 14.9. Повторное использование увеличивает количество вопросов о собственности, охраняемой авторским и интеллектуальным правом. Если заказчик оплачивает разработчику ПО заказ на разработку какой-либо системы, кто имеет право повторно использовать созданный код? Имеет ли право разработчик использовать этот код в качестве основы для базового компонента? Какими должны быть механизмы оплаты труда разработчика повторно используемых компонентов? Обсудите эти и другие этические вопросы, связанные с повторным использованием программного обеспечения.
Читайте также: III. ОПИСАНИЕ ЛАБОРАТОРНОЙ УСТАНОВКИ Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|