г. (*) Приведите по одному примеру разрешенной и неразрешенной траекторий в данном взаимодействии.
3.9.Пользовательский интерфейс мультимедиа проигрывателя PlayerView сообщает ev контроллеру UIPresenter о начале проигрывания элемента списка воспроизведения playEntry . Контроллер: 1) рассылает это сообщение всем своим слушателям собственной операцией raiseEvent ; 2) получает от управляющего компонента Engine тип контента по имени name выбранного элемента item события ev вызовом getContentType ; 3) по типу контента получает медиапоток вызовами getAudioStream или getVideoStream ; 4) переводит интерфейс в состояние проигрывания либо видео, либо аудио вызовом setPlaybackMode и указывает медиапоток операцией setMediaStream ; 5) запускает воспроизведение операцией play контроллера.
а. Добавьте в модель возможность параллельной обработки сообщений в raiseEvent так, что операция обработки handleEvent вызывается асинхронно у каждого зарегистрированного слушателя типа IUIListener . Для отображения в модели используйте два анонимных слушателя.
б. Уточните взаимодействие при обработке события запуска проигрывания песни модулем lyricsPlugin , зарегистрированным в качестве слушателя событий UIPresenter . Модуль определяет тип контента элемента, передаваемый в сообщении о запуске. Для аудиоконтента создает запрос о тексте песни, вызывая собственный метод makeRequest . Затем модуль асинхронно вызывает операцию dispatchRequest класса NetController , передавая в параметрах запрос и себя как обработчика ответа. Получив ответ от сервера, NetController передает processResponse его обработчику. Модуль вызывает displayPage у UIPresenter и передает полученную HTML-страницу с текстом песни
3.10.(*) При решении основных задач, морфологический модуль ищет запрашиваемое слово в словаре языка. Таким образом, многие задачи в модуле зависят от реализации функции поиска слова в словаре. См. диаграмму на рис. 8. Для уменьшения объема, который занимает словарь, используется тип данных префиксное дерево 2 2 Префиксное дерево, «Trie», http://en.wikipedia.org/wiki/Trie.
. Каждый узел дерева содержит ассоциативный массив буква – следующий узел. Таким образом, если слово есть в словаре, то в дереве есть путь, начинающийся в корне и проходящий по вершинам, соответствующим буквам слова.
а. Постройте модель кооперации поиска слова в словаре, используя роли класса Dictionary и узла дерева Node . Для моделирования префиксного дерева используйте квалифицированные соединители и булевый атрибут leaf , указывающий на конечный узел слова.
б. Добавьте в модель поведение кооперации. Актор парсер строки StringParser вызывает операцию hasWord класса Dictionary с параметром word типа String . Метод hasWord , реализующий операцию hasWord , получает корневой узел с помощью операции getRoot класса Dictionary . Получив экземпляр класса Node , метод в цикле для каждой следующей буквы слова word вызывает у этого экземпляра операцию getNextLetter с параметром c типа char – текущей буквы слова. Данная операция возвращает дочерний узел дерева. Когда буквы слова word закончились, нужно вернуть актору значение операции isLeaf последнего полученного узла Node .
в. Модифицируйте поведение. Если в какой-то момент вызов getNextLetter прерван по исключению NoSuchLetter , операция hasWord должна вернуть false.
3.11.Вариант использования просмотр каталога SearchCatalog реализован кооперацией GetAllRecords . Основной сценарий варианта использования начинается с получения контроллером приложения AC команды showRecords . AC отображает show в пользовательском интерфейсе UI сообщение «Идет запрос». AC параллельно отправляет источнику данных DataSource запрос readRecords . DataSource передает AC одну запись в параметре действия acceptRecord . Затем AC показывает запись в UI .
а. Укажите, что перед запросом записи, AC запрашивает getListSize количество записей у источника данных. Результат присваивается переменной listSize .
б. Измените модель так, чтобы источник данных передавал контроллеру listSize записей по одной, а контроллер отображал show в UI все полученные записи вместе.
в. Реализуйте альтернативный сценарий, когда источник данных не содержит записей.
Читать дальше
Конец ознакомительного отрывка
Купить книгу