
- •Билет 1. Время жизни объектов. Связь с типами памяти и областями видимости
- •Билет 2. Области видимости. Связь с временем жизни и типами памяти.
- •Билет №3. Принципы ооп: абстрагирование, инкапсуляция, иерархичность, модульность
- •Билет №4.Классы и объекты, Члены классов. Статические члены классов.
- •Класс - принципиально новый тип данных, который создается программистом
- •Билет №5. Интерфейс и реализация. Чисто абстрактные классы. Интерфейс как ответственность (контракт)
- •Билет №6. Иерархии в объектно-ориентированной системе
- •Билет №7. Полиморфизм
- •Билет №9. Конструкторы – типы, использование. Деструкторы
- •Билет №10.Наследование. Область видимости. Разрешение имен.
- •Билет 11. Виртуальные методы, конструкторы, деструкторы и наследование
- •Билет 12. Инкапсуляция. Модификаторы доступа. Друзья класса
- •Билет №13. Перегрузка операторов. Общие правила.
- •Билет №14. Перегрузка операторов. Арифметические операторы
- •Билет №17. Шаблоны
- •Билет №18.Контейнеры и итераторы. Контейнеры и итераторы stl
- •Vector – поддерживает эффективный случайный доступ к элементам, добавление и удаление из хвоста последовательности
- •Билет №19. Обработка ошибок: исключения. Захват и освобождение ресурса. Когда нужно использовать механизм исключений.
- •Билет №20.Сигнатура методов: передача и возврат объектов.
- •Билет №23. Диаграмма последовательности uml
- •Объекты
- •Линия жизни объекта
- •Фокус управления
- •Сообщения
- •Билет №24. Модульность, связность и связанность в оо системах
- •Interface Segregation Principle (принцип разделения (сегрегация) интерфейсов)
- •Ничего лишнего всё в своё время
Билет 1. Время жизни объектов. Связь с типами памяти и областями видимости
Время жизни объектов
Время жизни объекта — интервал времени выполнения программы, в течение которого объект существует в памяти
Время жизни объекта:
- Глобальное - время работы программы (при этом не обязательно всегда видима)
- Локальное - время выполнения блока (при новом входе в блок обновляется)
Время жизни функций – глобальное
Область видимости
Область видимости переменной или функции — часть текста программы, в которой эта переменная или функция может быть использована
Области видимости переменной:
- Локальная — в блоке (и вложенных блоках)
- Файловая — в файле с места объявления
- Глобальная — межфайловая при объявлениях extern
Видимость функций:
- Файловая, с момента описания или объявления прототипа
- Функция может быть описана в другом файле ( должна быть объявлена как extern)
Типы памяти
Статическая память
- Для переменных, объявленных вне функций или с модификатором static
- Время жизни == время выполнения программы
Автоматическая память (стэк)
- Для переменных внутри функций и блоков (без static)
- Время жизни - блок
Динамическая память (куча)
- Выделяется по запросу
- Время жизни – от момента выделения с помощью new до момента освобождения с помощью delete
Билет 2. Области видимости. Связь с временем жизни и типами памяти.
Область видимости
Область видимости переменной или функции — часть текста программы, в которой эта переменная или функция может быть использована
Области видимости переменной:
- Локальная — в блоке (и вложенных блоках)
- Файловая — в файле с места объявления
- Глобальная — межфайловая при объявлениях extern
Видимость функций:
- Файловая, с момента описания или объявления прототипа
- Функция может быть описана в другом файле ( должна быть объявлена как extern)
Время жизни объектов
Время жизни объекта — интервал времени выполнения программы, в течение которого объект существует в памяти
Время жизни объекта:
- Глобальное - время работы программы (при этом не обязательно всегда видима)
- Локальное - время выполнения блока (при новом входе в блок обновляется)
Время жизни функций – глобальное
Типы памяти
Статическая память
- Для переменных, объявленных вне функций или с модификатором static
- Время жизни == время выполнения программы
Автоматическая память (стэк)
- Для переменных внутри функций и блоков (без static)
- Время жизни - блок
Динамическая память (куча)
- Выделяется по запросу
- Время жизни – от момента выделения с помощью new до момента освобождения с помощью delete
Билет №3. Принципы ооп: абстрагирование, инкапсуляция, иерархичность, модульность
Абстрагирование – выделение существенных характеристик некоторого объекта, которые отличают его от всех других видов объектов и четко определяют его концептуальные границы с точки зрения дальнейшего рассмотрения и анализа
Абстра́кция в объектно-ориентированном программировании — это существенные характеристики объекта, которые отличают его от всех других объектов, четко определяя его концептуальные границы. Основная идея состоит в том, чтобы отделить способ использования составных объектов данных от деталей их реализации в виде более простых объектов, подобно тому, как функциональная абстракция разделяет способ использования функции и деталей её реализации в терминах более примитивных функций (Данные обрабатываются функцией высокого уровня с помощью вызова функций низкого уровня).
Такой подход является основой объектно-ориентированного программирования. Это позволяет работать с объектами, не вдаваясь в особенности их реализации. В каждом конкретном случае применяется тот или иной подход: инкапсуляция, полиморфизм или наследование. Например, при необходимости обратиться к скрытым данным объекта, следует воспользоваться инкапсуляцией, создав, так называемую, функцию доступа или свойство.
Инкапсуляция – объединение данных (атрибутов) и поведения (операций) в рамках класса
Инкапсуля́ция — свойство языка программирования, позволяющее объединить данные и код в объект и скрыть реализацию объекта от пользователя (прикладного программиста). При этом пользователю предоставляется только спецификация (интерфейс) объекта. Пользователь может взаимодействовать с объектом только через этот интерфейс. Реализуется с помощью директив: public, private, protected.
Инкапсуляция — один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с абстракцией, полиморфизмом и наследованием).
Предостережение: Одна из наиболее распространенных ошибок — делать сокрытие реализации только ради сокрытия. Целями, достойными усилий, являются: предельная локализация изменений при необходимости таких изменений, прогнозируемость изменений (какие изменения в коде надо сделать для заданного изменения функциональности) и прогнозируемость последствий изменений.
Образ в пример: ложка, опущенная в стакан, не меняет его свойств и не становится частью стакана, хотя и помогает пить из него чай; в то же время, сахар, растворенный в чае с помощью ложки, делает его сладким.
Часто инкапсуляция может быть достигнута простейшими организационными мерами: знание того, что «вот так-то делать нельзя» иногда является самым эффективным средством инкапсуляции!
class A
{
private:
int a,b; //скрытые свойства
void DoSomething(); //скрытый метод.
public:
int ReturnSomething(); //открытый интерфейс
};
Класс А инкапсулирует свойства a, b и метод DoSomething, представляя внешний интерфейс ReturnSomething.
Модульность – свойство системы, связанное с возможностью ее декомпозиции на ряд внутренне связных, но слабо связанных между собой модулей
Модульность — в языках программирования — принцип, согласно которому программное средство (ПС, программа, библиотека, web-приложение и др.) разделяется на отдельные именованные сущности, называемые модулями. Модульность часто является средством упрощения задачи проектирования ПС и распределения процесса разработки ПС между группами разработчиков. При разбиении ПС на модули для каждого модуля указывается реализуемая им функциональность, а также связи с другими модулями.
Иерархия - ранжированная или упорядоченная система абстракций. Принцип иерархичности предполагает использование иерархии при разработке программных систем. В ООП используются два вида иерархии. Иерархия «целое/часть» - показывает, что некоторые абстракции включены в рассматриваемую абстракцию как ее части, например, лампа состоит из цоколя, нити накаливания и колбы. Этот вариант иерархии используется в процессе разбиения системы на разных этапах проектирования (на логическом уровне - при декомпозиции предметной области на объекты, на физическом уровне - при декомпозиции системы на модули и при выделении отдельных процессов в мультипроцессной системе). Иерархия «общее/частное» - показывает, что некоторая абстракция является частным случаем другой абстракции, например, «обеденный стол -конкретный вид стола», а «столы - конкретный вид мебели». Используется при разработке структуры классов, когда сложные классы строятся на базе более простых путем добавления к ним новых характеристик и, возможно, уточнения имеющихся.