Data-Oriented vs Object-Oriented Design

Videohry jsou chamtivé. Mohou vyžadovat obrovské množství paměti RAM, výpočetní výkon a obecně mohou zatěžovat fyzický hardware odpovědný za načítání, manipulaci a vracení dat. Z tohoto důvodu se objevilo několik zastánců Data-Oriented Design, kteří říkají, že možná Object-Oriented Design není nejlepším způsobem organizace kódu, který spouští tyto monolitické aplikace.

Co je to Data-Oriented Design, jak se liší od OOP a jaká jsou některá pravidla, jak přemýšlet o psaní DOP kódu?

Jak se liší od OOP?

Jak již název napovídá, objektově orientované programování je zaměřeno na definování, výrobu a provozování objektů. Směruje kodéry k:

  1. Zjistěte, jaké objekty jsou.
  2. Zjistěte, jaké typy dat patří k objektu.
  3. Popište funkčnost objektu.

Tyto objekty pak interagují s ostatními objekty prostřednictvím funkcí, které každý objekt vlastní.

Jak objekty fungují v OOP

Jednou z velkých výhod OOP je to, jak blízko se zdá, že odráží, jak interagujeme se skutečným světem. Například tím, že vím něco o třídě „Tabulky“, mohu si ušetřit spoustu času tím, že vím, co umím a co nemůžu dělat s tabulkou. Nikdy byste nepoukázali na instanci tabulky a zeptejte se: „Jaký typ cappuccina tato tabulka vytváří?“, Protože třída tabulek neposkytuje tabulkám funkčnost pro výrobu cappuccina.

Z tohoto konceptu získáváme také výhodu Polymorfismu (Poly - Many; Morph - Forms) popisuje vzorec v objektově orientovaném programování, ve kterém třídy mají různé funkce při sdílení společného rozhraní. Pokud přemýšlíte o klasifikaci zvířat, když vím, že kočka a tygr jsou součástí „kočičí“ třídy, automaticky o každém z nich hodně vím, aniž bych se ponořil do specifik svých konkrétních tříd. Oba „dědí“ určité atributy a data z vyšší třídy kočkovitých šelem.

S tímto paradigmatem jsou však funkce omezeny na určité části dat a nelze je znovu použít. Pokud chcete, aby funkce pracovala s jiným datem v rámci objektu, musí tato funkce buď zdědit z nadřazené třídy, nebo musí být přepsána. Je důležité přemýšlet o tom, jak je v tomto paradigmatu přístup k údajům uchovávaným ve třídě, která zdědí od nadřazené třídy. Aby bylo možné získat přístup k procesoru, který může být neefektivní, musí být data přenesena do několika tříd.

Příklad práce, kterou může procesor muset udělat v systému OOP.

Datově orientované programování přistupuje k kódování poněkud odlišným způsobem. Místo objektů jsou všechno data a na vše se dá jednat. Tím se oddělí funkce a data. Už nejsou propojeny specifickou sadou pravidel. V DOP jsou vaše funkce univerzální a jsou aplikovány na velké kusy dat. V ideálním případě byste data strukturovali co nejblíže k výstupním datům, abyste zajistili, že co nejméně úsilí je prováděno samotnou funkcí.

"Data-orientovaný design posouvá perspektivu programování z objektů na samotná data: Druh dat, jak je rozloženo v paměti a jak bude ve hře čten a zpracován."
Příklad sekvence volání DOP. Mnohem méně práce pro procesor.

Proč DOP?

Jednoduchá odpověď je, že zpracovatelé milují referenční místo. Toto pravidlo určuje mnoho dalších výhod, které nám přináší DOP. Například psaní kódu, který optimalizuje pro referenční lokalitu, nám poskytuje mnohem jednodušší způsob implementace paralelizace. Paralelizace se pokouší použít více než jedno jádro procesoru počítače k ​​provádění úkolů současně. To může být velmi obtížné s OOP, protože riskujete, že se více podprocesů procesoru pokusí o souběžný přístup ke stejným datům. Když však seskupíte podobně smýšlející data dohromady a zapíšete kód se zaměřením na data, která budou zpracována obecně, je mnohem jednodušší použít více vláken procesoru ke zpracování těchto funkcí.

Další výhodou DOP je efektivní využití paměti cache. Protože DOP využívá stejné funkce znovu a znovu, není cache nucena ukládat stále více nových, ale ne opravdu nových bloků výuky.

Prameny

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