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

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

Индексатор — средство, позволяющее индексировать экземпляры также, как массивы.

Ключевое слово this используется для определения индексаторов. get — возвращает значение, set — присваивает значение.

Синтаксис индексатора:

<модификатор> <тип> this [список_параметров]

{

get

{

// код_доступа

}

set

{

// код_доступа

}

}

Список параметров содержит одно или несколько описаний индексов, по которым выполняется доступ к элементу. Чаще всего используется один индекс целого типа.

Код доступа представляет собой блоки операторов, которые выполняются при получении (get) или установки (set) элемента массива.

Пример:

const int Child_Max = 20; // максимальное число детей (константа)

Person[] children = new Person[Child_Max];

int count_children = 0; // число детей

public Person this[int i] // индексатор с именем this

{

get {if (I >= 0 && I < count_children) return(children);

else return(children[0]);

}

set

{

if (i == count_children && i < Child_Max)

{ children = value; count_children++; }

}

}

Имя у индексатора — this, в квадратных скобках в заголовке перечисляются индексы. В методах get и set, обеспечивающих доступ к массиву children, по которому ведется индексирование, анализируется корректность задания индекса. Закрытое поле count_children, хранящее текущее число детей, доступно только для чтения благодаря добавлению соответствующего метода-свойства. Запись в это поле происходит в методе set индексатора, когда к массиву children добавляется новый элемент.

  1. Наследование: понятие, назначение, примеры применения. Поведение различных членов класса при наследовании. Совпадения сигнатур методов при наследовании. Полный.

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

Класс-потомок получает все поля и методы класса-родителя, но может дополнять их собственными, либо переопределять уже имеющиеся.

Большинство языков программирования поддерживает только единичное наследование (класс может иметь только один класс-родитель), лишь в некоторых допускается множественное наследование — порождение класса от двух или более классов-родителей.

Множественное наследование создаёт целый ряд проблем, как логических, так и чисто реализационных, поэтому в полном объёме его поддержка не распространена. Вместо этого в 1990-е годы появилось и стало активно вводиться в объектно-ориентированные языки понятие интерфейса.

Интерфейс — это класс без полей и без реализации, включающий только заголовки методов. Если некий класс наследует (или, как говорят, реализует) интерфейс, он должен реализовать все входящие в него методы. Использование интерфейсов предоставляет относительно дешёвую альтернативу множественному наследованию.

Взаимодействие объектов в большинстве случаев обеспечивается вызовом ими методов друг друга.

Если у класса нет родителей, он по умолчанию наследуется классом “Object”. Если у класса без родителей не определен конструктор, он автоматически наследует конструктор класса “Object”.

“Object” — исходный базовый класс всех классов.

Поведение членов класса при наследовании.

Модификатор — средство ограничения доступа к членам класса.

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

  • public — обеспечение доступа из любого места программы.

  • internal — ограничение видимости внутри сборки (сборка — код программы после компиляции).

  • protected — обеспечение доступа наследникам, но запрет доступа пользователю.

  • private — обеспечение доступа только внутри класса.

Совпадения сигнатур методов при наследовании.

Если при наследовании существуют методы с одинаковыми сигнатурами (именами) и в суперклассе и в потомке:

Как член базового класса, метод (например) вызывается с помощью ключевого слова this. Член класса-потомка вызывается лишь с помощью своего имени.

Как отдельные классы, методы и потомка и родителя могут вызываться с помощью имен своих классов.