Od zadání úlohy k programu Výpočetní systémy I 8. přednáška
Životní cyklus software Specifikace požadavků na řešený úkol Specifikace požadavků na řešený úkol Dekompozice úkolu na části Dekompozice úkolu na části Návrh algoritmu(ů) Návrh algoritmu(ů) Implementace algoritmu na program Implementace algoritmu na program Testování programu Testování programu Používání a údržba programu Používání a údržba programu
Životní cyklus software Specifikace požadavků Specifikace požadavků zadavatel často neví, co přesně požadujezadavatel často neví, co přesně požaduje vyjasnit rozpory, neúplnosti a nejasnosti zadánívyjasnit rozpory, neúplnosti a nejasnosti zadání vyjasnit reakci na nepřípustná datavyjasnit reakci na nepřípustná data Umění porozumět uživateliUmění porozumět uživateli systémový integrátor
Životní cyklus software Dekompozice a návrh algoritmu Dekompozice a návrh algoritmu hierarchický rozklad úlohy na části řešitelné jedním pracovníkem nebo týmemhierarchický rozklad úlohy na části řešitelné jedním pracovníkem nebo týmem návrh strukturovaných algoritmů nezávislých na konečné implementacinávrh strukturovaných algoritmů nezávislých na konečné implementaci určení vazeb mezi jednotlivými částmiurčení vazeb mezi jednotlivými částmi
Životní cyklus software Implementace algoritmů Implementace algoritmů zjemňování návrhu – CASE nástrojezjemňování návrhu – CASE nástroje (Computer Aided Software Engineering) zdrojový text v programovacím jazycezdrojový text v programovacím jazyce překlad zdrojového textu do kódu počítače spustitelný programpřeklad zdrojového textu do kódu počítače spustitelný program
Životní cyklus software Testování programu Testování programu zkoušení jednotlivých komponentzkoušení jednotlivých komponent zkoušení celkuzkoušení celku odhalování chyb prováděním programu na vhodně zvolených testovacích datechodhalování chyb prováděním programu na vhodně zvolených testovacích datech „Zkoušej a prověřuj okamžitě, jakmile je co zkoušet !“
Životní cyklus software Používání a údržba Používání a údržba odstranění skrytých vadodstranění skrytých vad potřeba reakce na změny okolípotřeba reakce na změny okolí (jiný hardware, jiný OS, změny v legislativě, organizační struktuře, …) nutnost pečlivé dokumentace !nutnost pečlivé dokumentace !
Programovací jazyky Syntaxe Syntaxe soubor pravidel, které určují, jaké zápisy (konstrukce) jsou v daném jazyce povolené Sémantika Sémantika soubor pravidel popisujících význam povolených konstrukcí
Programovací jazyky Neprocedurální Neprocedurální popisují co se má řešit, ale ne jak dojít k výsledkupopisují co se má řešit, ale ne jak dojít k výsledku algoritmus řešení nepřipravuje autoralgoritmus řešení nepřipravuje autor Procedurální Procedurální popisují algoritmus, tj. jak řešit úlohu – rozklad na dílčí kroky (příkazy)popisují algoritmus, tj. jak řešit úlohu – rozklad na dílčí kroky (příkazy) jednotlivé kroky více či méně vzdálené kódu počítačejednotlivé kroky více či méně vzdálené kódu počítače
Neprocedurální programovací jazyky Obecně orientované Obecně orientované široký okruh řešených úloh x omezené možnosti řešeníširoký okruh řešených úloh x omezené možnosti řešení logické jazyky – PROLOG, LISPlogické jazyky – PROLOG, LISP Specializované Specializované úzký okruh řešených úloh x účinnější a rychlejší možnosti řešeníúzký okruh řešených úloh x účinnější a rychlejší možnosti řešení dotazovací jazyky databázídotazovací jazyky databází
Procedurální programovací jazyky Strojově orientované jazyky Strojově orientované jazyky mnemotechnické názvy instrukcí kódu počítačemnemotechnické názvy instrukcí kódu počítače řada makroinstrukcí (maker)řada makroinstrukcí (maker) velká závislost na konkrétním počítačivelká závislost na konkrétním počítači assemblerassembler
Procedurální programovací jazyky Vyšší programovací jazyky Vyšší programovací jazyky pohodlnější a bezpečnější programovánípohodlnější a bezpečnější programování větší nezávislost na počítači – bližší člověkuvětší nezávislost na počítači – bližší člověku nutnost překladu do kódu počítačenutnost překladu do kódu počítače součástí je deklarace struktury datsoučástí je deklarace struktury dat FORTRAN, COBOL, PASCAL, C, JAVAFORTRAN, COBOL, PASCAL, C, JAVA
Procedurální programovací jazyky Objektově orientované jazyky Objektově orientované jazyky popisují model světa pomocí tříd objektů, které mezi sebou komunikují posíláním zprávpopisují model světa pomocí tříd objektů, které mezi sebou komunikují posíláním zpráv objekt = celek obsahující jak data, tak metody (imperativní programy)objekt = celek obsahující jak data, tak metody (imperativní programy) změna stavu objektu provedením metodyzměna stavu objektu provedením metody provedení algoritmu = změna stavu objektů a jejich vzájemná komunikaceprovedení algoritmu = změna stavu objektů a jejich vzájemná komunikace OBJECT PASCAL, C++, SMALLTALK, …OBJECT PASCAL, C++, SMALLTALK, …
Překlad zdrojového textu do kódu počítače Kompilátor Kompilátor překlad celého zdrojového textu najednoupřeklad celého zdrojového textu najednou překlad v několika fázích (průchodech)překlad v několika fázích (průchodech) výsledkem je program v kódu počítačevýsledkem je program v kódu počítače překlad se provádí jen jednoupřeklad se provádí jen jednou Zdrojový text Kód počítače provedeníprovedení
Překlad zdrojového textu do kódu počítače Interpret Interpret překlad po částech (příkazech, skupinách)překlad po částech (příkazech, skupinách) přeložená část se ihned provedepřeložená část se ihned provede snadnější kontrola sémantikysnadnější kontrola sémantiky Zdrojový text Kód
Implementace algoritmu úprava (doplnění) algoritmu pro konkrétní programovací jazyk úprava (doplnění) algoritmu pro konkrétní programovací jazyk realizace základních struktur (sekvence, selekce, iterace) ve zvoleném jazyce realizace základních struktur (sekvence, selekce, iterace) ve zvoleném jazyce překlad do kódu počítače překlad do kódu počítače
Úprava algoritmu Čím nižší programovací jazyk, tím větší úpravy algoritmu Čím nižší programovací jazyk, tím větší úpravy algoritmu Úprava podmínek (assembler)Úprava podmínek (assembler) výraz > ( (<, =) hodnota S := výraz - hodnota S > ( (<, =) 0
Realizace sekvence Assembler instrukce AKCE 1 instrukce AKCE 2 Formát instrukce - assembler Formát instrukce - assembler adresa : návěští : instrukce 200 : start : LDA : start : LDA 100 AKCE 1 AKCE 2
Realizace sekvence PASCALbegin PASCALbeginend jazyk C jazyk C{}
Realizace selekce Assembler JP AKCE_A JP AKCE_A instrukce instrukce AKCE_B AKCE_B JMP SPOL JMP SPOL AKCE_A: instrukce AKCE_A AKCE_A SPOL: společné pokrač. S > 0 AKCE_AAKCE_B SPOLEČNÉ ano ne
Realizace selekce PASCAL PASCAL if S > 0 then begin beginAKCE_A end end else begin AKCE_B end end Jazyk C Jazyk C if (S > 0) {AKCE_A } else { AKCE_B }
Realizace iterace s podmínkou na začátku Assembler ZNOVA: JP POKRAC instrukce instrukce AKCE_K AKCE_K JMP ZNOVA JMP ZNOVA POKRAC: instrukce Pokračuj Pokračuj S ≤ 0 AKCE_K Pokračuj ano ne
Realizace iterace s podmínkou na začátku PASCAL PASCAL while S ≤ 0 do begin beginAKCE_K end; end;beginPokracujend Jazyk C Jazyk C while (S ≤ 0) {AKCE_K }; };{Pokracuj}
Realizace iterace s podmínkou na konci AssemblerZNOVA: instrukce instrukce AKCE_K AKCE_K JP POKRAC JP POKRAC JMP ZNOVA JMP ZNOVA POKRAC: instrukce Pokračuj Pokračuj S > 0 AKCE_K Pokračuj ano ne
Realizace iterace s podmínkou na konci PASCAL PASCAL repeat begin AKCE_K end end until S > 0 ; beginPokracujend Jazyk C Jazyk C do { AKCE_K } while (S ≤ 0) ; {Pokracuj}