FAV-ZCU/KIV PPA1/12. Postup při návrhu algoritmu.md

68 lines
4.3 KiB
Markdown
Raw Permalink Normal View History

# Postup při návrhu algoritmu (od problému k programu)
- Pokud máme problém, který chceme vyřešit pomocí počítačového programu, je potřeba nejprve promyslet různé aspekty vytvářeného programu
- Jaký je algoritmus či algoritmy programu
- Jakým způsobem lze algoritmus realizovat a dekomponovat na menší části
- Jaké jsou potřebné datové struktury
- Jaký bude vstup a výstup programu (co má program načítat a co vypisovat)
- Jak bude program komunikovat s uživatelem (typ uživatelského rozhraní)
### Obecný postup
- Zde je popsáno několik obecných rad, jak při vytváření (rozsáhlejšího) programu postupovat
- Nejedná se o žádnou konkrétní metodiku
- Nejedná se o dogma, které by muselo být dodržováno striktně
#### Promyšlení jednotlivých aspektů
- Je potřeba rozmyslet všechny zmíněné aspekty o Většina z nich spolu úzce souvisí => změna rozhodnutí v jedné oblasti pravděpodobně ovlivní další oblasti
- Dělat si poznámky, schémata
- Zvláště u složitějších problémů se snadno zapomíná na již vymyšlené věci, proto je potřeba si myšlenky zaznamenávat
#### Postup programování
- S programováním by se mělo začít, až když je rozmyšlená a navržená struktura aplikace
- Tj. na jaké třídy bude aplikace členěna a do jakých balíku budou tyto třídy umístěny
- Co naprogramovat nejdříve
- Je možno více postupů
- Častý je postup shora dolů
- Vytvoří se kostry jednotlivých (téměř všech) tříd i s hlavičkami metod
- Do těchto koster se následně postupně doplní funkcionalita (těla metod)
- Pokud budeme mít nejprve hotovou kostru většiny tříd metod (s prázdnými těly), hodí se to při následném psaní těl metod
- Těla metod mimo jiné obsahují volání jiných metod naší aplikace => pokud tyto metody existují (byť s prázdnými těly), IDE nástroj může při psaní pomoci s doplňováním jejich volání
- Průběžná kontrola funkcionality
- IDE nástroj nás upozorní na překlepy a jiné syntaktické chyby je možné vytvořit program, který půjde hned napoprvé přeložit (tj. bez chyb při překladu)
- Program však s vysokou pravděpodobností obsahuje chyby v chování programu, na které nás IDE nástroj neupozorní je potřeba ladění
- Řádné ladění je možné až po dokončení aplikace
- Ladění částí kódu (např. jednotlivých výpočtů) je však možné už v průběhu může to usnadnit ladění v závěrečné fázi, protože části kódu byly už alespoň částečně prověřeny
#### Úpravy algoritmů a refaktoring
- Pro začátečníky ale i pro zkušené programátory není snadné zohlednit při návrhu programu všechny aspekty
- Často se na něco zapomene
- Náprava opomenutí může být drobná, ale také rozsáhlá
- Je poměrně běžné, že se v již hotovém kódu dělají úpravy
- Za účelem doplnění či změny funkcionality
- Typicky proto, že se na něco zapomnělo, nebo se objevil nový požadavek
- Např. změna algoritmů, změna formátu vstupů a výstupů
- Za účelem vylepšení zdrojového kódu (bez změny funkcionality)
- Tzv. refaktoring
- Např. změna struktury aplikace (rozdělení funkcionality do více tříd ametod), přejmenování a přesunutí tříd, rozdělení aplikace do více balíků apod.
- IDE nástroje často poskytují nástroje pro jeho usnadnění
- Např. přejmenování a přesunutí třídy
- Ve skutečnosti se málokdy stane, že původní návrh, jak by měl program vypadat, se naprogramuje 1:1 a nedojde k žádným změnám
#### Ladění a testování
- Po dokončení programu je potřeba provést jeho ladění
- Program obsahuje chyby za běhu programu, které je potřeba odstranit
- Důležité je zkoušet program spouštět s různými typy vstupů (včetně neplatných vstupů) a ověřovat, zda dává správné výstupy
- V případě nalezení problému (program padá a/nebo dává nesprávné výsledky), je vhodné použít debugger (případně kontrolní výpisy) pro zjištění, co se v programu děje a pro nalezení a odstranění chyb
#### Odevzdání programu
- Po dokončení testování je třeba vytvořit formu programu, která je vhodná pro odevzdání či distribuci
- Typicky spustitelný soubor JAR
- Tato forma by rovněž měla být řádně otestována