Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОТВЕТЫ к экз по ООП.docx
Скачиваний:
4
Добавлен:
17.07.2019
Размер:
40.99 Кб
Скачать
  1. Полиморфизм

Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

Полиморфизм - многоформенность в Си++; механизм, позволяющий использовать одинаковые имена для сходных по смыслу действий и методов, относящихся к различным объектам (типам и классам). Это означает, что один и то же метод выполняется по разному для различных объектов.  Например, метод класса Музыкальных инструментов - PlayMusicForAnOrchestra - может быть определен как общим метод, который может использоваться с любой категорией инструментов. Этот метод написан таким образом, что не важно, какой именно инструмент получает задание играть, однако для классов, описывающих конкретные инструменты, данный метод должен быть переопределен (override), что даст возможность определить конкретные действия, учитывая особенности конкретного инструмента.

  1. Паттерны проектирования

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

Архитектура системы должна, с одной стороны, соответствовать решаемой задаче, с другой — быть достаточно общей, чтобы сделать возможным внесение изменений, которые могут потребоваться в будущем. Новички испытывают шок от количества возможных вариантов и нередко возвращаются к привычным, не объектно-ориентированного методикам, а опытным проектировщикам, как правило, удается создать хороший дизайн системы.

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

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

Применение паттернов (шаблонов) наряду с объектной технологией позволяет вывести процесс проектирования из области интуиции и представить систему на более высоком уровне абстракции — на уровне схем взаимодействия объектов, в результате чего система становится более прозрачной и понятной.

Все паттерны в соответствии с их назначением разделены на три группы: порождающие, структурные и паттерны поведения. Порождающие паттерны описывают способы создания объектов, структурные — схемы организации классов и объектов, а паттерны поведения определяют типичные схемы взаимодействия классов и объектов.

В каждой группе можно, в свою очередь, выделить два уровня, определяющих, применяется паттерн к классам или объектам. В табл.1 приведена классификация паттернов. Ниже приводится определение каждого паттерна, а далее — описание двух избранных паттернов для того, чтобы вы получили конкретное представление о наиболее простых паттернах.

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

Некоторые паттерны часто используются совместно. Например, компоновщик применяется с литератором или посетителем. Некоторые пaттepны представляют собой альтернативные решения так, прототип нередко можно использовать вместо абстрактной фабрики. Применение различных пaттеpнoв может привести к одному и тому же проектному решению, хотя изначально их назначение отличается. Например, защищающий заместитель может быть реализован точно так же, как декоратор.

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