
- •Билет 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 (принцип разделения (сегрегация) интерфейсов)
- •Ничего лишнего всё в своё время
Билет №20.Сигнатура методов: передача и возврат объектов.
Передача объектов.
-Если параметр передается по значению(не ссылка и не указатель), с него делается копия- вызывается конструктор копирования.
-Если параметр передается по ссылке(указателю) и не должен быть изменен внутри метода, для него нужно указать модификатор const (способ со ссылкой- предпочтительный)
-Параметры-указатели наиболее уместны в случаях, когда речь идет о полиморфном использовании.
-Передача по ссылкам более «в стиле С++» и более эффективна ,чем переда по значению.
Возврат объектов.
При возврате объекта по значению с него снимается копия(вызывается конструктор копирования).
При возврате ссылки или указателя копия снимается с ссылки и указателя, сам объект не копируется).
Если возвращаемое значение не должно быть изменено, возвращается ссылка или указатель на константный.
Не возвращайте ссылку на вновь созданный объект.
Объекты нужно возвращать:
Если нужно динамически создать объекты(графический редактор).
При моделировании операций сложения, вычитания и т.д(векторная алгебра)
Пример:
class Vector{
int * vec; int size;
public:
Vector();
Vector(const Vector &);
~Vector();
Vector Add(const Vector & v) const;
};
Vector Vector::Add(const Vector & v) const{
Vector tmp(v); // новый объект
//...
return tmp;
}
void main(){
Vector v1(20),v2(20);
// . . .
Vector v3 = v1.Add(v2);
// можно делать так: Vector v4 = v1.Add(v2).Add(
Связь с конструктором копирования
Автоматически созданный конструктор копирования копирует значения полей
Билет 21. Связи: ассоциация, зависимость, наследование, конкретизация
Связь - это физическое или концептуальное соединение между объектами,специфическое сопоставление, через которое объект-клиент запрашивает услугу у объекта-сервера или через которое один объект находит путь к другому
Роли объектов в связях:
Клиент: объект может воздействовать на другие объекты, но сам никогда не подвергается воздействию других объектов
Сервер: объект может только подвергаться воздействию со стороны других объектов, но он никогда не выступает в роли воздействующего объекта.
Агент: объект может выступать как в роли сервера, так и клиента; агент создается для выполнения операций в интересах какого-либо клиента или агента
Аттрибуты отношений:
Мощность – сколько объектов может участвовать в связи с обеих сторон
Направленность – связи бывают однонаправленные и двунаправленные, направленность определяет кто из двух участников «знает» о другом
Стереотип связи – устойчивый характер (семантика) связи
Видимость – каким образом один объект «видит» другой
Имена участников
Имя связи
Ассоциация
Ассоциация – самая нестрогая из ассоциаций она выражает просто смысловую связь
Зависимость обозначает отношение между объектами, когда один из них не может выполнять свои функции без другого
это
Использование это разновидность зависимости – один класс использует другой для реализации своих функций
Ассоциация – смысловая связь, как правило, в процессе проектирования системы отношения между объектами уточняются, и ассоциация может «превратиться» в какую-то более хорошо определенную связь
Зависимость:
Зависимость это отношение, характеризующееся тем, что реализация одного из классов
зависит от интерфейса другого объекта
Зависимость это отношение между классами
Зависимость изображается пунктирной стрелкой от зависимого класса к тому, от которого он зависит
Отношение использования снабжается стереотипом «uses» («использует»)
Мощность: 1:1
Направленность: от зависимого к независимому
Стереотип связи: зависимость, поменял и «независимого», нужно менять «зависимого»
Видимость: определяется конкретикой реализации
Имена участников: зависимый (общее имя для второго участника придумать не получается, «независимый»?)
Наследование:
Наследование
– очень распространенная связь, поэтому
для нее существует специальное
обозначение
Наследование – связь между классами
Мощность – 1:1
Имена участников – базовый класс, производный класс
Направленность – однонаправленная, от потомка к предку
Стереотип связи – являться (is-a)
Видимость: неприменимо, т.к. наследование - отношение между классами, в отношении участвует «один и тот же» объект
Аттрибут «видимость», неприменим, т.к. нет двух объектов, видимость которых нужно обеспечить, существует лишь один объект, который участвует в этой ассоциации, например, наследование «преподаватель это человек», в этой связи участвует лишь один объект (например, я), который одновременно и преподаватель и человек. Видимость обеспечивается автоматически средствами языка.
Конкретизация:
Конкретизация
– это создание конкретного класса из
параметризованного класса шаблона
Две диаграммы, приведенные на рисунке идентичны, это две разные записи одной и той же связи
Отношение между классами
Мощность 1:1
Имена участников: клас-щаблон (параметризованный класс), конкретный (конкретизованный) класс
Стереотип связи: «конкретизация» -
конкретизируем класс подставляя вместо классов-параметров конкретные классы
Видимость: неприменимо
Аттрибут «видимость», как и в случае наследования неприменим, т.к. нет двух объектов, видимость которых нужно обеспечить, существует лишь один объект, который участвует в этой ассоциации, хотя классов участвует два
Билет №22.
Связи: реализация, агрегация, зависимость,
класс-ассоциации
Чисто абстрактный класс на диаграмм классов UML не имеет поля для атрибутов,
т.к. является выражением «чистого поведения»
Два варианта изображения отношения реализации – круг и «пунктирное» наследование
В некоторые UML редакторах отношение реализации обозначается простой пунктирной
стрелкой с указанием модификатора реализации - <<realize>>
Все три варианта абсолютно идентичны в смысле выражения отнощения реализации.
Агрегация
Мощность, направленность и имена участников агрегации нужно определить в каждом конкретном случае, общего правила нет
Стероеотип – «владение», «обеспечение видимости», «ссылка» т.е. агрегат и включенные объекты существуют независимо друг от друга
Видимость для аггрегации задана жестко – это поле-ссылка
Зависимость это отношение, характеризующееся тем, что реализация одного из классов
зависит от интерфейса другого объекта
Зависимость это отношение между классами
Зависимость изображается пунктирной стрелкой от зависимого класса к тому, от которого он зависит
Отношение использования снабжается стереотипом «uses» («использует»)
Мощность: 1:1
Направленность: от зависимого к независимому
Стереотип связи: зависимость, поменял и «независимого», нужно менять «зависимого»
Видимость: определеяется конктретикой реализации
Имена участников: зависимый (общее имя для второго участника придумать не получается, «независимый»?)
Класс-ассоциация – специальный вид связи, в которой присутствуют собственные атрибуты.
Пример: для товара, помещенного в заказ можно указать количество экземпляров, кроме того, в заказанном товаре
следует хранить копию цены товара, чтобы избежать изменения суммы заказа, если товар начнут продавать по другой цене.
Класс-ассоциация реализуется на С++ в виде класса
Важно: этот класс не имеет смысла, если нет связи между товарами и заказами
Имена участников, направленность, мощность: определяется конкретикой задачи
Стереотип связи: «класс-ассоциация» - дополнительная информация, которая характеризует связь
Видимость: поля класса