
- •Что понимается под качеством по ? Связь внешних и внутренних факторов качества.
- •Что понимается под качеством исходного кода?
- •Перечислите желательные внутренние характеристики проекта (т.Е. Внутренние факторы качества исходного кода)?
- •Приведите примеры типичных неправильных архитектурных решений в исходном коде.
- •Желательные характеристики проекта
- •Для чего нужны/используются паттерны проектирования?
- •Дайте определение паттернам проектирования.
- •Перечислите и дайте краткую характеристику основным элементам паттерна в понимании GoF.
- •Описание паттерна (GoF)
- •Какие существуют основные механизмы повторного использования в объектно-ориентированном программировании?
- •Omt, описание классов
- •Перечислите, какие связи между классами выделяются в графической нотации omt, как они обозначаются?
- •Поясните разницу между агрегированием и осведомленностью.
- •Опишите графическую нотацию omt для диаграмм взаимодействия.
- •В чем заключается принцип программирования в соответствии с интерфейсом, а не реализацией?
- •Изобразите диаграмму классов для паттерна «Абстрактная фабрика».
- •Как связаны между собой паттерны «Фабричный метод» и «Абстрактная фабрика»?
- •Опишите на языке c# несколько классов/интерфейсов, в совокупности реализующих паттерн «Абстрактная фабрика».
- •В каких ситуациях следует использовать паттерн «Прототип»? с помощью каких средств в .Net можно реализовать данный паттерн?
- •В каких ситуациях следует использовать паттерн «Заместитель»?
- •Придумайте пример конкретной задачи, когда целесообразно было бы использовать паттерн «Состояние». Изобразите диаграмму классов для данного примера.
- •Опишите на языке c# несколько классов/интерфейсов, в совокупности реализующих паттерн «Стратегия».
- •Что общего и в чем отличие между паттернами «Состояние» и «Стратегия»?
- •Изобразите диаграмму классов для паттерна «Шаблонный метод».
- •В каких ситуациях следует использовать паттерн «Посетитель»?
- •Напишите фрагмент/фрагменты кода на языке c#, соответствующего диаграмме взаимодействия, представленной на рисунке:
Перечислите, какие связи между классами выделяются в графической нотации omt, как они обозначаются?
Инстанцирование
Наследование
Агрегирование
Осведомленность (ассоциация, использование)
Поясните разницу между агрегированием и осведомленностью.
И агрегирование, и осведомленность – способы композиции объектов и делегирования функциональности
Агрегирование Один объект владеет другим или несет за него ответственность
Агрегат и его составляющие имеют одинаковое время жизни
Осведомленность Одному объекту известно о другом объекте
Осведомленные объекты не несут никакой ответственности друг за друга
Осведомленность более слабое отношение, чем агрегирование
Опишите графическую нотацию omt для диаграмм взаимодействия.
Время на диаграммах взаимодействий откладывается сверху вниз
Сплошная вертикальная черта означает время жизни объекта, до момента создания объекта вертикальная линия идет пунктиром
Вертикальный прямоугольник говорит о том, что объект активен, т.е. обрабатывает какой-либо запрос (выполняет какой-либо метод)
Соглашение об именовании объектов такое же, как для диаграмм объектов
Запросы, посылаемые другим объектам (вызовы методов), обозначаются горизонтальной стрелкой, указывающей на объект получатель; имя запроса (метода) показывается над стрелкой
Запрос на создание объекта обозначается горизонтальной пунктирной стрелкой
Запрос объекта самому себе изображается стрелкой на этот же объект
В чем заключается принцип программирования в соответствии с интерфейсом, а не реализацией?
Взаимодействие объектов должно проходить строго через интерфейс, т.к. клиенту не нужно знать информацию о конкретных типах объектов
Такой подход может кардинально уменьшить число зависимостей между подсистемами
Но, т.к. клиенты не знают, объекты какого конкретного класса будут созданы, следовательно, самостоятельно создать эти объекты не могут; здесь приходят на помощь порождающие паттерны
Изобразите диаграмму классов для паттерна «Абстрактная фабрика».
Как связаны между собой паттерны «Фабричный метод» и «Абстрактная фабрика»?
Абстрактная фабрика реализуется с помощью фабричных методов.
Фабричный метод - является частным случаем абстрактной фабрики с одним видом продукта.
Разница лишь в том, что фабрика создает семейства (наборы) объектов
Опишите на языке c# несколько классов/интерфейсов, в совокупности реализующих паттерн «Абстрактная фабрика».
КОД:/* type1 of objects */
interface Type1
{ void DoIt();
}
class Type1Object1 : Type1
{ public void DoIt()
{
Console.WriteLine("type 1 object 1");
}
}
class Type1Object2 : Type1
{
public void DoIt()
{
Console.WriteLine("type 1 object 2");
}
} /* type2 of objects */
interface Type2
{ void DoIt();
}
class Type2Object1 : Type2
{ public void DoIt()
{
Console.WriteLine("type 2 object 1");
}
}
class Type2Object2 : Type2
{ public void DoIt()
{
Console.WriteLine("type 2 object 2");
}
} /* фабрики */
interface Factory
{
Type1 GetType1();
Type2 GetType2();
}
class ConcreteFactory1 : Factory
{
public Type1 GetType1()
{
return new Type1Object1();
}
public Type2 GetType2()
{
return new Type2Object1();
}
}
class ConcreteFactory2 : Factory
{
public Type1 GetType1()
{
return new Type1Object2();
}
public Type2 GetType2()
{ return new Type2Object2();
}
} //main program
class Program
{
static void Main(string[] args)
{
Factory factory = new ConcreteFactory2(); //определяем какой объет будет создаваться
Type1 obj1 = factory.GetType1();
Type2 obj2 = factory.GetType2();
obj1.DoIt();
obj2.DoIt();
Console.ReadLine();
}
}