Polimorfizmas (programavime)

Straipsnis iš Vikipedijos, laisvosios enciklopedijos.
Peršokti į: navigaciją, paiešką

Polimorfizmas – objektiniame programavime naudojama sąvoka, kai operacija (metodas) gali būti vykdomas skirtingai, priklausomai nuo konkrečios klasės (ar duomenų tipo) realizacijos, metodo kvietėjui nieko nežinant apie tokius skirtumus.

Tai pasiekiama aprašant metodus (operacijas) tėvinėje klasėje ir perrašant atitinkamus metodus paveldinčiose klasėse. Metodai, kuriuos galima (paliekant tą patį pavadinimą) perrašyti paveldinčioje klasėje, vadinami virtualiais. Virtualių metodų turintis objektas savo duomenų struktūroje turi nuorodą į savo klasę arba savo virtualių metodų lentelę. Taigi virtualių metodų rinkinys susiejamas su pačia objekto duomenų struktūra, ir objektu manipuliuojančiam kodui nebūtina žinoti, koks konkretus objekto metodo kodas bus įvykdytas.

Pavyzdžiai[taisyti | redaguoti kodą]

  1. Galima tėvinė klasė „figūra“, iš kurios išvedamos klasės „trikampis“, „kvadratas“ ir kitos. Tėvinė klasė gali turėti metodą nupiešti figūrą ekrane. Tuomet, tarkim, galimas „figūros“ tipo masyvas, kurio nariai yra įvairios geometrinės figūros. Perrenkant masyvo narius cikle ir visiems kviečiant nupiešimo metodą, visos figūros ekrane bus atvaizduotos teisingai.
  2. Žodyną, kuriame vieno objekto (rakto) reikšmę atitinka žinoma kito objekto reikšmė, galima sukurti daugeliu įvairių būdų (maišos lentelė, medis, tiesioginis perrinkimas ir pan). Visi žodyno užprogramavimo variantai turi tuos pačius svarbiausius metodus (rasti saugomą duotą raktą atitinkančią reikšmę, įsiminti naują rakto ir jį atitinkančios reikšmės porą ir pan). Naudojant polimorfizmą, įvairius žodyno variantus galima kildinti iš abstrakčios tėvinės klasės, turinčios sutartinius žodynui būdingus metodus. Tėvinėje klasėje tokie metodai gali neturėti jokio kodo. Iš jos išvestose klasėse atliekami konkrečiam žodyno išpildymui reikalingi veiksmai. Taip parašytoje programoje nesunku eksperimentuoti, tiriant įvairių žodyno išpildymų tinkamumą konkrečiam pritaikymui, nes pakeičiant vieną žodyno užprogramavimo versiją kita, jį naudojantis kodas nereikalauja jokių pakeitimų.
  3. Paspaudus mygtuką ekrane, reikia atlikti konkrečiai programai specifinius veiksmus. Tai galima pasiekti keletu būdų, vienas jų – mygtuko objekto kodui kviesti sutartinį metodą „paspaustas“. Tuomet vartotojo programa gali kurti savo mygtukų klases, kurios šis metodas pakeičiamas reikiamus veiksmus atliekančiu kodu. Tokie vartotojo mygtukai paveldi daug kodo (mygtuko atvaizdavimas, reakcija į pelės ir klaviatūros veiksmus ir pan) iš tėvinės klasės, todėl juos palyginus paprasta kurti.