SlideShare a Scribd company logo
FI MUNI, Brno 2010
Juraj Michálek
web: http://georgik.sinusgear.com
twitter: http://twitter.com/georgiksk
Vývoj v C++
Vyvíjame
STL, Allegro, SDL, ClanLib, LUA, Mesa3D...
Ladíme
Eclipse a debugger
Kontinuálna integrácia
Boost, Hudson CI, Maven
Nástroje
Iné jazyky
Obsah
Program programátora
1. programátor dostane skvelý nápad
2. naprogramuje dokonalý program
3. všetko si naprogramuje sám
4. zistí, že program je nepoužiteľný
Na vlastných nohách
5. pokúsi sa program opraviť
6. zistí, že polovicu funkcií naprogramoval zle
7. preprogramuje zlé funkcie
8. zistí, že program je opäť nepoužiteľný
goto 5.
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ývoja
http://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ľa
musia sa prispôsobovať jeho potrebám
dobrým príkladom je počítačová hra
ukáž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, joysticku
spracovanie obrazu, zvuku
jednoduché GUI
ovládanie časovačov
používanie dátových súborov
uvedené príklady z Allegro
Allegro 5
nová architektúra
podpora pre bežné OS
podpora pre iPhone/iPad
podstatne vyššia rýchlosť
Programovanie I.
inicializácia Allegra
al_init();
Inicializácia grafiky
inicializácia grafického prostredia
al_create_display(int w, int h)
ALLEGRO_BITMAP
štruktúra na uloženie obrazu
vytvorenie obrazovej pamäte
ALLEGRO_BITMAP *bmp = create_bitmap(x,y);
Grafika
vykreslenie bodu do pamäte
al_putpixel(x, y, color)
načítanie obrazu zo súboru
al_load_bitmap(filename);
kopírovanie medzi pamäťami
al_draw_bitmap(bmp, 10, 10, 0);
Grafika
Uvoľnenie obrazovej pamäte
al_destroy_bitmap(bmp);
Klávesnica
zavedenie ovládača klávesnice
al_install_keyboard()
odstránenie ovládača klávesnice
al_uninstall_keyboard()
načítanie klávesy
event.keyboard.keycode
Myš
inštalácia a odstránenie ovládača
al_install_mouse()
al_uninstall_mouse()
Ďalšie vlastnosti
prehrávanie samplov a MIDI
ukladanie súborov do datafile
jednoduchá 3D grafika - polygony
jednoduché GUI
Knižnice nad Allegrom
Allegro má pomerne veľa funkcii
Allegttf - práca s True Type fontami
AllegGL - práca GL grafikou
DUMB - práca sa audiom (Vorbis/Ogg)
Kompilácia
Konfiguračný skript
allegro-config
Linux, Unix, BeOS, QNX, MacOS, Windows:
g++ foo.cc -o foo
`allegro-config --libs`
iPhone/iPad
vyžaduje Xcode
Zdroje
vývoj knižnice
http://alleg.sourceforge.net
Allegro.cc
Game development community network
Mattew J. Leverton
http://www.allegro.cc
Knižnica
Simple Direct Media Layer
Programovanie
inicializácia systému
SDL_init(flags)
ukončenie systému
SDL_quit()
Grafika I.
inicializácia grafického prostredia
SDL_SetVideoMode(width, height,
video_bpp, videoflags)
obrazové dáta v pamäti
SDL_SWSURFACE
obrazové dáta vo video pamäti
SDL_HWSURFACE
Grafika II.
štruktúra na uloženie obrazu
SDL_Surface
vytvorenie obrazovej pamäte
surface =
SDL_CreateRGBSurface(SDL_SWSURFACE,
width, height, 32, rmask, gmask, bmask, amask);
Grafika III.
načítanie obrazu zo súboru
SDL_Surface *SDL_LoadBMP(const char
*file)
kopírovanie medzi pamäťami
SDL_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ávesy
event.key.keysym.sym
Časovač
časovač implementovaný ako počítadlo
static int counter;
inštalácia funkcie volenej v pravidelných
intervaloch
SDL_SetTimer(interval, tick);
Myš
zistenie stavu myši
SDL_GetMouseState(*x, *y);
Text
jednoduchý výpis textu nie je
Ďalšie vlastnosti
priama podpora GL knižníc
zabudovaný mechanizmus pre vlákna
spoluprá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ér
SDL_image - spracovanie obrazových
formátov
SDL_net - práca so sieťou
Zdroje
vývoj
http://www.libsdl.org
portál s hrami
http://www.lgames.org
Kompilácia
konfiguračný skript
sdl-config
Linux, Windows, BeOS, Mac OS
g++ foo.cc -o foo
`sdl-config --libs`
Knižnica
ClanLib game Simple Development Kit
http://www.clanlib.org
LUA
silný skriptovací nástroj
volanie skriptov z programu
volanie programu zo skriptov
jednoduchá syntax jazyka
http://www.lua.org
Knižnica
Mesa
http://mesa3d.sourceforge.net
Dino
Games for Linux
podpora hier pre Linux
port a code, save the game
archív 208 hier, 35 knižníc
http://games.linux.sk
GUI
Graphic User Interface
Vhodné knižnice
QT
FLTK
GTK
QT
Trolltech:
http://www.trolltech.com
QT
produkt firmy Trolltech
licencie: open source aj komrčné
knižnica vznikla v roku 1996
podporuje C++ a Javu
Platformy
MS/Windows
Unix/X11 - Linux, Sun Solaris, HP-UX,
Compaq Tru64 UNIX, IBM AIX, IRIX, Mac
OS X
Embedded - Linux platforms with framebuffer
support.
Designer
nástroj na tvorbu GUI
rozvrhnutú plochu ukladá do XML súboru
z XML definície sa generuje kód programu
Kompilácia
uloženie projektu
vytvorenie Makefile z projektu
qmake -o Makefile test.pro
kompilácia
make
Linguist
nástroj na preklad aplikácii
umožňuje oddeliť kód od textov
prekladateľ a programátor pracujú
samostatne
Amélia
KDE
Google Earth
FLTK
http://www.fltk.org
Knižnica FLTK
The Fast Light Tool Kit
Autor: Bill Spitzak
venoval sa vývoju rozhraní pre Sun
Microsystems
veľa myšlienok zjednodušil a vložil do kitu
nízko-úrovňová kompatibilita - 10% odlišnosti
Platformy
Unix, Linux
Microsoft Windows
MacOS
s podporou OpenGL a GLUT
FLUID
Fast Light User-Interface Designer
jednoduchý designer na tvorbu GUI
Knižnica
http://www.gtk.org
GTK
GIMP ToolKit
Peter Mattis, Spencer Kimball, Josh
MacDonald
GNU 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.org
design GUI - www.srobick.com
Adobe Alchemy
C/C++ kód skompilovaný pre FlashPlayer
výhody Flash Platformy
prenositeľnosť
podpora na väčšine platforiem
príklad: Doom
http://labs.adobe.com
ACE
The ADAPTIVE Communication Environment
http://www.cs.wustl.edu/~schmidt/ACE.html
Open source C++ framework
reactor, proactor
acceptor, connector
Ladíme
Když něco rozeberem, tak leda debuggerem
výkonné multiplatformové IDE
http://www.eclipse.org
C/C++ - CDT plugin
http://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 podporuje
vzdialené 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.
Valgrind
debugging a profiling
memcheck
memory leaky
helgrind
race condition, thread profiling
Kontinuálna integrácia
Od chaosu k štruktúre
Modely vývoja
Agilné metódy
Scrum
Extreme Programming
Test Driven Development
http://www.agilnikonsorcium.cz
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 – 2010
Boost Test Library
Test everything that could possibly break
jednoduchá tvorba tescasov
TestSuite – TestCase
test je spustiteľný program
bjam 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 Makefile
rozšíriteľné fukncie
automatická detekcia header files
prenositeľné: Unix, Windows, VMS, Mac
malý CPU overhead
build 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 ***
Maven pre C++
web: http://maven.apache.org
mvn [parametre|ciele]
súbor s definíciou projekt
pom.xml
plugin pre C++
native-maven-plugin
Obsah pom.xml
Artifacts
Dependencies
Plugins
Repositories
Programovanie v C++
Kontinuálna integrácia
projekt tvorený zo zdrojových kódov
rýchlo kontrola po commite
Hudson CI – príklad:
http://hudson.sinusgear.com
Nástroje
Profesionál vie používať správne nástroje
na správny účel.
Subversion - SVN
verzovací nástroj
jednoduchý na používanie
http://subversion.tigris.org
repository, check-out, commit, merge
http://www.asinus.org/wiki/VideoTutorialSubversion
SVN klient pre Windows
http://tortoisesvn.tigris.org
GIT
oproti SVN možnosť lokálných commitov
Social Coding
http://www.github.com
Source Control & Project Management
http://trac.edgewall.org
http://trac-hacks.org/
GNU a Windows
Minimalist GNU For Windows
http://www.mingw.org
Cygwin
http://www.cygwin.com
http://cygwinports.dotsrc.org/
Doxygen
generovanie dokumentácie pre
C, C++, Java, Python
PHP, C#, D
použitie
doxygen -g project.config
doxygen project.config
C#, .NET a Mono
open source implementácia .NET
Rozhranie napr. GTK#
http://www.mono-project.com
Silverlight pre Linux - Moonlight
Python
silný objektovo orientovaný jazyk
platformovo nezávislý
integrovateľný s C a C++
http://www.python.org
http://www.py.cz
Twisted
udalosťami riadený sieťový framework
podpora TCP, UDP, SSL/TLS, multicast
Unix sockets
veľké množstvo protokolov
HTTP, NNTP, IMAP, SSH, IRC, FTP...
http://twistedmatrix.com/trac/
PyGame
kombinácia sily Pythonu
a rýchlosti SDL (kód v C)
http://www.pygame.org
Projekt
Google Code
http://code.google.com/opensource
SourceForge
http://sourceforge.net
FreshMeat
http://freshmeat.net
Ohloh
porovnanie projektov
rôzne metriky
http://www.ohloh.net
Open Source projekt
otvoriť program svetu - Open Source
niekto môže vo vašej práci pokračovať
http://atanks.sf.net
se-radio.net
Software engineering radio
zaujímavý a kvalitný podcast
http://www.se-radio.net
A je tu záver
Otázky?
FI MUNI, Brno 2010
Juraj Michálek
web: http://georgik.sinusgear.com
twitter: http://twitter.com/georgiksk
Ďakujem za pozornosť

More Related Content

PDF
There is much more to C
PDF
Vývoj pre Google Android
PDF
Zváračský kurz na BlazeDS a Google App Engine
PDF
Bezpečnosť v kontexte RIA technológií
PDF
Ať se z kódu nepráší!
PDF
BarCamp - Zváračský kurz na Web
PDF
Mobile first! Plynulý workflow - AIR
PDF
Libraries and tools for C++
There is much more to C
Vývoj pre Google Android
Zváračský kurz na BlazeDS a Google App Engine
Bezpečnosť v kontexte RIA technológií
Ať se z kódu nepráší!
BarCamp - Zváračský kurz na Web
Mobile first! Plynulý workflow - AIR
Libraries and tools for C++

Similar to Programovanie v C++ (20)

ODP
Processing workshop intro
PDF
Magsa-generovanie
PPTX
PDF
Matúš Jančík: Programuj rýchlejšie, meraj presnejšie
PDF
Android libraries
PDF
SecureCam Program Guide
PDF
The New Distrowatch – Bachelor's thesis (SK)
ODP
Prezentácia: Diplomový seminár 2
PDF
Samuel Hopko & Daniel Rajčan - Cloud Computing
RTF
347471_zaverecny_ukol
PPTX
PlatformIO - Namakané Arduino IDE
PDF
Debian na minimum | Energo TT Live 2012
PDF
Deltacloud Presentation OpenHouse 2010
PPTX
Cucumber - Testovanie webových aplikácií
ODT
PPTX
PPTX
PPTX
ODP
Prezentácia: Diplomový seminár
Processing workshop intro
Magsa-generovanie
Matúš Jančík: Programuj rýchlejšie, meraj presnejšie
Android libraries
SecureCam Program Guide
The New Distrowatch – Bachelor's thesis (SK)
Prezentácia: Diplomový seminár 2
Samuel Hopko & Daniel Rajčan - Cloud Computing
347471_zaverecny_ukol
PlatformIO - Namakané Arduino IDE
Debian na minimum | Energo TT Live 2012
Deltacloud Presentation OpenHouse 2010
Cucumber - Testovanie webových aplikácií
Prezentácia: Diplomový seminár
Ad

More from Juraj Michálek (20)

PDF
Rust Embedded Development on ESP32 and basics of Async with Embassy
PDF
Embedded Development on ESP32 - FEKT VUT - UREL
PDF
Embedded Rust on ESP2 - Rust Linz
PDF
How Open Source Community and Espressif made it possible to use Rust language...
PDF
C language in our world 2019
PDF
C language in our world 2017
PDF
Continuous Delivery - FIT VUT
PDF
C language in our world 2016
PDF
Story behind PF 2016
PDF
C++ and Software Engineering 2015
PDF
C language in our world 2015
PDF
C++ in our world
PDF
Bigger & Better RnD - GeeCON.cz 2014
PDF
Gradle and build systems for C language
PDF
The story behind PF2014 - Cordova
PDF
There is more to C 2013
PDF
PowerShell UIAtomation
PDF
PowerShell from *nix user perspective
PDF
Ať se z kódu nepráší! 2013
PDF
There is more to C
Rust Embedded Development on ESP32 and basics of Async with Embassy
Embedded Development on ESP32 - FEKT VUT - UREL
Embedded Rust on ESP2 - Rust Linz
How Open Source Community and Espressif made it possible to use Rust language...
C language in our world 2019
C language in our world 2017
Continuous Delivery - FIT VUT
C language in our world 2016
Story behind PF 2016
C++ and Software Engineering 2015
C language in our world 2015
C++ in our world
Bigger & Better RnD - GeeCON.cz 2014
Gradle and build systems for C language
The story behind PF2014 - Cordova
There is more to C 2013
PowerShell UIAtomation
PowerShell from *nix user perspective
Ať se z kódu nepráší! 2013
There is more to C
Ad

Programovanie v C++