Ve třetí části seriálu o integrovaných vývojových prostředích, která jsou programátorům dostupná v systému Fedora, se budeme věnovat dvojici poněkud netradičních IDE, přesněji řečeno takovým integrovaným vývojovým prostředím, která jsou určena pro programovací jazyky mající v Linuxu v současnosti spíše minoritní postavení. Konkrétně se seznámíme s prostředími Gambas (verze 1 a současně i verze 2 a 3) a Lazarus. Zajímavé přitom je, že zatímco IDE Gambas je inspirováno Visual Basicem, Lazarus je založeno na myšlenkách vycházejících z integrovaného vývojového prostředí Delphi a s ním spojeného programovacího jazyka Object Pascal.

Integrovaná vývojová prostředí ve Fedoře (3. díl)

V předchozích dvou částech seriálu o integrovaných vývojových prostředích nabízených v systému Fedora jsme se zabývali především těmi integrovanými vývojovými prostředími, které byly vytvořeny především pro práci s programovacími jazyky, jež je možné s trochou nadsázky v Linuxu považovat za jazyky „mainstreamové“. Jedná se zejména o jazyky C, C++, Python, Perl, Ruby, Javu a v určité oblasti i JavaScript a PHP (dříve též TCL, více informací bude uvedeno v další části seriálu). Připomeňme si, že jsme si prozatím popsali vývojová prostředí nazvaná Anjuta, QtCreator, Geany a taktéž Code::Blocks obsahující zejména vazbu na překladače, linker a debugger z takzvaného GNU toolchainu.

ide_01Obrázek 1: Ukázka grafického uživatelského rozhraní integrovaného vývojového prostředí pojmenovaného Anjuta, které jsme si již popsali v úvodní části tohoto seriálu.

V systému Fedora se ovšem můžeme setkat i s dalšími specializovanými vývojovými prostředími, která jsou v některých případech pevně svázaná pouze s jedním programovacím jazykem, a to mnohdy jazykem, který v Linuxu používá jen relativně malé množství programátorů. Jedná se zejména o různé varianty Pascalu, Object Pascalu (tj. objektového rozšíření původně čistě procedurálního jazyka Pascal) a dokonce i jazyka odvozeného od známého Visual Basicu, se všemi jeho klady a samozřejmě i zápory, které v tomto jazyku můžeme nalézt.

ide_02Obrázek 2: Další vývojové prostředí, s nímž jsme se již seznámili v prvním dílu tohoto seriálu, se jmenuje QtCreator. Typickým a poměrně netradičním prvkem GUI tohoto IDE je levý nástrojový pruh s ikonami představujícími nejčastěji prováděné operace.

To ovšem v žádném případě neznamená, že tato specializovaná a možná i poněkud méně známá integrovaná vývojová prostředí nemají vůbec žádný praktický význam, protože například dále popsaná prostředí Gambas a Lazarus mohou být velmi užitečná při rychlé tvorbě a popř. i při portaci aplikací s grafickým uživatelským rozhraním z jiných operačních systémů, především ze systému Microsoft Windows.

ide_03Obrázek 3: Ve druhé části tohoto seriálu jsme se zmínili i o integrovaném vývojovém prostředí nesoucím název Geany, což je IDE, které nabízí programátorům prakticky všechny nástroje potřebné pro vývoj.

Obě zmíněná „minoritní“ integrovaná vývojová prostředí, tj. jak Gambas, tak Lazarus, lze navíc považovat za plnohodnotné nástroje typu RAD (Rapid Application Development), protože kromě vlastního IDE (programátorský editor + vazba na linker a ladicí program) obsahují i návrhář pro grafické uživatelské rozhraní, podobně jako tomu například bylo i v případě již popsaného QtCreatoru. Autoři těchto dvou vývojových prostředí se při jejich vytváření nechali inspirovat Visual Basicem (Gambas) a Delphi (Lazarus), což mj. znamená, že programátoři využívající obě zmíněná starší komerční IDE mohou relativně snadno začít vyvíjet nové aplikace, popř. do Gambasu/Lazaru převést starší aplikace (což však prozatím není zcela automatizovaná činnost).

ide_04Obrázek 4: Poslední již minule popsané integrované vývojové prostředí se jmenuje Code::Blocks, což je název evokující hlavní podporovaný programovací jazyk, jímž je C++.

Gambas – Gambas Almost Means BASIC

První integrované vývojové prostředí, s nímž se v dnešním článku podrobněji seznámíme, se jmenuje Gambas (Gambas Almost Means BASic). Jak již druhá část jména tohoto IDE napovídá, jedná se o integrované vývojové prostředí, v němž se používá programovací jazyk odvozený od Visual Basicu. Autor Gambasu, jímž je programátor Benoit Minisini, sám v přiložené dokumentaci píše, že na vývoji Gambasu začal původně pracovat především z toho důvodu, že mu množství chyb a různých nekonzistencí, které můžeme najít v původním Visual Basicu (nikoli VB .NET) prostě připadalo rozkošné, takže se nechal Visual Basicem inspirovat.

ide_05Obrázek 5: Úvodní obrazovka integrovaného vývojového prostředí Gambas verze 1.0.19. Tuto verzi Gambasu najdeme mj. i v systémech Fedora, včetně Fedory 18 (zde je ovšem současně možné použít i Gambas 2.x a Gambas 3.x).

Na tomto místě je však nutné vysvětlit, že Gambas ve své současné verzi (v praxi se ještě stále používá jak verze 1.x, tak i v mnoha ohledech vylepšená verze 2.x a 3.x) je stabilní a poměrně schopné vývojové prostředí a i programovací jazyk založený na strukturovaném Visual Basicu rozšířeném o konstrukce určené pro práci s objekty, nemá s prapůvodním BASICem s čísly řádků a nestrukturovanými konstrukcemi založenými na příkazu GOTO prakticky nic společného (o historii vývoje klasického BASICu vyšlo několik článků na serveru Root.cz, viz též první část několikadílného článku, která je dostupná na adrese http://www.root.cz/clanky/programovaci-jazyk-basic-na-osmibitovych-mikropocitacich/).

ide_06Obrázek 6: Podobně jako v mnoha dalších aplikacích, i zde nalezneme dialog typu „Tips of a Day“, což je mimochodem přesně ten typ dialogu, který se snažím ve všech aplikacích co nejdříve povypínat :-).

Ovšem tím hlavním důvodem, proč se v tomto seriálu vůbec integrovaným vývojovým prostředím Gambas podrobněji zabýváme, však není zvolený programovací jazyk, ale další velmi důležitá součást tohoto IDE – jedná se o interaktivní grafický návrhář formulářů, díky jehož existenci je možné velmi jednoduše a především rychle a navíc s relativně velkým komfortem vytvořit i poměrně složitou aplikaci s plnohodnotným grafickým uživatelským rozhraním. Právě zde můžeme hledat nejpádnější důvody pro použití Gambasu při programování aplikací, protože tvorba GUI může být (zejména pro začínající vývojáře) na Linuxu poměrně obtížná.

ide_07Obrázek 7: Integrované vývojové prostředí Gambas ve verzi 1 používá takzvaný systém SDI (Single Document Interface), což zjednodušeně řečeno znamená, že každé nové okno či každý nový formulář je zobrazen přímo na desktopu a není součástí jiného okna (podobný systém používá například i GIMP). Systém SDI byl v novějších verzích Gambasu nahrazen pozicovatelnými toolbary.

Interaktivní návrhář formulářů v prostředí Gambas je samozřejmě obousměrně propojen s ostatními částmi integrovaného vývojového prostředí, zejména s editorem zdrojových kódů. To například znamená, že pokud se na formuláři vytvoří nové tlačítko, je možné ihned začít psát obslužný kód zavolaný ve chvíli, kdy bude toto tlačítko na reálném GUI použito. Způsob propojení návrháře a programátorského editoru je obdobný způsobu, který byl využit v již zmíněném Visual Basicu (Microsoft) a později taktéž ve slavném Delphi vytvořeném a prodávaném společností Borland. Později došlo k rozšíření tohoto úspěšného konceptu i do dalších IDE.

ide_08Obrázek 8: Dialog použitý při vytváření nového projektu.

Demonstrační aplikace vytvořená v prostředí Gambas verze 1

Abychom si prakticky ukázali, jakým způsobem může integrované vývojové prostředí Gambas ulehčit a současně taktéž urychlit programátorům jejich práci, bude v tomto IDE vytvořena velmi jednoduchá aplikace skládající se z jediného formuláře (nemodálního dialogu) a jednoho zdrojového kódu obsahujícího kód reakcí na události, které vzniknou při práci s tímto formulářem/dialogem.

ide_09Obrázek 9: „Wizard“ zavolaný ve chvíli, kdy se má v integrovaném vývojovém prostředí Gambas vytvořit nový formulář.

Samotný formulář bude představovat kostru aplikace určené pro poslání zprávy se zadaným předmětem a textem. Formulář tedy bude obsahovat jednořádkové textové pole pro zadání předmětu, víceřádkové textové pole s textem zprávy a dvojici tlačítek – jedno tlačítko bude sloužit pro poslání zprávy (tuto funkci nebudeme úplně implementovat) a stisk druhého tlačítka povede k ukončení demonstrační aplikace. Dále nesmíme zapomenout na dvojici popisných (tj. needitovatelných) textů představovaných grafickým objektem/widgetem typu Label.

ide_10Obrázek 10: Doplnění kódu callback funkcí zavolaných při stisku tlačítek na vytvářeném formuláři.

Na obrázku číslo 9 je ukázán „wizard“ použitý při tvorbě nového formuláře. Samotný návrh formuláře je ve skutečnosti velmi intuitivní, protože stačí do prázdného okna představujícího vznikající formulář přesouvat z palety jednotlivé grafické ovládací prvky (takzvané widgety) a nastavovat vlastnosti těchto ovládacích prvků, popř. doplňovat kód pro reakce na události vzniklé na GUI (viz též obrázek číslo 10, kde vidíme kód událostí vyvolaných při stisku tlačítek na GUI).

ide_11Obrázek 11: Podoba demonstračního formuláře vytvořená v integrovaném návrháři formulářů.

Mezi základní vlastnosti jednotlivých ovládacích prvků patří pochopitelně umístění widgetu na formuláři a taktéž velikost widgetů, ale změnit lze například i barvu pozadí, což je patrné z obrázku číslo 11, na němž došlo ke změně pozadí tlačítka [OK] na barvu zelenou i tlačítka [Cancel] na světle červenou barvu. Na obrázku číslo 12 můžeme vidět speciální okno, v němž je zobrazena hierarchie všech widgetů použitých na formuláři.

ide_12Obrázek 12: Hierarchie všech objektů umístěných na navrženém formuláři.

ide_13Obrázek 13: Nastavení všech parametrů integrovaného vývojového prostředí Gambas ve speciálním dialogu.

Technologie použité v IDE Gambas

Projekt Gambas sice z pohledu běžného uživatele–programátora vypadá jako relativně jednoduché integrované vývojové prostředí sestávající pouze z programátorského editoru a návrháře GUI, ovšem pod povrchem můžeme ve skutečnosti nalézt další zajímavé moduly. Jedná se především o překladač (compiler) spolupracující s interpretrem a takzvaným archivátorem. Zdrojové kódy i definice jednotlivých formulářů (ukládaných v samostatných souborech) jsou nejdříve přeloženy překladačem do mezikódu, podobně jako je tomu například i v případě Javy či Pythonu (překlad modulů).

ide_14Obrázek 14: Úvodní obrazovka integrovaného vývojového prostředí Gambas verze 2.21.

Výhodou překladače Gambasu je jeho vysoká rychlost překladu, která je ovšem dosažena mj. i tím, že se při překladu neprovádí prakticky žádné optimalizace. Přeložený mezikód je možné buď přímo načíst a zpracovat interpretrem (což je v případě Gambasu obdoba plnohodnotného virtuálního stroje, protože zde existuje například i podpora pro debugger, podpora pro načítání externích komponent atd.), popř. je možné použít již zmíněný archivátor, který z mezikódu vytvoří spustitelný soubor nativní pro zvolenou platformu.

ide_15Obrázek 15: Vytvoření nového projektu v IDE Gambas 2.

Gambas 2

V předchozích kapitolách byly použity převážně snímky obrazovky získané z integrovaného vývojového prostředí Gambas verze 1.0.19. Tuto verzi najdete například v dnes již poněkud „starobylé“ Fedoře 14 :-). Tyto snímky byly použity mj. i z toho důvodu, že se Gambas verze 1.x ještě stále v praxi používá, například při vývoji vnitropodnikových aplikací, kde je určitá míra konzervativního chování vývojářů i uživatelů pochopitelná. I to je pravděpodobně jeden z důvodů, proč je větev Gambas 1 stále udržována i v balíčcích Fedory 18.

ide_16Obrázek 16: Dialog s nastavením vlastností projektu (Gambas 2).

Ve skutečnosti se ale jedná o již překonanou verzi, protože se v současnosti distribuuje Gambas verze 2.x (takzvaná stabilní větev) a dokonce i Gambas verze 3 (větev s rychlejším vývojem a zabudovanými novinkami, které ve větvi 1 a 2 již nenajdeme). Stabilní větev integrovaného vývojového prostředí Gambas je dnes představována verzí Gambas 2.24.0, která by měla být – alespoň podle slov samotného autora tohoto IDE – poslední oficiálně vydanou verzí větve 2.x, takže ji můžeme považovat za již stabilizovanou verzi s neměnným chováním.

ide_17Obrázek 17: Návrh formuláře v prostředí Gambas 2.

Demonstrační aplikace vytvořená v prostředí Gambas verze 2

Na následující čtveřici snímků obrazovky (18 až 21) je zobrazen návrh demonstrační aplikace v integrovaném vývojovém prostředí Gambas verze 2.21.0 spuštěné opět na systému Fedora. Z těchto snímků je patrné, že se samotné grafické uživatelské rozhraní Gambasu do jisté míry změnilo (SDI systém se pravděpodobně netěšil příliš velké popularitě), ovšem samotný princip tvorby aplikací s GUI zůstal zachován, protože se zde stále používá mnoha lety vývoje ověřená obousměrná vazba mezi grafickým návrhářem formulářů a programátorským editorem.

ide_18Obrázek 18: Návrh formuláře demonstračního příkladu v Gambasu 2.

Na tomto místě je nutné ještě dodat jednu podstatnou informaci – samotné formuláře lze navrhnout dvěma způsoby. Buď se jednotlivé ovládací prvky (widgety) umisťují přímo na formulář na pevně zadané absolutní souřadnice, nebo se použije nějaká forma takzvaného kontejneru, který dokáže v případě potřeby (změna rozlišení, spuštění aplikace na tabletu) automaticky změnit velikost a rozmístění jednotlivých komponent na formuláři. Záleží jen na uživateli, jakému způsobu návrhu formuláře dává přednost, což závisí na tom, v jakém prostředí bude vytvářená aplikace provozována.

ide_19Obrázek 19: Naprogramování reakce na stisk tlačítka [OK].

ide_20Obrázek 20: Ladění aplikace (breakpoint byl nastaven na tělo subrutiny ButtonOK_Click.

ide_21Obrázek 21: Takto vypadá spuštěná demonstrační aplikace.

Gambas 3

V předchozím textu jsme si řekli, že v současnosti existují tři vývojové větve integrovaného vývojového prostředí Gambas. Nejnovější a taktéž nejrychleji vyvíjená je třetí verze, kterou lze samozřejmě nainstalovat i do systému Fedora 18, protože Gambas 3.4.1 je dostupný ve formě balíčků ve standardním repositáři. Při instalaci této větve Gambasu je ovšem zapotřebí si dát pozor na to, aby se správně zapsal název balíčku. Nejjednodušší je pravděpodobně použít příkaz:

yum install „gambas3“

který spustí instalaci jak vlastního vývojového prostředí, tak i všech dalších podpůrných knihoven a nástrojů. O tom, jak toto vývojové prostředí vypadá v systému Fedora 18, si můžete udělat představu z následující pětice snímků obrazovky:

ide_22Obrázek 22: Úvodní dialog IDE Gambas verze 3.4.1 v systému Fedora 18 (Gnome Shell).

ide_23Obrázek 23: Dialog zobrazený při vytváření nového projektu. Povšimněte si například podpory aplikací využívajících knihovnu SDL či „alternativní“ GUI knihovny Qt a GTK+. Výchozí aplikace však používají vlastní knihovnu pro tvorbu GUI, i když jednotlivé widgety jsou postaveny na dalších knihovnách.

ide_24Obrázek 24: „About“ dialog.

ide_25Obrázek 25: Tvorba demonstrační aplikace v IDE Gambas 3. V pravé části IDE si povšimněte rozdělení hlavního okna na tři toolbary. V horním toolbaru se zobrazují vlastnosti vybraného GUI prvku (widgetu) či celého formuláře, v prostředním toolbaru najdeme interaktivní nápovědu a v toolbaru zobrazeném nejníže je pak umístěna nabídka jednotlivých grafických prvků (widgetů).

ide_26Obrázek 26: Nastavení vlastností vývojového prostředí Gambas 3 (porovnejte si pro zajímavost tento obrázek se snímkem číslo 13).

Lazarus

Dalším integrovaným vývojovým prostředím, s nímž se v dnešním článku seznámíme, je multiplatformní IDE nazvané Lazarus, které lze v současnosti provozovat na Linuxu, FreeBSD, Mac OS X i na systémech Microsoft Windows. Jedná se o programátorské prostředí, které se snaží o napodobení stylu vývoje aplikací použitého ve známém a především v minulosti velmi populárním komerčním IDE nazvaném Delphi, jenž bylo vyvíjeno původně společností Borland a v současnosti firmou Embarcadero Technologies (Delphi bylo původně určeno pro šestnáctibitový systém Windows 3.x a později bylo upraveno pro 32bitové systémy Windows 95, Windows NT i navazující řadu operačních systémů společnosti Microsoft).

ide_27Obrázek 27: Splashscreen integrovaného vývojového prostředí Lazarus.

Vzhledem k tomu, že je Delphi založeno na programovacím jazyku Object Pascal, je v integrovaném vývojovém prostředí Lazarus vytvořeno propojení s multiplatformním překladačem fpc programovacího jazyka Free Pascal a samotné prostředí obsahuje jak poměrně pokročilý programátorský editor (se zvýrazněním syntaxe, foldingem, šablonami atd.) tak i interaktivní grafický editor určený pro návrh formulářů. Nesmíme samozřejmě zapomenout ani na ladicí program (debugger), který je do Lazaru plně integrován (stejně jako debugger do Delphi – ostatně vývojová prostředí firmy Borland byla oblíbena mj. i díky kvalitním interním debuggerům).

ide_28Obrázek 28: Grafické uživatelské rozhraní integrovaného vývojového prostředí Lazarus.

Celkový vzhled grafického uživatelského rozhraní Lazaru a například i použité klávesové zkratky skutečně odpovídají starším verzím Delphi, což je samozřejmě výhodné především pro ty programátory, kteří s tímto prostředím dlouhodobě pracují či musí například udržovat starší projekty.

ide_29Obrázek 29: Nastavení vlastností IDE Lazarus.

Lazarus Component Library

Součástí integrovaného vývojového prostředí Lazarus je i LCL, neboli plným jménem Lazarus Component Library. Toto jméno zcela záměrně připomíná VCL (Visual Component Library), což je knihovna (nejenom grafických) komponent používaná v originálním prostředí Delphi. Ovšem zatímco VCL je orientováno především na použití v operačních systémech Microsoft Windows, obsahuje LCL rozhraní hned pro několik „nativních“ GUI knihoven, zejména GTK+ (verze 2.8 a částečně i 3.x), Qt (verze 4.5), Win32 API a pro operační systém Mac OS X existuje vazba pro knihovny Cocoa a Carbon.

ide_30Obrázek 30: Návrh formuláře v IDE Lazarus.

To mj. znamená, že programátor vytvářející svoji aplikaci s grafickým uživatelským rozhraním s využitím knihovny LCL nemusí ve svém programovém kódu složitě řešit, jaké konkrétní grafické prvky (widgety) se ve výsledku použijí, protože bude komunikovat pouze s univerzálním rozhraním společným pro všechny zmíněné GUI knihovny. Napojení projektu na zvolenou konkrétní GUI knihovnu se provede v čase překladu aplikace.

ide_31Obrázek 31: Formulář navržený na obrázku 30 se stal součástí zde spuštěné aplikace.

Spolupráce s databázemi

Jednou z velmi důležitých součástí integrovaného vývojového prostředí Lazarus a taktéž jeho ideového předchůdce Delphi jsou komponenty nabídnuté v nástrojovém panelu nazvaném Data Access, které do jisté míry zjednodušují použití relačních databází ve vyvíjených aplikacích.

ide_32Obrázek 32: Základní komponenty určené pro práci s databázemi.

Podporovány jsou různé typy a verze databází, do nichž se vyvíjené aplikace mohou připojovat s využitím takzvaných datových zdrojů (data source, komponenta TDataSource). Pro prezentaci dat získaných z databází na formulářích vytvářené aplikace slouží množství specializovaných a mnohdy i dosti komplikovaných ovládacích prvků, které lze nalézt na nástrojovém panelu Data Controls a taktéž na panelu SQLdb.

ide_33Obrázek 33: Komponenty sloužící například pro zobrazení dat získaných z databází.

ide_34Obrázek 34: Další komponenty využitelné zejména při práci s vybranými relačními databázemi.

Závěrečné zhodnocení IDE Gambas a Lazarus

Jak jsme si již řekli v úvodu tohoto článku, jsou dnes popisovaná integrovaná vývojová prostředí poněkud zvláštní v tom ohledu, že jsou poměrně pevně svázána s jedním konkrétním programovacím jazykem (dialekt objektového BASICu popř. Free Pascal) a taktéž proto, že obsahují grafický návrhář formulářů, jenž je obousměrně propojený s programátorským editorem. Z tohoto důvodu je použití obou IDE orientováno zejména na tvorbu desktopových aplikací a již méně vhodné může být použití Gambasu například pro programování webových aplikací či systémových služeb (démonů). Lazarus a Free Pascal se však naproti tomu běžně používají pro tvorbu různých typů programů, včetně zmíněných služeb a webových aplikací.

ide_35Obrázek 35: Základní komponenty z Lazarus Component Library.

Mezi přednosti obou popisovaných IDE patří zejména podpora pro tvorbu přenositelných aplikací s grafickým uživatelským rozhraním (i samotná vývojová prostředí ostatně existují pro více operačních systémů) a taktéž poměrně malé nároky na kapacitu operační paměti popř. na výpočetní výkon mikroprocesoru; především při porovnání s některými vývojovými prostředími, jimiž se budeme zabývat příště.

ide_36Obrázek 36: Nastavení šablon umožňujících rychlejší zápis zdrojového kódu.

ide_37Obrázek 37: Dialog se strukturou navrhovaného formuláře a s vlastnostmi vybrané komponenty.

ide_38Obrázek 38: Zarovnání jednotlivých komponent na formuláři.