Kas yra metaklasė?

Metaklasė naudojama objektiniame programavime (OOP) ir paprastai laikoma klasių klase. Kaip ir dauguma metainformacijos, metaklasė veikia už programos ir jos niekada nemato vartotojas. Metaklasė gali modifikuoti informaciją iš klasės ir gali būti susieta su viena ar keliomis klasėmis, priklausomai nuo kodavimo struktūros. Ne visose OOP struktūrose yra metaobjektų kodavimas, o kai kurios gali pasiūlyti tik išplėstinių formatų metaobjektų kodavimą.

Beveik visų tipų kodavimo atveju metakodavimas yra žyma arba kodo eilutė, kuri veikia programoje, tačiau vartotojas to aiškiai nemato. Meta informacija yra virš kodo ir gali keisti informacijos dalis arba pridėti prie programos tiesiogiai netrukdant programai. OOP sistemoje metaklasė naudojama klasei paimti ir jos elgsenai modifikuoti.

OOP klasė yra egzempliorių arba objektų rinkinys, įtrauktas į vieną skėtinį terminą. Pavyzdžiui, programuotojas gali sukurti klasę pavadinimu „Namas“. Pagal tai programuotojas kuria objektus, kurie keičia arba atkuria dažniausiai namuose esančius aspektus, tokius kaip kambariai, baldai ir žmonės. Nors klasė gali modifikuoti šiuos objektus, metaklasė dirbtų keisdama pačią klasę.

OOP klasės paprastai yra dinamiškos ir gali būti daug pakeitimų prieš baigiant programą. Metaklasės yra statinės informacijos dalys, kurios retai keičiasi, nebent programuotojas nustato, kad meta informacija veikia netinkamai. Tai neleidžia metaklasėms netyčia dirbti su nepastoviais duomenimis ir taip pat užtikrina, kad elgesio modifikatoriais negalima manipuliuoti.

Priklausomai nuo programuotojo poreikio, metaklasė bus susieta su viena klase arba su daugybe klasių vienu metu. Programuotojai dažniausiai sujungia metaklasę su viena klase ir į metaobjektų kodavimą prideda unikalių taisyklių ar elgesio. Jei yra kelios klasės, kuriose visos gali būti pakeistos vienodai, meta informacija bus taikoma kelioms skirtingoms klasėms. Tai įmanoma, nes metaobjekto kodavimas yra pavadintas ir gali būti lengvai iškviestas, kai tik reikia.

Nors tai yra įprastas reiškinys vidutinio ir išplėstinio lygio programose, kai kurios OOP struktūros nesiūlo metaklasių. Taip yra dėl to, kad jų nereikia, arba yra kitų objektų ar klasių, kurios atlieka panašias funkcijas, bet yra kitaip vadinamos. Kai kurios kodavimo struktūros taip pat gali pasiūlyti tik sudėtingas ir pažangias metaklases, o kitose yra paprastesnės, skirtos naudoti tarpiniams koduotojams.