Andmekesksed või objektorienteeritud kujundused

Videomängud on ahne. Nad võivad nõuda tohutult muutmälu, töötlemisvõimsust ja üldiselt koormavad füüsilist riistvara, mis vastutab andmete hankimise, nende käsitsemise ja tagastamise eest. Sel põhjusel on tekkinud arvukalt andmekeskse disaini pooldajaid, kes ütlevad, et võib-olla pole objektorienteeritud disain just parim viis nende monoliitsete rakenduste käitamiseks mõeldud koodi korraldamiseks.

Mis on andmetele orienteeritud disain, mille poolest see erineb OOP-st ja millised on mõned reeglid, mis käsitlevad DOP-koodi kirjutamist?

Kuidas see erineb OOP-st?

Nagu nimigi ütleb, keskendub objektorienteeritud programmeerimine objektide määratlemisele, tootmisele ja kasutamisele. See suunab kodeerijad:

  1. Tehke kindlaks, mis objektid on.
  2. Määrake, millist tüüpi andmeid objekt kuulub.
  3. Kirjeldage objekti funktsionaalsust.

Seejärel suhtlevad need objektid teiste objektide kaudu nende funktsioonide kaudu.

Kuidas objektid OOP-is töötavad?

Üks OOP suurtest eelistest on see, kui täpselt see peegeldab, kuidas me reaalmaailmaga suhtleme. Näiteks teades midagi „Laudade” klassist, võin ma palju aega kokku hoida, teades, mida ma lauaga teha saan ja mida mitte. Te ei osuta kunagi mingile tabeli eksemplarile ja küsige küsimust „Millist cappuccino’t see tabel teeb?”, Kuna tabeliklass ei anna tabelitele funktsiooni cappuccino ’de valmistamiseks.

Sellest kontseptsioonist saavad kasu ka polümorfism (polü - paljud; Morph - vormid), mis kirjeldab objektorienteeritud programmeerimise mustrit, kus klassidel on erinev liides ja funktsionaalsus. Kui mõelda loomade klassifitseerimisele, tean, et kass ja tiiger kuuluvad kasside klassi, tean automaatselt igaühe kohta palju, sukeldumata nende konkreetse klassi eripäradesse. Nad mõlemad pärivad kasside kõrgemast klassist teatud atribuudid ja andmed.

Kuid selle paradigma puhul on funktsioonid piiratud teatud andmetega ja neid ei saa uuesti kasutada. Kui soovite, et funktsioon töötaks objekti erineva andmestikuga, peab see funktsioon pärinema vanemklassist või tuleb see ümber kirjutada. Oluline on mõelda, kuidas sellele paradigmale pääseb juurde vanemklassilt päritud klassi kuuluvatele andmetele. Protsessorile ligipääsemiseks tuleb andmed hankida mitme klassi kaudu, mis võib olla ebatõhus.

Näide tööst, mida protsessor võib OOP-süsteemis teha.

Andmekesksed programmeerimised lähenevad kodeerimisele veidi erineval viisil. Objektide asemel on kõik andmed ja kõik saab toimida. See eraldab funktsionaalsuse ja andmed. Neid ei seo enam konkreetne reeglistik. DOP-is on teie funktsioonid üldotstarbelised ja rakendatakse suurtele andmepakettidele. Ideaalis struktureeriksite andmed võimalikult täpselt väljundandmetele, et funktsioon ise pingutaks võimalikult vähe.

"Andmekesksed kujundused nihutavad objektidelt programmeerimise vaatenurga andmete enda juurde: andmete tüüp, kuidas need mällu paigutatakse ning kuidas neid mängu loetakse ja töödeldakse."
Näide DOP-kõnede järjestusest. Palju vähem tööd töötlejale.

Miks just DOP?

Lihtne vastus on see, et töötlejad armastavad referentspaika. Need reeglid dikteerivad paljusid muid eeliseid, mida meile DOP annab. Näiteks viite paiknemist optimeeriva koodi kirjutamine annab meile palju lihtsama võimaluse paralleelsuse rakendamiseks. Paralleelimine proovib ülesannete samaaegseks täitmiseks kasutada mitut arvutiprotsessori südamikku. OOP-iga võib seda olla äärmiselt raske teha, kuna teil on oht, et töötleja mitu lõime üritavad samadele andmetele samaaegselt juurde pääseda. Kui grupeerite samasuguse mõttega andmed kokku ja kirjutate koodi, keskendudes üldiselt töödeldavatele andmetele, on nende funktsioonide töötlemiseks protsessori mitut lõime kasutada palju lihtsam.

DOP-i eeliseks on ka mälu vahemälu efektiivne kasutamine. Kuna DOP kasutab samu funktsioone ikka ja jälle, pole vahemälu sunnitud hoidma üha enam uusi, kuid mitte-tõesti-uusi juhiseid.

Allikad

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