Programování - vývojová prostředí
Na přelomu tisíciletí
V minulých dvou dílech jsme si povídali o vývoji hardwaru a programovacích jazyků; pojďme dál. Samotný překladač programovacího jazyka dnes už k napsání kvalitní aplikace v rozumném čase zdaleka nestačí. Do hry vstoupila vývojová prostředí, knihovny technologií, různé metodologie programování a další věci, o nichž si povíme dnes.

VÝVOJOVÁ PROSTŘEDÍ
Na programovací jazyk jsme se mohli dívat jako na vrstvu vloženou mezi programátora a hardware, vrstvu, která usnadňuje programátorovi práci tím, že skrývá strojový kód. Integrovaná vývojová prostředí, často označovaná zkratkou IDE, představují další takovou vrstvu, tentokrát vloženou mezi programátora a programovací jazyk.
IDE se dnes stávají jedním z nejdůležitějších nástrojů při vývoji aplikací. I když se to možná na první pohled nezdá, je tomu opravdu tak, a proto není divu, že v této oblasti probíhá nejintenzivnější vývoj: kvalitní IDE může podstatným způsobem zvýšit výkonnost programátora. Připomeňme si, jak se IDE dostala na scénu.
Od počátku se programátoři snažili usnadnit si nejrůznějším způsobem práci. Např. na počítačích ICL prý existoval preprocesor ICL Rapid Writer, který překládal program zapsaný v jakémsi stručném a pro programátora pohodlném jazyce do nesmírně upovídaného Cobolu. To sice ještě nebylo dost dobře možné pokládat za IDE, je v tom ale možné vidět předznamenání budoucnosti - snahy maximálně usnadnit programátorovi práci, a tím ji ovšem také zlevnit.
Historicky první IDE s sebou přinesl v roce 1963 jazyk Basic. Tento jazyk byl od počátku interpretovaný, takže poskytoval programátorům možnost spouštět si úseky programu a hned vidět jejich výsledky. To umožnilo interaktivní práci při vývoji programů, která je podstatně efektivnější než v té době standardní dávkové zpracování. Ovšem skutečný význam Basic získal, až když se terminály, umožňující interaktivní práci, staly standardní součástí výpočetních středisek, a to ještě nějaký čas trvalo. (Dnes už to zní neuvěřitelně: Programátor připravil sadu děrných štítků s programem a daty, tu předal obsluze počítače, po čase obdržel výpis, vyhledal v něm chyby a celý cyklus se zopakoval. Říkalo se tomu system closed shop. Programátor s počítačem vlastně vůbec nepřicházel do styku.)
Další významný krok ve vývoji IDE přinesl jazyk Smalltalk na počátku 80. let. Graficky orientované IDE je nedílnou součástí tohoto jazyka, neboť se skládá z objektů, které jsou součástí knihoven a které lze využívat i v programu. Toto prostředí také přineslo možnost interaktivního ladění.
Z hlediska rozšíření nelze pominout IDE překladače programovacích jazyků C a Pascalu na PC od poloviny 80. let; masový prodej těchto nástrojů umožnil jejich rychlý vývoj. První verze v polovině 80. let neobsahovaly o mnoho více než editor, překladač a nápovědu; na počátku 90. let přibyl integrovaný ladicí program. Odtud vedla již přímá cesta k vizuálnímu programování, jehož sílu ukázaly nástroje jako Visual Basic, Delphi apod.
Zatímco na konci 80. let se IDE zabývala jednotlivými programy a v první polovině 90. let projekty, dnes hovoří o řešeních nebo skupinách projektů. V dnešních IDE k základní čtveřici, tvořené překladačem, editorem, ladicím programem a nápovědou, přibývají další nástroje, jako jsou průvodci atd., jež automatizují rutinní operace, generují opakující se části kódu, usnadňují orientaci ve zdrojovém kódu, spolupracují na profilování programu, vyhledají chyby ve zdrojovém kódu ještě před vlastním překladem, automaticky formátují zdrojový text atd. Stále častěji se také setkáme s integrovanými nástroji pro sledování historie zdrojového kódu, správu verzí, správu požadavků pro vývoj aplikace, podporu refaktoringu, automatické generování testovacích programů, tvorbu a nasazování podnikových aplikací atd.
Už prostý výčet ukazuje, jak náročná a komplikovaná dnešní IDE jsou a kolik práce mohou za programátora udělat. Ukazují však i nepřehlédnutelný trend: Nástroje, které se dříve označovaly jako CASE a byly dostupné jen nejbohatším firmám, se stávají běžnou součástí IDE.

PŘÍSTUPY K PROGRAMOVÁNÍ
V dřevních dobách programování se o programovacím stylu, o přístupu k programování, o metodice programování nebo o programovacím paradigmatu nehovořilo. Lidé programování chápali spíše jako umění než jako technologii s pevně danými postupy. To se však brzy začalo měnit.

MODULÁRNÍ PROGRAMOVÁNÍ
Na konci 50. let vzrostl výkon počítačů a s ním i složitost programů. Programátoři si začali uvědomovat potřebu rozdělit program na více samostatných částí a tyto části pak opakovaně využívat, což vedlo ke vzniku modulárního programování, které zavedlo modul jako základní jednotku programu. Modul je uzavřená, zpravidla samostatně překládaná součást, která prostřednictvím svého rozhraní poskytuje služby ostatním částem programu.
Přelom v chápání programování znamenal Dijkstrův článek Goto Statement Considered Harmful, zveřejněný v březnu 1968 v časopise Communications of the ACM, který dokazoval, že kvalita programu je nepřímo úměrná počtu příkazů skoku, jež se v něm vyskytují. Rozpoutal zuřivou diskusi, na jejíž ozvěny lze narazit dodnes. Ovšem experimenty, provedené především softwarovými firmami, toto tvrzení vbrzku potvrdily.

SOFTWAROVÁ KRIZE A STRUKTUROVANÉ PROGRAMOVÁNÍ
Na konci 60. let se také začalo mluvit o softwarové krizi. Tento pojem vyjadřoval propastný rozdíl mezi prudce rostoucí úrovní hardwaru a úrovní tvorby softwaru. Výsledkem těchto diskusí byl nový přístup k programování, označovaný jako strukturované programování. Jeho základní myšlenkou bylo psát programy tak, aby byly snadno srozumitelné nejen pro počítač, ale i pro člověka, aby je mohl snadno opravovat, udržovat a rozvíjet. Po formální stránce tento přístup požadoval, aby se program skládal pouze z posloupnosti příkazů, z cyklů a z rozhodování. Každá z těchto konstrukcí přitom smí mít právě jeden vstupní a právě jeden výstupní bod. Spolu se strukturovaným programováním se v 70. letech objevily i metodiky, které poskytovaly návod, jak ze zadání odvodit logicky správnou a přitom přehlednou strukturu programu. Některé s nich se opíraly o představu, že struktura programu musí vycházet ze struktury dat - např. že opakující se data stejného typu na vstupu budeme zpracovávat cyklem apod. Asi nejznámější metodika strukturovaného programování pochází od M. Jacksona a opírá se o tzv. Jacksonovy diagramy. Jinou možností byla metodika založená na Yourdonových diagramech toku dat.
S příchodem těchto metodik začalo být jasné, že programování v dohledné době přestane být uměním a stane se technologií.

OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ
Odmyslíme-li si všechna marketingová povídání o revolučnosti, zásadním přínosu apod., která jsme v souvislosti s objektově orientovaným programováním (OOP) poslouchali celá devadesátá léta, zjistíme, že OOP není nic jiného než logické pokračování předchozích dvou přístupů. Samozřejmě, OOP přineslo nové pojmy, nové postupy a nové nástroje, nevzniklo ale ve vakuu a přechod programátorů k němu byl velice pozvolný, alespoň v měřítkách vývoje informačních technologií.
OOP se točí kolem pojmu třída, což je vlastně programový model třídy objektů z reálného světa, z oblasti řešeného problému. Jako objekty pak označujeme proměnné nebo konstanty těchto typů. Třída je vlastně modul, v němž jsou zapouzdřena data - jak data jednotlivých instancí, tak i data tříd jako celků. Operace, které lze s těmito daty provádět, se označují jako metody. Objektově orientovaný program se skládá z objektů, které si navzájem posílají zprávy, tj. volají své metody.
Mechanismus označovaný nepříliš vhodně jako dědění umožňuje odvodit od jedné třídy další, které představují podtřídy, specializace původní třídy. OOP také přišlo s ideou polymorfismu: Se všemi instancemi by mělo být možné zacházet stejným způsobem, tedy posílat jim stejné zprávy. Implementace polymorfismu se v různých programovacích jazycích a prostředích liší, jsou různým způsobem omezené, ale to teď není důležité.
Také pro OOP se objevila řada metodik; dnes mají zcela dominantní postavení metodiky založené na modelovacím jazyku UML. Některé z nich vycházejí ze starších metodik pro návrh databází, např. z entitně-relačních diagramů.

DALŠÍ PŘÍSTUPY K PROGRAMOVÁNÍ
Logickým pokračováním OOP v distribuovaném prostředí současných počítačových sítí je komponentové programování založené na znovupoužitelných komponentách - samostatně vyvíjených a dodávaných třídách nebo skupinách tříd, které poskytují přesně vymezené služby. Typickým příkladem jsou komponenty tvořící grafické uživatelské rozhraní aplikací, poskytující připojení k databázím apod. Hojně se využívají v IDE různých vývojových nástrojů. 
Komponenty také usnadnily používání knihoven různých technologií, jako je programování pro prostředí sítí, práce s databázemi atd.
Zdá se, že komponentové programování, používané v pokročilých IDE, alespoň dočasně zažehnalo softwarovou krizi - alespoň v současné době se o ní příliš nemluví. Vývoj se ovšem u komponentového programování nezastavil; na scéně se objevují jak zcela nové přístupy, tak přístupy, které jsou známé již dlouhou dobu, ale dosud se jim nevěnovala téměř žádná pozornost.
V nedávné době se objevilo šablonové metaprogramování. Zatím je omezeno na jazyk C++ a je otázka, zda se z něj někdy stane plnohodnotný přístup k programování; ovšem něco podobného se tvrdilo před dvaceti lety o OOP také. Jde o přístup založený na využití šablon, který lze stručně charakterizovat jako snahu nechat místo vlastního programu počítat překladač. I když to vypadá na první pohled problematicky, lze ho už dnes využít při optimalizaci některých typů programů.
Dnes se také začíná hovořit o aspektově orientovaném programování. V něm jde o implementaci aspektů - vlastností společných jinak nesouvisejícím třídám. Objevily se již i první nástroje, které tuto možnost poskytují - např. AspectJ od Eclipse.
Mezi často skloňované pojmy patří dnes i agentově orientované programování, založené na agentech, programech schopných průběžně a samostatně plnit určité úkoly v distribuovaném prostředí.

KDE JSME DNES
Dnes jsou v centru pozornosti distribuované obchodní aplikace. To určuje hlavní směr vývoje nejen programovacích jazyků, jejich knihoven a podpůrných nástrojů, jako jsou propracovaná IDE, ale i metodik programování.
Pravděpodobně nejpopulárnějším programovacím jazykem je dnes Java. Narazíme na ni všude, kde není kritická rychlost odezvy. Její zásadní předností jsou bohaté a neustále se vyvíjející knihovny pro nejrůznější aplikace.
Vedle Javy patří k nejpoužívanějším jazyky pro skriptování v prostředí internetu na straně klienta i serveru; typicky jde o PHP nebo Perl, v poslední době se stále častěji objevuje i Python. Podobně jako Java poskytují propracované knihovny, i když zdaleka ne v takové šíři - alespoň prozatím. Pro výměnu dokumentů se používá značkovací jazyk XML.
Objektově orientované programování je dnes nejen preferovaným, ale v podstatě požadovaným přístupem. Při tvorbě aplikací se stále více uplatňují komponenty dodávané třetími firmami, často specializovanými právě na produkci softwarových komponent. Přes nesporný úspěch OOP je však jasné, že objektové ani komponentové programování nepředstavují konečné slovo. Začíná být zřejmé, že např. neposkytují nástroje pro programový popis příčin a následků, popis změn stavu systému, a lze očekávat, že se objeví i další jejich nedostatky.
Zcela dominantní postavení mají v současné době metodiky objektově orientovaného návrhu založené na modelovacím jazyce UML.

CO BUDE DÁL?
Předchozí úvahy svádějí k prorokování a není lehlé odolat. Proto neuškodí připomenout si, že v roce 1943 prohlásil šéf jisté velké a významné společnosti (tenkrát ještě ne počítačové), že podle jeho názoru je na světovém trhu místo asi tak pro pět počítačů...
Miroslav Virius