Ако можете да шофирате 4-врата врата, можете да шофирате и пикап. Ако сте карали кола с двигател с горене, можете да управлявате и електрическа кола.

Формата и размерът на пътническите превозни средства може да са различни от едно до друго. Моторът, който управлява тези превозни средства, също може да бъде напълно различен. Но това няма значение за шофьора.

Просто влизаш, закопчаваш се, стартираш автомобила, превключваш го и караш. Това е така, защото колите, камионите и микробусите са такива полиморфни.

Полиморфизъм: Разбиването му

Нека да разгледаме думата полиморфизъм. Можете да го разбиете на поли, преобразуване, и изм.

Поли означава много, например как многоъгълникът означава много ъгли. Когато се използва като съществително, a преобразуване е вариант на вид. И изм може да означава система.

Така че полиморфизмът просто означава система от много вариации. Това обаче все още не ви говори много за това как се използва в програмирането. Това е следващото.

Ако върви като патица... Защо полиморфните обекти са страхотни

instagram viewer

Когато създавате клас в кода си, който наследява от друг клас, обвързвате новия клас с договор. В договора е посочено, че всяка променлива и функция в родителя също ще бъде в детето.

Всяко превозно средство има волан, педали за газ и спирачка и мигач. Не е необходимо да отваряте капака, за да шофирате кола. Важното е само, че е кола.

Същото важи и за класовете, които наследяват от други класове. Ето пример в TypeScript:


клас превозно средство {
частен _мотор: низ;
частни гуми: номер;
конструктор (двигател: низ = "горене", гуми: номер = 4) {
this._engine = двигател;
this._tires = гуми;
}
ускоряване (скорост: число) {
console.log ("ускоряване със скорост от" + скорост);
}
спирачка (налягане: номер) {
console.log ("прилагане" + налягане + "налягане");
}
завийте наляво() {
console.log ("завиване наляво");
}
обърни се на дясно() {
console.log ("завиване надясно");
}
}
клас Кола разширява Превозното средство {
}
клас Tesla разширява Car {
конструктор () {
супер ("електрически");
}
}

В този пример има a Превозно средство клас. The Кола клас наследява от Превозно средство клас. И Тесла наследява от Кола. Сега нека създадем няколко обекта и да ги разгледаме.

нека myCoupe: Car = ново превозно средство ();
console.log (myCoupe);
console.log (myCoupe.constructor.name);
нека mySedan: Автомобил = нов Tesla ();
console.log (mySedan);
console.log (mySedan.constructor.name);
myCoupe.turnLeft ();
mySedan.turnLeft ();

Виждате, че декларирахме myCoupe да бъдеш Кола и mySedan да бъдеш Превозно средство. След това създадохме екземпляр myCoupe като нов Превозно средство и mySedan като нов Тесла. Ако ти посетете пясъчника на TypeScript и стартирайте кода, ще видите, че работи без грешка. И се държи така, както бихте очаквали, въз основа на договора.

С други думи, всички превозни средства могат да завият наляво, защото са го наследили от Превозно средство клас. Съставителят знае, че всяко дете на Превозно средство се съгласи с договора. Така че предполага, че всичко е наред, без значение в какви класове са въведени или създадени обектите.

Това понякога се нарича „въвеждане на патици“. Съставителят приема, че ако ходи като патица и говори като патица, може и да е патица. Така че компилаторът не се тревожи за детайлите и просто третира обекта като патица.

Полиморфизмът прави вашия код бронеустойчив

Друго предимство на договора за полиморфизъм е гаранция, че вашият код ще работи. Ако сте въвели силно всичките си променливи и какво връща всяка функция, знаете, че всяко дете винаги ще съвпада с променливи, функции и типове.

Това означава, че можете да добавяте и променяте кода във вашите класове, без да нарушавате програмата си. Всеки обект, който се позовава на a Превозно средство обектът винаги ще получава данни и функционалност, които отговарят на очакванията, без значение колко Кола промени.

Кодът във функцията може да не изведе правилните резултати. Но това е друг проблем. Докато функцията следва договора и връща очаквания тип променлива, това няма да доведе до грешка при прекъсване на кода.

Полиморфизмът е огромен и Ето още 10 принципа на програмиране, които трябва да знаете.

Практикувайте полиморфизъм

  • Използвайте горната връзка в пясъчника, за да създадете Лодка клас.
  • Инстанцирайте нов обект на лодка по такъв начин, че да е a Превозно средство тип, но все пак прилича на лодка.
  • Уверете се, че лодката все още се държи като превозно средство.

Един последен пример за полиморфизъм

Полиморфизмът може да бъде трудна концепция за разбиране първоначално. Но след като го разберете, сте направили огромна крачка към разбиране какво всъщност представлява обектно-ориентираното програмиране. Концепцията обаче може да изглежда теоретична. Ето един солиден пример от реалния свят, който да ви помогне да видите колко е полезен.

Представете си, че изграждате уеб приложение, което се свързва с база данни MySQL. Тогава шефът решава да премине към база данни PostgreSQL. Означава ли това, че трябва да пренапишете всичките си повиквания към базата данни?

Не, не е така. Ако приложението ви използва DataAccess клас с подкласове, които всъщност се забъркват с данните, имате късмет. The DataAccess class определя как вашето приложение взаимодейства с данни, а не как взаимодейства с базата данни.

Имате подкласове като MySQLAccess и PostgresQLAccess които вършат цялата мръсна работа. Но ако приложението ви има само DataAccess обекти, можете да разменяте бази данни, без да пренаписвате един ред код на приложение.

ДялТуителектронна поща
Как да организирате обектно-ориентирания си код с наследяване

Получаването на обектно ориентирано програмиране правилно означава, че трябва да знаете за наследяването и как то може да опрости кодирането и да намали грешките.

Прочетете Напред

Свързани теми
  • Програмиране
  • Програмиране
  • Обектно -ориентирано програмиране
За автора
Лий Нейтън (19 статии са публикувани)

Лий е номад на пълен работен ден и полимер с много страсти и интереси. Някои от тези страсти се въртят около производителността, личностното развитие и писането.

Още от Лий Нейтън

Абонирайте се за нашия бюлетин

Присъединете се към нашия бюлетин за технически съвети, рецензии, безплатни електронни книги и изключителни оферти!

Щракнете тук, за да се абонирате