Methods of Development

of 34 /34
#3 Software planning

Embed Size (px)

description

#3Software planning. Methods of Development. Waarom ook alweer ?. refactor. Minder code is betere code. Vermijdt dubbele code Welke code lijkt veel op elkaar ?. Code emigreren. Nieuwe functie / member maken Verhuizen naar (super)object Verhuizen naar ‘free function’. Inhoud. - PowerPoint PPT Presentation

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*