vývoj v c++ … · program programátora 1. programátor dostane skvelý nápad 2. naprogramuje...

113
FI MUNI, Brno 2010 Juraj Michálek web: http://georgik.sinusgear.com twitter: http://twitter.com/georgiksk Vývoj v C++

Upload: others

Post on 13-Aug-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Vývoj v C++ … · 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ý

FI MUNI, Brno 2010Juraj Michálek

web: http://georgik.sinusgear.comtwitter: http://twitter.com/georgiksk

Vývoj v C++

Page 2: Vývoj v C++ … · 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ý

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

Page 3: Vývoj v C++ … · 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ý

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ý

Page 4: Vývoj v C++ … · 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.

Page 5: Vývoj v C++ … · 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ý

Vývoj

Page 6: Vývoj v C++ … · 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ý

STL I.

základ pre C++

práca s reťazcami

#include <string>

operácie nad zoznamami

#include <list>

#include <deque>

Page 7: Vývoj v C++ … · 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ý

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/

Page 8: Vývoj v C++ … · 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ý

Otázka

Vystačíme so štandardnými funkciami STL?

Page 9: Vývoj v C++ … · 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ý

Odpoveď

Page 10: Vývoj v C++ … · 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ý

Interaktívne aplikácie

Page 11: Vývoj v C++ … · 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ý

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

Page 12: Vývoj v C++ … · 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ý

Vhodné knižnice

Allegro

Simple Direct Media Layer

Clanlib Simple Development Kit

Page 13: Vývoj v C++ … · 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ý

Allegro

Allegro Low Level Game Routines

Page 14: Vývoj v C++ … · 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ý

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

Page 15: Vývoj v C++ … · 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ý

Allegro 5

nová architektúra

podpora pre bežné OS

podpora pre iPhone/iPad

podstatne vyššia rýchlosť

Page 16: Vývoj v C++ … · 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ý

Programovanie I.

inicializácia Allegra

al_init();

Page 17: Vývoj v C++ … · 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ý

Inicializácia grafiky

inicializácia grafického prostredia

al_create_display(int w, int h)

Page 18: Vývoj v C++ … · 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ý

ALLEGRO_BITMAP

štruktúra na uloženie obrazu

vytvorenie obrazovej pamäte

ALLEGRO_BITMAP *bmp = create_bitmap(x,y);

Page 19: Vývoj v C++ … · 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ý

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);

Page 20: Vývoj v C++ … · 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ý

Grafika

Uvoľnenie obrazovej pamäte

al_destroy_bitmap(bmp);

Page 21: Vývoj v C++ … · 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ý

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

Page 22: Vývoj v C++ … · 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ý

Myš

inštalácia a odstránenie ovládača

al_install_mouse()

al_uninstall_mouse()

Page 23: Vývoj v C++ … · 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ý

Ďalšie vlastnosti

prehrávanie samplov a MIDI

ukladanie súborov do datafile

jednoduchá 3D grafika - polygony

jednoduché GUI

Page 24: Vývoj v C++ … · 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ý

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)

Page 25: Vývoj v C++ … · 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ý

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

Page 26: Vývoj v C++ … · 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ý

Zdroje

vývoj knižnice

http://alleg.sourceforge.net

Page 27: Vývoj v C++ … · 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ý

Allegro.cc

Game development community network

Mattew J. Leverton

http://www.allegro.cc

Page 28: Vývoj v C++ … · 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ý

Knižnica

Simple Direct Media Layer

Page 29: Vývoj v C++ … · 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ý

Programovanie

inicializácia systému

SDL_init(flags)

ukončenie systému

SDL_quit()

Page 30: Vývoj v C++ … · 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ý

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

Page 31: Vývoj v C++ … · 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ý

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);

Page 32: Vývoj v C++ … · 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ý

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);

Page 33: Vývoj v C++ … · 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ý

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

Page 34: Vývoj v C++ … · 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ý

Časovač

časovač implementovaný ako počítadlo

static int counter;

inštalácia funkcie volenej v pravidelných intervaloch

SDL_SetTimer(interval, tick);

Page 35: Vývoj v C++ … · 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ý

Myš

zistenie stavu myši

SDL_GetMouseState(*x, *y);

Page 36: Vývoj v C++ … · 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ý

Text

jednoduchý výpis textu nie je

Page 37: Vývoj v C++ … · 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ý

Ď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

Page 38: Vývoj v C++ … · 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ý

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

Page 39: Vývoj v C++ … · 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ý

Zdroje

vývoj

http://www.libsdl.org

portál s hrami

http://www.lgames.org

Page 40: Vývoj v C++ … · 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ý

Kompilácia

konfiguračný skript

sdl-config

Linux, Windows, BeOS, Mac OS

g++ foo.cc -o foo `sdl-config --libs`

Page 41: Vývoj v C++ … · 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ý

Knižnica

ClanLib game Simple Development Kit

http://www.clanlib.org

Page 42: Vývoj v C++ … · 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ý

LUA

silný skriptovací nástroj

volanie skriptov z programu

volanie programu zo skriptov

jednoduchá syntax jazyka

http://www.lua.org

Page 43: Vývoj v C++ … · 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ý

Knižnica

Mesa

http://mesa3d.sourceforge.net

Page 44: Vývoj v C++ … · 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ý

Dino

Page 45: Vývoj v C++ … · 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ý

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

Page 46: Vývoj v C++ … · 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ý

GUI

Graphic User Interface

Page 47: Vývoj v C++ … · 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ý

Vhodné knižnice

QT

FLTK

GTK

Page 48: Vývoj v C++ … · 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ý

QT

Trolltech:http://www.trolltech.com

Page 49: Vývoj v C++ … · 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ý

QT

produkt firmy Trolltech

licencie: open source aj komrčné

knižnica vznikla v roku 1996

podporuje C++ a Javu

Page 50: Vývoj v C++ … · 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ý

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.

Page 51: Vývoj v C++ … · 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ý

Designer

nástroj na tvorbu GUI

rozvrhnutú plochu ukladá do XML súboru

z XML definície sa generuje kód programu

Page 52: Vývoj v C++ … · 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ý

Kompilácia

uloženie projektu

vytvorenie Makefile z projektu

qmake -o Makefile test.pro

kompilácia

make

Page 53: Vývoj v C++ … · 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ý

Linguist

nástroj na preklad aplikácii

umožňuje oddeliť kód od textov

prekladateľ a programátor pracujú samostatne

Page 54: Vývoj v C++ … · 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ý

Amélia

Page 55: Vývoj v C++ … · 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ý

KDE

Page 56: Vývoj v C++ … · 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ý

Google Earth

Page 57: Vývoj v C++ … · 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ý

FLTK

http://www.fltk.org

Page 58: Vývoj v C++ … · 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ý

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

Page 59: Vývoj v C++ … · 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ý

Platformy

Unix, Linux

Microsoft Windows

MacOS

s podporou OpenGL a GLUT

Page 60: Vývoj v C++ … · 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ý

FLUID

Fast Light User-Interface Designer

jednoduchý designer na tvorbu GUI

Page 61: Vývoj v C++ … · 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ý

Knižnica

http://www.gtk.org

Page 62: Vývoj v C++ … · 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ý

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

Page 63: Vývoj v C++ … · 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ý

Glade 3

http://glade.gnome.orgdesign GUI - www.srobick.com

Page 64: Vývoj v C++ … · 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ý

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

Page 65: Vývoj v C++ … · 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ý

ACE

The ADAPTIVE Communication Environment

http://www.cs.wustl.edu/~schmidt/ACE.html

Open source C++ framework

reactor, proactor

acceptor, connector

Page 66: Vývoj v C++ … · 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ý

Ladíme

Když něco rozeberem, tak leda debuggerem

Page 67: Vývoj v C++ … · 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ý

výkonné multiplatformové IDE

http://www.eclipse.org

C/C++ - CDT plugin

http://www.eclipse.org/cdt

Page 68: Vývoj v C++ … · 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ý

Break point

Page 69: Vývoj v C++ … · 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štartujeme Debugger

Page 70: Vývoj v C++ … · 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ý

A zastavíme

Page 71: Vývoj v C++ … · 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ý

Prechádzka po stacku

Page 72: Vývoj v C++ … · 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ý

Ladíme lokálnu aplikáciu

Možnosti:

Aplikácia vrámci workspacu.(videli sme)

Aplikácia mimo workspace.(ukážeme si)

Page 73: Vývoj v C++ … · 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ý

Import binárky

Page 74: Vývoj v C++ … · 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ý

Toto ešte zvládneme

Page 75: Vývoj v C++ … · 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ý

A teraz príde trik – bez medzier!

Nesprávne!

Správne

Page 76: Vývoj v C++ … · 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ý

Drobnosti pred štartom

Page 77: Vývoj v C++ … · 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ý

Debug – lokálna aplikácia

Page 78: Vývoj v C++ … · 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ý

Čo z bežiacimi aplikáciami?

Pripojíme sa na aplikáciu.

Page 79: Vývoj v C++ … · 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ý

Pripojenie k bežiacenu procesu

Page 80: Vývoj v C++ … · 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ý

Čo s aplikáciami na serveri?

Väčšina debuggerov podporujevzdialené pripojenie.

Page 81: Vývoj v C++ … · 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ý

Aplikácia to neprežila

Post-mortem analýza

Zostal len jej obraz: coredump

Page 82: Vývoj v C++ … · 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ý

Rýchla analýza coredumpu

Page 83: Vývoj v C++ … · 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ý

Módy debuggera

Spustenie lokálnej aplikácie.

Pripojenie k lokálnemu procesu.

Pripojenie k vzdialenému procesu.

Post-mortem.

Page 84: Vývoj v C++ … · 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ý

Valgrind

debugging a profiling

memcheck

memory leaky

helgrind

race condition, thread profiling

Page 85: Vývoj v C++ … · 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ý

Kontinuálna integrácia

Od chaosu k štruktúre

Page 86: Vývoj v C++ … · 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ý

Modely vývoja

Agilné metódy

Scrum

Extreme Programming

Test Driven Development

http://www.agilnikonsorcium.cz

Page 87: Vývoj v C++ … · 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ý

http://www.boost.org

“...one of the most highly regarded and expertly designed C++ library projects in the world.”

Herb Sutter and Andrei Alexandrescu

Page 88: Vývoj v C++ … · 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ý

Boost – 2010

Page 89: Vývoj v C++ … · 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ý

Boost Test Library

Test everything that could possibly break

jednoduchá tvorba tescasov

TestSuite – TestCase

test je spustiteľný program

bjam integruje spúšťanie testov

Page 90: Vývoj v C++ … · 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ý

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" );}

Page 91: Vývoj v C++ … · 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ý

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)

Page 92: Vývoj v C++ … · 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ý

jam + TestCase

Jamfile (Jamroot)

import testing ;

run tests/testServerQuery.cpp server ;

Shell

$ bjam

...patience...

...found 2 targets...

...updating 2 targets...

*** test passed ***

Page 93: Vývoj v C++ … · 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ý

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

Page 94: Vývoj v C++ … · 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ý

Obsah pom.xml

Artifacts

Dependencies

Plugins

Repositories

Page 95: Vývoj v C++ … · 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ý
Page 96: Vývoj v C++ … · 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ý

Kontinuálna integrácia

projekt tvorený zo zdrojových kódov

rýchlo kontrola po commite

Hudson CI – príklad: http://hudson.sinusgear.com

Page 97: Vývoj v C++ … · 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ý

Nástroje

Profesionál vie používať správne nástroje

na správny účel.

Page 98: Vývoj v C++ … · 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ý

Subversion - SVN

verzovací nástroj

jednoduchý na používanie

http://subversion.tigris.org

repository, check-out, commit, mergehttp://www.asinus.org/wiki/VideoTutorialSubversion

Page 99: Vývoj v C++ … · 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ý

SVN klient pre Windows

http://tortoisesvn.tigris.org

Page 100: Vývoj v C++ … · 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ý

GIT

oproti SVN možnosť lokálných commitov

Social Coding

http://www.github.com

Page 101: Vývoj v C++ … · 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ý

Source Control & Project Management

http://trac.edgewall.org

http://trac-hacks.org/

Page 102: Vývoj v C++ … · 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ý

GNU a Windows

Minimalist GNU For Windows

http://www.mingw.org

Cygwin

http://www.cygwin.com

http://cygwinports.dotsrc.org/

Page 103: Vývoj v C++ … · 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ý

Doxygen

generovanie dokumentácie pre

C, C++, Java, Python

PHP, C#, D

použitie

doxygen -g project.config

doxygen project.config

Page 104: Vývoj v C++ … · 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ý

C#, .NET a Mono

open source implementácia .NET

Rozhranie napr. GTK#

http://www.mono-project.com

Silverlight pre Linux - Moonlight

Page 105: Vývoj v C++ … · 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ý

Python

silný objektovo orientovaný jazyk

platformovo nezávislý

integrovateľný s C a C++

http://www.python.org

http://www.py.cz

Page 106: Vývoj v C++ … · 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ý

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/

Page 107: Vývoj v C++ … · 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ý

PyGame

kombinácia sily Pythonu

a rýchlosti SDL (kód v C)

http://www.pygame.org

Page 108: Vývoj v C++ … · 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ý

Projekt

Google Code

http://code.google.com/opensource

SourceForge

http://sourceforge.net

FreshMeat

http://freshmeat.net

Page 109: Vývoj v C++ … · 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ý

Ohloh

porovnanie projektov

rôzne metriky

http://www.ohloh.net

Page 110: Vývoj v C++ … · 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ý

Open Source projekt

otvoriť program svetu - Open Source

niekto môže vo vašej práci pokračovať

http://atanks.sf.net

Page 111: Vývoj v C++ … · 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ý

se-radio.net

Software engineering radio

zaujímavý a kvalitný podcast

http://www.se-radio.net

Page 112: Vývoj v C++ … · 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ý

A je tu záver

Otázky?

Page 113: Vývoj v C++ … · 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ý

FI MUNI, Brno 2010Juraj Michálek

web: http://georgik.sinusgear.comtwitter: http://twitter.com/georgiksk

Ďakujem za pozornosť