Methods of Development
Embed Size (px)
description
Transcript of Methods of Development
-
#3Software planning
-
refactor
-
Vermijdt dubbele code
Welke code lijkt veel op elkaar?
-
Nieuwe functie / member maken
Verhuizen naar (super)object
Verhuizen naar free function
-
Assertions
Abstractie niveaus
Eindopdracht
-
Om goede parameters te garanderenassert(x > 0)
Om het bestaan van data te controlerenassert(texture != 0)
Om het programma te laten stoppenassert(false)
-
Iets hoort nooit te gebeurenIets is nog niet geimplementeerd
-
Action Script 3if (!expression) throw new Error("Assertion failed!");
C++assert(expression);
C#Assert.Test(expression);
-
Abstractie
-
Low level
-
case 0xF: if (channel == 0xF) // META event { param1 = *(m_event + 1); uint8_t *p2 = m_event + 2; length = GetVLQ(&p2); data = m_event + 3; m_nextEvent = m_event + 3 + length; }
-
Low levelAPI
-
DirectXOpenGLGXLibGMC
FMODBASSIrrKlang
ODEHavokAgeiaGraphicsGeluidPhysics
-
Low levelAPIWrappers
-
IDirect3DTexture9GLuintGXTexObjTextureD3DTexturePS3TextureWiiTexture2D
-
IDirect3DTexture9GLuintGXTexObjTextureD3DTexturePS3TextureWiiTexture2DTextureInterfaceTexture3D
-
Low levelAPIWrappersEngine
-
Code
Editor
Content pipeline (Maya plugin, etc)
Etc.
-
EntrypointMainloopInputhandlerRendererArtificial IntelligenceGame-world update
-
Zie USAT blog voor youtube link
-
Schrijf een refactoring-plan voor je medical project in maximaal 2 A4tjes
Uiterlijk 19 maart in mijn [email protected]
-
Bekijk de video Scrum et al. en vat deze samen in maximaal 2 A4tjes
http://www.youtube.com/watch?v=IyNPeTn8fpo
Uiterlijk 19 maart in mijn [email protected]
De green shell taktiek is goed nadenken welke richting de wensen van de designer op gaan, mikken, en schieten.*De red shell methode, past zich aan aan veranderende wensen. *In de regel komen deze 3 manieren van code emigreren vaak voor, en worden ook nagestreefd door programmeurs.**Er zijn technieken om ervoor te zorgen dat er niet vanalles mis gaat tijdens het verhuizen / verplaatsen van codeEen van die technieken is assertions plaatsen, assertions kun je gebruiken om te controleren of de parameters van functies kloppen, of om te kijken of een stuk code inderdaad ergens komt.*Zonder dit kan het voor komen dat je overzicht en controle kwijt raakt. Grote refactor acties (bijvoorbeeld als je een spel gaat poorten naar een ander platform) kunnen lang duren waardoor je misschien niet meer weet wat je al wel gerefactord had en wat niet.*Waarom zou je het programma willen laten stoppen? *Misschien heb je wel al aan sommige features gedacht maar die nog niet geimplementeerd, mocht je per ongeluk toch de functie aanroepen dan stopt het programma en laat de IDE (bv Visual Studio) zien waar het programma gestopt is.*Of iets heeft een waarde wat niet zou mogen kunnen (omdat het programma crasht bijvoorbeeld)In dit stuk code gebruik ik assertions om te garanderen dat de resource bestaat, en dat de waarde van variabele handle tussen 0 en het totale aantal handles in een lijst is. Dit doe ik omdat het programma zou crashen als een niet bestaande resource opgevraagd wordt.*Assertions kunnen in C++ geplaatst worden met assert(), in flash heb je Trace*Refactoring wordt niet alleen gedaan tijdens ontwikkeling om het project beter te onderhouden. Bij het poorten van een spel naar een ander platform moet je vaak in 1 keer grote delen van de abstraheren .*Er zijn verschillende abstractieniveaus bij programmeren, we beginnen met low-level*Op het laagste niveau is code vaak heel erg specifiek (in dit geval laadt dit stuk code een META event van een midi file in)*Iets hoger dan low-level code vinden we APIs*Een API is een application programming interface. Dit kan zijn in de vorm van een library (b.v. dll), of een stuk code die je in je project kan includen. Het gebruik van een API voorkomt dat je de details zelf moet implementeren*Je hebt verschillende APIs voor verschillende doeleinden, zoals graphics, geluid en physics*Iets abstracter dan een API is een wrapper. *Een wrappper is een ingepakt stuk code, om de details van implementatie te verbergen en de programmeur niet lastig te vallen met specialisaties. (zie volgende slide)*Abstracte class texture kent 3 specialisaties (TextureD3D, TexturePS3, TextureWii) die op lowlevel niveau gekoppeld zijn aan hun API equivalent*Als je meerdere soorten textures wilt ondersteunen (2D, 3D, Cube) kun je de abstractie naar een nog hoger niveau tillen door een base of interface class te maken*Op het hoogste niveau (in game development dan) vinden we de engine**Een engine is het hoogste niveau abstractie van alle componenten (code, editor, tools, etc)
*Qua code kun je onder de engine dus als de hoogste structuur van de componenten beschouwen*