
- •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 можно добавить новую функциональность целой иерархии потомков одного базового класса, не изменив ни одного класса этой иерархии.
1. Событийно-управляемое приложение: событие, типы событий, сообщение, обработчик, механизм обмена сообщениями, очередь сообщений.
Событийно-управляемое приложение представляет собой блоки команд, которые вызываются как реакции на события. Всё, что происходит в приложении происходит как реакция на какие-либо события.
Событие — это случай, происходящий в программе или в системе, на что может понадобиться реакция. Оно характеризуется моментом времени (дождь идет – не событие, а дождь начался – событие). У каждого объекта есть целый список событий, которые могут произойти. Каждое событие передает информацию обработчику: объект, который вызвал событие и специфические данные такие как номер нажатой клавиши, координаты мыши и тд.
Функция, которая выполняется при событии – обработчик события. Обработчик события – кусок кода, который привязан к определенному событию определенного объекта и автоматически выполняется тогда, когда происходит это событие этого объекта.
Приходящие обработчику сообщения ставятся в очередь и будут обработаны только после того, как он выполнит необходимые действия для пришедших ранее сообщений. Механизм обмена сообщениями реализован через методы. Полученное адресатом сообщение вызывает у него соответствующие методы. Объект, отправляющий сообщение, может не знать, способен ли получатель его обработать. В отдельных случаях сообщения требуют ответа.
Типы событий:
События ввода-вывода: нажатие на клавишу, нажатие мыши;
Системные события: изменения размеров окна, таймер;
Пользовательские события: нажатие на кнопку.
2. Основные понятия ООП: значение, тип, выражение, переменная, указатель, объект реального мира, модель, программный объект, абстрагирование, свойство, атрибут, класс, экземпляр. Активность объектов, методы, сравнение метода и функции, принимающей объект. Синтаксис объявления классов. Синтаксис и семантика создания объектов, обращения к свойствам и методам объектов. Инкапсуляция, типы видимости атрибутов и методов.
Значение - ответ на вопрос или результат вычислений(его нельзя вычислять дальше).
Тип - множество значений, «похожих» друг на друга тем, что они все имеют одинаковую природу, одинаковые единицы измерений, могут являться результатами одних и тех же вычислений и к которым могут применяться одни и те же операции. Таким образом, любое значение принадлежит какому-то типу.
Выражение - построенная по правилам ЯП синтаксическая конструкция, которую можно вычислять, упрощать, и в результате этого вычисления, возможно, получить значение.
Переменная - область в памяти, имеющая имя и хранящая значение, которое, возможно, будет изменяться в процессе работы программы. Переменная тоже имеет тип.
Указатель - специальная переменная, хранящая адрес какой-то другой области памяти.
Ссылка - альтернативное имя для существующей переменной или для какой-то безымянной области памяти.
Указатели и ссылки - разные по смыслу и реализации понятия, необходимые для организации непрямого доступа, косвенной адресации.
Объект реального мира — это нечто, что мы можем воспринимать нашими органами чувств (видеть, осязать) как единое целое, отделённое от всего остального. Окно - объект, рама окна - объект, но верхняя часть окна - вряд ли объект, потому что сложно сказать, где начало того конца, которым оканчивается начало!
Модель – совокупность свойств объекта реального мира, значимых для разрабатываемой программной системы (у каждого объекта существуют свойства, которыми можно пренебречь).
Программный объект - программная модель объекта реального мира, абстракция какой-либо сущности
Абстрагирование - выделение нужных свойств, упрощение, выделение только важных свойств.
Свойство - (1, объекта реального мира) — характеристика объекта, какое-либо его качество; (2, программное) — способ доступа ко внутреннему состоянию объекта, имитирующий переменную некоторого типа, но в действительности реализованный через вызов функции (есть, например, в С#).
Атрибут - (1, программное) — поле класса, переменная, связанная с классом или объектом; (2, объекта реального мира) — свойство объекта, необходимое для его идентификации.
Класс – Множество объектов, с одинаковыми атрибутами. Абстрактный тип данных.
Экземпляр - объект класса, имеющий определенное состояние.
Активность объектов - возможность объектов выполнять действия, в т.ч. и над собой; объект может содержать различные методы, выполняющие различные вычисления и другие действия внутри самого себя.
Методы - процедуры и/или функции, принадлежащие некоторому классу или объекту. Методы нужны для избавления от повторения кода для часто используемых инструкций, и чтобы код, который изменяет свойства класса, был написан внутри класса.
Сравнение методов и функции, принимающий объект – метод принадлежит какому-либо классу и тесно связан с ним, он хранится вместе с классом и не требует в качестве аргумента класс. Функция же может хранится в любом месте кода и должна принимать объект в качестве аргумента, чтобы как-то с ним взаимодействовать.
Синтаксис объявления классов –
class Point{ private: int x, int y; public: Point(){ x=0; y=0; } Point(int x, int y){
this->x=x; this->y=y; } Point(const Point &p){ x=p.x; y=p.x; } ~Point(){ } void mode (int dx, int dy){ x=x+dx; y = y +dy; }
};
class Point3D : public Point{
Point3D(){ z=0;} Point3D(int x, int y, int z) : Point(x, y) { this.x = x; }
};
Синтаксис и семантика создания объектов –
Point p;
Point *p1 = new Point;
Обращение к свойствам и методам объектов –
p.x = 1; для переменных объектов p1->x = 2; для переменных указателей
(*p1).x = 3; для переменных указателей p.mode(2,4); p1->mode(2,5); cx
Инкапсуляция - Объединение данных, относящихся к одному объекту и функций, которые эти данные обрабатывают в одном месте. А также сокрытие внутреннего содержимого объекта от внешнего интерфейса.
Типы видимости атрибутов и методов — уровни доступности элементов объекта другим объектам:
● private (приватный) элемент доступен только внутри класса; используется для полного скрытия свойств и методов;
● protected (защищенный) элемент доступен внутри класса и классов-потомков;
● public (публичный) элемент доступен отовсюду, независимо от иерархии классов.
Инкапсуляция и сокрытие нужны для изоляции внутреннего содержимого объекта от второстепенных элементов и для снижения количества ошибок во время работы с объектом.