Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ооп2.docx
Скачиваний:
8
Добавлен:
22.09.2019
Размер:
587.13 Кб
Скачать
  1. Что общего и в чем отличие между паттернами «Состояние» и «Стратегия»?

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

  1. Изобразите диаграмму классов для паттерна «Шаблонный метод».

Шаблонный метод определяет основу алгоритма и позволяет подклассам переопределить некоторые шаги алгоритма, не изменяя его структуру в целом.

  1. В каких ситуациях следует использовать паттерн «Посетитель»?

Описывает операцию, выполняемую с каждым объектом из некоторой структуры. Паттерн посетитель позволяет определить новую операцию, не изменяя классы этих объектов. Используйте паттерн посетитель, когда: а в структуре присутствуют объекты многих классов с различными интерфейсами и вы хотите выполнять над ними операции, зависящие от конкретных классов; а над объектами, входящими в состав структуры, надо выполнять разнообразные, не связанные между собой операции и вы не хотите ≪засорять≫ классы такими операциями. Посетитель позволяет объединить родственные операции, поместив их в один класс. Если структура объектов является общей длянескольких приложений, то паттерн посетитель позволит в каждое приложение включить только относящиеся к нему операции; а классы, устанавливающие структуру объектов, изменяются редко, но новые операции над этой структурой добавляются часто. При изменении классов, представленных в структуре, нужно будет переопределить интерфейсы всех посетителей, а это может вызвать затруднения. Поэтому если классы меняются достаточно часто, то, вероятно, лучше определить операции прямо в них.

  1. Перед вами фрагмент кода на языке C#, изобразите по данному фрагменту диаграмму классов. Старайтесь, чтобы абстрактные классы (подписаны курсивом) отличались от конкретных.

public class State {…}

public interface StateObject {…}

public interface IMaker

{

StateObject make(State state);

}

public class ProductAMaker: IMaker

{ StateObject make(State state)

{…}

}

public class ProductBMaker: IMaker

{ StateObject make(State state)

{…}

}Схема:

  1. Какой паттерн/паттерны реализует код

public class State {

}

public interface StateObject {

}

public interface IMaker {

StateObject make(State state);

}

public class ProductAMaker: IMaker {

StateObject make(State state) {

}

}

public class ProductBMaker: IMaker {

StateObject make(State state) {

}

}

Состояние (State)

  1. В каких паттернах может встретиться диаграмма классов (фрагмент диаграммы классов), как на рисунке (вместо SomeInterface, SimpleSomeClass и NotSimpleSomeClass могут быть вписаны любые названия)?

Компоновщик (Composite), Декоратор (Decorator)

В классической диаграмме этих компонентов вместо SomeIntarface название Component, вместо NotSimpleComponentClass – название паттерна

  1. Опишите на языке C# классы и интерфейсы SomeInterface, SimpleSomeClass и NotSimpleSomeClass так, чтобы они соответствовали диаграмме

Реализация дерева с двумя типами элементов:

abstract class SomeInterFace

{

//...

public abstract void Add(SomeInterFace c);

public abstract void Display(int depth);

}

class NotSimpleSomeClass : SomeInterFace

{

private List<SomeInterFace> _children = new List<SomeInterFace>();

public override void Add(SomeInterFace component)

{

_children.Add(component);

}

public override void Display(int depth)

{ /*...*/ }

}

class SimpleSomeClass : SomeInterFace

{

public override void Add(SomeInterFace c)

{ /*...*/ }

public override void Display(int depth)

{ /*...*/ }

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]