• No results found

8 Sammanfattning och framtida arbete

Detta arbete presenterar en jämförelse mellan objektorienterad programmering och data orienterad design. Studien utförs både genom en litteraturundersökning, som redogör för kända för- och nackdelar med respektive teknik, samt ett experiment som mäter processoranvändning, FPS och minnesanvändning i tre olika miljöer på en simulering som använder sig av de bägge teknikerna. Mätningarna av simuleringen sker på tre olika nivåer.

Resultatet av litteraturstudien visar på att det som tas upp som den vanligaste fördelen med OOP är att det möjliggör återanvändning av kod. Detta utförs ofta i form av arv och här bör man vara försiktig så inte arvshierarkierna blir alltför djupa då det påverkar prestandan. OOP nämns även göra det lätt att underhålla kodbasen samt att OOP-systemen är uppbyggda av objekt som förekommer och existerar i riktiga världen. OOPs inkapsling nämns även som en fördel men även här gäller det att tänka på att baksidan av detta är kostnad av prestanda som även nämns som OOPs största nackdel.

När det kommer till DODs för- och nackdelar finns dessvärre betydligt mindre underlag. Det uppkommer dock att DOD leder till cachevänligare kod med färre cachemissar samt att koden blir lättare att parallellisera i jämförelse med OOP. DOD tar dock tid att lära sig och det kräver en hel del övning.

Resultatet av experimentet indikerar på en stor skillnad mellan hur mycket hårdvaruresurser de olika versionerna av simuleringen använder. DOD-versionen använder betydligt mindre av processorn och ligger mer stabilt i alla sina tre nivåer när det kommer till minnesanvändningen än vad OOP-versionen gör. Ju mer prestandakrävande applikationen är desto mer tenderar det att skilja mellan de olika teknikerna. Intressant är också att vid en applikation som inte är speciellt prestandakrävande så märks ingen skillnad av just processoranvändningen mellan de två olika teknikerna. Koden är dock skriven enkeltrådigt med användning av Unity och deras nya teknikstack, DOTS. Ingen tid är lagd på att optimera koden. Det är därför viktigt att tänka på att dessa resultat reflekterar hur det ser ut när man använder sig av Unity och koden är enkeltrådig. Tanken var först att koden skulle skrivits multitrådad men då tiden är begränsad och min kunskap inom multitrådning även den är begränsad så var detta dessvärre inte genomförbart.

Detta arbete kan ses som intressant för vetenskapen då DOD fortfarande verkar vara ett relativt outforskat område där mer kunskap behövs. Arbetet är också intressant för industrin och samhället då om man vid tillverkningen av applikationer kan skriva kod som flera användare i samhället kan använda utan att kontinuerligt behöva uppgradera sin hårdvara. Byter man ut hårdvaran mindre blir det även mer ekonomiskt samt mer miljövänligt.

multitrådad kod. Det hade även varit intressant att testa simuleringen på andra typer av hårdvara såsom t ex mobila enheter.

På grund av tidsbegränsningar utfördes endast mätningarna på enkeltrådad kod. Då dagens moderna processorer består av flera kärnor är det därför av intresse att se hur dessa mätningar blir på parallelliserad kod. Framtida arbete är därför att utföra mätningarna på multitrådad kod.

Då OOP-koden inte är optimerad vore det även av intresse att optimera denna kod så mycket som möjligt för att se om skillnaden mellan de olika teknikerna blir mindre. Det hade även varit intressant att bredda experimentet genom att utföra det i flera olika miljöer såsom t ex på mobila enheter. Används mindre av hårdvaruresurserna så används ju även mindre av batteriet vilket medför att batteritiden borde blir längre på de mobila enheterna.

Referenser

[1] Nationalencyklopedin, ​Moores lag​. [Online] Tillgänglig:

http://www.ne.se/uppslagsverk/encyklopedi/lång/moores-lag [Hämtad

2020-07-22]

[2] Thomas A. Limoncelli, Christina J. Hogan, and Strata R. Chalup, ​The

practice of System and Network Administration, vol. 1, 3rd ed. ​Addison

Wesley, 2019.

[3] ​Noel Llopis (2009). ​Data-Oriented Design (Or Why You Might Be

Shooting Yourself in the Foot With OOP)​. [Online]. Tillgänglig:

http://gamesfromwithin.com/data-oriented-design​ [Hämtad 2020-01-28] [4] Code Monkey, ​Unity DOTS Explained (ECS, Job System, Burst

Compiler)​. [Online].

Tillgänglig: ​https://www.youtube.com/watch?v=Z9-WkwdDoNY [Hämtad 2020-02-17]

[5] Unity (2019). Live Coding #2: Building Powerful Games with DOTS by

Unity​. [Online]. Tillgänglig:

https://www.welcometothejungle.com/en/articles/games-dots-ecs-unity [Hämtad 2020-01-29]

[6] Gustav Löfstedt (2012). ​Design av komponentbaserade entitetsystem​.

[Online]. Tillgänglig:

http://www.diva-portal.org/smash/get/diva2:549225/FULLTEXT01.pdf [Hämtad 2020-01-29]

[7] Daniele Albano. ​Data Processing in C - Performance of OOP vs DOD​.

[Online]. Tillgänglig:

https://medium.com/@d.albano/data-processing-in-c-performance-of-oop-vs-dod-a23e94babf5c​ [Hämtad 2020-01-29]

[8] Stephanie Shen. ​Design Principles for Big Data Performance​. [Online]. Tillgänglig:

https://towardsdatascience.com/design-principles-for-big-data-performance-c d2c0e9e92bd​ [Hämtad 2020-02-05]

[9] ​EventHelix, ​Why software developers should care about CPU caches​.

[Online] ​Tillgänlig:

https://medium.com/software-design/why-software-developers-should-care-a bout-cpu-caches-8da04355bb8a​ ​[Hämtad 2020-03-12]

[10] Tomas Engquist. ​Functional vs Object-Oriented Programming​. [Online].

Tillgänglig:

https://medium.com/better-programming/functional-vs-object-oriented-progr amming-e5939c8105ff​ [Hämtad 2020-02-15]

[11] Ole Lehrmann Madsen, Birger Moller-Pedersen, Kristen Nygaard.

Object-oriented Programming in the Beta Programming Language​. [Online].

Tillgänglig: ​https://pure.au.dk/ws/files/22457980/book.pdf [Hämtad 2020-02-15]

[12] ComputerSweden. ​Smalltalk​. [Online]. Tillgänglig: https://it-ord.idg.se/ord/smalltalk/​ [Hämtad 2020-02-15]

[13] Richard Fabian (2013). ​Data-Oriented Design​. [Online]. Tillgänglig: ​http://dataorienteddesign.com/dodmain.pdf [Hämtad 2020-01-27]

[14] Quora, ​What is data driven programming?​. [Online]. ​Tillgänglig: https://www.quora.com/What-is-data-driven-programming

[Hämtad 2020-07-26]

[15] Smartify. ​Få ordning på din fps​. [Online]. Tillgänglig: https://smartify.se/blogg/fa-ordning-pa-din-fps/​ [Hämtad 2020-02-12]

[16] Apica. ​The 5 Most Common Performance BottleNecks​. [Online]. Tillgänglig:

https://www.apicasystems.com/blog/5-common-performance-bottlenecks/ [Hämtad 2020-02-12]

[17] Johan Hagelbäck, ​Systematic Literature Review​. [Online]. Tillgänglig: https://coursepress.lnu.se/subject/thesis-projects/systematic-literature-review/ [Hämtad 2020-02-18]

[18] Johan Hagelbäck, ​Controlled Experiment​. [Online]. Tillgänglig: https://coursepress.lnu.se/subject/thesis-projects/controlled-experiment/ [Hämtad 2020-02-18]

[19] Unity Learn. ​Diagnosing Performance Problems​. [Online]. Tillgänglig:

https://learn.unity.com/tutorial/diagnosing-performance-problems [Hämtad 2020-02-04]


[20] Unity Dokumentation. ​GameObject​. [Online].

Tillgänglig: ​https://docs.unity3d.com/Manual/class-GameObject.html [Hämtad 2020-04-29]


[21] Unity Dokumentation. ​Rigidbody​. [Online].

Tillgänglig: ​https://docs.unity3d.com/Manual/class-Rigidbody.html [Hämtad 2020-04-29]


[22] Unity Dokumentation. ​Important Classes​. [Online].

Tillgänglig: ​https://docs.unity3d.com/Manual/ScriptingImportantClasses.html [Hämtad 2020-04-29]


[23] Effective Unity. ​A first example of Unity ECS in action​. [Online]. Tillgänglig:​ ​https://www.effectiveunity.com/ecs/04-a-first-example/

[Hämtad 2020-07-18]


[24] Turbo Makes Games. ​Unity DOTS Tutorial - Converting GameObjects

to Entities - Unity ECS 2020​. [Online]. Tillgänglig:

https://www.youtube.com/watch?v=LrG4k7lkZvs​ [Hämtad 2020-07-18]


[25] Unity Dokumentation.​ MonoBehaviour​. [Online].

Tillgänglig: ​https://docs.unity3d.com/ScriptReference/MonoBehaviour.html [Hämtad 2020-07-18]


[26] Unity Dokumentation.​ Behaviour​. [Online].

Tillgänglig: ​https://docs.unity3d.com/ScriptReference/Behaviour.html [Hämtad 2020-07-18]


[27] Unity Dokumentation.​ Component​. [Online].

Tillgänglig: ​https://docs.unity3d.com/ScriptReference/Component.html [Hämtad 2020-07-18]


[28] Unity Dokumentation.​ Object​. [Online].

Tillgänglig: ​https://docs.unity3d.com/ScriptReference/Object.html [Hämtad 2020-07-18]


[29] Career Karma. ​Object-oriented Programming Languages: A 2020

Guide​. [Online]. Tillgänglig:

https://careerkarma.com/blog/object-oriented-languages/ [Hämtad 2020-08-27]


[30] BrainKart.com. ​Advantages and Disadvantages of OOP​. [Online]. Tillgänglig:

https://www.brainkart.com/article/Advantages-and-Disadvantages-of-OOP_3 6649/​ [Hämtad 2020-08-27]


[31] The complete Codes. ​Advantages and Disadvantages of OOP | C++

Programming. ​[Online]. Tillgänglig:

https://www.thecompletecodes.com/2018/05/advantages-and-disadvantages-o f-oop.html​ [Hämtad 2020-08-27]


[32] Robert Half. ​4 Advantages of Object-Oriented Programming​. [Online]. Tillgänglig:

https://www.roberthalf.com/blog/salaries-and-skills/4-advantages-of-object-o riented-programming​ [Hämtad 2020-08-27]


[33] GeeksforGeeks. ​OOPs | Object Oriented Design​. [Online]. Tillgänglig: https://www.geeksforgeeks.org/oops-object-oriented-design/

[Hämtad 2020-08-27]


[34] Shakuro. ​A Non-Developer’s Guide to Object-Oriented Programming​.

[Online]. Tillgänglig:

https://shakuro.com/blog/a-non-developers-guide-to-object-oriented-program ming​ [Hämtad 2020-08-27]


[35] EDUCBA. ​What is OOP? [Online]. Tillgänglig: https://www.educba.com/what-is-oop/​ [Hämtad 2020-08-27]


[36] AssigmentHelp4Me. ​An explicit write up on Object Oriented

Programming​. [Online]. Tillgänglig:

https://assignmenthelp4me.com/article-advantages-and-disadvantages-of-obje ct-oriented-programming-161.html​ [Hämtad 2020-08-27]

[37] The Saylor Foundation. ​Advantages and Disadvantages of

Object-Oriented programming (OOP)​. [Online]. Tillgänglig:

https://resources.saylor.org/wwwresources/archived/site/wp-content/uploads/ 2013/02/CS101-2.1.2-AdvantagesDisadvantagesOfOOP-FINAL.pdf

[Hämtad 2020-08-27]

[38] TechTerms. ​OOP​. [Online]. Tillgänglig: https://techterms.com/definition/oop​ [Hämtad 2020-08-27]

[39] Medium. ​Data-Oriented vs Object-Oriented Design​. [Online]. Tillgänglig:

https://medium.com/@jonathanmines/data-oriented-vs-object-oriented-design -50ef35a99056​ [Hämtad 2020-08-27]

[40] stackoverflow. ​Data-oriented design in practice?​. [Online]. Tillgänglig: https://stackoverflow.com/questions/3425869/data-oriented-design-in-practic e​ [Hämtad 2020-08-27]

[41] Techwalla. ​Advantages & Disadvantages of Object-Oriented

Programming​. [Online]. Tillgänglig:

https://www.techwalla.com/articles/advantages-disadvantages-of-object-orien ted-programming​ [Hämtad 2020-08-27]

[42] stackoverflow. ​What is data oriented design?​. [Online]. Tillgänglig: https://stackoverflow.com/questions/1641580/what-is-data-oriented-design [Hämtad 2020-08-27]

[43] Marc Costa. ​On C++ and Object Oriented Programming​. [Online]. Tillgänglig:

https://marccgk.github.io/blog/on-c-and-object-oriented-programming/ [Hämtad 2020-08-27]

[44] BetterProgramming.​Object-Oriented Programming - The Trillion dollar

Disaster​. [Online]. Tillgänglig:

https://medium.com/better-programming/object-oriented-programming-the-tr illion-dollar-disaster-92a4b666c7c7​ [Hämtad 2020-08-27]

[45] Medium. ​Data-oriented design is more than just performance​. [Online]. Tillgänglig:

https://medium.com/@gamevanilla/data-oriented-design-is-more-than-just-pe rformance-d3aad3bf3b5a​ [Hämtad 2020-08-27]

[46] CppCon.​CppCon 2014: Mike Acton “Data-Oriented Design and C++”​.

[Online]. Tillgänglig:

https://www.youtube.com/watch?v=rX0ItVEVjHc&feature=youtu.be [Hämtad 2020-08-01]

[47] Unity Documentation. ​CPU Usage Profiler module​. [Online]. Tillgänglig: ​https://docs.unity3d.com/Manual/ProfilerCPU.html [Hämtad 2020-07-19]

[48] Unity. ​Memory profiling question: “Used Total” vs “Total System

Memory Usage”​. [Online]. Tillgänglig:

https://forum.unity.com/threads/memory-profiling-question-used-total-vs-tota l-system-memory-usage.462919/​ [Hämtad 2020-07-19]

[49] Feaneron. ​The Infamous GNOME Shell Memory Leak​. [Online]. Tillgänglig:

https://feaneron.com/2018/04/20/the-infamous-gnome-shell-memory-leak/ [Hämtad 2020-07-20]

[50] Unity Documentation. ​Getting started with the profiler window​. [Online]. Tillgänglig: ​https://docs.unity3d.com/Manual/ProfilerWindow.html [Hämtad 2020-07-20]

[51] Unity. ​Windows Standalone il2cpp player grey screen & Live Link

Error​. [Online]. Tillgänglig:

https://forum.unity.com/threads/windows-standalone-il2cpp-player-grey-scre en-live-link-error.870577/​ [Hämtad 2020-08-01]

A Bilaga 1 Koden till simuleringarna

Related documents