Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
все билеты ооп.docx
Скачиваний:
0
Добавлен:
27.12.2019
Размер:
932.08 Кб
Скачать

Билет №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

  • Направленность: от зависимого к независимому

  • Стереотип связи: зависимость, поменял и «независимого», нужно менять «зависимого»

  • Видимость: определеяется конктретикой реализации

  • Имена участников: зависимый (общее имя для второго участника придумать не получается, «независимый»?)

Класс-ассоциация – специальный вид связи, в которой присутствуют собственные атрибуты.

Пример: для товара, помещенного в заказ можно указать количество экземпляров, кроме того, в заказанном товаре

следует хранить копию цены товара, чтобы избежать изменения суммы заказа, если товар начнут продавать по другой цене.

Класс-ассоциация реализуется на С++ в виде класса

Важно: этот класс не имеет смысла, если нет связи между товарами и заказами

  • Имена участников, направленность, мощность: определяется конкретикой задачи

  • Стереотип связи: «класс-ассоциация» - дополнительная информация, которая характеризует связь

  • Видимость: поля класса