Ако можете да возите приградски аутомобил са 4 врата, можете да возите и камионет. Ако сте возили аутомобил са мотором са сагоревањем, можете возити и електрични аутомобил.

Облик и величина путничких возила могу се разликовати од једног до другог. Мотор који покреће та возила могао би бити и потпуно другачији. Али возачу то није важно.

Само уђите, закопчајте се, упалите возило, ставите га у брзину и возите. То је зато што су то аутомобили, камиони и комбији полиморфни.

Полиморфизам: разбијање

Погледајмо реч полиморфизам. Можете га поделити на поли, морпх, и исм.

Поли значи много, као што полигон значи много углова. Када се користи као именица, а морпх је варијанта врсте. И исм може значити систем.

Дакле, полиморфизам једноставно значи систем са много варијација. То вам ипак не говори много о томе како се користи у програмирању. То је следеће.

Ако хода као патка... Зашто су полиморфни објекти сјајни?

Када креирате класу у свом коду која наслеђује другу класу, везујете нову класу за уговор. У уговору је наведено да ће свака променљива и функција у родитељу такође бити у детету.

Свако возило има управљач, педале гаса и кочнице и показивач правца. Не морате да отварате хаубу да бисте возили аутомобил. Битно је само да је то аутомобил.

Иста ствар важи и за класе које наслеђују од других класа. Ево примера у ТипеСцрипт -у:


класа Возило {
приватни _мотор: стринг;
приватне _гуме: број;
конструктор (мотор: стринг = "сагоревање", гуме: број = 4) {
тхис._мотор = мотор;
тхис._тирес = гуме;
}
убрзати (брзина: број) {
цонсоле.лог ("убрзавање брзином од" + брзина);
}
кочница (притисак: број) {
цонсоле.лог ("примена" + притисак + "притисак");
}
скрените лево() {
цонсоле.лог ("скретање лево");
}
скрените десно() {
цонсоле.лог ("скретање удесно");
}
}
класа Ауто продужава возило {
}
класа Тесла проширује Цар {
цонструцтор () {
супер ("електрични");
}
}

У овом примеру постоји а Возило класа. Тхе Цар класа наслеђује од Возило класа. И Тесла наслеђује од Цар. Сада направимо неколико објеката и погледајмо их.

нека миЦоупе: Цар = ново возило ();
цонсоле.лог (миЦоупе);
цонсоле.лог (миЦоупе.цонструцтор.наме);
нека миСедан: Возило = нови Тесла ();
цонсоле.лог (миСедан);
цонсоле.лог (миСедан.цонструцтор.наме);
миЦоупе.турнЛефт ();
миСедан.турнЛефт ();

Видите да смо се изјаснили миЦоупе да буде Цар и миСедан да буде Возило. Затим смо направили инстанцу миЦоупе као нова Возило и миСедан као нова Тесла. ако ти посетите ТипеСцрипт сандбок и покрените код, видећете да ради без грешке. И понаша се онако како бисте очекивали, на основу уговора.

Другим речима, сва возила могу да скрену лево јер су их наследила од Возило класа. Преводилац зна да свако дете од Возило пристао на уговор. Дакле, претпоставља се да је све у реду, без обзира на то у које класе су објекти откуцани или изведени.

Ово се понекад назива „паткарско куцање“. Компајлер претпоставља да ако хода као патка и прича као патка, то би могло бити и патка. Тако да компајлер не брине о детаљима и само третира објекат као патку.

Полиморфизам чини ваш код непробојним

Још једна предност уговора о полиморфизму је гаранција да ће ваш код радити. Ако сте снажно откуцали све своје променљиве и шта свака функција враћа, знате да ће се свако дете увек подударати са променљивим, функцијама и типовима.

То значи да можете да додајете и мењате код на часовима без кршења програма. Сваки објекат који упућује на а Возило Објекат ће увек добити податке и функционалност која испуњавају очекивања, без обзира на то колико Цар Промене.

Код унутар функције можда неће дати тачне резултате. Али то је другачија врста проблема. Све док функција прати уговор и враћа очекивани тип променљиве, то неће резултирати грешком у разбијању кода.

Полиморфизам је огроман, и ево још 10 принципа програмирања које треба да знате.

Вежбајте полиморфизам

  • Користите горњу везу у сандбок -у да бисте креирали Боат класа.
  • Инстантирајте нови чамац на такав начин да је а Возило тип, али и даље личи на чамац.
  • Уверите се да се чамац и даље понаша као возило.

Последњи пример полиморфизма

Полиморфизам може бити тежак концепт за разумевање. Али када то схватите, направили сте огроман корак ка разумевању шта заправо представља објектно оријентисано програмирање. Концепт се ипак може чинити теоретским. Дакле, ево солидног примера из стварног света који ће вам помоћи да видите колико је то корисно.

Замислите да правите веб апликацију која се повезује са МиСКЛ базом података. Тада шеф одлучује да пређе на ПостгреСКЛ базу података. Да ли то значи да морате да препишете све позиве из базе података?

Не, није. Ако ваша апликација користи ДатаАццесс класе са подкласама које се стварно мувају са подацима, имате среће. Тхе ДатаАццесс цласс дефинише како ваша апликација ступа у интеракцију са подацима, а не у начину на који ступа у интеракцију са базом података.

Имате подразреде попут МиСКЛАццесс и ПостгресКЛАццесс који обављају све прљаве послове. Али ако ваша апликација има само ДатаАццесс објеката, можете заменити базе података без преписивања једне линије кода апликације.

ОбјавиТвеетЕмаил
Како организовати свој објектно оријентисани код наслеђивањем

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

Прочитајте следеће

Повезане теме
  • Програмирање
  • Програмирање
  • Објектно оријентисано програмирање
О аутору
Лее Натхан (19 објављених чланака)

Лее је номад са пуним радним временом и луталац са много страсти и интересовања. Неке од тих страсти се врте око продуктивности, личног развоја и писања.

Више од Лее Натхан

Претплатите се на наш билтен

Придружите се нашем билтену за техничке савете, критике, бесплатне е -књиге и ексклузивне понуде!

Кликните овде да бисте се претплатили