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

  • Задает виды создаваемых объектов с помощью экземпляра-прототипа и создает новые объекты путем копирования этого прототипа

  • Используется когда/для:

инстанцируемые классы определяются во время выполнения, например с помощью динамической загрузки

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

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

  1. Опишите на языке C# код класса, реализующего паттерн «Одиночка».

public class Singleton {

private static Singleton instance;

private int singletonData=10;

protected Singleton() { // protected

}

public static Singleton Instance() {

if(instance==null)

instance=new Singleton();

return instance;

}

public int SingletonData {

get { return singletonData; }

}

}

  1. В чем заключается суть паттерна «Адаптер». Приведите пример данного паттерна в библиотеке .NET FCL.

  • Преобразует интерфейс одного класса в интерфейс другого, который ожидают клиенты

  • Адаптер обеспечивает совместную работу классов с несовместимыми интерфейсами, которая без него была бы невозможна.

Пример: TextReader, StreamReader, Stream из FCL

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

- Классы

- - Объекты

  1. Придумайте пример конкретной задачи, когда целесообразно было бы использовать паттерн «Декоратор». Изобразите диаграмму классов для данного примера.

Необходимо использовать объект, который будет либо отрисовывать границы (border), либо скроллинг (scroll). Независимо от того, какой объект будет создан, эти действия вызываются одним методом (draw). Для этого создается отдельный интерфейс Decorator с методами нужного компонента (VisualComponent), от него наследуются два типа объектов – ScrollDecorator и BorderDecorator, в каждом из которых нужный метод расширен по-своему

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

  1. Докажите, что классы UnmutableList, UnmutableSet и т.д. из практических задач на первую аттестацию реализуют паттерн «Заместитель». Какие классы в данных задачах с позиции паттерна «Заместитель» являются следующими участниками данного паттерна: Subject, RealSubject, Proxy?

Является суррогатом другого объекта и контролирует доступ к нему

Используется в случаях:

удаленный заместитель предоставляет локального представителя вместо объекта, находящегося в другом адресном пространстве;

виртуальный заместитель создает «тяжелые» объекты по требованию;

защищающий заместитель контролирует доступ к исходному объекту;

«умная» ссылка – это замена обычного указателя; позволяет выполнить дополнительные действия при доступе к объекту;

Классы UnmutableList, UnmutableMap и т.д. из 1-го практического задания – типичные заместители

Контролируют доступ к используемому объекту

  1. Объясните, в чем заключается суть паттерна «Цепочка обязанностей»?

Позволяет избежать привязки отправителя запроса к его получателю, давая шанс обработать запрос нескольким объектам

Связывает объекты-получатели в цепочку и передает запрос вдоль этой цепочки, пока его не обработают

  1. Объясните, в чем заключается суть паттерна «Команда»?

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

  1. С помощью каких языковых средств в языке C# поддерживается итераторы? Приведите фрагменты кода.

Итераторы могут быть обобщенными - IEnumerable<T>

foreach(Student student in studentGroup) { … }

Языковые средства для итерации по объектам итератора

public class StudentGroup {

public IEnumerable<Student> Students {

get {

for(int i=0; i<count; i++)

return yield students[i];

}

}

Языковые средства для упрощения создания итераторов

  1. Объясните, в чем заключается суть паттерна «Хранитель»?

  • Не нарушая инкапсуляции, фиксирует и выносит за пределы объекта его внутреннее состояние так, чтобы позднее можно было восстановить в нем объект

  1. С помощью каких языковых средств в языке C# реализуется паттерн наблюдатель? Приведите фрагменты кода.

  • Определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом и автоматически обновляются.

  • В языке C# этот паттерн может быть (не обязательно!!) реализован с помощью механизма событий (events). Например:

КОД:

/* event delegate */

delegate void EventDelegate(string str);

/* класс, за которым следим */

class Subject

{

public EventDelegate update;

private string name;

public string Name

{

get { return name; }

set { name = value; update(name); }

}

} /* класс, с помощью которого следим */

class Observer

{

public static void observe1(string str)

{

Console.WriteLine("changed to: "+str);

}

public static void observe2(string str)

{

Console.WriteLine("name changed to: " + str);

}

}

//main program

class Program

{

static void Main(string[] args)

{

Subject s = new Subject();

s.update += Observer.observe1;

s.update += Observer.observe2;

s.Name = "new_name";

Console.ReadLine();

}

}

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