- •Что понимается под качеством по ? Связь внешних и внутренних факторов качества.
- •Что понимается под качеством исходного кода?
- •Перечислите желательные внутренние характеристики проекта (т.Е. Внутренние факторы качества исходного кода)?
- •Приведите примеры типичных неправильных архитектурных решений в исходном коде.
- •Желательные характеристики проекта
- •Для чего нужны/используются паттерны проектирования?
- •Дайте определение паттернам проектирования.
- •Перечислите и дайте краткую характеристику основным элементам паттерна в понимании GoF.
- •Описание паттерна (GoF)
- •Какие существуют основные механизмы повторного использования в объектно-ориентированном программировании?
- •Omt, описание классов
- •Перечислите, какие связи между классами выделяются в графической нотации omt, как они обозначаются?
- •Поясните разницу между агрегированием и осведомленностью.
- •Опишите графическую нотацию omt для диаграмм взаимодействия.
- •В чем заключается принцип программирования в соответствии с интерфейсом, а не реализацией?
- •Изобразите диаграмму классов для паттерна «Абстрактная фабрика».
- •Как связаны между собой паттерны «Фабричный метод» и «Абстрактная фабрика»?
- •Опишите на языке c# несколько классов/интерфейсов, в совокупности реализующих паттерн «Абстрактная фабрика».
- •В каких ситуациях следует использовать паттерн «Прототип»? с помощью каких средств в .Net можно реализовать данный паттерн?
- •В каких ситуациях следует использовать паттерн «Заместитель»?
- •Придумайте пример конкретной задачи, когда целесообразно было бы использовать паттерн «Состояние». Изобразите диаграмму классов для данного примера.
- •Опишите на языке c# несколько классов/интерфейсов, в совокупности реализующих паттерн «Стратегия».
- •Что общего и в чем отличие между паттернами «Состояние» и «Стратегия»?
- •Изобразите диаграмму классов для паттерна «Шаблонный метод».
- •В каких ситуациях следует использовать паттерн «Посетитель»?
- •Напишите фрагмент/фрагменты кода на языке c#, соответствующего диаграмме взаимодействия, представленной на рисунке:
Что общего и в чем отличие между паттернами «Состояние» и «Стратегия»?
Оба определяют общий интерфейс для различных действий, логика которых может различаться в зависимости от состояний объекта или внешних условий. Разница в том, что Стратегия определяется единожды для объекта, а состояние может меняться, причем менять его может сам объект. //если честно, то разницы никакой
Изобразите диаграмму классов для паттерна «Шаблонный метод».
Шаблонный метод определяет основу алгоритма и позволяет подклассам переопределить некоторые шаги алгоритма, не изменяя его структуру в целом.
В каких ситуациях следует использовать паттерн «Посетитель»?
Описывает операцию, выполняемую с каждым объектом из некоторой структуры. Паттерн посетитель позволяет определить новую операцию, не изменяя классы этих объектов. Используйте паттерн посетитель, когда: а в структуре присутствуют объекты многих классов с различными интерфейсами и вы хотите выполнять над ними операции, зависящие от конкретных классов; а над объектами, входящими в состав структуры, надо выполнять разнообразные, не связанные между собой операции и вы не хотите ≪засорять≫ классы такими операциями. Посетитель позволяет объединить родственные операции, поместив их в один класс. Если структура объектов является общей длянескольких приложений, то паттерн посетитель позволит в каждое приложение включить только относящиеся к нему операции; а классы, устанавливающие структуру объектов, изменяются редко, но новые операции над этой структурой добавляются часто. При изменении классов, представленных в структуре, нужно будет переопределить интерфейсы всех посетителей, а это может вызвать затруднения. Поэтому если классы меняются достаточно часто, то, вероятно, лучше определить операции прямо в них.
Перед вами фрагмент кода на языке 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)
{…}
}Схема:
Какой паттерн/паттерны реализует код
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)
В каких паттернах может встретиться диаграмма классов (фрагмент диаграммы классов), как на рисунке (вместо SomeInterface, SimpleSomeClass и NotSimpleSomeClass могут быть вписаны любые названия)?
Компоновщик (Composite), Декоратор (Decorator)
В классической диаграмме этих компонентов вместо SomeIntarface название Component, вместо NotSimpleComponentClass – название паттерна
Опишите на языке 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)
{ /*...*/ }
}