Опубликован: 04.04.2012 | Доступ: свободный | Студентов: 1989 / 61 | Оценка: 4.60 / 4.40 | Длительность: 13:49:00
Лекция 9:

Образцы проектирования

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >

Дальнейшее чтение

Трюгве Реенскауг

Рис. 8.4. Трюгве Реенскауг
Гамма (2007)

Рис. 8.5. Гамма (2007)

Trygve Reenskaug, heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html.

Статьи по МОК.

Трюгве Реенскауг, известный норвежский ученый в области информатики. Работая в 1979 году в Xerox PARC (известный Исследовательский центр в Пало-Альто), ввел образец МОК. Приведенная ссылка позволяет познакомиться с его работами по этой теме. Я полагаю, что оригинальная работа по МОК 1979 года все еще остается лучшей презентацией МОК.

Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides: Design Patterns, Addison-Wesley, 1994.

Классический текст по образцам проектирования. Содержит среди многих других образцов стандартное описание образца "Наблюдатель".

На русском языке: Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидис: "Приемы Объектно-ориентированного проектирования. Паттерны проектирования", Питер, 2006 г.

Bertrand Meyer: The Power of Abstraction, Reuse and Simplicity: An Object-Oriented Library for Event-Driven Design, in From Object-Orientation to Formal Methods: Essays in Memory of Ole-Johan Dahl, eds. Olaf Owe, Stein Krogdahl, Tom Lyche, Lecture Notes in Computer Science 2635, Springer-Verlag, 2004, pages 236-271.

se.ethz.ch/~meyer/publications/lncs/events.pdf.

Важная часть этой лекции построена на материалах этой работы, в которой анализируются три решения: образец "Наблюдатель", механизм делегатов .NET и библиотека Event.

Ключевые концепции, изученные в этой лекции

  • Проектирование, управляемое событиями, называемое также концепцией "публиковать-подписаться", приводит к системам, чье выполнение управляется откликами на события в противоположность традиционным управляющим структурам. События включаются в программной системе, часто в ответ на внешние события. Графический интерфейс — GUI-программирование — характеризует важную область приложений.
  • Ключевой абстракцией проектирования, управляемого событиями, является понятие типа события.
  • Издателями являются элементы программной системы, которые могут включать определенные типы событий. Подписчиками являются элементы программной системы, которые регистрируют действия, выполняемые при возникновении событий определенного типа. При возникновении события подписчики получают уведомление, выполняя в ответ предписанное действие.
  • В системе с одним или более обликов важным правилом проектирования является отделение обликов от ядра приложения, называемого моделью .
  • Архитектура МОК (MVC — Model — View — Controller) предполагает существование контроллера — промежуточного слоя между моделью и обликом, управляющего взаимодействием с пользователями.
  • Образец "Наблюдатель" предлагает решение проблемы за счет введения двух классов высокого уровня PUBLISHER и SUBSCRIBER, от которых наследуются издательские классы и классы подписчиков. Каждый класс подписчик задает процедуру, которая описывает действие, выполняемое в ответ на событие. Каждый издательский объект имеет закрытое от клиентов свойство, хранящее список его подписчиков. Благодаря динамическому связыванию, при включении события выполняются желаемые действия, специфические для каждого подписчика.
  • Агенты, ограниченная универсальность и кортежи позволяют дать общее решение проблемы проектирования, управляемого событиями, на основе единого повторно используемого класса, основанного на центральной абстракции:EVENT_TYPE.
  • Архитектура ПО — ключ к его качеству. Проектирование архитектуры новой системы и улучшение существующей (рефакторинг) постоянно должно быть в центре внимания, фокусируясь на простоте, надежности, расширяемости и повторном использовании.
Новый словарь
Таблица 8.2.
Application domain Проблемная область приложения Argument(of an event) Аргумент(события)
Business model Бизнес-модель Catching (an event) Захват(события)
Context (of an event) Контекст (события) Control (Windows) Элемент управления
Controller Контроллер Event Событие
Event-driven Управляемое событиями Event type Тип события
External event Внешнее событие Glue code Склеивающий код
Handle (an event) Обработка(события) Model Модель
MVC МОК Publish (an event) Публикация (события)
Publish-Subscribe Публиковать- подписаться Register Регистрация
Refactoring Рефакторинг Signature (of event type) Сигнатура (типа события)
Subscribe Подписаться Trigger (an event) Включение (события)
View Облик Widget Виджет, элемент управления

Упражнения

Словарь

Дайте точное определение терминов словаря.

Карта концепций

Добавьте новые термины в карту концепций, построенную в предыдущих лекциях

Эффективный "Наблюдатель"

Выберите подходящее представление для списка подписчиков, адаптируя реализацию образца "Наблюдатель" так, чтобы все следующие операции выполнялись за время О(1): добавить подписчика (ничего не делать, если таковой уже существует в списке); удалить подписчика (ничего не делать, если такового нет в списке), выяснить, занесен ли потенциальный подписчик уже в список. Процедура публикации publish, если не учитывать время, затрачиваемое на реальное выполнение действия по обработке события, должна работать О(count) времени, где count — число подписчиков, реально подписанных на данный тип события. Структура данных, содержащая подписчиков, должна быть разумной и по памяти — О(count). Заметьте, что эта оптимизация также применима и к реализации классов из библиотеки Event.

Безопасный по типам "Наблюдатель"

Покажите, что при реализации образца "Наблюдатель" возможна схема типов, лишенная недостатков как схемы аргументов 1, так и схемы аргументов 2. Такая схема использует возможности, показанные в этой лекции и реализованные в библиотеке Event : ограниченную универсальность и кортежи. Ваше решение должно как описать изменения в классах PUBLISHER и SUBSCRIBER, так и представить наследуемые от них типичные классы издателя и подписчика.

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >
Надежда Александрова
Надежда Александрова

Уточните пожалуйста, какие документы для этого необходимо предоставить с моей стороны. Курс "Объектно-ориентированное программирование и программная инженения".