Ответы на тест Объектно-ориентированное программирование Синергия МОИ МТИ
С помощью какой команды может быть создан вектор с именем test из элементов типа TestEI?
Что из перечисленного может быть отнесено к преимуществам шаблона «фабричный метод»?
Положительно сказывается на скорости работы
Позволяет устанавливать связь между параллельными иерархиями классов
Сокращает количество имен в адресном пространстве
Позволяет сделать код создания объектов более универсальным
Какие типы сущностей выделяют в UML?
Структурные
Поведенческие
Группирующие
Аннотирующие
Какой вид будет иметь инструкция, добавляющая в область видимости описываемого класса все классы из пакета test?
Задачи какого рода решают поведенческие шаблоны проектирования?
Определяют алгоритмы и способы взаимодействия объектов между собой
Абстрагирование процесса создания экземпляров класса
Повседневные задачи: переадресация работы, обеспечение слабой связности системы и так далее
Создание различных структур, изменяющих поведение уже существующих объектов
Верно ли то, что существуют такие классы, которые могут иметь один и только один экземпляр?
Нет
Да
Каким образом будет выглядеть инструкция, указывающая на принадлежность описываемого класса к пакету test, который в свою очередь является подпакетом класса bigTest?
С помощью какой команды может быть создан массив с именем test из десяти элементов типа int?
Что из перечисленного может быть отнесено к преимуществам шаблона «декоратор»?
Позволяет динамически добавлять объектам новые обязанности
Не требует дополнительной иерархии классов
Упрощает структуру отдельных классов
Сокращает количество имен в адресном пространстве
Как расшифровывается аббревиатура JDK?
Верно ли, что понятие «суперкласс» является синонимом родительского класса?
Нет
Да
Верно ли, что наиболее общим отношением между классами является отношение зависимости?
Нет
Да
Какое название получил механизм, позволяющий JVM работать с примитивными типами данных как с объектами?
Как называется организация, регулирующая развитие UML?
ANSI
ACM
OMG
NASA
Что из перечисленного может быть отнесено к преимуществам шаблона «заместитель»?
Позволяет инициализировать объекты по требованию
Позволяет придать объектам дополнительный функционал
Сокращает время отклика системы
Не требует создания новых объектов
Верно ли, что концепция MVC включает в себя ровно три структурных составляющих: модель, вид и контроллер?
Нет
Да
Каким символом на диаграмме классов изображается тот факт, что атрибут имеет бесконечную кратность?
Верно ли утверждение о том, что Java является императивным языком программирования?
Да
Нет
Какое ключевое слово используется для указания того, что класс реализует интерфейс?
Что из перечисленного может быть отнесено к преимуществам шаблона «цепочка ответственности»?
Позволяет ослабить связи внутри системы
Гарантирует, что рано или поздно запрос будет обработан
Не требует дополнительной иерархии классов
Придает дополнительную гибкостьпри распределении обязанностей
Верно ли, что для создания деструктора в Java используется блок finalize?
Нет
Да
Верно ли, что один абстрактный класс не может являться родительским по отношению к другому абстрактному классу?
Да
Нет
Какое ключевое слово используется для указания класса-родителя?
Каково основное назначение статического импорта?
Позволяет JVM эффективно перенаправлять запросы к классам из других пакетов, принимая во внимание их статическую структуру
Добавляет в область видимости описываемого класса все статические структуры из указанного пакета
Позволяет обращаться к статическим членам без явного указания класса-владельца
Какое количество секций может содержать блок описания интерфейса на UML-диаграмме классов?
Две
Три
Четыре
Одну
Каким символом на диаграмме классов изображается тот факт, что атрибут имеет область видимости protected?
Как называется один из фундаментальных механизмов объектно-ориентированного программирования, позволяющий классу ограничивать доступ к своим членам?
Что из перечисленного может быть отнесено к преимуществам шаблона «делегирование»?
Сокращает число элементов в адресном пространстве
Позволяет изменить поведение избегая наследования
Повышает степень абстракции
Положительно сказывается на времени обработки запроса системой
Верно ли, что отношение агрегации может применяться для изображения иерархических отношений между классами?
Да
Нет
Что из перечисленного может быть отнесено к членам класса?
Вложенный класс
Поле
Метод
Объект
Какое ключевое слово может быть использовано для обращения экземпляра класса к самому себе?
this
own
super
instanceof
Что из перечисленного может быть отнесено к преимуществам шаблона «неизменяемый объект»?
Положительно сказывается на скорости работы
Позволяет предотвратить ряд ошибок
Может быть использован в качестве ключа коллекции
Удобен для многопоточной работы
Что из перечисленного может быть отнесено к преимуществам шаблона «стратегия»?
Позволяет динамически выбирать реализацию алгоритма
Позволяет оперировать семейством алгоритмов
Предотвращает порождение большого числа подклассов
Сокращает цепочки условных операторов, реализующих сложное поведение системы
Какие из предлагаемых утверждений верны?
Статическим называется член класса, доступ к которому возможен без создания экземпляра
Создание статического метода возможно только при использовании ключевого слова static
Статические поля недоступны экземплярам класса
Статические поля являются общими для всех экземпляров класса
Что из перечисленного может быть отнесено к преимуществам шаблона «прототип»?
Позволяет специфицировать новые объекты путем изменения значений
Позволяет динамически конфигурировать приложение классами
Позволяет сократить иерархию классов
Значительно уменьшает время, необходимое на создание новых объектов
Что из перечисленного может быть отнесено к преимуществам шаблона «адаптер»?
Ускорение начальной инициализации
Смена библиотек не требует изменения всей системы
Увеличивает степень независимости системы от сторонних библиотек
Минимизация задержки при обращении
Что из перечисленного может быть отнесено к преимуществам шаблона «итератор»?
Итератор не должен владет всей информацией о коллекции
Позволяет поддерживать несколько активных обходов коллекции
Позволяет поддерживать единообразный интерфейс для доступа к элементам системы
Не требует дополнительной иерархии классов
Какие задачи позволяет решать ключевое слово final?
Создание абстрактных классов
Создание классов, которые не могут иметь наследников
Создание неизменяемых полей
Создание непереопределяемых методов
Создание ненаследуемых методов
Какая команда используется для выполнения байт-кода?
java
javarun
java с
javar
Как называется специализированный метод класса, предназначенный для уничтожения существующего экземпляра
Какие из перечисленных требований должны выполняться для создания шаблона «неизменяемый объект» в Java?
Все поля класса должны иметь модификатор private
Все методы класса должны быть объявлены с модификатором static
Класс должен быть объявлен с модификатором final
Ссылка this не должна передаваться вовне во время конструирования объекта
Какая команда используется для запуска процесса компиляции исходного файла в байт-код?
javacompile
Java
javac
cmp
compile
javacmp
Какая из парадигм программирования является ведующей в языке Java?
Компонентно-ориентированная
Событийно-ориентированная
Процедурная
Объектно-ориентированная
Что из перечисленного может быть отнесено к недостаткам шаблона «отложенная инициализация»?
Порождает дополнительные ошибки при многопоточной работе
Не позволяет явным образом задать порядок инициализации
Вносит дополнительную задержку при обращении к объекту
Замедляет инициализацию объектов
К какой группе языков относится Java?
интерпретируемый язык со строгой типизацией
интерпретируемый язык с динамической типизацией
компилируемый язык с динамической типизацией
компилируемый язык со строгой типизацией
Какое из перечисленных утверждений верно?
UML создан путем объединения всех существующих подходов проектирования того времени
UML создан на основе наиболее популярных подходов проектирования того времени
UML является исторически первым языком моделирования
Верно ли, что программист не может управлять сборкой мусора?
Да
Нет
Верно ли, что MVC позволяет подключать к одному виду несколько контроллеров?
Да
Нет
Сколько байт в памяти ЭВМ занимается одна переменная типа char?
Верно ли, что Java позволяет создавать массив заранее известных величин?
Да
Нет
Верно ли, что понятия «вложенный класс» и «класс-член» являются синонимами?
Да
Нет
Верно ли утверждение о том, что Java является декларативным языком программирования?
Да
Нет
Верно ли, что в пассивной модели MVC об изменениях данных представление оповещает контроллер?
Да
Нет
Верно ли, что абстрактный класс не может иметь экземпляров?
Да
Нет
Верно ли, что основная цель использование концепции MVC — упрощение архитектуру приложения
Да
Нет
Верно ли, что в активной модели MVC об изменениях данных представление оповещает контроллер?
Да
Нет
Каким символом на диаграмме классов изображается тот факт, что атрибут имеет область видимости public?
Как расшифровывается аббревиатура JRE?
Верно ли то, что отношение композиции является частным случаем отношения агрегации?
Да
Нет
Верно ли, что MVC позволяет визуализировать одни и те же данные разными способами без изменения модели?
Да
Нет
Верно ли, что основная цель использование концепции MVC — разграничение логики работы и визуализации?
Да
Нет
Какие типы связей используют в UML?
Обобщение
Реализация
Ассоциация
Зависимость
Что из перечисленного может быть отнесено к преимуществам шаблона «команда»?
Позволяет параметризировать объекты выполняемым действием
Упрощает иерархию классов
Позволяет обрабатывать запросы как объекты
Уменьшает время отклика системы
Какое ключевое слово может быть использовано для доступа к элементам класса-родителя?
instanceof
inherited
parent
super
Верно ли, что абстрактный класс не может содержать реализаций методов?
Да
Нет
Что из перечисленного может быть отнесено к преимуществам шаблона «состояние»?
Позволяет полностью скрыть информацию о классе-владельце
Изолирует логику работы от реализации
Не требует дополнительных имен в адресном пространстве
Позволяет избегать применения цепочек условных операторов
Какие группы шаблонов проектирования обычно выделяют?
Поведенческие
Порождающие
Структурные
Основные
Задачи какого рода решают структурные шаблоны проектирования?
Абстрагирование процесса создания экземпляров класса
Создание различных структур, изменяющих поведение уже существующих объектов
Повседневные задачи: переадресация работы, обеспечение слабой связности системы и так далее
Определяют алгоритмы и способы взаимодействия объектов между собой
Какие из перечисленных утверждений касательно низкоуровневых шаблонов проектирования верны?
Низкоуровневые шаблоны учитывают специфику языка программирования
Низкоуровневые шаблоны являются универсальными
Низкоуровневые шаблоны не используются в прикладных разработках
Низкоуровневые шаблоны также называют идиомами
Что из перечисленного может быть отнесено к преимуществам шаблона «мост»?
Чаще всего изменение абстракции не требует перекомпиляции кода клиента
Позволяет отделять абстракцию от реализации
Сокращает время доступа к объектам
Чаще всего изменение реализации не требует перекомпиляции кода клиента
Как будет выглядеть команда для запуска класса Test, готовый байт-код которого содержится в файле Test.class?
Что из перечисленного может быть отнесено к преимуществам шаблона «фасад»?
Облегчает устройство системы
Изолирует клиентов от подсистем
В большинстве случаев приводит к сокращению числа имен в адресном пространстве клиентов
Ограничивает доступ клиентов к подсистемам
Какие из перечисленных утверждений касательно высокоуровневых шаблонов проектирования верны?
Высокоуровневые шаблоны также называют архитектурными
Высокоуровневые шаблоны являются универсальными решениями
Несмотря на то, что высокоуровневые шаблоны являются универсальными, они учитывают специфические особенности конкретных языков программирования
Высокоуровневые шаблоны также называют идиомами
Каким символом на диаграмме классов изображается тот факт, что атрибут имеет область видимости private?
Что из перечисленного может быть отнесено к преимуществам шаблона «строитель»?
Не требует дополнительной иерархии классов
В сравнении с фабричным методом придает дополнительную гибкость процессу конструирования объектов
Позволяет изменять внутреннее представление объекта
Изолирует код конструирования объектов
Задачи какого рода решают порождающие шаблоны проектирования?
Создание различных структур, изменяющих поведение уже существующих объектов
Абстрагирование процесса создания экземпляров класса
Определяют алгоритмы и способы взаимодействия объектов между собой
Повседневные задачи: переадресация работы, обеспечение слабой связности системы и так далее
Как называется один из фундаментальных механизмов объектно-ориентированного программирования, позволяющий одному классу расширять функциональность другого, заимствуя при этом поля и методы?
Как расшифровывается аббревиатура JVM?
Какая из парадигм программирования является ведующей в языке Java?
Объектно-ориентированная
Событийно-ориентированная
Процедурная
Компонентно-ориентированная
Как называется специализированный метод класса, предназначенный для создания нового экземпляра
Как расшифровывается аббревиатура UML?
Unified Modern Language
Universally Modeling Language
Unified Modeling Language
Universally Modern Luggage
Что из перечисленного может быть отнесено к преимуществам шаблона «посредник»?
Обеспечивает слабую связность системы
Централизовывает управление
Повышает степень повторной используемости кода
Упрощает протоколы взаимодействия между компонентами
Что из перечисленного может быть отнесено к преимуществам шаблона «шаблонный метод»?
Позволяет динамически варьировать поведение системы
Позволяет оптимизировать передачу данных при вызове методов
Помогает избегать дублирования повторяющихся конструкций
Не требует дополнительной иерархии классов
Ответы на тест Объектно-ориентированное программирование Синергия МОИ МТИ.
Правильные ответы на вопросы выделены зеленым цветом.
На оценку «Хорошо/Удовлетворительно»
Оценка зависит от вопросов, которые попадутся в тестировании.
Чем больше попыток осталось, тем больше шанс сдать на 4.
Онлайн тесты на тему «Объектно-ориентированное программирование — Синергия бесплатно»
Объектно-ориентированное программирование — Синергия. Готовые бесплатные ответы для самостоятельного решения. Для удобства поиска по сайту ответов можете использовать комбинацию клавиш CTRL+F и в появившемся окне ввести вопрос
Демо работы
Описание работы
1. Задачи какого рода решают основные шаблоны проектирования? Повседневные задачи: переадресация работы, обеспечение слабой связности системы и так далее+
Абстрагирование процесса создания экземпляров класса
Создание различных структур, изменяющих поведение уже существующих объектов
Определяют алгоритмы и способы взаимодействия объектов между собой
2. Задачи какого рода решают поведенческие шаблоны проектирования?
Повседневные задачи: переадресация работы, обеспечение слабой связности системы и так далее
Создание различных структур, изменяющих поведение уже существующих объектов
Абстрагирование процесса создания экземпляров класса
Определяют алгоритмы и способы взаимодействия объектов между собой+
3. Задачи какого рода решают порождающие шаблоны проектирования?
Повседневные задачи: переадресация работы, обеспечение слабой связности системы и так далее
Абстрагирование процесса создания экземпляров класса+
Создание различных структур, изменяющих поведение уже существующих объектов
Определяют алгоритмы и способы взаимодействия объектов между собой
4. Задачи какого рода решают структурные шаблоны проектирования?
Определяют алгоритмы и способы взаимодействия объектов между собой
Создание различных структур, изменяющих поведение уже существующих объектов+
Повседневные задачи: переадресация работы, обеспечение слабой связности системы и так далее
Абстрагирование процесса создания экземпляров класса
5. Каким символом на диаграмме классов изображается тот факт, что атрибут имеет область видимости private? –
6. Каким символом на диаграмме классов изображается тот факт, что атрибут имеет область видимости protected?
#+
7. Каким символом на диаграмме классов изображается тот факт, что атрибут имеет бесконечную кратность?
*+
8. Каким символом на диаграмме классов изображается тот факт, что атрибут имеет область видимости public?
+
9. Верно ли то, что отношение композиции является частным случаем отношения агрегации?
Да+
Нет
10. Верно ли то, что существуют такие классы, которые могут иметь один и только один экземпляр?
Да+
Нет
11. Верно ли, что понятие «суперкласс» является синонимом родительского класса?
Да+
Нет
12. Верно ли, что понятия «вложенный класс» и «класс-член» являются синонимами?
Да
Нет+
13. Верно ли, что программист не может управлять сборкой мусора?
Да+
Нет
14. Верно ли, что концепция MVC включает в себя ровно три структурных составляющих: модель, вид и контроллер?
Да+
Нет
15. Верно ли, что наиболее общим отношением между классами является отношение зависимости?
Да+
Нет
16. Верно ли утверждение о том, что Java является декларативным языком программирования?
Да
Нет+
17. Верно ли утверждение о том, что Java является императивным языком программирования?
Да+
Нет
18. Верно ли, что Java позволяет создавать массив заранее известных величин?
Да+
Нет
19. Верно ли, что MVC позволяет визуализировать одни и те же данные разными способами без изменения модели?
Да+
Нет
20. Верно ли, что MVC позволяет подключать к одному виду несколько контроллеров?
Да+
Нет
21. Верно ли, что для создания десктруктора в Java используется блок finalize?
Да+
Нет
22. Верно ли, что один абстрактный класс не может являться родительским по отношению к другому абстрактному классу?
Да
Нет+
23. Верно ли, что абстрактный класс не может иметь экземпляров?
Да+
Нет
24. Верно ли, что абстрактный класс не может содержать реализаций методов?
Да
Нет+
25. Верно ли, что в активной модели MVC об изменениях данных представление оповещает контроллер?
Да
Нет+
26. Верно ли, что в пассивной модели MVC об изменениях данных представление оповещает контроллер?
Да+
Нет
27. Верно ли, что основная цель использование концепции MVC – разграничение логики работы и визуализации?
Да+
Нет
28. Верно ли, что основная цель использование концепции MVC – упрощение архитектуру приложения?
Да
Нет+
29. Верно ли, что отношение агрегации может применяться для изображения иерархических отношений между классами?
Да
Нет+
30. Как расшифровывается аббревиатура JRE?
Java Runtime Environment
31. Как расшифровывается аббревиатура JDK?
Java Development Kit
32. Как расшифровывается аббревиатура JVM?
Java Virtual Machine
33. Какая из парадигм программирования является ведующей в языке Java?
Объектно-ориентированная+
Процедурная
Событийно-ориентированная
Компонентно-ориентированная
34. Какая команда используется для выполения байт-кода?
java
javac+
javar
javarun
35. Какие группы шаблонов проектирования обычно выделяют?
Основные +
Порождающие +
Структурные +
Поведенческие+
36. Какие задачи позволяет решать ключевое слово final?
Создание ненаследуемых методов
Создание абстрактных классов
Создание непереопределяемых методов +
Создание неизменяемых полей +
Создание классов, которые не могут иметь наследников+
37. Какие из перечисленных требований должны выполняться для создания шаблона «неизменяемый объект» в Java?
Все поля класса должны иметь модификатор private
Все методы класса должны быть объявлены с модификатором static
Ссылка this не должна передаваться вовне во время конструирования объекта +
Класс должен быть объявлен с модификатором final+
38. Какие из перечисленных утверждений касательно высокоуровневых шаблонов проектирования верны?
Высокоуровневые шаблоны также называют архитектурными+
Высокоуровневые шаблоны являются универсальными решениями+
Несмотря на то, что высокоуровневые шаблоны являются универсальными, они учитывают специфические особенности конкретных языков программирования
Высокоуровневые шаблоны также называют идиомами
39. Какие из перечисленных утверждений касательно низкоуровневых шаблонов проектирования верны?
Низкоуровневые шаблоны учитывают специфику языка+
программирования +
Низкоуровневые шаблоны также называют идиомами
Низкоуровневые шаблоны являются универсальными
Низкоуровневые шаблоны не используются в прикладных разработках
40. Какие из предлагаемых утверждений верны?
Статическим называется член класса, доступ к которому возможен без создания экземпляра +
Создание статического метода возможно только при использовании ключевого слова static +
Статические поля являются общими для всех экземпляров класса+
Статические поля недоступны экземплярам класса
41. Какие типы связей используют в UML?
Зависимость +
Ассоциация +
Обобщение +
Реализация+
42. Какие типы сущностей выделяют в UML?
Поведенческие +
Аннотирующие +
Структурные +
Группирующие+
43. Каково основное назначение статического импорта?
Позволяет JVM эффективно перенаправлять запросы к классам из других пакетов, принимая во внимание их статическую структуру
Позволяет обращаться к статическим членам без явного указания класса-владельца+
Добавляет в область видимости описываемого класса все статические структуры из указанного пакета
44. Какое из перечисленных утверждений верно?
UML создан путем объединения всех существующих подходов проектирования того времени
UML создан на основе наиболее популярных подходов проектирования того времени+
UML является исторически первым языком моделирования
45. Какое ключевое слово может быть использовано для обращения экземпляра класса к самому себе?
this+
super
instanceof
own
46. Какое количество секций может содержать блок описания интерфейса на UML-диаграмме классов?
Одну +
Две+
Три
Четыре
47. Какое количество секций может содержать блок описания класса на UML-диаграмме классов?
Одну +
Три +
Две+
Четыре
48. Как расшифровывается аббревиатура UML?
Unified Modeling Language+
Universally Modeling Language
Unified Modern Language
Universally Modern Luggage
49. Что из перечисленного может быть отнесено к недостаткам шаблона «отложенная инициализация»?
Не позволяет явным образом задать порядок инициализации +
Вносит дополнительную задержку при обращении к объекту+
Порождает дополнительные ошибки при многопоточной работе
Замедляет инициализацию объектов
50. Что из перечисленного может быть отнесено к преимуществам шаблона «адаптер»?
Увеличивает степень независимости системы от сторонних библиотек+
Смена библиотек не требует изменения всей системы+
Ускорение начальной инициализации
Минимизация задержки при обращении
51. Что из перечисленного может быть отнесено к преимуществам шаблона «делегирование»?
Позволяет изменить поведение избегая наследования+
Повышает степень абстракции+
Положительно сказывается на времени обработки запроса системой
Сокращает число элементов в адресном пространстве
52. Что из перечисленного может быть отнесено к преимуществам шаблона «декоратор»?
Позволяет динамически добавлять объектам новые обязанности+
Упрощает структуру отдельных классов+
Сокращает количество имен в адресном пространстве
Не требует дополнительной иерархии классов
53. Что из перечисленного может быть отнесено к преимуществам шаблона «заместитель»?
Позволяет инициализировать объекты по требованию +
Позволяет придать объектам дополнительный функционал+
Сокращает время отклика системы
Не требует создания новых объектов
54. Что из перечисленного может быть отнесено к преимуществам шаблона «итератор»?
Позволяет поддерживать единообразный интерфейс для доступа к элементам системы+
Позволяет поддерживать несколько активных обходов коллекции+
Итератор не должен владеть всей информацией о коллекции
Не требует дополнительной иерархии классов
55. Что из перечисленного может быть отнесено к преимуществам шаблона «команда»?
Позволяет параметризировать объекты выполняемым действием+
Позволяет обрабатывать запросы как объекты+
Упрощает иерархию классов
Уменьшает время отклика системы
56. Что из перечисленного может быть отнесено к преимуществам шаблона «компоновщик»?
Упрощает архитектуру приложения +
Упрощает процедуру добавления новых компонентов в систему+
Позволяет единообразно работать с составными и примитивными структурами
Позволяет ограничить типы используемых компонентов
57. Что из перечисленного может быть отнесено к членам класса?
Вложенный класс
Метод+
Объект
Поле+
58. Что из перечисленного может быть отнесено к преимуществам шаблона «наблюдатель»?
Сокращает цепочку вызовов, необходимую для уведомления наблюдателей об изменении состояния объекта
Абстрагирует связность объекта и наблюдателей+
Позволяет обеспечить широковещательную рассылку уведомлений+
Повышает степень повторной используемости кода+
59. Что из перечисленного может быть отнесено к преимуществам шаблона «неизменяемый объект»?
Позволяет предотвратить ряд ошибок+
Может быть использован в качестве ключа коллекции +
Удобен для многопоточной работы+
Положительно сказывается на скорости работы
60. Что из перечисленного может быть отнесено к преимуществам шаблона «хранитель»?
Позволяет сохранять внутренне состояние объекта+
Упрощает структуру класса-владельца+
Не раскрывает детали реализации класса-владельца+
Позволяет восстанавливать состояние класса-владельца
61. Что из перечисленного может быть отнесено к преимуществам шаблона «цепочка ответственности»?
Гарантирует, что рано или поздно запрос будет обработан
Позволяет ослабить связи внутри системы+
Не требует дополнительной иерархии классов
Придает дополнительную гибкость при распределении обязанностей+
62. Что из перечисленного может быть отнесено к преимуществам шаблона «одиночка»?
Сокращение числа имен в глобальном адресном пространстве+
Предоставление глобальной точки доступа+
Ускорение начальной инициализации
Минимизация задержки при обращении в силу статической сущности
63. Что из перечисленного может быть отнесено к преимуществам шаблона «посредник»?
Централизовывает управление+
Обеспечивает слабую связность системы+
Упрощает протоколы взаимодействия между компонентами+
Повышает степень повторной используемости кода
64. Что из перечисленного может быть отнесено к преимуществам шаблона «прототип»?
Позволяет специфицировать новые объекты путем изменения значений+
Позволяет сократить иерархию классов+
Позволяет динамически конфигурировать приложение классами+
Значительно уменьшает время, необходимое на создание новых объектов
65. Что из перечисленного может быть отнесено к преимуществам шаблона «состояние»?
Изолирует логику работы от реализации+
Не требует дополнительных имен в адресном пространстве
Позволяет полностью скрыть информацию о классе-владельце
Позволяет избегать применения цепочек условных операторов+
66. Что из перечисленного может быть отнесено к преимуществам шаблона «стратегия»?
Позволяет оперировать семейством алгоритмов+
Предотвращает порождение большого числа подклассов
Сокращает цепочки условных операторов, реализующих сложное поведение системы+
Позволяет динамически выбирать реализацию алгоритма+
67. Что из перечисленного может быть отнесено к преимуществам шаблона «строитель»?
В сравнении с фабричным методом придает дополнительную гибкость процессу конструирования объектов+
Изолирует код конструирования объектов+
Позволяет изменять внутреннее представление объекта+
Не требует дополнительной иерархии классов
68. Что из перечисленного может быть отнесено к преимуществам шаблона «фабричный метод»?
Положительно сказывается на скорости работы
Позволяет устанавливать связь между параллельными иерархиями классов
Сокращает количество имен в адресном пространстве
Позволяет сделать код создания объектов более универсальным+
69. Что из перечисленного может быть отнесено к преимуществам шаблона «фасад»?
Изолирует клиентов от подсистем+
В большинстве случаев приводит к сокращению числа имен в адресном пространстве клиентов
Облегчает устройство системы+
Ограничивает доступ клиентов к подсистемам
70. Каким образом будет выглядеть команда для компиляции класса test, описанного в файле test.java?
javac test.java
71. Сколько байт в памяти ЭВМ занимается одна переменная типа char?
2
72. Как называется один из фундаментальных механизмов объектно-ориентированного программирования, позволяющий классу ограничивать доступ к своим членам?
Инкапсуляция
73. Как называется один из фундаментальных механизмов объектно-ориентированного программирования, позволяющий одному классу расширять функциональность другого, заимствуя при этом поля и методы?
Наследование
74. Как называется один из фундаментальных механизмов объектно-ориентированного программирования, позволяющий элементам с одинаковой спецификацией иметь различную реализацию? Полиморфизм
75. Как называется специализированный метод класса, предназначенный для создания нового экземпляра?
Конструктор
76. Как называется специализированный метод класса, предназначенный для уничтожения существующего экземпляра?
Деструктор
77. Какое ключевое слово используется для указания класса-родителя?
Super
78. Какое ключевое слово используется для указания того, что класс реализует интерфейс?
Implements
79. Какое название получил механизм, позволяющий JVM работать с примитивными типами данных как с объектами?
Автоупаковка
80. Какой вид будет иметь инструкция, добавляющая в область видимости описываемого класса все классы из пакета test?
import test.*;
81. Каким образом будет выглядеть инструкция, указывающая на принадлежность описываемого класса к пакету test, который в свою очередь является подпакетом класса bigtest?
package bigtest.test;
82. Какой вид будет иметь инструкция, добавляющая в область видимости описываемого класса класс test из пакета test?
import test.test;
83. Какой вид будет иметь инструкция, указывающая на принадлежность описываемого класса к пакету test?
package test;
84. С помощью какой команды может быть создан вектор с именем test из элементов типа TestEl?
Vector test = new Vector();
85. С помощью какой команды может быть создан массив с именем test из десяти элементов типа int?
int[] test = new int[10];
86. Как будет выглядеть команда для запуска класса Test, готовый байт код которого содержится в файле Test.class
java Test
87. Как называется организация, регулирующая развитие UML?
OMG+
ANSI
ACM
NASA
88. Что из перечисленного может быть отнесено к членам класса?
Вложенный класс
Метод+
Объект
Поле+
89. Что из перечисленного может быть отнесено к преимуществам шаблона «шаблонный метод»?
Помогает избегать дублирования повторяющихся конструкций+
Позволяет динамически варьировать поведение системы+
Позволяет оптимизировать передачу данных при вызове методов
Не требует дополнительной иерархии классов
Посредник
Посредник — это поведенческий паттерн проектирования, который позволяет уменьшить связанность множества классов между собой, благодаря перемещению этих связей в один класс-посредник.
Проблема
Предположим, что у вас есть диалог создания профиля пользователя. Он состоит из всевозможных элементов управления — текстовых полей, чекбоксов, кнопок.
Отдельные элементы диалога должны взаимодействовать друг с другом. Так, например, чекбокс «у меня есть собака» открывает скрытое поле для ввода имени домашнего любимца, а клик по кнопке отправки запускает проверку значений всех полей формы.
Прописав эту логику прямо в коде элементов управления, вы поставите крест на их повторном использовании в других местах приложения. Они станут слишком тесно связанными с элементами диалога редактирования профиля, которые не нужны в других контекстах. Поэтому вы сможете использовать либо все элементы сразу, либо ни одного.
Решение
Паттерн Посредник заставляет объекты общаться не напрямую друг с другом, а через отдельный объект-посредник, который знает, кому нужно перенаправить тот или иной запрос. Благодаря этому, компоненты системы будут зависеть только от посредника, а не от десятков других компонентов.
В нашем примере посредником мог бы стать диалог. Скорее всего, класс диалога и так знает, из каких элементов состоит, поэтому никаких новых связей добавлять в него не придётся.
Основные изменения произойдут внутри отдельных элементов диалога. Если раньше при получении клика от пользователя объект кнопки сам проверял значения полей диалога, то теперь его единственной обязанностью будет сообщить диалогу о том, что произошёл клик. Получив извещение, диалог выполнит все необходимые проверки полей. Таким образом, вместо нескольких зависимостей от остальных элементов кнопка получит только одну — от самого диалога.
Чтобы сделать код ещё более гибким, можно выделить общий интерфейс для всех посредников, то есть диалогов программы. Наша кнопка станет зависимой не от конкретного диалога создания пользователя, а от абстрактного, что позволит использовать её и в других диалогах.
Таким образом, посредник скрывает в себе все сложные связи и зависимости между классами отдельных компонентов программы. А чем меньше связей имеют классы, тем проще их изменять, расширять и повторно использовать.
Аналогия из жизни
Пилоты садящихся или улетающих самолётов не общаются напрямую с другими пилотами. Вместо этого они связываются с диспетчером, который координирует действия нескольких самолётов одновременно. Без диспетчера пилотам приходилось бы все время быть начеку и следить за всеми окружающими самолётами самостоятельно, а это приводило бы к частым катастрофам в небе.
Важно понимать, что диспетчер не нужен во время всего полёта. Он задействован только в зоне аэропорта, когда нужно координировать взаимодействие многих самолётов.
Структура
- Компоненты — это разнородные объекты, содержащие бизнес-логику программы. Каждый компонент хранит ссылку на объект посредника, но работает с ним только через абстрактный интерфейс посредников. Благодаря этому, компоненты можно повторно использовать в другой программе, связав их с посредником другого типа.
- Посредник определяет интерфейс для обмена информацией с компонентами. Обычно хватает одного метода, чтобы оповещать посредника о событиях, произошедших в компонентах. В параметрах этого метода можно передавать детали события: ссылку на компонент, в котором оно произошло, и любые другие данные.
- Конкретный посредник содержит код взаимодействия нескольких компонентов между собой. Зачастую этот объект не только хранит ссылки на все свои компоненты, но и сам их создаёт, управляя дальнейшим жизненным циклом.
- Компоненты не должны общаться друг с другом напрямую. Если в компоненте происходит важное событие, он должен оповестить своего посредника, а тот сам решит — касается ли событие других компонентов, и стоит ли их оповещать. При этом компонент-отправитель не знает кто обработает его запрос, а компонент-получатель не знает кто его прислал.
Псевдокод
В этом примере Посредник помогает избавиться от зависимостей между классами различных элементов пользовательского интерфейса: кнопками, чекбоксами и надписями.
По реакции на действия пользователей элементы не взаимодействуют напрямую, а всего лишь уведомляют посредника о том, что они изменились.
Посредник в виде диалога авторизации знает, как конкретные элементы должны взаимодействовать. Поэтому при получении уведомлений он может перенаправить вызов тому или иному элементу.
// Общий интерфейс посредников. interface Mediator is method notify(sender: Component, event: string) // Конкретный посредник. Все связи между конкретными // компонентами переехали в код посредника. Он получает // извещения от своих компонентов и знает, как на них // реагировать. class AuthenticationDialog implements Mediator is private field title: string private field loginOrRegisterChkBx: Checkbox private field loginUsername, loginPassword: Textbox private field registrationUsername, registrationPassword, registrationEmail: Textbox private field okBtn, cancelBtn: Button constructor AuthenticationDialog() is // Здесь нужно создать объекты всех компонентов, подав // текущий объект-посредник в их конструктор. // Когда что-то случается с компонентом, он шлёт посреднику // оповещение. После получения извещения посредник может // либо сделать что-то самостоятельно, либо перенаправить // запрос другому компоненту. method notify(sender, event) is if (sender == loginOrRegisterChkBx and event == "check") if (loginOrRegisterChkBx.checked) title = "Log in" // 1. Показать компоненты формы входа. // 2. Скрыть компоненты формы регистрации. else title = "Register" // 1. Показать компоненты формы регистрации. // 2. Скрыть компоненты формы входа. if (sender == okBtn && event == "click") if (loginOrRegister.checked) // Попробовать найти пользователя с данными из // формы логина. if (!found) // Показать ошибку над формой логина. else // 1. Создать пользовательский аккаунт с данными // из формы регистрации. // 2. Авторизировать этого пользователя. // . // Классы компонентов общаются с посредниками через их общий // интерфейс. Благодаря этому одни и те же компоненты можно // использовать в разных посредниках. class Component is field dialog: Mediator constructor Component(dialog) is this.dialog = dialog method click() is dialog.notify(this, "click") method keypress() is dialog.notify(this, "keypress") // Конкретные компоненты не связаны между собой напрямую. У них // есть только один канал общения — через отправку уведомлений // посреднику. class Button extends Component is // . class Textbox extends Component is // . class Checkbox extends Component is method check() is dialog.notify(this, "check") // .
Применимость
Когда вам сложно менять некоторые классы из-за того, что они имеют множество хаотичных связей с другими классами.
Посредник позволяет поместить все эти связи в один класс, после чего вам будет легче их отрефакторить, сделать более понятными и гибкими.
Когда вы не можете повторно использовать класс, поскольку он зависит от уймы других классов.
После применения паттерна компоненты теряют прежние связи с другими компонентами, а всё их общение происходит косвенно, через объект-посредник.
Когда вам приходится создавать множество подклассов компонентов, чтобы использовать одни и те же компоненты в разных контекстах.
Если раньше изменение отношений в одном компоненте могли повлечь за собой лавину изменений во всех остальных компонентах, то теперь вам достаточно создать подкласс посредника и поменять в нём связи между компонентами.
Шаги реализации
- Найдите группу тесно переплетённых классов, отвязав которые друг от друга, можно получить некоторую пользу. Например, чтобы повторно использовать их код в другой программе.
- Создайте общий интерфейс посредников и опишите в нём методы для взаимодействия с компонентами. В простейшем случае достаточно одного метода для получения оповещений от компонентов. Этот интерфейс необходим, если вы хотите повторно использовать классы компонентов для других задач. В этом случае всё, что нужно сделать — это создать новый класс конкретного посредника.
- Реализуйте этот интерфейс в классе конкретного посредника. Поместите в него поля, которые будут содержать ссылки на все объекты компонентов.
- Вы можете пойти дальше и переместить код создания компонентов в класс посредника, после чего он может напоминать фабрику или фасад.
- Компоненты тоже должны иметь ссылку на объект посредника. Связь между ними удобнее всего установить, подавая посредника в параметры конструктора компонентов.
- Измените код компонентов так, чтобы они вызывали метод оповещения посредника, вместо методов других компонентов. С противоположной стороны, посредник должен вызывать методы нужного компонента, когда получает оповещение от компонента.
Преимущества и недостатки
- Устраняет зависимости между компонентами, позволяя повторно их использовать.
- Упрощает взаимодействие между компонентами.
- Централизует управление в одном месте.
- Посредник может сильно раздуться.
Отношения с другими паттернами
- Цепочка обязанностей, Команда, Посредник и Наблюдатель показывают различные способы работы отправителей запросов с их получателями:
- Цепочка обязанностей передаёт запрос последовательно через цепочку потенциальных получателей, ожидая, что какой-то из них обработает запрос.
- Команда устанавливает косвенную одностороннюю связь от отправителей к получателям.
- Посредник убирает прямую связь между отправителями и получателями, заставляя их общаться опосредованно, через себя.
- Наблюдатель передаёт запрос одновременно всем заинтересованным получателям, но позволяет им динамически подписываться или отписываться от таких оповещений.
- Фасад создаёт упрощённый интерфейс к подсистеме, не внося в неё никакой добавочной функциональности. Сама подсистема не знает о существовании Фасада. Классы подсистемы общаются друг с другом напрямую.
- Посредник централизует общение между компонентами системы. Компоненты системы знают только о существовании Посредника, у них нет прямого доступа к другим компонентам.
Примеры реализации паттерна
Не втыкай в транспорте
Лучше почитай нашу книгу о паттернах проектирования.
Теперь это удобно делать даже во время поездок в общественном транспорте.
Эта статья является частью нашей электронной книги Погружение в Паттерны Проектирования.
- Премиум контент
- Книга о паттернах
- Курс по рефакторингу
- Введение в рефакторинг
- Чистый код
- Технический долг
- Когда рефакторить
- Как рефакторить
- Раздувальщики
- Длинный метод
- Большой класс
- Одержимость элементарными типами
- Длинный список параметров
- Группы данных
- Операторы switch
- Временное поле
- Отказ от наследства
- Альтернативные классы с разными интерфейсами
- Расходящиеся модификации
- Стрельба дробью
- Параллельные иерархии наследования
- Комментарии
- Дублирование кода
- Ленивый класс
- Класс данных
- Мёртвый код
- Теоретическая общность
- Завистливые функции
- Неуместная близость
- Цепочка вызовов
- Посредник
- Неполнота библиотечного класса
- Составление методов
- Извлечение метода
- Встраивание метода
- Извлечение переменной
- Встраивание переменной
- Замена переменной вызовом метода
- Расщепление переменной
- Удаление присваиваний параметрам
- Замена метода объектом методов
- Замена алгоритма
- Перемещение метода
- Перемещение поля
- Извлечение класса
- Встраивание класса
- Сокрытие делегирования
- Удаление посредника
- Введение внешнего метода
- Введение локального расширения
- Самоинкапсуляция поля
- Замена простого поля объектом
- Замена значения ссылкой
- Замена ссылки значением
- Замена поля-массива объектом
- Дублирование видимых данных
- Замена однонаправленной связи двунаправленной
- Замена двунаправленной связи однонаправленной
- Замена магического числа символьной константой
- Инкапсуляция поля
- Инкапсуляция коллекции
- Замена кодирования типа классом
- Замена кодирования типа подклассами
- Замена кодирования типа состоянием/стратегией
- Замена подкласса полями
- Разбиение условного оператора
- Объединение условных операторов
- Объединение дублирующихся фрагментов в условных операторах
- Удаление управляющего флага
- Замена вложенных условных операторов граничным оператором
- Замена условного оператора полиморфизмом
- Введение Null-объекта
- Введение проверки утверждения
- Переименование метода
- Добавление параметра
- Удаление параметра
- Разделение запроса и модификатора
- Параметризация метода
- Замена параметра набором специализированных методов
- Передача всего объекта
- Замена параметра вызовом метода
- Замена параметров объектом
- Удаление сеттера
- Сокрытие метода
- Замена конструктора фабричным методом
- Замена кода ошибки исключением
- Замена исключения проверкой условия
- Подъём поля
- Подъём метода
- Подъём тела конструктора
- Спуск метода
- Спуск поля
- Извлечение подкласса
- Извлечение суперкласса
- Извлечение интерфейса
- Свёртывание иерархии
- Создание шаблонного метода
- Замена наследования делегированием
- Замена делегирования наследованием
- Введение в паттерны
- Что такое Паттерн?
- История паттернов
- Зачем знать паттерны?
- Критика паттернов
- Классификация паттернов
- Фабричный метод
- Абстрактная фабрика
- Строитель
- Прототип
- Одиночка
- Адаптер
- Мост
- Компоновщик
- Декоратор
- Фасад
- Легковес
- Заместитель
- Цепочка обязанностей
- Команда
- Итератор
- Посредник
- Снимок
- Наблюдатель
- Состояние
- Стратегия
- Шаблонный метод
- Посетитель
- C#
- C++
- Go
- Java
- PHP
- Python
- Ruby
- Rust
- Swift
- TypeScript