Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP_Answers_new_v_2_0-1(1).doc
Скачиваний:
22
Добавлен:
09.08.2019
Размер:
147.46 Кб
Скачать
  1. Агрегация: понятие, назначение, примеры применения. Отличия от наследования. Жизненный цикл агрегируемых объектов. Полный (?).

Агрегация — технология, позволяющая использовать объект в качестве поля другого объекта.

Объектом-агрегатором (составным объектом / контейнером) называется объект, объединяющий в себе несколько объектов. Агрегируемыми объектами называются объекты, которые объединяются в агрегаторе.

При этом, если удалить агрегатор, удалятся и все включенные в него объекты.

Различия между агрегацией и наследованием:

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

  • При наследовании создается отдельный класс, при агрегации нет.

  • При агрегации осуществляется больший контроль за влиянием предок влияет на потомка (и наоборот), чем при наследовании.

  1. Методы класса. Сигнатура метода. Абстрактные (abstract), виртуальные (virtual) и перезаписанные (override) методы. Статические (static) методы классов и особенности их применения. Полный.

Метод — процедура или функция, принадлежащая какому-либо классу (объекту).

Метод — процедура или функция (подпрограмма), управляющая данными, которые определены в классе. Они определяют действия, которые можно выполнять над объектом такого типа, и которые сам объект может выполнять. Может обеспечивать доступ к данным (как и свойство).

Сигнатура метода — набор информации, необходимой для описания его вызова: имя, параметры и их типы.

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

Различают простые и статические методы (методы класса):

  • простые методы имеют доступ к данным объекта (конкретного экземпляра класса),

  • статические методы не имеют доступа к данным объекта и для их использования не нужно создавать экземпляры (данного класса).

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

Ключевое слово virtual используется для изменения объявлений методов, свойств, индексаторов и событий и разрешения их переопределения в любом производном классе.

Модификатор override требуется для расширения или изменения абстрактной или виртуальной реализации унаследованного метода, свойства, индексатора или события.

  1. Перегрузка операций: понятие, назначение, примеры применения. Перегрузка арифметических и логических операций. Особенности перегрузки операции равенства (==). Неполный.

Операция — действие над объектом (сложение, вычитание, …). Оператор — символ, обозначающие операцию. Операнд — значение-участник операции.

Перегрузка операции — существование нескольких реализаций одной и той же операции. Большинство операций языка C# перегружены — одна и та же операция может применяться к операндам различных типов.

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

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

Перегрузка операторов тесно связана с перегрузкой методов. Для перегрузки операторов используется ключевое слово operator, позволяющее создать операторный метод, который определяет действие оператора, связанное с его классом.

Существует две формы методов operator’а: одна используется для унарных (одноместных) операторов, а другая — для бинарных (двуместных).

Общий формат перегрузки для унарного оператора:

public static <тип_возврата> operator <оператор> (<тип_параметра> <операнд>)

{

// операции

}

Общий формат перегрузки для бинарного оператора:

public static <тип_возврата> operator <оператор> (<тип_параметра1> <операнд1>, <тип_параметра2> <операнд2>)

{

// операции

}

При перегрузке операций в C# существует ряд ограничений:

  • Нельзя придумать свои знаки операций.

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

  • Метод, реализующий перегрузку какой-либо операции, должен быть статическим и открытым.

  • Параметры можно передавать в метод для реализации операции только по значению (ref и out запрещены).

  • Нельзя перегружать операторы присваивания (=, +=).

  • Операции сравнения перегружаются парами (противоположными по смыслу): <= и >=, < и >, == и !=.

  • При перегрузке операций сравнения необходимо перегрузить два метода, наследуемые из класса Object: Equals() и GetHashCode().