- •1. Событийно-управляемое приложение: событие, типы событий, сообщение, обработчик, механизм обмена сообщениями, очередь сообщений.
- •3. Жизненный цикл объектов: создание, уничтожение, конструкторы, деструкторы. Автоматическое управление памятью. Утечка памяти. Создание объектов с помощью различных конструкторов.
- •4. Наследование, типы видимости, типы наследования. Композиция, агрегация, ассоциация, зависимость. Композиция или наследование, в чём отличие и в чём похожесть.
- •6. Полиморфизм: переопределение и перекрытие методов. Вызов унаследованных методов. Варианты реализации в разных языках. Виртуальный деструктор.
- •7. Приведение типов. Правила, цель, стандартные приемы. Самостоятельная реализация, варианты реализации в разных языках.
- •8.Grasp-паттерны: информационный эксперт, низкая связность, высокое зацепление. Антипаттерны.
- •Золотой молоток (Golden hammer)
- •9. Бесклассовое (прототипно-ориентированное) ооп
- •10. Множественное наследование, интерфейсы и примеси (mixins).
- •11. Делегирование, объектная шизофрения.
- •13. Solid – принципы: sol.
- •14. Solid – принципы: id.
- •15. Объектная интроспекция и рефлексия.
- •16. Язык uml (диаграммы классов, состояний, последовательностей).
- •17. Архитектура Model–View–Controller (mvc) и её варианты. Самый простой способ её нарушить и исправить.
- •17. Одинарная и двойная диспетчеризация.
- •17. Покажите, как с помощью паттерна Prototype можно создавать копии любых объектов, не зная о конкретном классе каждого объекта.
- •18. Требуется создать такой класс, для которого в приложении не может существовать больше одного экземпляра. Опишите ситуацию, в которой это может потребоваться и решение с помощью паттерна Singleton
- •20. Покажите, как с помощью паттерна Decorator динамически (во время выполнения программы) видоизменять поведение объектов.
- •22. Инкапсулируйте любое действие в программе в отдельный объект, и покажите, как паттерн Command позволяет при этом манипулировать такими объектами и реализовывать отмену действий.
- •25. Покажите, как с помощью паттерна Observer можно реализовать динамическую (в момент работы программы) подписку одних объектов на уведомления об изменении других объектов.
- •26. Покажите, как с помощью паттерна Strategy реализуются различные варианты реализации одной и той же функциональности объекта.
- •30. Требуется в имеющейся функциональной иерархии объектов динамически изменять внутреннюю реализацию любого объекта. Покажите, как это может быть сделано с помощью паттерна Bridge.
- •31. Покажите, каким образом с помощью паттерна Visitor можно добавить новую функциональность целой иерархии потомков одного базового класса, не изменив ни одного класса этой иерархии.
17. Архитектура Model–View–Controller (mvc) и её варианты. Самый простой способ её нарушить и исправить.
Model-View-Controller (MVC, «Модель-Представление-Контроллер», «Модель-Вид-Контроллер») — схема разделения данных приложения, пользовательского интерфейса и управляющей логики на три отдельных компонента: модель, представление и контроллер — таким образом, что модификация каждого компонента может осуществляться независимо.
Модель (Model) предоставляет данные и реагирует на команды контроллера, изменяя своё состояние.
Представление (View) отвечает за отображение данных модели пользователю, реагируя на изменения модели.
Контроллер (Controller) интерпретирует действия пользователя, оповещая модель о необходимости изменений.
17. Одинарная и двойная диспетчеризация.
15. Покажите, как с помощью паттерна Abstract Factory можно реализовать сохранение и загрузку произвольных объектов из контейнера в текстовый файл, так, что при этом сам контейнер ничего не будет знать о классах объектов, которые он создает и загружает. Предположим, что наследоваться от контейнера нельзя, поэтому Factory Method неприменим.
Абстрактная фабрика — это порождающий паттерн проектирования, который позволяет создавать семейства связанных объектов, не привязываясь к конкретным классам создаваемых объектов.
По сути является вынесенным в отдельный класс фабричным методом.
class Food(){ public : virtual void prepare() = NULL;};
class MeatFood : public Food{ public : virtual void prepare () {printf (“prepare”);}};
class FoodFactory { public : virtual Food* createFood() = NULL;};
class MeatFoodFactory() : public FoodFactory{ public : virtual Food* createFood(){ return new MeatFood;}};
int main(){ FoodFactory * factory; factory = new MeatFoodFactory(); Food *food = factory->createFood(); }
16. Покажите, как с помощью паттерна Factory Method можно реализовать сохранение и загрузку произвольных объектов из контейнера в текстовый файл, так, что при этом сам контейнер ничего не будет знать о классах объектов, которые он создает и загружает.
Фабричный метод — это порождающий паттерн проектирования, который решает проблему создания различных продуктов, без указания конкретных классов продуктов.
class
Product {public:
virtual ~Product() {}
virtual std::string Operation() const = 0;
};
class ConcreteProduct1 : public Product {
public:
std::string Operation() const override {
return "{Result of the ConcreteProduct1}";
}
};
class Creator {
public:
virtual ~Creator(){};
virtual Product* FactoryMethod() const = 0;
string SomeOperation() const {
// Вызываем фабричный метод, чтобы получить объект-продукт.
Product* product = this->FactoryMethod();
// Далее, работаем с этим продуктом.
string result = "Creator: The same creator's code has just worked with " + product->Operation();
delete product;
return result;
}
};
class ConcreteCreator1 : public Creator {
public:
Product* FactoryMethod() const override {
return new ConcreteProduct1();
}
};
void ClientCode(const Creator& creator) {
std::cout << "Client: I'm not aware of the creator's class, but it still works.\n"
<< creator.SomeOperation() << std::endl;
}
int main() {
std::cout << "App: Launched with the ConcreteCreator1.\n";
Creator* creator = new ConcreteCreator1();
ClientCode(*creator);
std::cout << std::endl;
delete creator;
return 0;
}
