Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. II. Речевая деятельность человека. Создание текста. Коммуникативные качества хорошей речи и способы их достижения
  2. II. СПОСОБЫ И СРЕДСТВА ДОКАЗЫВАНИЯ В
  3. III. Первоначальное накопление капитала (особенности, примеры)
  4. Абсолютная численность населения. Среднее население и способы его определения.
  5. Абсорбция. Общие сведения и области его применения.
  6. Алгоритм. Свойства алгоритма. Способы записи алгоритма
  7. Бесплатные способы изучения потребностей потребителей
  8. Билет№69. Прямое доказательство, его специфика. Привести примеры.
  9. Билет№71. Косвенное доказательство (от противного). Привести примеры.
  10. Билет№72. Разделительное доказательство, привести примеры.

 

Полиморфи́зм — возможность объектов с одинаковой спецификацией иметь различную реализацию.

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

Полиморфизм позволяет писать более абстрактные программы и повысить коэффициент повторного использования кода.

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

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

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

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

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

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

public class Worker: Man

{

//Виртуальный метод

public virtual void GiveMoney(int money)

{

Console.WriteLine("Получите "+money+" рублей");

}

}

 

public class Teacher: Worker

{

//Задаем необходимую функциональность

public override void GiveMoney(int money)

{

int bonus = 1000; //премиальные 1000 руб

money = money + bonus;

base.GiveMoney(money);

}

}

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

public void ovlDemo() {}

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

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

Перегруз операций:

public class ComplexNumber

{

private int real;

private int imaginary;

 

public ComplexNumber(): this(0, 0) // constructor

{

}

 

public ComplexNumber(int r, int i) // constructor

{

real = r;

imaginary = i;

}

 

// Override ToString() to display a complex number in the traditional format:

public override string ToString()

{

return(System.String.Format("{0} + {1}i", real, imaginary));

}

 

// Overloading '+' operator:

public static ComplexNumber operator+(ComplexNumber a, ComplexNumber b)

{

return new ComplexNumber(a.real + b.real, a.imaginary + b.imaginary);

}

 

// Overloading '-' operator:

public static ComplexNumber operator-(ComplexNumber a, ComplexNumber b)

{

return new ComplexNumber(a.real - b.real, a.imaginary - b.imaginary);

}

}

 




Дата добавления: 2014-12-18; просмотров: 57 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.008 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав