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

Полиморфизм («поли» — много, «морф» — форма; многоформность) — возможность использования одинаковых (тождественных) имен для различных членов класса.

В ООП проявляется в 3 видах:

  • Возможность использования тождественных имен в различных классах.

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

  • Аппарат виртуальных методов. Переопределение виртуальных методов в производных суперкласса.

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

  1. Исключительные ситуации: понятие, назначение, примеры применения. Иерархия исключений. Создание (throw) и перехват (try-catch-finally) объектов-исключений. Способы реагирования на исключительные ситуации. Исключения, которые нельзя перехватить. Неполный.

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

Для обработки исключительной ситуации ОС генерирует событие и создает объект, содержащий ее описание.

Назначение — извещение пользователя об ошибке, и, по-возможности, устранение последствий ошибки.

В С# исключения представляются классами. Все исключения являются подклассами класса Exception (который является частью пространства имен System).

Управление С#-механизмом обработки исключений основывается на четырех ключевых словах: try, catch, throw и finally.

Программные инструкции, которые нужно проконтролировать на предмет исключений, помещаются в try-блок. Если исключение возникает в этом блоке, оно дает знать о себе выбросом определенного рода информации.

Это выброшенное исключение может быть перехвачено программным путем с помощью catch-блока и обработано соответствующим образом.

Системные исключения автоматически генерируются С#-системой динамического управления. Чтобы сгенерировать исключение вручную, используется ключевое слово throw.

Любой код, который должен быть обязательно выполнен при выходе из try-блока, помещается в блок finally.

Ядром обработки исключений являются блоки try и catch. Эти ключевые слова работают "в одной связке"; нельзя использовать одно отдельно от другого.

Вот каков формат записи try/catch-блоков обработки исключений:

try

{

// Блок кода, подлежащий проверке на наличие ошибок.

}

catch (ExcepType1 ex)

{

// Обработчик для исключения типа ExcepTypel.

}

catch (ExcepType2 ex)

{

// Обработчик для исключения типа ЕхсерТуре2.

}

ЕхсерТуре — тип сгенерированного исключения. После "выброса" исключение перехватывается соответствующей инструкцией catch, которая его обрабатывает. Как видно из формата записи try/catch-блоков, с try-блоком может быть связана не одна, а несколько catch-инструкций. Какая именно из них будет выполнена, зависит от типа исключения.

  1. Интерфейсы: понятие, назначение, примеры применения. Реализация интерфейсов. Приведение к интерфейсу. Коллизия имен при реализации двух и более интерфейсов. Назначение интерфейсов IComparable, IClonable, ISerializeable. Неполный.

Интерфейс — абстрактный класс, все методы которого определены, но не реализованы. Синтаксис аналогичен синтаксису класса.

Интерфейс определяет поведение, которое поддерживается реализующими этот интерфейс классами. В классе, который наследует интерфейс, должна быть реализованы все объявленные методы. Если класс наследует иерархию интерфейсов, все их методы, должны быть реализованы.

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

Отличия интерфейса от абстрактного класса:

  • элементы интерфейса по умолчанию имеют спецификатор доступа public и не могут иметь спецификаторов, заданных явным образом;

  • интерфейс не может содержать полей и обычных методов — все элементы интерфейса должны быть абстрактными;

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

  • класс может иметь в списке предков несколько интерфейсов, при этом он должен определять все их методы.