Mis on metaklass?

Metaklassi kasutatakse objektorienteeritud programmeerimises (OOP) ja seda peetakse tavaliselt klasside klassiks. Nagu enamik metainfot, töötab metaklass programmi taga ja kasutaja ei näe seda kunagi. Metaklass on võimeline muutma klassist pärinevat teavet ja seda saab siduda ühe või mitme klassiga, olenevalt kodeerimisstruktuurist. Mitte kõik OOP-struktuurid ei sisalda metaobjekti kodeerimist ja mõned võivad pakkuda metaobjekti kodeerimist ainult täiustatud vormingutes.

Peaaegu kõigi kodeerimistüüpide puhul on metakodeerimine märgend või koodirida, mis programmis töötab, kuid kasutaja seda avalikult ei näe. Metainfo asub koodi kohal ja on võimeline muutma infokilde või programmi lisama ilma programmi otseselt segamata. OOP-is kasutatakse metaklassi klassi võtmiseks ja selle käitumise muutmiseks.

Klass OOP-is on eksemplaride või objektide kogum, mis on paigutatud ühe katustermini alla. Näiteks saab programmeerija luua klassi nimega “Maja”. Selle raames loob programmeerija objekte, mis muudavad või taastoodavad majas tavaliselt leiduvaid aspekte, nagu ruumid, mööbel ja inimesed. Kuigi klass on võimeline neid objekte muutma, töötaks metaklass klassi enda muutmisel.

OOP klassid on tavaliselt dünaamilised ja võivad enne programmi lõppu läbida palju muudatusi. Metaklassid on staatilised teabetükid, mis muutuvad harva, välja arvatud juhul, kui programmeerija leiab, et metateave ei tööta õigesti. See hoiab ära metaklasside juhusliku töötamise lenduvate andmetega ja tagab ka käitumise modifikaatoritega manipuleerimise.

Sõltuvalt programmeerija vajadusest seotakse metaklass kas ühe klassiga või mitme klassiga korraga. Programmeerijad ühendavad metaklassi kõige sagedamini ühe klassiga ja lisavad metaobjekti kodeerimisse unikaalseid reegleid või käitumisviise. Kui on mitu klassi, mis kõik läbivad sama käitumise modifikatsiooni, rakendatakse metateavet mitmele erinevale klassile. See on võimalik, kuna metaobjekti kodeering on pealkirjastatud ja seda saab vajaduse korral hõlpsalt välja kutsuda.

Kuigi see on kesktaseme ja edasijõudnute programmides tavaline nähtus, ei paku mõned OOP-struktuurid metaklasse. Põhjuseks on see, et nende järele puudub vajadus või on muid objekte või klasse, millel on sarnased funktsioonid, kuid mida nimetatakse millekski muuks. Mõned kodeerimisstruktuurid võivad pakkuda ka ainult keerulisi ja täiustatud metaklasse, kus teistel on vahepealsete kodeerijate jaoks kasutada lihtsamad.