Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
FI MUNI, Brno 2009Juraj Michálek
web: http://georgik.sinusgear.comtwitter: http://twitter.com/georgiksk
Vývoj v C++
TestujemeBoost
VyvíjameSTL, Allegro, SDL, ClanLib, LUA, Mesa3D...
LadímeEclipse a debuggerbežný debugging, pripojenie k procesupost-mortem
Nástroje
Obsah
Program programátora
1. programátor dostane skvelý nápad2. naprogramuje dokonalý program3. všetko si naprogramuje sám4. zistí, že program je nepoužiteľný
Na vlastných nohách
5. pokúsi sa program opraviť6. zistí, že polovicu funkcií naprogramoval zle7. preprogramuje zlé funkcie8. zistí, že program je opäť nepoužiteľnýgoto 5.
Modely vývoja
Ad-hocAdrenaline JunkieAgilné metódyScrumExtreme ProgrammingTest Driven Development
Testujeme
Od chaosu k štruktúre
http://www.boost.org“...one of the most highly regarded and expertly designed C++ library projects in the world.”
Herb Sutter and Andrei Alexandrescu
Boost – minuý rok
Boost - 2009
Boost Test Library
Test everything that could possibly breakjednoduchá tvorba tescasovTestSuite – TestCasetest je spustiteľný programbjam integruje spúšťanie testov
TestCase
using namespace boost::unit_test_framework;
/** * Test basic marshaller functionality */void testServerQuery(){ ServerQuery query = ServerQuery();
query.session = "112"; query.userId = "janko";
BOOST_CHECK_EQUAL( query.sessionAsChar(), "112" ); BOOST_CHECK_EQUAL( query.userIdAsChar(), "janko" );}
Jam
náhrada Makefilerozšíriteľné fukncieautomatická detekcia header filesprenositeľné: Unix, Windows, VMS, Macmalý CPU overheadbuild obrovských projektovškálovateľné(pozn. citlivé na medzery)
jam + TestCase
Jamfile (Jamroot)import testing ;run tests/testServerQuery.cpp server ;
Shell$ bjam...patience......found 2 targets......updating 2 targets...*** test passed ***
Vývoj
STL I.
základ pre C++práca s reťazcami
#include <string>operácie nad zoznamami
#include <list> #include <deque>
STL II.
operácie s asociatívnymi poliami#include <map>
špeciálne algoritmy (triedenie, výpis)#include <algorithm>
zhrnutie: umožňujú urýchlenie vývojahttp://www.sgi.com/tech/stl/
Otázka
Vystačíme so štandardnými funkciami STL?
Odpoveď
Interaktívne aplikácie
Interaktívne aplikácie
rýchla reagovať na užívateľamusia sa prispôsobovať jeho potrebámdobrým príkladom je počítačová hraukážeme si konkrétnu implementáciu
Vhodné knižnice
Allegro
Simple Direct Media Layer
Clanlib Simple Development Kit
Allegro
Allegro Low Level Game Routines
Allegro - aplikácia
spracovanie klávesnice, myši, joystickuspracovanie obrazu, zvukujednoduché GUIovládanie časovačovpoužívanie dátových súborovuvedené príklady z Allegro5 (4.9.x)
Programovanie I.
inicializácia Allegraal_init();
za funkciou main je nutné uviesť makroEND_OF_MAIN();
Inicializácia grafiky
inicializácia grafického prostrediaal_create_display(int w, int h)
ALLEGRO_BITMAP
štruktúra na uloženie obrazu
vytvorenie obrazovej pamäteALLEGRO_BITMAP *bmp = create_bitmap(x,y);
Grafika
vykreslenie bodu do pamäteal_putpixel(x, y, color)
načítanie obrazu zo súborual_load_bitmap(filename);
kopírovanie medzi pamäťamial_draw_bitmap(bmp, 10, 10, 0);
Grafika
Uvoľnenie obrazovej pamätedestroy_bitmap(bmp);
Klávesnica
zavedenie ovládača klávesniceal_install_keyboard()
odstránenie ovládača klávesniceal_uninstall_keyboard()
načítanie klávesyevent.keyboard.keycode
Myš
inštalácia a odstránenie ovládačaal_install_mouse()al_uninstall_mouse()
Ďalšie vlastnosti
prehrávanie samplov a MIDIukladanie súborov do datafilejednoduchá 3D grafika - polygonyjednoduché GUI
Knižnice nad Allegrom
Allegro má pomerne veľa funkciiAllegttf - práca s True Type fontamiAllegGL - práca GL grafikouDUMB - práca sa audiom (Vorbis/Ogg)
KompiláciaKonfiguračný skript
allegro-configLinux, Unix, BeOS, QNX, MacOS, Windows:
g++ foo.cc -o foo `allegro-config --libs`
Zdrojevývoj knižnice
http://alleg.sourceforge.netDokumentácia
http://alleg.sourceforge.net/a5docs/4.9.14/index.htm
Allegro.cc
Game development community networkMattew J. Leverton
http://www.allegro.cc
Knižnica
Simple Direct Media Layer
Programovanie
inicializácia systémuSDL_init(flags)
ukončenie systémuSDL_quit()
Grafika I.
inicializácia grafického prostrediaSDL_SetVideoMode(width, height, video_bpp, videoflags)
obrazové dáta v pamätiSDL_SWSURFACE
obrazové dáta vo video pamätiSDL_HWSURFACE
Grafika II.
štruktúra na uloženie obrazuSDL_Surface
vytvorenie obrazovej pamätesurface = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 32, rmask, gmask, bmask, amask);
Grafika III.
načítanie obrazu zo súboruSDL_Surface *SDL_LoadBMP(const char *file)
kopírovanie medzi pamäťamiSDL_BlitSurface(src, srcrect, dst, dstrect);
Klávesnica
stlačenie klávesy vyvolá udalosťSDL_PollEvent(SDL_Event *event)
test na stlačenie konkrétne klávesyevent.key.keysym.sym
Časovač
časovač implementovaný ako počítadlostatic int counter;
inštalácia funkcie volenej v pravidelných intervaloch
SDL_SetTimer(interval, tick);
Myš
zistenie stavu myšiSDL_GetMouseState(*x, *y);
Text
jednoduchý výpis textu nie je
Ďalšie vlastnosti
priama podpora GL knižníczabudovaný mechanizmus pre vláknaspolupráca s jazykmi
Ada, Eiffel, Java, Lua, Perl, PHP, Pike, Python, Ruby
176 rozširujúcich knižníc
Knižnice
SDL je samo o sebe pomerne ťažko použiteľnéSDL_mixer - multikanálový mixérSDL_image - spracovanie obrazových formátovSDL_net - práca so sieťou
Zdroje
vývojhttp://www.libsdl.org
portál s hramihttp://www.lgames.org
Kompilácia
konfiguračný skriptsdl-config
Linux, Windows, BeOS, Mac OSg++ foo.cc -o foo `sdl-config --libs`
LUA
silný skriptovací nástrojvolanie skriptov z programuvolanie programu zo skriptovjednoduchá syntax jazyka
http://www.lua.org
Dino
Games for Linux
podpora hier pre Linuxport a code, save the gamearchív 208 hier, 35 knižníc
http://games.linux.sk
GUI
Graphic User Interface
Vhodné knižnice
QT
FLTK
GTK
QT
produkt firmy Trolltechlicencie: open source aj komrčnéknižnica vznikla v roku 1996podporuje C++ a Javu
Platformy
MS/WindowsUnix/X11 - Linux, Sun Solaris, HP-UX, Compaq Tru64 UNIX, IBM AIX, IRIX, Mac OS XEmbedded - Linux platforms with framebuffer support.
Designernástroj na tvorbu GUIrozvrhnutú plochu ukladá do XML súboruz XML definície sa generuje kód programu
Kompilácia
uloženie projektuvytvorenie Makefile z projektu
qmake -o Makefile test.prokompilácia
make
Linguist
nástroj na preklad aplikáciiumožňuje oddeliť kód od textovprekladateľ a programátor pracujú samostatne
Amélia
KDE
Google Earth
Knižnica FLTK
The Fast Light Tool KitAutor: Bill Spitzakvenoval sa vývoju rozhraní pre Sun Microsystemsveľa myšlienok zjednodušil a vložil do kitunízko-úrovňová kompatibilita - 10% odlišnosti
Platformy
Unix, LinuxMicrosoft WindowsMacOSs podporou OpenGL a GLUT
FLUID
Fast Light User-Interface Designerjednoduchý designer na tvorbu GUI
GTK
GIMP ToolKitPeter Mattis, Spencer Kimball, Josh MacDonaldGNU Network Object Model Environment (GNOME)
C++, Guile, Perl, Python, TOM, Ada95, Objective C, Free Pascal, Eiffel
komplexne riešená knižnica
Glade 3
http://glade.gnome.orgdesign GUI - www.srobick.com
ACE
The ADAPTIVE Communication Environmenthttp://www.cs.wustl.edu/~schmidt/ACE.html
Open source C++ framework
reactor, proactoracceptor, connector
Ladíme
Když něco rozeberem, tak leda debuggerem
výkonné multiplatformové IDEhttp://www.eclipse.org
C/C++ - CDT pluginhttp://www.eclipse.org/cdt
Break point
Naštartujeme Debugger
A zastavíme
Prechádzka po stacku
Ladíme lokálnu aplikáciu
Možnosti:
Aplikácia vrámci workspacu.(videli sme)
Aplikácia mimo workspace.(ukážeme si)
Import binárky
Toto ešte zvládneme
A teraz príde trik – bez medzier!
Nesprávne!
Správne
Drobnosti pred štartom
Debug – lokálna aplikácia
Čo z bežiacimi aplikáciami?
Pripojíme sa na aplikáciu.
Pripojenie k bežiacenu procesu
Čo s aplikáciami na serveri?
Väčšina debuggerov podporujevzdialené pripojenie.
Aplikácia to neprežila
Post-mortem analýza
Zostal len jej obraz: coredump
Rýchla analýza coredumpu
Módy debuggera
Spustenie lokálnej aplikácie.
Pripojenie k lokálnemu procesu.
Pripojenie k vzdialenému procesu.
Post-mortem.
Nástroje
Profesionál vie používať správne nástrojena správny účel.
Subversion - SVN
verzovací nástrojjednoduchý na používanie
http://subversion.tigris.orgrepository, check-out, commit, merge
http://www.asinus.org/wiki/VideoTutorialSubversion
SVN klient pre Windowshttp://tortoisesvn.tigris.org
Source Control & Project Managementhttp://trac.edgewall.orghttp://trac-hacks.org/
GNU a Windows
Minimalist GNU For Windowshttp://www.mingw.org
Cygwin http://www.cygwin.comhttp://cygwinports.dotsrc.org/
Doxygen
generovanie dokumentácie preC, C++, Java, PythonPHP, C#, D
použitiedoxygen -g project.configdoxygen project.config
C#, .NET a Mono
open source implementácia .NETRozhranie napr. GTK#
http://www.mono-project.comSilverlight pre Linux - Moonlight
Python
silný objektovo orientovaný jazykplatformovo nezávislýintegrovateľný s C a C++
http://www.python.orghttp://www.py.cz
Twisted
udalosťami riadený sieťový frameworkpodpora TCP, UDP, SSL/TLS, multicastUnix socketsveľké množstvo protokolov
HTTP, NNTP, IMAP, SSH, IRC, FTP...http://twistedmatrix.com/trac/
PyGame
kombinácia sily Pythonua rýchlosti SDL (kód v C)
http://www.pygame.org
ProjektGoogle Code
http://code.google.com/opensourceSourceForge
http://sourceforge.netFreshMeat
http://freshmeat.net
Ohloh
porovnanie projektovrôzne metriky
http://www.ohloh.net
Open Source projekt
otvoriť program svetu - Open Sourceniekto môže vo vašej práci pokračovať
http://atanks.sf.net
se-radio.net
Software engineering radiozaujímavý a kvalitný podcast
http://www.se-radio.net
A je tu záver
Otázky?
Myšlienka
Existuje mnoho ciest ako vytvoriť program.
Zvoľte si tú, ktorá vás naučí najviac.
FI MUNI, Brno 2009Juraj Michálek
web: http://georgik.sinusgear.comtwitter: http://twitter.com/georgiksk
Ďakujem za pozornosť