Proč OO : od strukturálního pojetí k objektovému

Podívejme se na následující obrázek - část systému, kde kód pracuje s daty :

strukturální pojetí -kód a data
strukturální pojetí - kód a data (klikni pro zvětšení)

kód : tyto prvky čtou a mění data; jsou to výkonné části informačního systému, provádějí nějakou činnost; mohou to být např. binární programy (či jejich části - moduly, funkce, procedury, ....), skripty, triggery, ...

data : jak proměnné (lokální či globální) držené jen v paměti (po vypnutí počítače se jejich obsah, ale vlastně i jejich samotná existence "ztratí"), tak perzistentní data (soubory, řádky db tabulek, děrné štítky apod.)

Tato situace přináší různé problémy - ukážeme si některé z nich (tj. ty, s jejichž řešením nám může pomoci objektový přístup :-)
  • při vývoji IS musíme provádět transformaci : nestačí nám prostě namodelovat realitu, ale navíc ji musíme rozdělit na oblast dat a na oblast kódu; již tato transformace nás stojí jisté úsilí, ba co víc : důsledky této transformace se "táhnou" celým dalším vývojem a údržbou IS (ono rozdělení nám ve fázi údržby a dalšího rozvoje může způsobit daleko větší obtíže, než které jsme si prožili při prvotním vytvoření IS)
  • obtíže při údržbě a dalším rozvoji : chceme přidat/změnit funkcionalitu : jak jednoduše zjistit, která data jsou ovlivněna kterou funkcí ? konkrétní funkce může volat další funkce, ty mohou volat opět další funkce, .... a až v těchto volaných funkcích může být čtena/měněna určitá oblast dat (a co hůř - toto čtení/měnění může být podmíněné, tj. může se provádět jen za určitých podmínek, jejichž vyhodnocení může být samo o sobě velmi složité a může být závislé na dalších funkcích a na hodnotě dalších dat; hodnota, na kterou je měněna nějaká oblast dat, může být také nastavena dle výsledku volání dalších funkcí a dle hodnoty dalších dat)
  • obtíže při údržbě a dalším rozvoji : jak jednoduše zjistit, kterak spolu souvisí různá data, jaké vztahy mezi daty panují, co musí být dodrženo pro to, aby obsah dat byl validní .... ?
  • obtíže při ladění a testování kódu : funkce spolu zdílí (neperzistentní) data v podstatě dvěma způsoby :
    1. lokální data : ta musí být předána jako parametr
    2. globální data : jsou viditelná a měnitelná i bez jejich předávání
    jak však ladit (a testovat) jednotlivé funkce, nebo jednotlivé "situace", jež mohou nastat ? jak zajistit, aby při ladění určité funkce byly správně nastaveny hodnoty všech globálních proměnných, a aby byla funkce zavolána se správnými hodnotami všech parametrů (je nutno nejen nastavit smysluplné hodnoty parametrů a globálních proměnných, ale musíme mít na zřeteli i správnou kombinaci všech hodnot, která nastane právě při testované situaci) ?
  • obtížná znovupoužitelnost (re-use)
Závažnost výše uvedených problémů a obtížnost jejich řešení může velmi vzrůst za těchto situací :
  • vývoj IS je rozprostřen v čase (tj. práce na vývoji IS trvají dlouho)
  • vývoj IS je rozprostřen v prostoru (tj. členové týmu nesedí spolu v jedné místnosti, nebo dokonc ani ve stejné budově či ve stejném městě, anebo se na vývoji podílí více řešitelských firem, či firma řešitelská i zadavatelská)
  • vyšší fluktuace řešitelů (tím je myšleno nejen že zaměstnanec odejde z řešitelské firmy, ale i situace kdy je vývojář např. "převelen" na jiné úkoly a musí ho zastoupit někdo jiný)
  • větší řešitelské týmy
  • reinženýring (myšleno : systém či jeho část vyvineme znovu - např. z důvodu přechodu na jinou technologii, či systém nabobtnal tak, že jeho další údržba a rozvoj se jeví jako dražší než zahodit ho a udělat to znovu a lépe, ....)