Поліморфізм (програмування)Поліморфі́зм (з грец. πολύς «багато» + μορφή «форма») — концепція в програмуванні та теорії типів, в основі якої лежить використання єдиного інтерфейсу для різнотипних сутностей або у використанні однакового символу для маніпуляцій над даними різного типу[джерело?]. На противагу поліморфізму, концепція мономорфізму вимагає однозначного зіставлення. Типи поліморфізму
Взаємодія параметричного поліморфізму і підтипів призводить до понять варіативності та обмеженої квантифікації. Приклади
Спеціалізований поліморфізмУ наведеному далі прикладі на С++ в залежності від типу переданих даних будуть застосовуватись різні методи: class Point {
private:
int x, y;
char x2,y2;
public:
void setXY(int _x, int _y)
{
x=_x;
y=_y;
}
void setXY(char _x, char _y)
{
x2=_x;
y2=_y;
}
};
Параметричний поліморфізм
Поліморфізм підтипівПоліморфізм — один з трьох найважливіших механізмів об'єктно-орієнтованого програмування. Поліморфізм дозволяє створювати абстрактніші програми та підвищити коефіцієнт повторного використання коду[джерело?]. Спільні властивості об'єктів об'єднуються в систему, яку можуть називати по різному: інтерфейс, клас. Спільність має зовнішнє і внутрішнє вираження. Зовнішня спільність проявляється як однаковий набір методів з однаковими іменами і сигнатурами (типами аргументів і результатів)[джерело?]. Внутрішня спільність є однакова функціональність методів. Її можна описати інтуїтивно виразити у вигляді строгих законів, правил, яким повинні підкорятись методи[джерело?]. Наприклад: #include <iostream>
class Felid {
public:
virtual void meow() = 0;
};
class Cat : public Felid {
public:
void meow() { std::cout << "Meowing like a regular cat! meow!\n"; }
};
class Tiger : public Felid {
public:
void meow() { std::cout << "Meowing like a tiger! MREOWWW!\n"; }
};
class Ocelot : public Felid {
public:
void meow() { std::cout << "Meowing like an ocelot! mews!\n"; }
};
void do_meowing(Felid *cat) {
cat->meow();
}
int main() {
Cat cat;
Tiger tiger;
Ocelot ocelot;
do_meowing(&cat);
do_meowing(&tiger);
do_meowing(&ocelot);
}
Статичний та динамічний поліморфізмЗа часом вибору поліморфізм поділяють на статичний та динамічний:
Перевагами статичного поліморфізму є:
Зате динамічний поліморфізм:
Динамічний поліморфізм, зазвичай, це поліморфізм підтипів. Статичний поліморфізм це ad hoc чи параметричний поліморфізм, хоча його також можна реалізувати через наслідування та шаблонне метапрограмування — це називається дивно рекурсивний шаблон. Див. такожПримітки
|
Portal di Ensiklopedia Dunia