{"id":14,"date":"2012-03-25T19:17:22","date_gmt":"2012-03-25T17:17:22","guid":{"rendered":""},"modified":"2018-11-05T20:17:20","modified_gmt":"2018-11-05T19:17:20","slug":"ako-prezit-zlozitost-softveru","status":"publish","type":"post","link":"https:\/\/spireng.sk\/en\/ako-prezit-zlozitost-softveru\/","title":{"rendered":"Ako pre\u017ei\u0165 zlo\u017eitos\u0165 softv\u00e9ru"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"imgp_img\" style=\"float: left; margin: 2px 5px;\" src=\"\/sites\/default\/files\/imagepicker\/1\/dfasf46456asdf.gif\" alt=\"Obr\u00e1zok\" width=\"221\" height=\"200\" \/>Programovanie je discipl\u00edna, ktor\u00e1 nie je \u00faplne jednoduch\u00e1. Mus\u00edte by\u0165 schopn\u00fd pochopi\u0165 z\u00e1kazn\u00edka a pretavi\u0165 jeho po\u017eiadavky do funk\u010dn\u00e9ho softv\u00e9ru. Rie\u0161i\u0165 okrajov\u00e9 stavy, ktor\u00e9 nast\u00e1vaj\u00fa len v nejakom druhu konfigur\u00e1cie po\u010d\u00edta\u010da alebo sna\u017ei\u0165 sa <span style=\"color: #000000;\"><span style=\"background: none repeat scroll 0% 0% transparent;\">odladi\u0165<\/span><\/span> n\u00e1hodn\u00e9 chyby. Okrem toho mus\u00edte \u010d\u00edta\u0165 k\u00f3d, ktor\u00fd p\u00edsal niekto in\u00fd alebo vy pred rokom a viac (\u010do je skoro to ist\u00e9). Jedna z \u010dinnost\u00ed, ktor\u00e1 sa preplieta cel\u00fdm v\u00fdvojom softv\u00e9ru a ktor\u00fa si uvedom\u00edme len ak naraz\u00edme na naozaj ve\u013ek\u00fd probl\u00e9m, je zvl\u00e1danie komplexnosti (alebo zlo\u017eitosti).<!--more--><\/p>\n<p><!--break-->Stalo sa v\u00e1m, \u017ee ste u\u017e niekedy rie\u0161ili nejak\u00e9 <span style=\"background: none repeat scroll 0% 0% transparent;\">probl\u00e9mov\u00e9<\/span> udalosti, objekty, \u010dinnosti, ktor\u00e9 s t\u00fdm s\u00faviseli sa v\u00e1m postupne objavovali v hlave, ale neboli ste schopn\u00ed poja\u0165 to v\u0161etko naraz? Len sa to vracalo st\u00e1le dookola. Bolo to ako ke\u010f stoj\u00edte pri koloto\u010di typu detsk\u00e1 man\u00e9\u017e a vid\u00edte pr\u00e1ve len to, \u010do v\u00e1s akur\u00e1t m\u00ed\u0148a. Vlak, kon\u00edk, auto, motorka, bicykel, vlak, kon\u00edk, auto &#8230; at\u010f. Cel\u00e9 sa to deje preto, lebo n\u00e1\u0161 mozog m\u00e1 obmedzen\u00fa kapacitu a naraz je schopn\u00fd poja\u0165 (zobrazi\u0165 v\u00e1m) len ur\u010dit\u00fd po\u010det objektov. V knihe <em>Dokonal\u00fd k\u00f3d<\/em> tvrd\u00ed <em>Steve McConnell<\/em>, \u017ee ich je sedem. Ja si mysl\u00edm, \u017ee je to e\u0161te celkom optimistick\u00fd odhad. Pokia\u013e toti\u017e dr\u017e\u00edte zoznamy toho, \u010do m\u00e1te spravi\u0165 v hlave, tak v\u00e1m uprostred toho, ako rie\u0161ite nejak\u00fd probl\u00e9m, v\u00e1\u0161 rozum za\u010dne pripom\u00edna\u0165, \u017ee m\u00e1te \u00eds\u0165 do lek\u00e1rne alebo sa v bl\u00edzkosti objav\u00ed nejak\u00fd zdroj hluku, ktor\u00fd v\u00e1s vyru\u0161\u00ed (ale o tom niekde <a href=\"http:\/\/spireng.sk\/en\/gtd-principy\/\">inde<\/a>). Po ka\u017edom takomto vyru\u0161en\u00ed sa detsk\u00e1 man\u00e9\u017e rozt\u00e1\u010da nanovo.<\/p>\n<p>Tak\u017ee viete udr\u017ea\u0165 len obmedzen\u00fd po\u010det objektov alebo elementov. \u010co to znamen\u00e1 pre programovanie? No je to obmedzen\u00fd po\u010det modulov alebo objektov alebo tried. Inak povedan\u00e9, ak navrhujete nie\u010do, kde mus\u00edte podrobne uva\u017eova\u0165 o viac ako siedmych triedach naraz, tak m\u00e1te probl\u00e9m. Ak\u00e9 s\u00fa rie\u0161enia tohto probl\u00e9mu:<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li>p\u00edsa\u0165 jednoduch\u00e9 aplik\u00e1cie (len \u017eartujem),<\/li>\n<li>kresli\u0165 si,<\/li>\n<li>deli\u0165 ve\u013ek\u00fd probl\u00e9m na men\u0161ie.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>Kreslenie je celkom dobr\u00fd sp\u00f4sob, ale funguje len v men\u0161om. Je to preto, lebo zachyti\u0165 cel\u00fd ten probl\u00e9m tak, ako ho vid\u00ed v\u00e1\u0161 rozum na 2D papieri, chce mimoriadnu zru\u010dnos\u0165 v kreslen\u00ed. Hlavn\u00fdm probl\u00e9mom pritom je, \u017ee inform\u00e1cie musia pr\u00fadi\u0165 z pravej hemisf\u00e9ry, ktor\u00e1 je dobr\u00e1 na rie\u0161enie probl\u00e9mov, ale nevie sa vyjadrova\u0165 do \u013eavej, ktor\u00e1 zase pozn\u00e1 symboly, teda v\u00e1m pom\u00f4\u017ee to cel\u00e9 nakresli\u0165. Tento preklad z jednej polovice do druhej v\u00f4bec nie je jednoduch\u00fd a \u010dasto sa nepodar\u00ed (vy pritom m\u00e1te pocit, \u017ee tomu rozumiete, ale neviete to nakresli\u0165 ani op\u00edsa\u0165). Mimochodom tento popis fungovania mozgu nem\u00e1m z vlastnej hlavy. Ve\u013emi dobr\u00e1 kniha o tom je <em><a href=\"http:\/\/www.bookdepository.com\/Pragmatic-Thinking-Learning-Andy-Hunt\/9781934356050\">Pragmatic Thinking and Learning<\/a> <\/em>od <em>Andyho Hunta<\/em>. Dobr\u00e9 \u010d\u00edtanie. Odpor\u00fa\u010dam.<\/p>\n<p>Tak\u017ee ost\u00e1va n\u00e1m u\u017e len posledn\u00fd kandid\u00e1t a to je delenie probl\u00e9mu na men\u0161ie. \u010co to znamen\u00e1 v praxi? Napr\u00edklad pre objektovo-orientovan\u00e9 programovanie, \u017ee ka\u017ed\u00fd objekt m\u00e1 pevn\u00e9 hranice, jasne definovan\u00fa zodpovednos\u0165. Cel\u00e9 sa to potom premietne do toho, \u017ee pri p\u00edsan\u00ed triedy sa m\u00f4\u017eete s\u00fastredi\u0165 len na t\u00fato jednu a ni\u010d viac. Ak m\u00e1 v\u00e1\u0161 rozum za \u00falohu poja\u0165 jeden objekt, tak m\u00e1 na to dostato\u010dn\u00fa kapacitu, aby ho pojal dobre. Teda ak p\u00ed\u0161ete triedu a je to jedin\u00e1 trieda, na ktor\u00fa sa m\u00e1te s\u00fastredi\u0165, mali by ste ju nap\u00edsa\u0165 dobre. Dobr\u00e1 trieda je konzistentn\u00e1, m\u00e1 len jednu zodpovednos\u0165, rob\u00ed pr\u00e1ve to, \u010do m\u00e1 a ni\u010d viac. Ak m\u00e1te aplik\u00e1ciu pln\u00fa tak\u00fdchto tried, tak v\u00e1s bude bolie\u0165 hlava omnoho menej.<\/p>\n<p>Opakom tak\u00e9ho pr\u00edstupu s\u00fa triedy bez jasn\u00fdch hran\u00edc (maj\u00fa napr\u00edklad zverejnen\u00e9 premenn\u00e9 na popis vn\u00fatorn\u00e9ho stavu) a glob\u00e1lne premenn\u00e9. Kdesi som \u010d\u00edtal, \u017ee cesta do program\u00e1torsk\u00e9ho pekla je kr\u00e1tka, \u0161irok\u00e1 a vydl\u00e1\u017eden\u00e1 glob\u00e1lnymi premenn\u00fdmi. Glob\u00e1lnou premennou je premenn\u00e1 jednej triedy, ktor\u00e1 m\u00f4\u017ee by\u0165 nastavovan\u00e1 skupinou triedy (najhor\u0161ia mo\u017enos\u0165 je ktorouko\u013evek triedou v aplik\u00e1cii) alebo je lok\u00e1lna premenn\u00e1 nejakej triedy, ktor\u00e1 ale m\u00e1 nieko\u013eko <span style=\"background: none repeat scroll 0% 0% transparent;\">zodpovednost\u00ed<\/span> a tieto skryt\u00e9 pod-\u010dasti triedy komunikuj\u00fa cez jednu tak\u00fato premenn\u00fa. Pre\u010do je to tak\u00e9 nebezpe\u010dn\u00e9? Ak trieda, ktor\u00fa p\u00ed\u0161ete, \u010d\u00edta glob\u00e1lnu premenn\u00fa a pod\u013ea toho sa nejako spr\u00e1va, tak pri jej \u010d\u00edtan\u00ed mus\u00edte uva\u017eova\u0165 o v\u0161etk\u00fdch triedach (a ich spr\u00e1van\u00ed), ktor\u00e9 ju nastavuj\u00fa. To znamen\u00e1, \u017ee po\u010det objektov, o ktor\u00fdch m\u00e1te uva\u017eova\u0165, narast\u00e1 a ani si neuvedom\u00edte a presiahnete svoje mo\u017enosti.<\/p>\n<p>Bez oh\u013eadu na to, ak\u00fd sp\u00f4sob vyrovnania sa s komplexnos\u0165ou si zvol\u00edte, je to probl\u00e9m, ktor\u00fd v\u00e1s bude pri v\u00fdvoji stret\u00e1va\u0165 st\u00e1le. Kvalita n\u00e1vrhu tried v aplik\u00e1cii m\u00f4\u017ee \u013eahko degradova\u0165 a ani si neuvedom\u00edte a pristihnete sa pri tom, \u017ee pri p\u00edsan\u00ed jednej triedy mus\u00edte uva\u017eova\u0165 o \u010fal\u0161\u00edch troch. Na internete n\u00e1jdete nejeden \u010dl\u00e1nok, ktor\u00fd sa sna\u017e\u00ed t\u00fato degrad\u00e1ciu vysvetli\u0165 druh\u00fdm z\u00e1konom termodynamiky, ktor\u00fd hovor\u00ed, \u017ee: \u201eV uzavretom syst\u00e9me pri cyklickom procese entropia narast\u00e1 alebo ost\u00e1va rovnak\u00e1.\u201c V tomto pr\u00edpade je tou entropiou neusporiadanos\u0165 k\u00f3du a cyklick\u00fdm procesom jeho \u00fapravy (napr. opravy ch\u00fdb). T\u00e1to neusporiadanos\u0165 m\u00e1 potom pomerne ve\u013emi siln\u00fd vplyv na zlo\u017eitos\u0165.<\/p>","protected":false},"excerpt":{"rendered":"<p>Programovanie je discipl\u00edna, ktor\u00e1 nie je \u00faplne jednoduch\u00e1. Mus\u00edte by\u0165 schopn\u00fd pochopi\u0165 z\u00e1kazn\u00edka a pretavi\u0165 jeho po\u017eiadavky do funk\u010dn\u00e9ho softv\u00e9ru. Rie\u0161i\u0165 okrajov\u00e9 stavy, ktor\u00e9 nast\u00e1vaj\u00fa len v nejakom druhu konfigur\u00e1cie po\u010d\u00edta\u010da alebo sna\u017ei\u0165 sa odladi\u0165 n\u00e1hodn\u00e9 chyby. Okrem toho mus\u00edte \u010d\u00edta\u0165 k\u00f3d, ktor\u00fd p\u00edsal niekto in\u00fd alebo vy pred rokom a viac (\u010do je skoro [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-14","post","type-post","status-publish","format-standard","hentry","category-vyvoj-softveru"],"_links":{"self":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/14","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/comments?post=14"}],"version-history":[{"count":2,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/14\/revisions"}],"predecessor-version":[{"id":324,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/14\/revisions\/324"}],"wp:attachment":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/media?parent=14"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/categories?post=14"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/tags?post=14"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}