Što je virtualni razred?

Virtualna klasa je klasa koja se dodjeljuje samo jednom u memoriji, tako da djeca te klase koriste samo jednu kopiju te roditeljske klase koja je uspostavljena u memoriji. Klasa je skupina objekata koji dijele zajedničke osobine ili atribute. Stvaranje klase virtualnom daje objektno orijentiranim programskim jezicima mogućnost korištenja višestrukog nasljeđivanja kada su roditeljske klase druge ili više generacije izvedene iz uobičajenih baznih klasa predaka. Ovisno o referenciranom računskom programskom jeziku, “virtualna” ključna riječ, slična ključna riječ ili sintaksa i semantika klase koriste se kako bi se impliciralo da se određena klasa smatra virtualnom.

Ne dopuštaju svi objektno orijentirani programski jezici višestruko nasljeđivanje, što znači da se podređena klasa može izvesti iz više roditeljskih klasa u isto vrijeme. U programskom jeziku kao što je C++, klasa može naslijediti sve podatke o članovima i funkcije članova iz obje roditeljske klase odjednom i imati pristup oba skupa roditeljskih podataka i funkcija. Drugi jezici koji podržavaju višestruko nasljeđivanje uključuju Perl, Python, Tcl i Eiffel.

Problem se javlja u višestrukim hijerarhijama nasljeđivanja kada su dvije ili više roditeljskih klasa korištene za stvaranje podređene klase izvorno izvedene iz samo jedne ili iste klase bake i djeda. To se zove problem dijamanta, naziv proizlazi iz toga kako bi hijerarhija izgledala u ovoj situaciji. Kada program prevoditelja pokuša instancirati klasu, kao što je klasa unuka napravljena od dvije roditeljske klase sa zajedničkim djedom i bakom, u memoriji se izrađuju dvije kopije djeda i bake, po jedna za svakog roditelja.

Zbog dvosmislenosti uzrokovane višestrukim kopijama istog djeda i bake u memoriji, prevodilac ne može utvrditi koju kopiju djeda i bake bi unuk trebao koristiti za pristup podacima ili funkcijama djeda i bake. Kako bi se popravila ova situacija, u C++ baka i djed se pretvaraju u virtualnu klasu kada se deklariraju roditelji. To uzrokuje da kompajler napravi samo jednu kopiju djeda i bake u memoriji koju dijele oba roditelja. Nakon što djed i baka postanu virtualna klasa, prevodilac nema problema odlučiti kako bi unuk trebao pristupiti djedu i baki jer postoji samo jedna kopija djeda i bake.

Treba biti vrlo oprezan pri strukturiranju hijerarhija klasa, posebno kada će one biti uključene ili postati osnova za mnogo veće hijerarhije u budućnosti. Ispravno korištenje virtualne klase daje hijerarhijama klasa veću slobodu u razvoju; međutim, oni mogu uzrokovati pogreške koje je teško locirati. Proučavanje čvrstih principa računalnog programiranja pomoći će da se ne pojave neočekivane nuspojave od nepravilne organizacije programa.