Gagnamiðuð vs hlutbundin hönnun

Tölvuleikir eru gráðugir. Þeir geta krafist gríðarlegrar vinnsluminni, vinnsluafls og almennt lagt tonn af álagi á líkamlega vélbúnaðinn sem er ábyrgur fyrir að ná í, vinna með og skila gögnum. Af þeim sökum hafa ýmsir talsmenn gagna-hönnunar komið fram og segja að ef til vill sé hlutbundin hönnun ekki besta leiðin til að skipuleggja kóðann sem rekur þessi einhliða forrit.

Svo hvað er gagnamiðuð hönnun, hvernig er það frábrugðið OOP og hverjar eru nokkrar af reglunum um hvernig á að hugsa um að skrifa DOP kóða?

Hvernig er það frábrugðið OOP?

Eins og nafnið gefur til kynna er hlutbundin forritun miðuð við að skilgreina, framleiða og starfa á hlutum. Það beinir merkjamálum til:

  1. Komið fram hverjir hlutir eru.
  2. Ákveðið hvaða tegund af gögnum tilheyra hlut.
  3. Lýstu virkni sem hlutur hefur.

Þessir hlutir hafa síðan samskipti við aðra hluti í gegnum aðgerðir sem hver hlutur á.

Hvernig hlutir virka í OOP

Einn af stóru kostunum við OOP er hversu náið það virðist spegla hvernig við höfum samskipti við hina raunverulegu veröld. Til dæmis, með því að vita eitthvað um bekkinn „töflur“ get ég sparað mér mikinn tíma með því að vita hvað ég get og get ekki gert við borð. Þú myndir aldrei benda á dæmi af töflu og spyrja „Hvers konar kaffi framleiðir þessi tafla?“ Vegna þess að flokkur töflanna veitir ekki borðum möguleika til að búa til kaffi.

Út frá þessu hugtaki fáum við einnig hag af fjölbreytileika (fjöl - margra; morf - form) lýsir mynstri í hlutbundinni forritun þar sem flokkar hafa mismunandi virkni meðan þeir deila sameiginlegu viðmóti. Ef þú hugsar um flokkun dýra, með því að vita að köttur og tígrisdýr eru hluti af „kattsteini“ bekknum, þá veit ég sjálfkrafa heilmikið um hvert þeirra án þess að kafa í smáatriði í sínum sérstökum flokkum. Þeir „erfa“ tiltekna eiginleika og gögn frá æðri flokki kattar.

En með þessari hugmyndafræði eru aðgerðir takmarkaðar við ákveðna gagnabita og ekki hægt að endurnýta þær. Ef þú vilt að aðgerð starfi á öðru gagni innan hlutar, þá aðgerð þarf annað hvort að erfa frá foreldraflokki eða þarf að endurskrifa. Það er mikilvægt að hugsa um hvernig aðgangur er að gögnum sem haldin eru í bekknum sem erfa frá foreldraflokki í þessari hugmyndafræði. Senda þarf gögnin í gegnum marga flokka til að vera aðgengilegur örgjörvinn, sem getur verið óhagkvæm.

Dæmi um vinnu sem gjörvi getur þurft að vinna í OOP-kerfi.

Gagnamiðuð forritun nálgast kóðun á aðeins annan hátt. Í stað hlutar eru allt gögn og hægt er að bregðast við öllu. Þetta skilur virkni og gögn. Þeir eru ekki lengur samtvinnaðir af ákveðnu reglusett. Í DOP eru aðgerðir þínar almennur tilgangur og þeim er beitt á stóra klumpa af gögnum. Helst að þú myndir skipuleggja gögnin eins nálægt útgangsgögnum og mögulegt er til að tryggja að sem minnst áreynsla sé gert af aðgerðinni sjálfri.

„Gagnamiðuð hönnun færir sjónarhorn forritunar frá hlutum yfir í gögnin sjálf: Gerð gagna, hvernig þau eru sett fram í minni og hvernig þau verða lesin og unnin í leiknum.“
Dæmi um DOP kalla röð. Miklu minni vinna fyrir örgjörva.

Af hverju DOP?

Einfalda svarið er vegna þess að örgjörvar elska viðmiðunarstað. Þessar reglur kveða á um marga aðra kosti sem okkur eru gefin með DOP. Til dæmis, með því að skrifa kóða sem hámarkar staðsetningu tilvísunar gefur okkur mun auðveldari leið til að hrinda í framkvæmd samsöfnun. Samhliða reynir að nota fleiri en einn kjarna tölvuvinnsluforritsins til að framkvæma verkefni samtímis. Þetta getur verið mjög erfitt að gera við OOP vegna þess að þú ert í hættu á að margir þræðir örgjörva reyni að fá aðgang að sömu gögnum samtímis. Hins vegar, þegar þú hópar líkamsræktargögnum saman og skrifar kóða með áherslu á gögnin sem eru að fara að vinna almennt, verður það miklu auðveldara að nota marga þræði örgjörva til að vinna úr þessum aðgerðum.

Annar ávinningur af DOP er skilvirk notkun skyndiminnis. Vegna þess að DOP notar sömu aðgerðir aftur og aftur neyðist skyndiminnið ekki til að geyma fleiri og fleiri nýjar en ekki raunverulega nýjar leiðbeiningar.

Heimildir

https://www.danielsefton.com/2016/05/developing-a-data-oriented-game-engine-part-1/

https://www.packtpub.com/books/content/what-difference-between-functional-and-object-oriented-programming

https://www.gamasutra.com/view/news/126498/Opinion_What_You_Need_To_Give_Up_When_Going_Data_Oriented.php

https://prateekvjoshi.com/2013/11/30/programming-paradigms-object-oriented-vs-data-oriented/

http://gamesfromwithin.com/data-oriented-design