Поліморфізм (програмування)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Поліморфі́змгрец. πολύς "багато" + μορφή "форма") — концепція в програмуванні та теорії типів, відповідно до якої використовується спільний інтерфейс для обробки різних спеціалізованих типів.

На противагу поліморфізму, концепція мономорфізму вимагає однозначного зіставлення.

Типи поліморфізму[ред.ред. код]

Взаємодія параметричного поліморфізму і підтипів призводить до понять варіативності та обмеженої квантифікації.

Приклади[ред.ред. код]

  • У контексті об'єктно-орієнтованого програмування найпоширенішим різновидом поліморфізму є здатність екземплярів підкласу грати роль об'єктів батьківського класу, завдяки чому екземпляри підкласу можна використовувати там, де використовуються екземпляри батьківського класу.[1]
  • Прикладом ad hoc поліморфізму є бінарний оператор +, який може мати своїми аргументами дані різного типу: цілі числа, числа з рухомою комою, комплексні числа та навіть рядки:
    • 1 + 2 — операнди цілого типу, результат цілого типу.
    • 1.2 + 1.0e3 — операнди дійсних типів, результат дійсного типу
    • «Бульдог» + «Носоріг» — операнди рядки, результат — конкатенований рядок

Ad hoc поліморфізм[ред.ред. код]

...

Параметричний поліморфізм[ред.ред. код]

...

Поліморфізм підтипів[ред.ред. код]

Поліморфізм — один з трьох найважливіших механізмів об'єктно-орієнтованого програмування. Поліморфізм дозволяє писати більш абстрактні програми і підвищити коефіцієнт повторного використання коду.

Спільні властивості об'єктів об'єднуються в систему, яку можуть називати по різному: інтерфейс, клас. Спільність має зовнішнє і внутрішнє вираження. Зовнішня спільність проявляється як однаковий набір методів з однаковими іменами і сигнатурами (типами аргументів і результатів).

Внутрішня спільність є однакова функціональність методів. Її можна описати інтуїтивно виразити у вигляді строгих законів, правил, яким повинні підкорятись методи.

Статичний та динамічний поліморфізм[ред.ред. код]

За часом вибору поліморфізм поділяють на статичний та динамічний:

Перевагами статичного поліморфізму є:

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

Зате динамічний поліморфізм:

Динамічний поліморфізм, зазвичай, це поліморфізм підтипів.

Статичний поліморфізм це ad hoc чи параметричний поліморфізм, хоча його також можна реалізувати через наслідування та шаблонне метапрограмування - це називається дивно рекурсивний шаблон.


Див. також[ред.ред. код]

Примітки[ред.ред. код]

  1. Daniel P. Friedman, Mitchell Wand, Christopher T. Haynes (2001). Essentials of Programming Languages (англ.) (вид. друге). The MIT Press. ISBN 0-262-06217-8.