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

11. Методы. Определение. Функциональное назначение. Способы реализации. Примеры применения.

Методы — это процедуры (подпрограммы), которые манипулируют данными, определенными в классе, и во многих случаях обеспечивают доступ к этим данным. Обычно

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

доступ тип_возврата имя (список_параметров) {// тело метода }

public int Met() { return m; }//метод для получения значения m

Параметры исп для обмена инф с методом. Методы также имеют спецификаторы virtual, override, abstract…

12.Полиморфизм. Функциональное назначение. Способы реализации. Примеры применения.

Полиморфизм — это качество, которое позволяет одному интерфейсу получать доступ к целому классу действий. Простым примером полиморфизма может послужить руль автомобиля. Концепцию полиморфизма часто выражают такой фразой: "один интерфейс —

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

В основе полиморфизма, характерного для семейства классов, лежат три механизма:

• одностороннее присваивание объектов внутри семейства классов; сущность, базовым классом которой является класс предка, можно связать с объектом любого из потомков. Другими словами, для введенной нами последовательности объектов xk присваивание xi = xj допустимо для всех j >=i;

• переопределение потомком метода, наследованного от родителя. Благодаря переопределению, в семействе классов существует совокупность полиморфных методов с одним именем и сигнатурой;

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

Проявление полиморфизма: перегрузка методов и операций, виртуальные методы.

13.Перегрузка методов. Функциональное назначение. Способ реализации. Примеры применения.

В С# два или больше методов внутри одного класса могут иметь одинаковое имя, но при условии, что их параметры будут различными. Такую ситуацию называют перегрузкой методов. Перегрузка методов — один из способов реализации полиморфизма в С#. В общем случае для создания перегрузки некоторого метода достаточно объявить еще одну его версию. Об остальном позаботится компилятор. Но здесь необходимо отметить одно важное условие: все перегруженные методы должны иметь списки параметров, которые отличаются по типу и/или количеству. Методам для перегрузки недостаточно отличаться лишь типами возвращаемых значений.(Другими словами, тип возвращаемого значения не обеспечивает достаточную информацию для С#, чтобы можно решить, какой именно метод должен быть вызван). Конечно, перегруженные методы могут отличаться и типами возвращаемых значений. При вызове перегруженного метода выполняется та его версия, параметры которой совпадают (по типу и количеству) с заданными аргументами.

Вот простой пример, иллюстрирующий перегрузку методов:

public void ovlDemo() {}

// Перегружаем метод ovlDemo() для одного целочисленного параметра

public void ovlDemo(int a) { Console.WriteLine("Один параметр: " + a); }

Посредством перегрузки методов в С# поддерживается полиморфизм. В языке, который не поддерживает перегрузку методов, каждый метод должен иметь уникальное имя. Однако часто нужно реализовать один и тот же метод для различных типов данных. Возьмем, например, функцию, возвращающую абсолютное значение. В языках, которые не поддерживают перегрузку методов, обычно существует три или даже больше версий этой функции, причем их имена незначительно отличаются. Например, в языке С функция abs () возвращает абсолютное значение (модуль) целого числа, функция labs () возвращает модуль длинного целочисленного значения, а fabs () — модуль значения с плавающей точкой. Поскольку язык С не поддерживает перегрузку методов, каждая функция должна иметь собственное имя, несмотря на то, что все три функции выполняют по сути одно и то же действие. Это делает ситуацию сложнее, чем она есть на самом деле. Другими словами, при одних и тех же действиях программисту необходимо помнить имена всех трех (в данном случае) функций. Язык С# избавлен от ненужного "размножения" имен, поскольку все методы получения абсолютного значения могут использовать одно и то же имя. И в самом деле, библиотека стандартных классов С# включает метод получения абсолютного значения с именем Abs(). Этот метод перегружается С#-классом System.Math, что позволяет обрабатывать значения всех числовых типов, используя одно имя метода. Определение того, какая именно версия метода должна быть вызвана, основано на типе передаваемого аргумента.

Принципиальная значимость перегрузки состоит в том, что она позволяет обращаться к связанным методам посредством одного, общего для всех имени. Следовательно, имя Abs () представляет общее действие, которое выполняется во всех случаях. Компилятору остается правильно выбрать конкретную версию при конкретных обстоятельствах. А программисту нужно помнить лишь общую операцию, которая связана с именем того или иного метода. Благодаря полиморфизму применение нескольких имен сводится к одному. Несмотря на простоту приведенного примера, он все же позволяет понять, что перегрузка способна упростить процесс программирования.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]