Z algoritmického pohledu, což je náš přístup, obecně rozeznáváme v programovacích jazycích datové struktury sloužící k ukládání hodnot modelu reality a řídící struktury, které slouží k zápisu příkazů pro postup práce s daty - algoritmu. Tato skutečnost je dobře vyjádřena v názvu knížky N. Wirtha, která se v originále jmenuje „Algorithms + Data Structures = Programs“.
Datové struktury, s kterými programy pracují, přímo vyjadřují opis světa matematickými prostředky nebo pomocí přirozeného jazyka. Základní data, která nejsou strukturována pomineme-li formu jejich uložení v počítači, jsou čísla, znaky a pravdivostní hodnoty, kterých reprezentaci a operace nad nimi najdeme ve všech programovacích jazycích jako jsou Algol60, Pascal, C, Java, C#, atd. Klasickými datovými strukturami jsou známé pole a řetězec. Se spojovými datovými strukturami se seznámíme v příští kapitole.
Spojení datové struktury s operacemi ned jejími hodnotami je obsahem pojmu datový typ.
Datový typ je množina hodnot a soubor operací nad nimi.
Všechna data v počítači reprezentujeme řetězcem 0 a 1- bitů (binary digit). Na reprezentaci každého údaje používáme v počítači jejich konečný počet. Z toho plyne, že v případě celých čísel můžeme zobrazit jen jejich omezený rozsah. V Javě jsou jména celočíselných datových typů pro různé rozsahy hodnot byte, short, int, long.
Pro reálná čísla si třeba uvědomit, že každé číslo v pohyblivé řádové čárce zobrazené konečným počtem 0 a 1 reprezentuje celý interval reálných čísel a opět v určitém rozsahu. Jména takovýchto datových typů v Javě jsou float a double.
Kromě numerických dat, řada informací má slovní tavr, jinými slovy jsou vyjádřeny pomocí řetězců znaků. Dalším standardním základním typem dat jsou znaky. V starších jazycích se na zobrazení znaků použivalo 7 resp. 8 bitů, co vzhledem k množství znaků v různých národních abecedách zdaleka nepostačuje. V minulosti se totiž požívali znaky anglické abecedy, číslice a několik specielních znaků. V Javě má znakový typ název char a na zobrazení jeho hodnot se používá 16 bitů, což umožňuje zobrazení např. akcentovaných znaků české abecedy jako jsou např. ‘ě’ a ‘ř’, jakožto i akcentovaných znaků jiných národních abeced.
Pravdivostní hodnoty jsou dvě a v Javě mají jména true a false a datový typ se nazývá boolean. Na jejich reprezentaci zřejmě stačí řetězec bitů délky 1.
Poznamenejme, že jde o datové typy na úrovni jazyka a uvedli jsme kolik bitů je nevyhnutné na reprezentaci jejich hodnot.
Ve smyslu definice datového typu musíme pro každý z nich definovat soubor operací. Pro numerické datové typy jde o obvyklé aritmetické operace, pro pravdivostní hodnoty jsou to logické operace. Znaky se používají převážně na vytváření abstrakcí vyšší úrovně jako jsou slova a věty. Hodnoty jednotlivých typů lze porovnávat a výsledkem porovnání je pravdivostní hodnota true nebo false. V Javě nelze porovnávat pravdivostní hodnoty. Pro celočíselné datové typy jsou v Javě definovány operace umožňující pracovat s jednotlivými bity.
Z praktického hlediska potřebujeme, aby jsme v operacích mohli použít hodnoty různých typů, co je však v rozporu s definicí operací, kde operace jsou definovány pro daný typ. Řešením je konverze hodnot jednoho typu na jiný.
Dobrým příkladem je konverze číselné hodnoty 123 typu byte tj. řetězec bitů
0111 1011
na tutéž hodnotu vyjádřenou znaky řetězcem bitů
0000 0000 0011 0001 0000 0000 0011 0010 0000 0000 0011 0011.
Data mohou být během vykonávaní programu konstantní nebo se mohou v jeho průběhu měnit. První jsou reprezentována konstantami, zatímco druhá jsou uchovávána v proměnných. Konstanty můžeme reprezentovat přímo jejich hodnotami nebo je pojmenovat, kdy se v Javě při jejich deklaraci použije klíčové slovo final.
Proměnná, obdobně jako v matematice, má své jméno a při její deklaraci, nejpozději při jejím prvním použití, musíme uvést datový typ hodnot, které v ní můžeme uchovávat, například zápisem
typ proměnná
Proměnné přiřadíme hodnotu příkazem přiřazení
proměnná = výraz
Bez ujmy na obecnosti můžeme považovat vykonání příkazů přiřazení (obecně výpočet procedur, funkcí či metod) za výpočetní kroky. Jejich sekvenční zápis pak vyjadřuje také jejich sekvenční výpočet v čase.
Graficky vyjadřujeme výpočetní kroky obdélníkem, který nazýváme funkční blok a šipkami následnost jejich vykonávání. Grafické vyjádření sekvence výpočetních kroků vyjádřených bloky ve tvaru obdélníku má potom jednorozměrný tvar ilustrovaný na obr. .
Programovací jazyk na to, aby mohl být zápisem obecného algoritmu nebo výpočetní metody, musí obsahovat prostředky pro řízení následnosti výpočetních kroků. Těmto prostředkům říkáme řídící struktury.
To, kterým výpočetním krokem budeme pokračovat, může záviset na vyhodnocení nějaké podmínky. Graficky toto rozhodování vyjadřujeme kosočtvercem, rozhodovacím blokem, se dvěma výstupními šipkami k blokům, kterými bude výpočet pokračovat. Jedna pro případ, že podmínka je splněna a druhá pro její nesplnění, jak je znázorněno na obr. . Rozhodovací blok vnáší do grafického vyjádření dvourozměrnost. Pokud by bylo možné použitím klasického příkazu go to dále pokračovat kdekoliv, už při poměrně malém množství rozhodovacích bloků může vzniknout velice nepřehledná struktura zápisu výpočtu i jejího grafického vyjádření, čemu se říkalo spaghetti code.
Řešením je řídící struktura na obr. , příkaz alternativy, kde se vykoná podle vyhodnocení podmínky jeden z výpočetních kroků a pokračuje se následujícím příkazem. Čárkovaně ohraničený graf má jeden vstup a jeden výstup a můžeme jej začlenit do sekvence příkazů. V mnoha programovacích jazycích, včetně jazyka Java, tento příkaz začíná slovem if.
Rozhodovací blok je využit také v řídících strukurách pro (konečné) opakování výpočetního kroku. Rozhoduje o ukončení opakování, kdy pokračujeme následujícím krokem výpočtu. Odpovídající řídící struktura je čárkovaně ohraničený graf na obr..
Příkazy pro opakování výpočetních kroků mají obvykle i v jednom jazyku více tvarů. Na obr. je znázorněn příkaz while z programu LS1 na obr.
(v jazyku Java) i obr.
(v jazyku Pascal). Příkazy opakování (iterační, cyklu), zachovávají jednorozměrnost zápisu sekvence příkazů.
C. Boehm a G. Jacopini v roce 1966 dokázali, že libovolný program vyjádřený funkčními a rozhodovacími bloky propojenými šipkami lze přepsat jako sekvenci funkčních bloků a podgrafů pro alternativu a opakování (iteraci, cyklus).
Tvorba programů, které jsou srozumitelné, a které můžeme vyjádřit jako jednorozměrný graf funkčních bloků a podgrafů příkazů alternativy a opakování se nazývá strukturované programování. Příkaz go to tedy pro zápis programu není potřebný a navíc E. Dijkstra ho v nadpisu svého známého článku Go To Statement Considered Harmful označil jako zhoubný. Na druhé straně D. Knuth v článku Sructured Programming with go to Statements připouští uvážené používaní příkazu skoku. Jazyk Java obsahuje právě v tomto smyslu dva skokové příkazy break a continue.