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

4.3 KiB

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