<?xml version="1.0" encoding="utf-8"?>
<!-- generator="Joomla! - Open Source Content Management" -->
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Softwarové inženýrství</title>
		<description><![CDATA[]]></description>
		<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi</link>
		<lastBuildDate>Fri, 25 Jul 2025 09:43:05 +0000</lastBuildDate>
		<generator>Joomla! - Open Source Content Management</generator>
		<atom:link rel="self" type="application/rss+xml" href="https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi?format=feed&amp;type=rss"/>
		<language>cs-cz</language>
		<item>
			<title>Softwarový proces</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/34-softwarovy-proces</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/34-softwarovy-proces</guid>
			<description><![CDATA[<div class="feed-description"><p>Proces obecně je <span class="poznamka" title="některé kroky mohou probíhat paralelně (neuspořádaně), jiné musí na sebe navazovat (jsou uspořádané)">po částech uspořádaná</span> množina <span class="poznamka" title="aktivita či další podproces">kroků</span> směřujících k dosažení cíle. Je-li cíl vytvoření softwaru pak mluvíme o <strong>softwarovém procesu</strong>. Disciplína zabývající se problémy softwarového procesu se nazývá <strong>softwarové inženýrství</strong>.</p>
</div>]]></description>
			<author>L.Zolta@seznam.cz (Super User)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Sun, 06 May 2012 08:28:28 +0000</pubDate>
		</item>
		<item>
			<title>Specifikace požadavků</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/35-specifikace-pozadavku</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/35-specifikace-pozadavku</guid>
			<description><![CDATA[<div class="feed-description"><p>Specifikace a analýza požadavků je první fáze vývoje softwaru. Cílem je definovat požadavky na software a popsat jeho funkčnost. Výsledkem této fáze by měly být dokumenty, které se stanou součásti smlouvy mezi zadavatelem a vývojovým týmem.</p>
</div>]]></description>
			<author>L.Zolta@seznam.cz (Super User)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Sun, 06 May 2012 13:28:58 +0000</pubDate>
		</item>
		<item>
			<title>Návrh implementace</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/36-navrh-implementace</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/36-navrh-implementace</guid>
			<description><![CDATA[<div class="feed-description"><p>Návrh implementace je druhá fáze vývoje softwaru. Jde o abstrakci zdrojového kódu, která bude sloužit jako hlavní dokument programátorům v další implementační fázi.</p>
</div>]]></description>
			<author>L.Zolta@seznam.cz (Super User)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Mon, 07 May 2012 07:05:40 +0000</pubDate>
		</item>
		<item>
			<title>Deklarativní programování</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/38-deklarativni-programovani</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/38-deklarativni-programovani</guid>
			<description><![CDATA[<div class="feed-description"><p>Deklarativní programování se zabývá tím <em><strong>co se počítá</strong></em> a neřeší jak se to počítá (Např. u logického programování definujeme v kódu výrazy a vztahy a pak se dotazujeme na další klauzule, které z toho vyplývají. Jak probíhá samotné vyhodnocení klauzulí se neřeší.). Program je chápan jako funkce, která na základě vstupů vrátí výstup. Stejná funkce se stejnými argumenty dává u deklarativního prog. vždy stejný výsledek (vyhýbají se používání globálních proměnných).</p>
<p>Opakem tohoto principu je <strong>imperativní programování </strong>popisující jednotlivé úkony pomocí algoritmů. Zjednodušeně to lze popsat tak, že imperativní programy obsahují algoritmy, kterými se dosáhne chtěný cíl, zatímco deklarativní jazyky specifikují cíl a algoritmizace je ponechána programu (interpretu) daného jazyka.</p>
</div>]]></description>
			<author>L.Zolta@seznam.cz (Super User)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Tue, 08 May 2012 14:39:41 +0000</pubDate>
		</item>
		<item>
			<title>Překladač</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/43-prekladac</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/43-prekladac</guid>
			<description><![CDATA[<div class="feed-description"><p><strong>Překladač</strong> je program, který překládá programy z jednoho programovací jazyka do jiného. Překladač tedy přečte <strong>zdrojový program</strong> napsaný v zdrojovém jazyce přeloží ho do ekvivalentního programu (<strong>cílový program</strong>), který je však napsaný v jiném (cílovém) jazyce. <a href="http://www.cs.vsb.cz/behalek/vyuka/pjp/skripta/skr-mb.pdf" target="_blank" title="Překladače, skripta M.Beneše"><img src="https://lucie.zolta.cz/images/ikona-zdroje-12.jpg" border="0" alt="" /></a></p>
</div>]]></description>
			<author>L.Zolta@seznam.cz (Super User)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Thu, 10 May 2012 09:45:59 +0000</pubDate>
		</item>
		<item>
			<title>Struktura překladače</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/44-struktura-prekladace</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/44-struktura-prekladace</guid>
			<description><![CDATA[<div class="feed-description"><p>Překladač provádí dvě základní činnosti - analyzuje zdrojový kód a následně jej přeložit do cílového programu. Součástí analýzy je lexikální, syntaktická a strukturální analýza.</p>
<p>Činnost překladače je následující: <strong><em>Zdrojový kód -&gt; pre-procesor -&gt; lexikální analyzátor -&gt; syntaktický analyzátor -&gt; tvorba mezikódu -&gt; <span style="line-height: 1.3em;">optimalizátor -&gt; generování výsledného kód -&gt; optimalizace závislá na zařízení</span></em></strong></p>
<p>Součástí generování cílového programu je optimalizace kódu. <a href="http://www.cs.vsb.cz/behalek/vyuka/pjp/skripta/skr-mb.pdf" target="_blank" title="Překladače, skripta M.Beneše"><img src="https://lucie.zolta.cz/images/ikona-zdroje-12.jpg" border="0" alt="" /></a></p>
</div>]]></description>
			<author>L.Zolta@seznam.cz (Super User)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Thu, 10 May 2012 14:32:02 +0000</pubDate>
		</item>
		<item>
			<title>Návrhové vzory</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/45-navrhove-vzory</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/45-navrhove-vzory</guid>
			<description><![CDATA[<div class="feed-description"><p>Návrhové vzory jsou metodiky (šablony) pro řešení různých problému, se kterými vývojář může setkat. Objektově orientované návrhové vzory typicky ukazují vztahy a interakce mezi třídami a objekty, aniž by určovaly implementaci konkrétní třídy.</p>
<p>Návrhové vzory se dělí do těchto 3 základních skupin:<span style="line-height: 1.3em;"><br /></span></p>
<ul>
<li><span style="line-height: 1.3em;"><strong>Creational Patterns</strong> <strong>(vytvářející)</strong> - </span><span style="line-height: 1.3em;">řeší problémy související s vytvářením objektů v systému. Snahou těchto návrhových vzorů je popsat postup výběru třídy nového objektu a zajištění správného počtu těchto objektů. Většinou se jedná o dynamická rozhodnutí učiněná za běhu programu.</span></li>
<li>
<p><strong>Structural Patterns (strukturální) - </strong><span style="line-height: 1.3em;">představují skupinu návrhových vzorů zaměřujících se na možnosti uspořádání jednotlivých tříd nebo komponent v systému. Snahou je zpřehlednit systém a využít možností strukturalizace kódu.</span></p>
</li>
<li><strong style="line-height: 1.3em;"><span id="Behavioral_Patterns_.28chov.C3.A1n.C3.AD.29">Behavioral Patterns (chování) - </span></strong><span style="line-height: 1.3em;">zajímají se o chování systému. Mohou být založeny na třídách nebo objektech. U tříd využívají při návrhu řešení především principu dědičnosti. V druhém přístupu je řešena spolupráce mezi objekty a skupinami objektů, která zajišťuje dosažení požadovaného výsledku.</span></li>
</ul>
<p>Každá z těchto skupin obsahuje mnoho návrhových vzorů, které si nyní rozvedeme:</p>
<h3><span id="Creational_patterns_.28Vzory_t.C3.BDkaj.C3.ADc.C3.AD_se_tvorby_objekt.C5.AF.29">Creational patterns (Vzory týkající se tvorby objektů)</span></h3>
<ul>
<li><a href="https://lucie.zolta.cz/index.php/statnice-vsb?layout=edit&amp;id=137"><strong>Abstract Factory</strong></a> (Abstraktní továrna) – Definuje rozhraní pro vytváření rodin objektů, které jsou na sobě závislé nebo spolu nějak souvisí bez určení konkrétní třídy. Klient je odstíněn od vytváření konkrétních instancí objektů.</li>
<li><strong>Factory Method</strong> (Tovární metoda) – Definuje rozhraní pro vytváření objektu, které nechává potomky rozhodnout o tom, jaký objekt bude fakticky vytvořen. *Tovární metoda nechává třídy přenést vytváření na potomky.</li>
<li><a href="https://lucie.zolta.cz/index.php?option=com_content&amp;view=article&amp;layout=edit&amp;id=183"><strong>Builder</strong></a> (Stavitel) – Odděluje tvorbu komplexu objektů od jejich reprezentace tak, aby stejný proces tvorby mohl být použit i pro jiné reprezentace.</li>
<li><a href="https://lucie.zolta.cz/index.php/statnice-vsb?layout=edit&amp;id=138"><strong>Singleton</strong></a> (Jedináček) – Potřebujete-li, aby měla třída maximálně jednu instanci.</li>
<li><strong>Prototype</strong> (Prototyp, Klon) – Specifikuje druh objektů, které se mají vytvořit použitím prototypového objektu. Nové objekty se vytváří kopírováním tohoto prototypového objektu.</li>
<li><strong>Lazy Initialization</strong> (Odložená inicializace) – Odkládá vytváření objektu, počítání hodnoty nebo provádění nějakého procesu, až do okamžiku, kdy je ho poprvé potřeba.</li>
<li><strong>Object pool</strong> (Fond, lidově bazén) – Umožňuje vyhnout se drahému vytváření a uvolňování zdrojů recyklováním objektů, které už se nepoužívají.</li>
<li><strong>Multiton</strong></li>
</ul>
<h3><span id="Structural_Patterns_.28Vzory_t.C3.BDkaj.C3.ADc.C3.AD_se_struktury_programu.29">Structural Patterns (Vzory týkající se struktury programu)</span></h3>
<ul>
<li><a href="https://lucie.zolta.cz/index.php?option=com_content&amp;view=article&amp;layout=edit&amp;id=184"><strong>Adapter</strong></a> (Adaptér) – Potřebujete-li, aby spolu pracovaly dvě třídy, které nemají kompatibilní rozhraní. Adaptér převádí rozhraní jedné třídy na rozhraní druhé třídy.</li>
<li><strong>Bridge</strong> (Most) – Oddělí abstrakci od implementace, tak aby se tyto dvě mohly libovolně lišit.</li>
<li><a href="https://lucie.zolta.cz/index.php/statnice-vsb?layout=edit&amp;id=139"><strong>Composite</strong> </a>(Strom, Složenina) – Komponuje objekty do stromové struktury a umožňuje klientovi pracovat s jednotlivými i se složenými objekty stejným způsobem.</li>
<li><strong>Decorator</strong> (Dekorátor) – Použijeme jej v případě, že máme nějaké objekty, kterým potřebujeme přidávat další funkce za běhu. Nový objekt si zachovává původní rozhraní.</li>
<li><a href="https://lucie.zolta.cz/index.php?option=com_content&amp;view=article&amp;layout=edit&amp;id=185"><strong>Facade</strong></a> (Fasáda) – Nabízí jednotné rozhraní k sadě rozhraní v podsystému. Definuje rozhraní vyšší úrovně, které zjednodušuje použití podsystému.</li>
<li><strong>Flyweight</strong> (Muší váha) – Je vhodná pro použití v případě, že máte příliš mnoho malých objektů, které jsou si velmi podobné.</li>
<li><strong>Proxy </strong>– Nabízí náhradu nebo zástupný objekt za nějaký jiný pro kontrolu přístupu k danému objektu.</li>
</ul>
<h3><span id="Behavioral_Patterns_.28Vzory_t.C3.BDkaj.C3.ADc.C3.AD_se_chov.C3.A1n.C3.AD.29">Behavioral Patterns (Vzory týkající se chování)</span></h3>
<ul>
<li><a href="https://lucie.zolta.cz/index.php/statnice-vsb?layout=edit&amp;id=140"><strong>Observer</strong> </a>(Pozorovatel) – V případě, kdy je na jednom objektu závislých mnoho dalších objektů, poskytne vám tento vzor způsob, jak všem dát vědět, když se něco změní.</li>
<li><strong>Command</strong> (Příkaz) – Zapouzdřete požadavek jako objekt a tím umožněte parametrizovat klienty s různými požadavky, frontami nebo požadavky na log a podporujte operace, které jdou vzít zpět.</li>
<li><strong>Interpreter</strong> (Interpret) - Vytváří jazyk, což znamená definování gramatických pravidel a určení způsobu, jak vzniklý jazyk interpretovat.</li>
<li><strong>State</strong> (Stav) – Umožňuje objektu měnit své chování, pokud se změní jeho vnitřní stav. Objekt se tváří, jako kdyby se stal instancí jiné třídy.</li>
<li><strong>Strategy</strong> (Strategie) – Zapouzdřuje nějaký druh algoritmů nebo objektů, které se mají měnit, tak aby byly pro klienta zaměnitelné.</li>
<li><strong>Chain of responsibility</strong> (Zřetězení zodpovědnosti) – Řeší jak zaslat požadavek bez přesného vymezení objektu, který jej zpracuje.</li>
<li><strong>Visitor</strong> (Návštěvník) – Reprezentuje operaci, která by měla být provedena na elementech objektové struktury. Visitor vám umožní definovat nové operace beze změny tříd elementů na kterých pracuje.</li>
<li><a href="https://lucie.zolta.cz/index.php?option=com_content&amp;view=article&amp;layout=edit&amp;id=186"><strong>Iterator</strong></a> (Iterátor) – Nabízí způsob, jak přistupovat k elementům skupinového objektu postupně bez toho, abyste vystavovali vnitřní reprezentaci tohoto objektu.</li>
<li><strong>Mediator</strong> (Prostředník) – Umožňuje zajistit komunikaci mezi dvěma komponentami programu, aniž by byly v přímé interakci a tím musely přesně znát poskytované metody.</li>
<li><strong>Memento</strong> (Memento) – Bez porušování zapouzdření zachyťte a uložte do externího objektu interní stav objektu tak, aby ten objekt mohl být do tohoto stavu kdykoliv později vrácen.</li>
<li><strong>Template method</strong> (Šablonová metoda) – Definuje kostru toho, jak nějaký algoritmus funguje, s tím, že některé kroky nechává na potomcích. Umožňuje tak potomkům upravit určité kroky algoritmu bez toho, aby mohli měnit strukturu algoritmu.</li>
</ul>
<p> </p></div>]]></description>
			<author>L.Zolta@seznam.cz (Super User)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Mon, 14 May 2012 09:21:09 +0000</pubDate>
		</item>
		<item>
			<title>Mapování UML diagramů na kód</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/51-mapovani-uml-diagramu-na-kod</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/51-mapovani-uml-diagramu-na-kod</guid>
			<description><![CDATA[<div class="feed-description"><p>K mapování UML diagramů na kód dochází v první části implementační fáze vývoje. Jde o automatické vygenerování zdrojového kódu z UML diagramu.</p>
<p>Z <em><strong>diagramu tříd</strong></em> například vygeneruje jednotlivé rozhraní, třídy s proměnnými a prázdnými metodami. Velmi hezký tutoriál o tom jak se mapuje class diagram na kód najdete <a href="http://www.milosnemec.cz/clanek.php?id=199" target="_blank">zde</a>.</p>
<p>Z <em><strong>diagramů komponent</strong></em> pak vyčte a do generovaného kódu přidá požadované komponenty. <strong>Komponenta</strong> je už existující a vyměnitelná část systému s daným rozhraním skrze které jí systém používá. Jde o komponentu napsanou v zdrojovém kódu, nebo už zkompilovanou komponentu v binárním kódu, či další komponenty reprezentovanými databázovými tabulkami, dokumenty, apod. <a href="http://www.google.cz/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=4&amp;sqi=2&amp;ved=0CFoQFjAD&amp;url=http%3A%2F%2Fvondrak.cs.vsb.cz%2Fdownload%2FMetody_specifikace_softwarovych_systemu.pdf&amp;ei=Ugm1T6fOFZSn8QPC-pUV&amp;usg=AFQjCNHT2fB0Jh53YhookpJz1oL4S5pbNg&amp;sig2=fjTVnM6_ogcnT7AjXv98NA" target="_blank" title="Metody specifikace softwarových systémů - I. Vondrák"><img src="https://lucie.zolta.cz/images/ikona-zdroje-12.jpg" border="0" alt="" /></a></p>
<p>Úkolem samotné implementace je pak dopsat těla metod, jejichž chování může být pospáno v <em><strong>diagramu aktivit</strong></em>.</p>
</div>]]></description>
			<author>L.Zolta@seznam.cz (Super User)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Thu, 17 May 2012 10:08:23 +0000</pubDate>
		</item>
		<item>
			<title>Abstract factory</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/137-abstract-factory</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/137-abstract-factory</guid>
			<description><![CDATA[<div class="feed-description"><p>Abstract factory neboli <strong>továrna</strong> je návrhový vzor který řeší univerzálnost kódu. Cílem továrny je <em style="line-height: 1.3em;"><strong>odstínit klienta od vytváření  konkrétních objektů </strong></em>(to má na starost factory). Klient se nestará o to, které konkrétní objekty vyrábí která konkrétní továrna, protože používá jednotné rozhraní abstraktní továrny. Vzor tudíž odděluje detaily implementace skupiny objektů od jejich obecného používání. </p>
<p><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/Factory_Method_UML_class_diagram.png" border="0" alt="" width="425" height="196" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<h5><em> </em></h5>
<h5><em>Příklad Abstract factory:</em></h5>
<p>Jde o to, aby například programátor při změně nějakého grafického prvku, nemusel překopávat celý kód který s tímto prvkem pracuje. Chceme-li mít například univerzální GUI jak pro Windows tak pro Linux, ale v programu nechceme rozlišovat zda pracujeme s linuxovským či windovským tlačítkem. Tuhle univerzalitu zajistím tak, že vytvořím univerzální tlačítko <span class="kod" style="line-height: 1.3em;">UButton</span> (rozhraní, abstraktní třída), které bude mít definované metody pro práci s tlačítkem. V programu tedy budeme pracovat tlačítkem typu <span class="kod" style="line-height: 1.3em;">UButton</span><span style="line-height: 1.3em;"> a o konkrétní instanci se postará třída </span><span class="kod" style="line-height: 1.3em;">Factory </span><span style="line-height: 1.3em;">(odtud název návrhového vzoru). Factory na základě operačního systému vytvoří instanci konkrétního tlačítka, které je specializované už pro daný operační systém </span><span class="kod" style="line-height: 1.3em;">WinButton</span><span style="line-height: 1.3em;"> nebo </span><span class="kod" style="line-height: 1.3em;">LinuxButton</span><span style="line-height: 1.3em;">. Vzhledem k tomu, že obě tyto třídy implementovaly rozhraní </span><span class="kod" style="line-height: 1.3em;">UButton</span></p>
<pre class="kod">class WinButton implements UButton</pre>
<pre class="kod">class LinuxButton implements UButton</pre>
<p><span style="line-height: 1.3em;">pracuje s nimi hlavní program jako s jedním typem tlačítka UButton a jestli je to vevnitř WinButton nebo LinuxButton ho nezajímá.</span> </p>
<p><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/517px-Abstract_factory.svg.png" border="0" alt="" style="display: block; margin-left: auto; margin-right: auto;" /></p></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Fri, 23 May 2014 10:51:54 +0000</pubDate>
		</item>
		<item>
			<title>Singleton</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/138-singleton</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/138-singleton</guid>
			<description><![CDATA[<div class="feed-description"><p>Singleton (česky <strong>jedináček</strong>) je návrhový vzor, který využijeme při řešení problému, kdy je potřeba, aby v celém programu běžela pouze jedna instance třídy. Tento návrhový vzor zabezpečí, že třída bude mít pouze jedinou instanci a poskytne k ní globální přístupový bod. <span style="line-height: 1.3em;">To můžeme potřebovat například pro různé třídy, které něco řídí a vznik více instancí takovýchto Manager tříd by způsoboval chaos (např. třída zajišťující přístup k databázi) nebo například pro různé messengery apod.</span></p>
<p><span style="line-height: 1.3em;">Realizace tohoto návrhového vzoru spočívá v implementaci <span class="kod">public</span> konstruktoru a metody <span class="kod">getInstance()</span>, která zkontroluje zda ještě nebyla instance vytvořena a podle toho vrátí již existující instanci, nebo vytvoří novou.</span></p>
<div class="zadani-prikladu" style="float: left;">
<p class="kod">public class Jedinacek{</p>
<p class="kod" style="padding-left: 30px;">private static Jedinacek instance;</p>
<p class="kod popisek" style="padding-left: 30px;">//zablokovani konstruktoru:</p>
<p class="kod" style="padding-left: 30px;">private Jedinacek(){}</p>
<p class="kod popisek" style="padding-left: 30px;">//metoda pro vytvoreni objektu (misto konstruktoru)</p>
<p class="kod" style="padding-left: 30px;">public getInstance(){</p>
<p class="kod" style="padding-left: 60px;">if (instance == null){</p>
<p class="kod" style="padding-left: 60px;">     instance = new Jedinacek ();</p>
<p class="kod" style="padding-left: 60px;">}</p>
<p class="kod" style="padding-left: 60px;">return instance;</p>
<p class="kod" style="padding-left: 30px;">}</p>
</div>
<p><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/Singleton_UML.png" border="0" width="267" height="160" style="border: 0; float: left;" /></p></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Fri, 23 May 2014 11:22:59 +0000</pubDate>
		</item>
		<item>
			<title>Kompozit</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/139-kompozit</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/139-kompozit</guid>
			<description><![CDATA[<div class="feed-description"><p>Návrhový vzor kompozit řeší hierarchii objektů tak že je skládá do stromové struktury. Hlavní pointou pak je, aby se s jedním objektem manipulovalo stejně jako s celým kompozitem (skupinou objektů). Realizace je taková, že rozhraní definující chování jednotlivých objektů implementuje i třída reprezentující skupiny objektů.</p>
<p>Na obrázku vidíte příklad kdy třída <span class="kod">Platno</span> obsahuje všechny objekty typu <span class="kod">Grafic</span> které se umí vykeslit. Sama implmentuje taky rozhranní  <span class="kod">Grafic</span>, takže kromě přímek a mnohouhelníků obsahovat i další podplátna.</p>
<p> </p>
<table>
<tbody>
<tr>
<td><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/600px-Composite_UML_class_diagram_fixed.svg.png" border="0" alt="" width="367" height="237" /></td>
<td><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/navrh-vzor-kompozit.jpg" border="0" width="311" height="203" style="border: 0px; float: left;" /></td>
</tr>
</tbody>
</table>
<p> </p>
<p><em>Příklad implementace v Javě. </em><em style="line-height: 1.3em;">V ukázce je stádo ve kterém jsou objekty psů a krav. Oba umí vytvořit nějaký zvuk. Pomocí tohoto návrhového vzoru můžeme udělat velké stádo které obsahuje více malých stád a nechat udělat daný zvuk všech zvířat které jsou ve velkém stádu.</em></p>
<pre class="de1" style="font-family: monospace, monospace; padding: 0px; border: 0px none white; line-height: 1.2em; font-size: 1em; margin: 0px; vertical-align: top; background: none #f9f9f9;"><span class="kw1" style="font-weight: bold;">import</span> <span class="co2" style="color: #006699;">java.util.ArrayList</span><span class="sy0" style="color: #339933;">;</span>
<span class="kw1" style="font-weight: bold;">import</span> <span class="co2" style="color: #006699;">java.util.Iterator</span><span class="sy0" style="color: #339933;">;</span>
 
<span class="kw1" style="font-weight: bold;">public</span> <span class="kw1" style="font-weight: bold;">class</span> Main <span class="br0" style="color: #009900;">{</span>
 
    <span class="kw1" style="font-weight: bold;">public</span> <span class="kw1" style="font-weight: bold;">static</span> <span class="kw4" style="color: #000066; font-weight: bold;">void</span> main<span class="br0" style="color: #009900;">(</span><span class="kw3" style="color: #003399;">String</span><span class="br0" style="color: #009900;">[</span><span class="br0" style="color: #009900;">]</span> args<span class="br0" style="color: #009900;">)</span> <span class="br0" style="color: #009900;">{</span>
        Dog dog1 <span class="sy0" style="color: #339933;">=</span> <span class="kw1" style="font-weight: bold;">new</span> Dog<span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span>
        Cow cow1 <span class="sy0" style="color: #339933;">=</span> <span class="kw1" style="font-weight: bold;">new</span> Cow<span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span>
        AnimalGang dogGang <span class="sy0" style="color: #339933;">=</span> <span class="kw1" style="font-weight: bold;">new</span> AnimalGang<span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span> <span class="co1" style="color: #666666; font-style: italic;">//vytvoření stáda psů</span>
        dogGang.<span class="me1" style="color: #006633;">add</span><span class="br0" style="color: #009900;">(</span>dog1<span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span>
        dogGang.<span class="me1" style="color: #006633;">add</span><span class="br0" style="color: #009900;">(</span>dog1<span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span>
        dogGang.<span class="me1" style="color: #006633;">add</span><span class="br0" style="color: #009900;">(</span>dog1<span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span>
        AnimalGang cowGang <span class="sy0" style="color: #339933;">=</span> <span class="kw1" style="font-weight: bold;">new</span> AnimalGang<span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span> <span class="co1" style="color: #666666; font-style: italic;">//vytvoření stáda krav</span>
        cowGang.<span class="me1" style="color: #006633;">add</span><span class="br0" style="color: #009900;">(</span>cow1<span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span>
        cowGang.<span class="me1" style="color: #006633;">add</span><span class="br0" style="color: #009900;">(</span>cow1<span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span>
        AnimalGang allAnimalsGang <span class="sy0" style="color: #339933;">=</span> <span class="kw1" style="font-weight: bold;">new</span> AnimalGang<span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span> <span class="co1" style="color: #666666; font-style: italic;">//vytvoření stáda všech zvířat</span>
        allAnimalsGang.<span class="me1" style="color: #006633;">add</span><span class="br0" style="color: #009900;">(</span>dogGang<span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span> <span class="co1" style="color: #666666; font-style: italic;">//přidání stáda psů do celkového stáda zvířat</span>
        allAnimalsGang.<span class="me1" style="color: #006633;">add</span><span class="br0" style="color: #009900;">(</span>cowGang<span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span> <span class="co1" style="color: #666666; font-style: italic;">//přidání stáda krav do celkového stáda zvířat</span>
 
        allAnimalsGang.<span class="me1" style="color: #006633;">makeSound</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span> <span class="co1" style="color: #666666; font-style: italic;">//celkové stádo zvířat udělá nějaký zvuk</span>
    <span class="br0" style="color: #009900;">}</span>
<span class="br0" style="color: #009900;">}</span>
<span class="co3" style="color: #008000; font-style: italic; font-weight: bold;">/**
Společný interface pro zvířata, která umí udělat nějaký zvuk
 */</span>
<span class="kw1" style="font-weight: bold;">interface</span> Animal <span class="br0" style="color: #009900;">{</span>
    <span class="kw1" style="font-weight: bold;">public</span> <span class="kw4" style="color: #000066; font-weight: bold;">void</span> makeSound<span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span> <span class="co1" style="color: #666666; font-style: italic;">//abstraktní metoda makeSound() představuje že zvíře dokáže udělat nějaký zvuk např. pes štěká, kráva bučí, kočka mňouká atd..</span>
<span class="br0" style="color: #009900;">}</span>
<span class="kw1" style="font-weight: bold;">class</span> Dog <span class="kw1" style="font-weight: bold;">implements</span> Animal<span class="br0" style="color: #009900;">{</span>
    <span class="co3" style="color: #008000; font-style: italic; font-weight: bold;">/**
    konkrétní implementace abstraktní metody makeSound() u psa
    */</span>
    <span class="kw1" style="font-weight: bold;">public</span> <span class="kw4" style="color: #000066; font-weight: bold;">void</span> makeSound<span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span> <span class="br0" style="color: #009900;">{</span> 
        <span class="kw3" style="color: #003399;">System</span>.<span class="me1" style="color: #006633;">out</span>.<span class="me1" style="color: #006633;">println</span><span class="br0" style="color: #009900;">(</span><span class="st0" style="color: #0000ff;">"HAF HAF !!"</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span>
    <span class="br0" style="color: #009900;">}</span>
<span class="br0" style="color: #009900;">}</span>
<span class="kw1" style="font-weight: bold;">class</span> Cow <span class="kw1" style="font-weight: bold;">implements</span> Animal<span class="br0" style="color: #009900;">{</span>
    <span class="co3" style="color: #008000; font-style: italic; font-weight: bold;">/**
    konkrétní implementace abstraktní metody makeSound() u krávy
    */</span>
    <span class="kw1" style="font-weight: bold;">public</span> <span class="kw4" style="color: #000066; font-weight: bold;">void</span> makeSound<span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span> <span class="br0" style="color: #009900;">{</span>
        <span class="kw3" style="color: #003399;">System</span>.<span class="me1" style="color: #006633;">out</span>.<span class="me1" style="color: #006633;">println</span><span class="br0" style="color: #009900;">(</span><span class="st0" style="color: #0000ff;">"Búúúúúúú !!"</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span>
    <span class="br0" style="color: #009900;">}</span>
<span class="br0" style="color: #009900;">}</span>
 
<span class="co3" style="color: #008000; font-style: italic; font-weight: bold;">/**
Třída pro komponování objektů typu Animal
*/</span>
<span class="kw1" style="font-weight: bold;">class</span> AnimalGang <span class="kw1" style="font-weight: bold;">implements</span> Animal <span class="br0" style="color: #009900;">{</span>
    <span class="co1" style="color: #666666; font-style: italic;">// ArrayList pro uchování zvířat ve stádu</span>
    <span class="kw1" style="font-weight: bold;">private</span> ArrayList<span class="sy0" style="color: #339933;">&lt;</span>Animal<span class="sy0" style="color: #339933;">&gt;</span> childAnimals <span class="sy0" style="color: #339933;">=</span> <span class="kw1" style="font-weight: bold;">new</span> ArrayList<span class="sy0" style="color: #339933;">&lt;</span>Animal<span class="sy0" style="color: #339933;">&gt;</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span>
 
    <span class="kw1" style="font-weight: bold;">public</span> <span class="kw4" style="color: #000066; font-weight: bold;">void</span> makeSound<span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span> <span class="br0" style="color: #009900;">{</span>
        Iterator<span class="sy0" style="color: #339933;">&lt;</span>Animal<span class="sy0" style="color: #339933;">&gt;</span> it <span class="sy0" style="color: #339933;">=</span> childAnimals.<span class="me1" style="color: #006633;">iterator</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span>
        <span class="kw1" style="font-weight: bold;">while</span><span class="br0" style="color: #009900;">(</span>it.<span class="me1" style="color: #006633;">hasNext</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="br0" style="color: #009900;">)</span><span class="br0" style="color: #009900;">{</span>
            Animal animal <span class="sy0" style="color: #339933;">=</span> it.<span class="me1" style="color: #006633;">next</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span>
            animal.<span class="me1" style="color: #006633;">makeSound</span><span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span>
        <span class="br0" style="color: #009900;">}</span>
    <span class="br0" style="color: #009900;">}</span>
    <span class="kw1" style="font-weight: bold;">public</span> <span class="kw4" style="color: #000066; font-weight: bold;">void</span> add<span class="br0" style="color: #009900;">(</span>Animal _animal<span class="br0" style="color: #009900;">)</span><span class="br0" style="color: #009900;">{</span>
        <span class="kw1" style="font-weight: bold;">this</span>.<span class="me1" style="color: #006633;">childAnimals</span>.<span class="me1" style="color: #006633;">add</span><span class="br0" style="color: #009900;">(</span>_animal<span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span>
    <span class="br0" style="color: #009900;">}</span>
    <span class="kw1" style="font-weight: bold;">public</span> <span class="kw4" style="color: #000066; font-weight: bold;">void</span> remove<span class="br0" style="color: #009900;">(</span>Animal _animal<span class="br0" style="color: #009900;">)</span><span class="br0" style="color: #009900;">{</span>
        <span class="kw1" style="font-weight: bold;">this</span>.<span class="me1" style="color: #006633;">childAnimals</span>.<span class="me1" style="color: #006633;">remove</span><span class="br0" style="color: #009900;">(</span>_animal<span class="br0" style="color: #009900;">)</span><span class="sy0" style="color: #339933;">;</span>
    <span class="br0" style="color: #009900;">}</span>
<span class="br0" style="color: #009900;">}</span></pre>
<p> </p></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Fri, 23 May 2014 11:49:02 +0000</pubDate>
		</item>
		<item>
			<title>Observer</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/140-observer</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/140-observer</guid>
			<description><![CDATA[<div class="feed-description"><p>Observer je možné použít v situaci, kdy je definována závislost jednoho objektu na druhém. Závislost ve smyslu propagace změny nezávislého objektu závislým objektům (pozorovatelům). Nezávislý objekt musí informovat závislé objekty o událostech, které je mohou ovlivnit.</p>
<p>Možná vám to připomíná klasický mechanismus zpracování událostí (<strong><em>Event / Listener</em></strong>), není to však příliš daleko od skutečnosti. Životní cyklus události <span style="line-height: 1.3em;">se skládá z následujících kroků...</span></p>
<ol>
<li><span style="line-height: 1.3em;">Vznik události (typicky vzniká uživatelskou akcí nad komponentou GUI - např. stisknutí tlačítka).</span></li>
<li><span style="line-height: 1.3em;">Na komponentu, která je zdrojem události je "zavěšen" posluchač dané události</span></li>
<li><span style="line-height: 1.3em;">Zdroj události (tlačítko) projde seznam registrovaných posluchačů a každému z nich </span><span style="line-height: 1.3em;">oznámí vznik události - z</span><span style="line-height: 1.3em;">avolá dohodnutou metodu rozhraní posluchače, </span><span style="line-height: 1.3em;">metodě předá informace o události </span></li>
</ol>
<p><em><strong>Observer</strong> </em>se nasazuje se v situacích, kdy objekt, který mění své chování (komponenta) a jeho pozorovatelé neudržují navzájem žádné vazby a jejich propojení musí být tudíž zprostředkováno pomocí jejich supertříd. Smysl této nepřímé invokace spočívá v tom, že o přidání nového pozorovatele není nutné informovat (a tím měnit i zdrojový kód) pozorovaný objekt, ale stačí pouze vytvořit novou třídu, která je specializací třídy Pozorovatel (<em>Observer</em>) a její instance přidat do množiny pozorujících objektů prostřednictvím operace připoj (<em>attach</em>).</p>
<p><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/pozor.png" border="0" alt="" /></p>
<p> </p>
<div class="zadani-prikladu">
<h5>Příklad Posluchače:</h5>
<p>Objekt třídy Faktura implementuje operaci z<span style="line-height: 1.3em;">aplacena takovým způsobem, že v okamžiku, kdy je tato zpráva obdržena objekt informuje </span><span style="line-height: 1.3em;">manažera a prodejce zasláním zprávy odešli na instance třídy SMSBrána a stejně tak zasílá </span><span style="line-height: 1.3em;">zprávu zobraz na instanci třídy MonitorPlateb. </span></p>
<p><span style="line-height: 1.3em;">Kdybychom tento příklad implementovali standardním způsobem tak, vytvoříme přímou vazbu tříd SMS brána a MonitorPlateb na Fakturu. Každá f</span>aktura by musela vědět o <span style="line-height: 1.3em;">svých pozorovatelích, pamatovat si je a zaslat jim odpovídající zprávy. Zavedením </span><span style="line-height: 1.3em;">dalšího nového pozorovatele by znamenalo upravit zdrojový kód Faktury.</span></p>
<p><span style="line-height: 1.3em;">Proto zavedeme návrhový vzor Pozorovatel a přidáme další dvě supertřídy Předmět a Pozorovatel. </span></p>
<p><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/observer2.jpg" border="0" alt="" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p>Třída předmět zavádí operace přidání a odebrání instancí <span style="line-height: 1.3em;">třídy Pozorovatel a operaci oznam, která v případě svého provedení odešle na všechny </span><span style="line-height: 1.3em;">zaregistrované pozorovatele zprávu aktualizuj. Třída Pozorovatel tedy zavádí operaci </span><span style="line-height: 1.3em;">aktualizuj, která je jednotlivými podtřídami předefinována tak, aby odpovídajícím způsobem </span><span style="line-height: 1.3em;">dokázaly jednolivé instance správně reagovat – instance třídy SMSBrána odešle textovouzprávu, zatímco instance třídy MonitorPlateb zobrazí informaci o zaplacení faktury na </span><span style="line-height: 1.3em;">obrazovku. Operace oznam je vyvolána podtřídou třídy Předmět, v našem případě se jedná o </span><span style="line-height: 1.3em;">výše zmíněnou třídu Faktura.</span></p>
<p> </p>
</div></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Fri, 23 May 2014 11:56:40 +0000</pubDate>
		</item>
		<item>
			<title>Objektově orientované paradigma.</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/141-objektove-orientovane-paradigma</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/141-objektove-orientovane-paradigma</guid>
			<description><![CDATA[<div class="feed-description"><p dir="ltr"><strong>Objektově-orientované programování</strong> (OOP) je metodika vývoje softwaru. Paradigma OOP popisuje způsob vývoje a zápisu programu a způsob uvažování o problému. </p>
<h2 style="color: #000000; margin: 0px 0px 0.6em; overflow: hidden; padding-top: 0.5em; padding-bottom: 0.17em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #aaaaaa; width: auto; font-size: 19px; font-family: sans-serif; line-height: 19.200000762939453px; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span id="Z.C3.A1kladn.C3.AD_paradigma_OOP" class="mw-headline">Základní paradigma OOP</span></h2>
<ul>
<li>Při řešení úlohy vytváříme model popisované reality - <span style="line-height: 1.3em;">popisujeme entity a </span><span style="line-height: 1.3em;">interakci mezi entitami</span></li>
<li>Abstrahujeme od nepodstatných detailů - <span style="line-height: 1.3em;">při popisu/modelování entity vynecháváme nepodstatné vlastnosti entit</span></li>
<li><span style="line-height: 1.3em;">Postup řešení je v řadě případů efektivnější než při procedurálním </span><span style="line-height: 1.3em;">přístupu (ne vždy), kdy se </span><span style="line-height: 1.3em;">úlohy řeší jako posloupnost příkazů</span><span style="line-height: 1.3em;"> </span></li>
</ul>
<h2 style="font-size: 19px; font-family: sans-serif; font-weight: normal; color: #000000; font-style: normal; font-variant: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; margin: 0px 0px 0.6em; overflow: hidden; padding-top: 0.5em; padding-bottom: 0.17em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #aaaaaa; width: auto; line-height: 19.200000762939453px; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span id="Z.C3.A1kladn.C3.AD_paradigma_OOP" class="mw-headline">Cíle OOP</span></h2>
<ul>
<li style="margin-bottom: 0.1em;">Je vedeno snahou o znovupoužitelnost komponent.</li>
<li style="margin-bottom: 0.1em;">Rozkládá složitou úlohu na dílčí součásti, které jdou pokud možno řešit nezávisle.</li>
<li style="margin-bottom: 0.1em;">Přiblížení struktury řešení v počítači reálnému světu (komunikující objekty).</li>
<li style="margin-bottom: 0.1em;">Skrytí detailů implementace řešení před uživatelem.</li>
</ul>
<p>OOP != třídy a objekty - představuje<span style="line-height: 1.3em;"> přístup, jak správně navrhnout strukturu programu</span></p>
<h2 style="font-size: 19px; font-family: sans-serif; font-weight: normal; color: #000000; font-style: normal; font-variant: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; margin: 0px 0px 0.6em; overflow: hidden; padding-top: 0.5em; padding-bottom: 0.17em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #aaaaaa; width: auto; line-height: 19.200000762939453px; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span id="Z.C3.A1kladn.C3.AD_paradigma_OOP" class="mw-headline">Model OOP</span></h2>
<p>OOP definuje program jako soubor spolupracujících komponent (objektů) s přesně stanoveným chováním a stavem. Metody OOP napodobují vzhled a chování objektu z reálného světa s možností velké abstrakce. Model OOP se skládá z několika následujích konstrukcí:</p>
<p><strong>Objekt </strong></p>
<p>Jednotlivé prvky modelované reality (jak data, tak související funkčnost) jsou v programu seskupeny do entit, nazývaných objekty. Objekty si pamatují svůj stav a navenek poskytují operace přístupné jako metody pro volání. Objekt je také instancí třídy.</p>
<p> </p>
<p><strong>Třída (Class)</strong></p>
<p>Třída slouží jako šablona pro vytváření instancí tříd - objektů. Seskupuje objekty stejného typu a podchycuje jejich podstatu na obecné úrovni.  (Samotná třída tedy nepředstavuje vlastní informace, jedná se pouze o předlohu; data obsahují až objekty.) Třída definuje data a metody objektů.</p>
<p><img src="https://lh6.googleusercontent.com/ZR7ooe2phLlZPRf8ufBwOV4wBKU--mvwyKIRMb6e3q1_O4Fd7s1jfgOR989IdtSE54vJptj9pYKS2OgEzIYbCC5tEdtm3rXkzVNYSI0HDVULX5sw9KfRER691gA" border="0" width="395px;" height="106px;" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" /></p>
<p><strong><span id="docs-internal-guid-e3693a34-3a30-40fd-23c5-75ba4a3b73c2">Interface (rozhraní) </span></strong></p>
<p>Interface předepisuje třídě, která od ní bude odvozena, jaké metody, případně properties musí implementovat. Odvozený objekt může implementovat i další metody. Interface nedefinuje žádné proměnné - pouze konstanty, ani neobsahuje naimplementované metody - obsahuje pouze abstraktní metody bez jejich implementace (jejich hlavičky). Třída může implementovat libovolný počet rozhraní (narozdíl od dědičnosti). Pokud vytvoříte rozhraní, které dědí od jiného rozhraní, automaticky tak přebírá všechny jeho metody a konstanty.</p>
<p><span style="font-weight: bold;">Abstraktní třída </span></p>
<p>Je to takový hybrid mezi rozhraním a klasickou třídou. Od klasické třídy má schopnost implementovat vlastnosti (proměnné) a metody, které se na všech odvozených třídách budou vykonávat stejně. Od rozhraní zase získala možnost obsahovat prázdné abstraktní metody, které si každá odvozená podtřída musí naimplementovat sama. S těmito výhodami má abstraktní třída i pár omezení, a to že jedna podtřída nemůže zdědit víc abstraktních tříd a od rozhraní přebírá omezení, že nemůže vytvořit samostatnou instanci (operátorem new).</p>
<div dir="ltr">
<table><colgroup><col width="310"><col width="295"></colgroup>
<tbody>
<tr>
<td>
<p dir="ltr"><strong>1. Abstraktní třída</strong></p>
<p dir="ltr">· může obsahovat konkrétní metody i  metody bez implementace (abstraktní)</p>
<p dir="ltr">· lze rozšiřovat pouze jednu třídu</p>
</td>
<td>
<p dir="ltr"><strong>2. Rozhraní</strong></p>
<p dir="ltr">· všechny metody jsou bez implementace</p>
<p dir="ltr">· do jedné třídy lze implementovat více</p>
<p dir="ltr">rozhraní</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
</div>
<h2 style="font-size: 19px; font-family: sans-serif; font-weight: normal; color: #000000; font-style: normal; font-variant: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; margin: 0px 0px 0.6em; overflow: hidden; padding-top: 0.5em; padding-bottom: 0.17em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #aaaaaa; width: auto; line-height: 19.200000762939453px; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span id="Z.C3.A1kladn.C3.AD_paradigma_OOP" class="mw-headline">Rysy OOP</span></h2>
<ul>
<li dir="ltr">
<p dir="ltr"><strong>Abstrakce </strong>– programátor, potažmo program, který vytváří, může abstrahovat od některých detailů práce jednotlivých objektů. Každý objekt pracuje jako černá skříňka, která dokáže provádět určené činnosti a komunikovat s okolím, aniž by vyžadovala znalost způsobu, kterým vnitřně pracuje.</p>
</li>
</ul>
<ul>
<li dir="ltr">
<p dir="ltr"><strong>Zapouzdření</strong> (Encapsulation)– zaručuje, že objekt nemůže přímo přistupovat k „vnitřnostem“ jiných objektů, což by mohlo vést k nekonzistenci. Každý objekt navenek zpřístupňuje rozhraní, pomocí kterého (a nijak jinak) se s objektem pracuje.</p>
</li>
</ul>
<ul>
<li dir="ltr">
<p dir="ltr"><strong>Skládání </strong>– Objekt může obsahovat jiné objekty.</p>
</li>
</ul>
<ul>
<li dir="ltr">
<p dir="ltr"><strong>Delegování</strong> – Objekt může využívat služeb jiných objektů tak, že je požádá o provedení operace.</p>
</li>
</ul>
<ul>
<li dir="ltr">
<p dir="ltr"><strong>Dědičnost</strong> (Inheritance) – objekty jsou organizovány stromovým způsobem, kdy objekty nějakého druhu mohou dědit z jiného druhu objektů, čímž přebírají jejich schopnosti, ke kterým pouze přidávají svoje vlastní rozšíření. Tato myšlenka se obvykle implementuje pomocí rozdělení objektů do tříd, přičemž každý objekt je instancí nějaké třídy. Každá třída pak může dědit od jiné třídy (v některých programovacích jazycích i z několika jiných tříd).</p>
</li>
<li><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/polymorphism.gif" border="0" width="262" height="257" style="border: 0; float: right;" /> <strong style="line-height: 1.3em;">Polymorfismus </strong><span style="line-height: 1.3em;">– odkazovaný objekt se chová podle toho, </span><span style="line-height: 1.3em;">jaké třídy je instancí. Pokud několik objektů poskytuje stejné rozhraní, pracuje se s nimi stejným způsobem, ale jejich konkrétní chování se liší podle implementace. U polymorfismu podmíněného dědičností to znamená, že na místo, kde je očekávána instance nějaké třídy, můžeme dosadit i instanci libovolné její podtřídy. U polymorfismu nepodmíněného dědičností je dostačující, jestliže se rozhraní (nebo jejich požadované části) u různých tříd shodují, pak jsou vzájemně polymorfní. </span><span style="line-height: 1.3em;">Polymorfismus bývá často vysvětlován na obrázku se zvířaty, která mají všechna v rozhraní metodu Speak(), ale každé si ji vykonává po svém. </span></li>
</ul>
<ul>
<li><span style="line-height: 1.3em;"><strong>Genericita</strong> - je možnost programovaciho jazyka definovat místo typů jen „vzory typů“, kde typy proměnných, použité v definici (ADT typy) jsou vyvedeny vně definice jako parametry a jsou určeny později klientskou aplikací.</span></li>
</ul>
<p style="padding-left: 60px;"><span style="line-height: 1.3em;">Příklad:</span></p>
<p style="padding-left: 60px;"><span style="line-height: 1.3em;">List&lt;T&gt;   ...kde T je libovolný typ. Když List alokujeme, použijeme </span></p>
<p style="padding-left: 60px;"><span style="line-height: 1.3em;">List&lt;int&gt; intList = new List&lt;int&gt;(), a tento list poté akceptuje jen čísla typu int.</span></p>
<p style="padding-left: 30px;"><span style="line-height: 1.3em;">Kouzlo genericity vynikne pak v kombinací s dědičností, kdy do seznamu mohou být vloženy nejen objekty typu T, ale i objekty všech možných dědiců třídy (typu) T). </span></p></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Mon, 26 May 2014 17:58:03 +0000</pubDate>
		</item>
		<item>
			<title>Správa paměti</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/143-sprava-pameti</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/143-sprava-pameti</guid>
			<description><![CDATA[<div class="feed-description"><p>Správa paměti je v informatice soubor metod, které operační systém používá při přidělování operační paměti jednotlivým spuštěným procesům. </p>
<p>V jazyce Java i C# je správa paměti plně automatizovaná. O uvolňování paměti se stará separátní vlákno, které běží s nízkou prioritou a zajišťuje kontinuální sledování nepoužitých bloků paměti. Přidělování paměti se provádí operátorem <tt>new</tt>.</p>
<h3>Úrovně správy paměti</h3>
<ul>
<li><strong><span style="font-size: 1em; line-height: 1.3em;">Technické vybavení</span></strong></li>
<ul>
<li>registry, cache</li>
</ul>
<li><strong>Operační systém</strong></li>
<ul>
<li>virtuální paměť</li>
<li>segmentace, stránkování</li>
</ul>
<li><strong>Aplikace</strong></li>
<ul>
<li>Přidělování paměti</li>
<li>Regenerace paměti</li>
<ul>
<li>Manuální – delete, dispose, free(), …</li>
<li>Automatická – <em>garbage collection</em></li>
</ul>
</ul>
</ul>
<p><strong>Garbage collector </strong>(GC) - je obvykle část běhového prostředí (programovacího) jazyka, nebo přídavná knihovna, podporovaná kompilátorem, hardware, operačním systémem, nebo jakoukoli kombinací těchto tří. Má za úkol automaticky určit, která část paměti programu je už nepoužívaná, a připravit ji pro další znovupoužití.</p></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Tue, 27 May 2014 19:19:51 +0000</pubDate>
		</item>
		<item>
			<title>Disciplína sběr a analýza požadavků</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/150-disciplina-sber-a-analyza-pozadavku</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/150-disciplina-sber-a-analyza-pozadavku</guid>
			<description><![CDATA[<div class="feed-description"><p>Specifikace a analýza požadavků je první fáze vývoje softwaru. Cílem je definovat požadavky na software a popsat jeho funkčnost. Výsledkem této fáze by měly být dokumenty, které se stanou součásti smlouvy mezi zadavatelem a vývojovým týmem. <span style="line-height: 1.3em;">Je však velký problém zjistit všechny požadavky před započetím vývoje projektu. Požadavky se totiž mění během životního cyklu projektu a jejich pochopení a identifikace je kontinuální proces.</span></p>
<h3>Cíle požadavků</h3>
<ul style="font-family: Tahoma, Helvetica, Arial, sans-serif; font-weight: normal;">
<li><span style="text-indent: -18pt; line-height: 1.3em;">Chcete vytvořit a udržovat dohody se zákazníky a dalšími zainteresovanými stranami o tom, co by systém měl dělat a proč.</span></li>
<li><span style="line-height: 1.3em;">Aby vývojáři lépe pochopili požadavky na systém</span></li>
<li><span style="line-height: 1.3em;">Definování hranic systému</span></li>
<li><span style="line-height: 1.3em;">Vytvořit základ pro plánování technického obsahu iterací</span></li>
<li><span style="line-height: 1.3em;">Poskytnout základ pro odhad nákladů a času na vytvoření systému</span></li>
<li><span style="line-height: normal; text-indent: -18pt;">Definovat uživatelské rozhraní pro systém, se zaměřením na potřeby uživatelů</span></li>
</ul>
<h3>Aktivity spojené s analýzou požadavků</h3>
<ul>
<li><strong>Sběr požadavků</strong> -  komunikace se zákazníky a uživateli za účelem získání jejich požadavků na systém.</li>
<li><strong>Analýza požadavků</strong> - identifikování nejasných požadavků, nekompletních, nejasných, nebo protichůdných a následně řešení těchto nesrovnalostí.</li>
<li><strong>Zaznamenání požadavků -</strong> dokumentování požadavků v různých formách, jako běžný textový dokument, případy užití (use case), nebo specifikace procesů.</li>
</ul>
<p><span style="color: #333333; font-family: Tahoma, Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal;">Požadavky je také nutno:</span><span style="color: #333333; font-family: Tahoma, Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal;"> </span><em style="color: #333333; font-family: Tahoma, Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal;"><strong>organizovat</strong></em><span style="color: #333333; font-family: Tahoma, Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal;">,</span><span style="color: #333333; font-family: Tahoma, Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal;"> </span><strong style="color: #333333; font-family: Tahoma, Helvetica, Arial, sans-serif; font-size: 12px;"><em>dokumentovat</em></strong><span style="color: #333333; font-family: Tahoma, Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal;">,</span><span style="color: #333333; font-family: Tahoma, Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal;"> </span><strong style="color: #333333; font-family: Tahoma, Helvetica, Arial, sans-serif; font-size: 12px;"><em>priorizovat</em></strong><span style="color: #333333; font-family: Tahoma, Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal;">,</span><span style="color: #333333; font-family: Tahoma, Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal;"> </span><strong style="color: #333333; font-family: Tahoma, Helvetica, Arial, sans-serif; font-size: 12px;"><em>filtrovat</em> </strong><span style="color: #333333; font-family: Tahoma, Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal;">a</span><span style="color: #333333; font-family: Tahoma, Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal;"> </span><em style="color: #333333; font-family: Tahoma, Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal;"><strong>sledovat</strong></em><span style="color: #333333; font-family: Tahoma, Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal;">.</span></p>
<h3>Použitý model</h3>
<p><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/use.jpg" border="0" width="251" height="92" style="border: 0; float: right;" /></p>
<p><a href="https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/35-specifikace-pozadavku">Use case</a> je technika pro zdokumentování případného požadavku na nový systém, nebo změny na stávající systém. Každý use case poskytuje jeden nebo více scénářů, které zaznamenávají, jak by systém měl spolupracovat s koncovým uživatelem nebo jiným systémem. </p>
<p><span style="line-height: 1.3em;"> </span></p>
<h3>Typy požadavků</h3>
<ul>
<li><span style="line-height: 1.3em;"><strong>Funkční požadavky</strong> (chování)</span><span style="line-height: 1.3em;"> - se používají k vyjádření chování systému zadáním jak vstupních a výstupních podmínek.</span></li>
<li><span style="line-height: 1.3em;"><strong>Doplňující</strong> požadavky</span><span style="line-height: 1.3em;"> (<strong>nefunkční</strong>) - vykazuje jakostní znaky:</span></li>
<ul>
<li><strong><em><span style="line-height: 1.3em;">Usability</span></em></strong><span style="line-height: 1.3em;"> - Použitelnost se zabývá lidskými faktory, jako je esteticka, snadné učení, snadné použití, a tak dále</span></li>
<li><strong><span style="line-height: 1.3em;"><em>Reliability</em> </span></strong><span style="line-height: 1.3em;">- Spolehlivost adresy četnost a závažnost selhání, obnovitelnost a přesnost.</span></li>
<li><strong><em><span style="line-height: 1.3em;">Performance</span></em></strong><span style="line-height: 1.3em;"> - Výkon se zabývá množstvím transakcí, jako je rychlost, rychlost, doba odezvy, a tak dále.</span></li>
<li><em><strong><span style="line-height: 1.3em;">Supportability</span></strong></em><span style="line-height: 1.3em;"> - řeší, jak těžké je udržet systém a další vlastnosti potřebné k udržení systému po jeho vydání.</span></li>
</ul>
</ul>
<h3>Workflow </h3>
<p><span style="font-family: Tahoma, Helvetica, Arial, sans-serif; line-height: 1.3em;">(schéma provádění procesu)</span></p>
<ul>
<li><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/pp.png" border="0" width="380" style="border: 0; float: right; margin-left: 20px; margin-right: 20px; margin-top: 40px; margin-bottom: 40px;" /><strong><span style="line-height: 1.3em;">Analyze problem </span></strong><span style="line-height: 1.3em;">- vytvoření dohody zachycující vyjádření o adresovaných problémech. Stakeholders i hranice projektu jsou identifikovány.</span></li>
<li><strong><span style="line-height: 1.3em;">Understand stakeholders needs - </span></strong><span style="line-height: 1.3em;">shromažďová</span><span style="line-height: 1.3em;">ní požadavků a pochopení potřeb uživatelů a <em>stakeholderů</em> =</span><strong><span style="line-height: 1.3em;"><em> </em><span style="font-weight: normal;"><em>zúčastněná strana ovlivněná činností projektu</em><br /></span></span></strong></li>
<li><strong><span style="line-height: 1.3em;">Define the system </span></strong><span style="line-height: 1.3em;">- stanovují se požadavky stakeholderů. Vytváří se <em>use case</em> diagramy pro klíčové funkce systému a určují se role. </span></li>
<li><strong><span style="line-height: 1.3em;">Manage the scope the system </span></strong><em><span style="line-height: 1.3em;">(Správa rozsahu systému)</span></em><span style="line-height: 1.3em;"> -</span><span style="line-height: 1.3em;">  vize je hotová, sbírají se funkční a nefunkční požadavky, use case je prioritizován a systém lze dodat v očekávaném čase a rozpočtem. </span><span style="line-height: 1.3em;"><br /></span></li>
<li><span style="line-height: 1.3em;"><strong>Refine the system definition</strong> (</span><span style="line-height: 1.3em;"><span style="line-height: 1.3em;"><em>Upřesnění vymezení systému</em>)</span><strong><span style="line-height: 1.3em;"> - </span></strong>Use cases jsou podrobně popsány, stejně jako požadavky na software.</span></li>
<li><span style="line-height: normal; text-indent: -18pt;"><strong><span style="line-height: normal; text-indent: -18pt;"><span style="line-height: 15.807999610900879px; text-indent: 0px;"><span style="line-height: normal; text-indent: -18pt;">Manage Changing Requirement</span></span></span></strong><span style="line-height: normal; text-indent: -18pt;"><span style="font-weight: normal; line-height: 15.807999610900879px; text-indent: 0px;"><span style="line-height: normal; text-indent: -18pt;"><strong>s</strong> (</span></span></span><em>Správa změn požadavků</em></span><span style="line-height: normal; text-indent: -18pt;"><span style="font-weight: normal; line-height: 15.807999610900879px; text-indent: 0px;">)</span></span><span style="line-height: normal; text-indent: -18pt;"> -</span><span style="line-height: normal; text-indent: -18pt;">  </span><span style="line-height: normal; text-indent: -18pt;">centrální kontrolní orgán řídí změny požadavků, a udržuje dohodu se zákazníkem.</span></li>
</ul>
<h3>Role</h3>
<ul>
<li><strong>Systemový analytik</strong>  - vede a koordinuje požadavky elicitace a use-case modelování popisující funkčnost systému.</li>
<li><strong>Requirements Specifier </strong><em>(požadavkový specifikátor) </em>- specifikuje podrobnosti o všech funkcionalitách systému. Cílem je koordinace s dalšími požadavky a specifikacemi. Systemový analytik a Requirement Specifier úzce spolupracují s projektantem uživatelského rozhraní (<em>User Interface Designer</em>).</li>
<li><strong>Softwarový architekt</strong> - zajišťuje integritu architektonicky významných <em>use cases</em>.</li>
<li><strong>Requirement Reviewer</strong><em> (verifikátor požadavků</em>) - ověří, že požadavky jsou vnímány a interpretovány správně ve vývojovém týmu.</li>
</ul>
<h3>Klíčové artefakty</h3>
<ul>
<li><span style="line-height: 1.3em;"><strong>Stakeholder požadavky</strong> - jsou vyvolány a přidány na “wish list”</span></li>
<li><span style="line-height: 1.3em;"><strong>Vision Document</strong> - obsahuje klíčové potřeby a funkce systému - vize . Podporuje smlouvy mezi finančním oddělením a oddělením vývoje.</span></li>
<li><strong>Use-Cases Model</strong> je postaven, aby sloužil jako smlouva mezi zákazníkem, uživatelem a vývojáři systému</li>
<li><span style="line-height: 1.3em;"><strong>Supplementary Specification </strong>(<strong><em>dopňující specifikace</em></strong>) je doplňkem k use-case model, protože společně zachytí veškeré softwarové funkční a nefunkční požadavky -kompletní softwarová Specifikace požadavků.</span></li>
<li><span style="line-height: 1.3em;"><strong>Glossary</strong> -  Slovníček definuje společnou terminologii, která se používá v projektu.</span></li>
<li><span style="line-height: 1.3em;"><strong>Storyboards</strong> (<strong><em>scénáře</em></strong>) - spojené s případy užití slouží jako základ pro prototypy uživatelského rozhraní.</span></li>
</ul>
<p> </p>
<p> </p></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Thu, 29 May 2014 19:22:28 +0000</pubDate>
		</item>
		<item>
			<title>Formální metody</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/153-formalni-metody</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/153-formalni-metody</guid>
			<description><![CDATA[<div class="feed-description"><p>Specifikace softwarového systému může být formální nebo neformální. <strong>Neformální specifikace</strong> používá přirozený jazyk, případně obrázky, tabulky a ostatní nástroje umožňující pochopit popisovaný systém. V okamžiku, kdy taková notace získává charakter precizní syntaxe i sémantiky, stává se formální specifikaci. <strong>Formální specifikace</strong> je technika umožňující jednoznačně specifikovat softwarový systém. Často hovoříme také o <strong>semiformálních</strong> metodách, které mají přesně danou syntaxi, ale netrváme na úplné a precizní sémantice - patří sem jazyk UML.</p>
<p>Cílem formálních metod není jen jednoznačně systém popsat, ale také ověřit jeho požadované vlastnosti. Obecně formální metody nedosáhly masivního nasazení kvůli časové náročnosti a zbytečně vysokému usilí. Hlavní doménou pro využití se staly systémy vyžadující bezchybný chod v kritických situacích (řízení leteckých systémů, lékařský software apod.). </p>
<p>Formální specifikaci můžeme rozdělit na 2 typy:</p>
<ol>
<li><strong>Specifikace chování</strong> (<strong><em>funkční</em></strong>) </li>
<li><strong> Specifikaci vlastností systému</strong> (<em><strong>deskriptivní </strong></em>)</li>
</ol>
<h3>Specifikace chování</h3>
<p>Jeden z nejznámějších přístupů k popisu chování systémů a tedy i nástrojů funkční specifikace jsou tzv. <a href="https://lucie.zolta.cz/index.php/statnice-vsb/9-skola-vsb/zaklady-teoreticke-informatiky/4-konecne-automaty">konečné automaty</a>. Softwaroví inženýři dostávají k dispozici formální aparát umožňující jednoznačně definovat chování objektů a ověřovat tak jeho požadované dynamické vlastnosti.</p>
<p>Graficky lze vyjádřit <strong>konečný automat</strong> pomocí grafu, kde uzly grafu vyjadřují stavy systému a hrany označené vstupem definují přechody mezi těmito stavy. V jazyce UML je tato specifikace realizována pomocí <strong>stavových diagramů</strong>, kdy ověřujeme zda-li posloupnost zpráv přijatých objektem vede k dosažení jeho koncového stavu.</p>
<p><em>Příklad:</em></p>
<p><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/stav5.png" border="0" alt="" width="483" height="378" /></p>
<h3>Specifikace vlastností systému</h3>
<p>Nejčastěji používanou metodu specifikace vlastností systému je <strong>algebraická specifikace - </strong>používá k popisu 2 základní pojmy – <strong><em>druhy</em></strong> a <strong><em>operace</em></strong>. Druhy a operace jsou analogií k pojmům <em>datové typy</em> a <em>procedury</em> bežně používaných v programovacích jazycích. V případě algebraických specifikací operace odpovídá matematickému pojmu <em>funkce</em>, která zobrazuje n-tici hodnot na hodnotu. Druhy rozumíme neprázdné množiny hodnot reprezentující <em>definiční obor</em> <br />a <em>obor hodnot funkcí</em> (operací).</p>
<p>Strukura algebraické specifikace má následující formu:</p>
<p><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/form2.jpg" border="0" width="433" height="169" style="display: block; margin-left: NaNpx; margin-right: NaNpx; border: 0; float: left;" /><span style="text-decoration: underline;">Je tvořena 4 základními komponentami:</span> <br />1.<strong> představení</strong> definuje druh (jméno typu) a deklaruje další používané algebraické specifikace, <br />2. <strong>popis</strong> neformálně popisuje operace a druh, <br />3. <strong>signatury</strong> definují syntaxi operací a jejich parametry, <br />4. <strong>axiomy</strong> (platná tvrzení) určují sémantiku operací cestou charakterizace jejich chování. <br /><br /></p>
<div class="zadani-prikladu100">
<p><em>Příklad: Algebraická specifikace abstraktního datového typu Seznam. Seznam je tvořen elementy, </em><em>které jsou přidávány na jeho konec a odebírány z jeho začátku.</em></p>
<img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/seznam.jpg" border="0" alt="" width="558" height="371" style="display: block; margin-left: auto; margin-right: auto;" /></div>
<p> <a href="http://vondrak.cs.vsb.cz/download/Metody_specifikace_softwarovych_systemu.pdf"><span style="margin: 0px; padding: 0px; color: #095197; font-family: arial, helvetica, sans-serif; font-size: 13px; font-style: italic; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 21.760000228881836px; orphans: auto; text-align: right; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;"><img src="https://lucie.zolta.cz/images/ikona-zdroje-12.jpg" border="0" alt="" style="margin: 0px; padding: 0px; border: 0px none;" /><span class="Apple-converted-space"> </span></span></a><span style="color: #808080; font-family: arial, helvetica, sans-serif; font-size: 13px; font-style: italic; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 21.760000228881836px; orphans: auto; text-align: right; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; display: inline !important; float: none; background-color: #ffffff;">Zdroj skripta - Metody specifikace softwarových systémů (Prof.Ing. Ivo Vondrák CSc.)</span></p></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Mon, 02 Jun 2014 16:37:56 +0000</pubDate>
		</item>
		<item>
			<title>OCL (Object Constraint Language)</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/154-ocl</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/154-ocl</guid>
			<description><![CDATA[<div class="feed-description"><p>Jazyk Object Constraint Language (OCL) poskytuje rámec pro <strong>specifikaci omezení</strong> <strong>kladených na model</strong> formálním způsobem. Je speciálním případem textových anotací, které mají v textové formě specifikovat to co nelze vizualizuovat pomocí UML.</p>
<p>Výrazové prostředky jazyku OCL jsou <a href="https://lucie.zolta.cz/index.php/statnice-vsb/8-skola-vsb/softwarove-inzenyrstvi/38-deklarativni-programovani">deklarativní</a> bez vedlejších efektů, což znamená, že nedojde k žádným změnám stavu systému z důvodů vyhodnocení výrazů jazyka OCL.  Omezení, která chceme tímto jazykem specifikovat se týkají jak statické struktury tak dynamického chování systému. <br /><br /></p>
<p><strong>Invarianty</strong> - jsou omezení kladená na statickou strukturu. Invariantou rozumíme podmínku, která musí být splněna instancemi daného typu v libovolném čase.</p>
<p style="text-align: left;"><strong>OCL</strong> je specifikační jazyk - je určen pro vyjádření invariantů. Zápisy v OCL je třeba chápat jako specifikaci pro programy, které budou odpovídající integritní omezení zajišťovat.</p>
<p style="text-align: left;">Zápis v jazyce OCL má vždy jednotný tvar:</p>
<p style="text-align: center;"><tt><strong>context &lt;jméno&gt; [inv|pre|post]: &lt;výraz&gt;</strong></tt></p>
<div class="zadani-prikladu100">
<p style="text-align: left;"><em>Příklad: </em><strong>context Osoba inv: self.příjem &gt; 10000</strong></p>
<p><em>Vyjadřuje, že pro každou instanci třídy Osoba, musí mít její atribut příjem hodnotu větší než 10000. </em><br /><em>V daném kontextu nelze evidovat osoby s nižším příjmem.</em></p>
</div>
<p><br />Stereotypy inv, pre a post znamenají:</p>
<ul>
<li><strong>inv = </strong>&lt;&lt;invariant&gt;&gt; (obecně platné tvrzení - omezení)</li>
<li><strong>pre = </strong> &lt;&lt;precondition&gt;&gt; (vstupní podmínky operace - předpoklad)</li>
<li><strong>post</strong> = &lt;&lt;postcondition&gt;&gt; (podmínka, která platí po příslušné akci).</li>
</ul>
<p><br />OCL je <strong>silně typovaný jazyk<em>,</em></strong> tj. každý výraz v jazyce OCL má definován typ. To umožňuje silnou statickou typovou kontrolu zapsaných omezení při jejich interpretaci. OCL má předdefinovánu sadu typů – jsou to jednak primitivní typy: <em><strong>Integer</strong>, <strong>Boolean</strong>, <strong>String</strong>, <strong>Real</strong>, <strong>UnlimitedInteger</strong></em>, ze kterých lze vytvářet složené typy jako rozmanité kolekce: množina (<em>Set</em>), multi-množina (<strong><em>Bag</em></strong>), obecná kolekce (<strong><em>Collection</em></strong>), posloupnost (<strong><em>Sequence</em></strong>), atd.<span style="line-height: 1.3em;"> </span></p>
<div class="zadani-prikladu100">
<p><em>Příklad: </em>Diagram tříd modelující zaměstnance, oddělení a projekty. Z modelu vyplývá, že <span style="line-height: 1.3em;">zaměstnanci pracují pro oddělení firmy na projektech, která jsou prostřednictvím oddělení řízena. </span></p>
<p><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/invar.jpg" border="0" alt="" /></p>
<p><span style="text-decoration: underline;">Nyní definujeme integritní omezení v OCL:</span></p>
<ul>
<li>Podmínka, že <span style="line-height: 1.3em;">rozpočet oddělení nesmí být záporný:</span></li>
</ul>
<p style="padding-left: 60px;"><tt>context Oddělení inv: </tt></p>
<p style="padding-left: 90px;"><tt> self.rozpočet &gt;= 0</tt></p>
<ul>
<li>Korektní zvýšeníPlatu vyžaduje splnění omezující podmínky, kdy <span style="line-height: 1.3em;">v případě kladné částky bude mít zaměstanec o tuto částku navýšen svůj plat. </span>Aplikací výrazu <strong>@pre</strong> ve výstupní podmínce rozumíme použití předchozí hodnoty daného atributu.</li>
</ul>
<p style="padding-left: 60px;"><tt>context Zaměstnanec::zvýšeníPlatu(částka : Real) : Real  </tt></p>
<p style="padding-left: 90px;"><tt>pre: částka &gt; 0 </tt> <tt> </tt></p>
<p style="padding-left: 90px;"><tt>post: self.plat = self.plat@pre + částka </tt> <tt> and result = self.plat<br /><br /></tt></p>
<ul>
<li>V řadě případů je možné použít nějaký výraz na více místech omezení. K dispozici je výraz <strong>let</strong>, který <span style="line-height: 1.3em;">umožňuje definovat atribut či operaci v rámci daného omezení. Pokusme se pro zaměstnance naší </span><span style="line-height: 1.3em;">firmy definovat omezení, že není možné, aby pracoval na více než třech projektech, ale je také </span><span style="line-height: 1.3em;">nepřípustné, aby nepracoval na žádném. </span>Příkaz <strong>size()</strong> nám vrací  velikost množiny - počet projektů. </li>
</ul>
<p style="padding-left: 60px;"><tt>context Zaměstnanec inv: </tt> <tt> </tt></p>
<p style="padding-left: 90px;"><tt>let počet : Integer = self.projekt-&gt;size() in </tt> <tt> </tt></p>
<p style="padding-left: 90px;"><tt>if počet &lt;= 3 and počet &gt; 0 then </tt> <tt> true </tt> <tt> </tt></p>
<p style="padding-left: 90px;"><tt>else </tt> <tt> false </tt> <tt> </tt></p>
<p style="padding-left: 90px;"><tt>endif </tt> <tt><tt> </tt></tt></p>
<ul>
<li>Pokud budeme chtít <span style="line-height: 1.3em;">z množiny projektů, na kterých zaměstnanec pracuje, vytvořit novou kolekci (<strong>collection</strong>) obsahující pouze </span><span style="line-height: 1.3em;">rozpočty těchto projektů, zapíšeme to takto: </span></li>
</ul>
<p style="padding-left: 90px;"><tt>self.projekt-&gt;collect(rozpočet) </tt></p>
<ul>
<li><span style="line-height: 1.3em;">Nad kolekcemi můžeme provádět i další operace jako je např. součet <strong>sum()</strong>, který v případě platnosti </span><span style="line-height: 1.3em;">operace sčítaní sečte všechny prvky dané kolekce. V příkladu součtu rozpočtů projektů, na kterých </span><span style="line-height: 1.3em;">zaměstnanec pracuje, pak bude výsledný výraz následující: </span></li>
</ul>
<p style="padding-left: 90px;"><tt>self.projekt.rozpočet-&gt;sum() </tt> <br /><br /></p>
</div>
<p> </p>
<p>Podrobnější vysvětlení s více příklady najdete <a href="http://www.ksi.mff.cuni.cz/~richta/publications/Richta-MD-2010.pdf" target="_blank">zde</a>. </p>
<p> <a href="http://vondrak.cs.vsb.cz/download/Metody_specifikace_softwarovych_systemu.pdf"><span style="color: #095197; font-family: arial, helvetica, sans-serif;"><span style="font-size: 11px; line-height: 21.760000228881836px;"><em><img src="https://lucie.zolta.cz/images/ikona-zdroje-12.jpg" border="0" alt="" style="margin: 0px; padding: 0px; border-style: none;" /></em></span></span></a><span style="color: #808080; font-family: arial, helvetica, sans-serif; font-size: 11px; font-style: italic; line-height: 21.760000228881836px;"> Zdrojem jsou skripta - Metody specifikace softwarových systémů (Prof. Ing. Ivo Vondrák, CSc.)</span></p></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Mon, 02 Jun 2014 18:33:13 +0000</pubDate>
		</item>
		<item>
			<title>Čtyřvrstvá architektura</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/156-ctyrvrstva-architektura</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/156-ctyrvrstva-architektura</guid>
			<description><![CDATA[<div class="feed-description"><p>Architektura UML se skládá ze čtyř vrstev, které se liší mírou obecnosti svých prvků. Jedná se o architekturu pro metamodelování. S<span style="line-height: 1.3em;">lovo </span><em style="line-height: 1.3em;">m</em><span style="line-height: 1.3em;"><em>eta-</em> znamená </span><span style="line-height: 1.3em;">o jeden stupeň abstrakce výše,  tj. metadata jsou data popisující data, metamodel je model </span><span style="line-height: 1.3em;">popisující model. </span></p>
<p>V následující tabulce jsou rozepsány všechny 4 vrstvy od té nejkonkrétnější.</p>
<table>
<tbody>
<tr><th style="width: 20%;"><em>Vrstva</em></th><th><em>Popis</em></th><th style="width: 20%;"><em>Příklad</em></th></tr>
<tr>
<td><strong>Uživatelský objekt/data</strong></td>
<td>Je nejnižší vrstvou, která definuje konkrétní hodnoty domény a<span style="line-height: 1.3em;"> zahrnuje popisovaná data. Je instancí modelu. </span></td>
<td> &lt;Acme_SW_Share_98789&gt;, &lt;654,56, sell_limit_order, &lt;Stock_Quote_Svr_32123&gt;</td>
</tr>
<tr>
<td><strong>Model</strong></td>
<td>Definuje jazyk pro popis informační domény - zahrnuje metadata popisující data v informační vrstvě.</td>
<td>StockShare, askPrice, sellLimitOrder, StockQuoteServer</td>
</tr>
<tr>
<td><strong>Metamodel</strong></td>
<td>Definuje jazyk pro specifikaci modelu - určuje strukturu a sémantiku metadat.</td>
<td> Třídy, atributy, operace, komponenty</td>
</tr>
<tr>
<td><strong>Meta-metamodel</strong></td>
<td>Definuje jazyk pro specifikaci metamodelu - určuje strukturu a sémantiku metamodelu.</td>
<td> MetaTřídy, MetaAtributy, MetaOperace,</td>
</tr>
</tbody>
</table>
<div class="zadani-prikladu100">
<p><em style="line-height: 1.3em;"><span style="line-height: 1.3em;">Metadata a metamodel pro příklad skládání referenta s automobilem, kdy referent může mít přidělené auto.</span></em></p>
<p> <img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/metameta.jpg" border="0" alt="" /></p>
</div>
<p>Tento pohled používají autoři UML a autoři CASE nástrojů - nedívají se na UML jako na diagramy, pro ně je základem UML metamodel (diagramy jsou pouze grafickou reprezentací metamodelu). Při tomto přístupu se často používá pojem model místo pojmu diagram, např. místo diagramu tříd se používá pojem model tříd. Metamodel se popisuje pomocí Meta-Object-Facility (MOF) - abstraktního jazyka pro specifikaci, vytváření a správu metamodelů (další standard OMG). Pro výměnu metamodelů se používá XMI - na XML založený standard (součást standardu UML).</p></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Tue, 03 Jun 2014 17:11:04 +0000</pubDate>
		</item>
		<item>
			<title>Klasifikace, prioritizace, správa, vysledovatelnost a závislost požadavků. </title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/158-klasifikace-prioritizace-sprava-vysledovatelnost-a-zavislost-pozadavku</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/158-klasifikace-prioritizace-sprava-vysledovatelnost-a-zavislost-pozadavku</guid>
			<description><![CDATA[<div class="feed-description"><h3>Klasifikace požadavků</h3>
<ul>
<li><strong>Funkční požadavky</strong> - co bude systém dělat</li>
<li><strong>Nefunkční požadavky</strong> - různá omezení na systém (přesnost, bezpečnost, výkon)</li>
</ul>
<hr />
<ul>
<li><strong><span style="line-height: 1.3em;">Primární požadavky</span></strong><span style="line-height: 1.3em;"> </span><span style="line-height: 1.3em;">- získány od stakeholderů</span></li>
<li><strong><span style="line-height: 1.3em;">Odvozené požadavky</span></strong><span style="line-height: 1.3em;"> </span><span style="line-height: 1.3em;">- odvozeny od primárních požadavků</span></li>
</ul>
<hr />
<ul>
<li><strong><span style="line-height: 1.3em;">Uspořádání na základě rolí</span></strong><span style="line-height: 1.3em;"> - uživatelské požadavky, požadavky zákazníka, systémové požadavky</span></li>
</ul>
<h3>Prioritizace požadavků</h3>
<p>Výhody prioritizace:</p>
<ul>
<li><span style="line-height: 1.3em;">nalezení jádra systému</span></li>
<li><span style="line-height: 1.3em;">identifikaci důležitosti jednotlivých částí systému</span></li>
<li><span style="line-height: 1.3em;">naplánování optimálního seznamu požadavků pro jednotlivá verze (release)</span></li>
<li><span style="line-height: 1.3em;">nejdůležitějších části systému jsou implementovány první - minimalizace rizika a předělávek systému, spokojenost zákazníka</span></li>
</ul>
<p> Metody pro prioritizaci: <em><span style="line-height: 1.3em;"> </span></em></p>
<ul>
<li><em style="line-height: 1.3em;">Cost-value přístup</em><strong style="line-height: 1.3em;">  - </strong><span style="line-height: 1.3em;">pro </span><span style="line-height: 1.3em;">každý požadavek se určuje číselná dvojice -  náklady na provádění (cost) a hodnota požadavku (value) - vypočte se z nich relativní hodnota, která se porovnává</span></li>
</ul>
<h3>Správa požadavků</h3>
<p>Systematický přístup ke sběru, organizaci a dokumentaci požadavků, které by měly splňovat potřeby zákazníka. Správa požadavků podporuje řízení změn a usnadňuje jejich zavádění. Správa požadavků zahrnuje komunikaci mezi členy projektového týmu a stakeholdery, čímž je umožněno přizpůsobovat požadavky v celém průběhu projektu a zajistit jejich aktuálnost. Důležitým bodem je ale právě neustálá komunikace mezi členy vývojového týmu, aby se nestalo že si požadavky budou vzájemně přepisovat. </p>
<p>Cílem správy požadavků je doručení kvalitního produktu v čas a s rozpočetem, na kterém se zákazník a tvůrce shodli.</p>
<h3>Vysledovatelnost požadavků</h3>
<p class="MsoNormal">Vysledovanost je docílena spojením informačních objektů, které mají nějakou souvislost:</p>
<ul>
<li><span style="text-indent: -18pt;">požadavky a související systémové komponenty splňují tyto požadavky</span></li>
<li><span style="line-height: 1.3em;">systémové cíle a požadavky vycházejí z těch požadavků</span></li>
<li><span style="line-height: 1.3em;">změna návrhu a požadavků</span></li>
<li><span style="line-height: 1.3em;">testování případů a požadavků</span></li>
<li><span style="line-height: 1.3em;">s</span><span style="line-height: 1.3em;">ystémové komponenty a zdroje potřebné k implementaci těchto požadavků</span></li>
</ul>
<h3>Závislost požadavků:</h3>
<p class="MsoListParagraphCxSpFirst" style="margin-bottom: .0001pt; mso-add-space: auto; text-indent: -18.0pt; line-height: normal; mso-list: l3 level1 lfo3;">1.<span style="font-size: 7pt; font-family: 'Times New Roman';">       </span>Strukturální závislosti</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-top: 0cm; margin-right: 0cm; margin-bottom: .0001pt; margin-left: 72.0pt; mso-add-space: auto; text-indent: -18.0pt; line-height: normal; mso-list: l0 level2 lfo4;"><span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;">·<span style="font-size: 7pt; font-family: 'Times New Roman';">         </span></span><strong>refined-to</strong>: požadavek vyššího stupně je zušlechtěn větším počtem specifických požadavků</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-top: 0cm; margin-right: 0cm; margin-bottom: .0001pt; margin-left: 72.0pt; mso-add-space: auto; text-indent: -18.0pt; line-height: normal; mso-list: l0 level2 lfo4;"><span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;">·<span style="font-size: 7pt; font-family: 'Times New Roman';">         </span></span><strong>changes to</strong>: jeden požadavek se změní na jiný, když je vyvinuta nová verze tohoto požadavku</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-top: 0cm; margin-right: 0cm; margin-bottom: .0001pt; margin-left: 72.0pt; mso-add-space: auto; text-indent: -18.0pt; line-height: normal; mso-list: l0 level2 lfo4;"><span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;">·<span style="font-size: 7pt; font-family: 'Times New Roman';">         </span></span><strong>similar-to</strong>: jeden stanovený požadavek je podobný, nebo se překrývající, s jedním nebo více dalšími požadavky</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-bottom: .0001pt; mso-add-space: auto; text-indent: -18.0pt; line-height: normal; mso-list: l3 level1 lfo3;">2.<span style="font-size: 7pt; font-family: 'Times New Roman';">       </span>Omezující závislosti</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-top: 0cm; margin-right: 0cm; margin-bottom: .0001pt; margin-left: 72.0pt; mso-add-space: auto; text-indent: -18.0pt; line-height: normal; mso-list: l1 level2 lfo5;"><span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;">·<span style="font-size: 7pt; font-family: 'Times New Roman';">         </span></span><strong>requires</strong>: splnění jednoho požadavku závisí na splnění jiného</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-top: 0cm; margin-right: 0cm; margin-bottom: .0001pt; margin-left: 72.0pt; mso-add-space: auto; text-indent: -18.0pt; line-height: normal; mso-list: l1 level2 lfo5;"><span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;">·<span style="font-size: 7pt; font-family: 'Times New Roman';">         </span></span><strong>conflicts with</strong>: požadavek je v konfliktu s jiným, pokud nemohou existovat současně</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-bottom: .0001pt; mso-add-space: auto; text-indent: -18.0pt; line-height: normal; mso-list: l3 level1 lfo3;"><strong>3.<span style="font-weight: normal; font-size: 7pt; font-family: 'Times New Roman';">       </span></strong>Cenové / Hodnotové závislosti</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-top: 0cm; margin-right: 0cm; margin-bottom: .0001pt; margin-left: 72.0pt; mso-add-space: auto; text-indent: -18.0pt; line-height: normal; mso-list: l2 level2 lfo6;"><span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;">·<span style="font-size: 7pt; font-family: 'Times New Roman';">         </span></span><strong>zvýšení / snížení ceny</strong>: pokud je jeden požadavek vybrán k implementaci, tak se cena implementace dalšího požadavku zvýší nebo sníží</p>
<p class="MsoListParagraphCxSpLast" style="margin-top: 0cm; margin-right: 0cm; margin-bottom: .0001pt; margin-left: 72.0pt; mso-add-space: auto; text-indent: -18.0pt; line-height: normal; mso-list: l2 level2 lfo6;"><span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;">·<span style="font-size: 7pt; font-family: 'Times New Roman';">         </span></span><strong>zvýšení / snížení hodnoty</strong>: pokud je jeden požadavek vybrán k implementaci, tak se hodnota dalšího požadavku pro zákazníka zvýší nebo sníží</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Wed, 04 Jun 2014 06:51:03 +0000</pubDate>
		</item>
		<item>
			<title>Plánování projektu</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/162-planovani-projektu</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/162-planovani-projektu</guid>
			<description><![CDATA[<div class="feed-description"><p><em>Plán projektu je formální, schválený dokument, který se používá jako vodítko pro realizaci projektu a projektového řízení. Primárně se plán projektu používá na zdokumentování předpokladů a rozhodnutí, usnadnění komunikace mezi zúčastněnými stranami, a zdokumentování schváleného rozsahu, ceny a harmonogramu. Plán projektu může být pouze souhrnný nebo velmi podrobný.<span class="Apple-converted-space"> </span></em></p>
<p>V plánování je nutné identifikovat potřebné zdroje,  defininovat rizika a předpokladané omezení s jejich dopady. Činnost procesu vrcholí v sestavení realistického časového rámce a rozpočtu projektu a přípravě detailních plánů na realizaci projektu.</p>
<p>Plán projektu by měl optimálně obsahovat 4 základní otázky důležité pro projekt a jeho řízení:</p>
<ul>
<li><strong>Proč?</strong> Z jakých důvodů se projekt realizuje? Jaký problém nebo nedostatek má projekt vyřešit? Proč je třeba vynaložit prostředky a úsilí na jeho realizaci?</li>
<li><strong>Co? </strong> Co je cílem a výstupem projektu? Jaké jsou hlavní produkty nebo výstupy projektu? </li>
<li><strong>Kdo?</strong> Kdo se na realizaci projektu bude podílet? A co bude povinností jednotlivých zúčastněných v rámci projektu? Jak budou účastníci projektu organizováni?</li>
<li><strong>Kdy?</strong> Jaký je harmonogram projektu? Jaké jsou významné milníky v průběhu realizace projektu? Jaká je časová osa projektu a kdy nastanou zvláště významné body označované jako milníky, je kompletní?</li>
</ul>
<h3>Cíle plánování</h3>
<p>- nejkratší možný čas trvání projektu (souvisí také s náklady)</p>
<p>- nejnižší náklady</p>
<p>- nejmenší riziko</p>
<p>- efektivní využití zdrojů</p>
<p>Strategické cíle plánování by měly být <strong>SMART</strong> (specific - <em><strong>konkrétní</strong></em>, Measurable - <em><strong>měřitelné</strong></em>, Attainable - <em><strong>dosažitelné</strong></em>, Relevant - <em><strong>relevantní</strong></em>, Time-bound - <em><strong>časově vymezené</strong></em>)</p>
<h3>Součásti plánu projektu</h3>
<ul>
<li><span style="line-height: 1.3em;">stanovení rozsahu</span></li>
<li><span style="line-height: 1.3em;">rozpis činností spjatých s projektem - struktura a </span><span style="line-height: 1.3em;">členění prací</span></li>
<li><span style="line-height: 1.3em;">časový harmonogram-milníky</span></li>
<li><span style="line-height: 1.3em;">odhad nákladů - plán rozpočtu</span></li>
<li><span style="line-height: 1.3em;">organizační uspořádání týmu, plán personálního zabezpečení</span></li>
<li><span style="line-height: 1.3em;">přiřazení úloh a odpovědností pracovníkům</span></li>
<li><span style="line-height: 1.3em;"> určení délky trvání jednotlivých prací</span></li>
<li><span style="line-height: 1.3em;">plán komunikace</span></li>
<li><span style="line-height: 1.3em;">klíčová rizika, omezení a předpoklady plánované odezvy na rizika</span></li>
<li><span style="line-height: 1.3em;">pomocné plány řízení rozsahu, harmonogramu, nákladů, ...</span></li>
</ul>
<h3>Podpůrné techniky</h3>
<p><strong>Brainstorming</strong> - vytyčení nápadů na projekt</p>
<p><span style="line-height: 1.3em;"><strong>SWOT analýza</strong> -</span><span style="line-height: 1.3em;"> určení silných a slabých stránek projektu</span></p>
<p><span style="line-height: 1.3em;"><strong>Ganttův diagram</strong> - harmonogram projektu</span></p>
<p><span style="line-height: 1.3em;"> </span></p>
<p><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/87_39_original.jpg" border="0" style="border: 0; float: right; margin-left: 15px; margin-right: 15px;" /></p>
<h2>SWOT analýza </h2>
<p>S - <em>Strengths</em>  - charakteristika silných stránek projektu</p>
<p>W - <em>Weaknesses</em> - charakteristika slabých stránek projektu, jaké jsou nevýhody oproti konkurečním řešením</p>
<p>O - <em>Opportunities</em> - příležitosti na trhu</p>
<p>T- <em>Threats </em>- hrozby</p>
<p>Jednotlivé položky SWOT analýzy je vhodné <span style="line-height: 1.3em;">ohodnotit, aby byla určena jejich důležitost. N</span><span style="line-height: 1.3em;">a základě důležitosti je možné </span><span style="line-height: 1.3em;">stanovit význam jednotlivých částí a </span><span style="line-height: 1.3em;">zohlednit je při tvorbě strategií.</span></p>
<p>        </p>
<p> </p>
<h2>Brainstorming</h2>
<p>Brainstorming je skupinová technika zaměřená na generování co nejvíce nápadů na dané téma. Je založena na skupinovém výkonu. Nosnou myšlenkou je předpoklad, že lidé ve skupině, na základě podnětů ostatních, vymyslí více, než by vymysleli jednotlivě.</p>
<ul>
<li>Před započetím se problém zopakuje.</li>
<li>Mluvit by měl v jednom okamžiku pouze je<img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/Brainstorming.jpg" border="0" width="278" height="179" style="border: 0; float: right; margin-top: 20px; margin-bottom: 20px;" />den.</li>
<li>Po fázi vymýšlení přijde na řadu výběr nejlepších nápadů ze všech zapsaných.</li>
<li>Zveřejněné nápady by neměly být nikým komentovány ani hodnoceny.</li>
<li>I ten zdánlivě nejhloupější může inspirovat ostatní.</li>
<li>Podpora uvolněné atmosféry - U brainstormingu jde především o kvantitu nápadů. Pomáhá neformální prostředí, tým, který se navzájem zná, žádná kritika ostatních. Dobrá nálada podporuje divergentní (rozbíhavé) myšlení.</li>
<li>Všechno zapisovat - Formální struktura brainstormingového týmu by měla obsahovat pouze zapisovatele, tedy člověka, který se nemusí nutně zúčastnit vymýšlení, ale zapíše všechny nápady, které byly řečeny. Čím více nápadů, tím pravděpodobnější je nalezení nejlepší varianty.</li>
</ul>
<h2 id="gantuvdiagram">Harmonogram projektu - Ganttův diagram</h2>
<p>Je označení pro časový plán projektu, který obsahuje posloupnost provedení jednotlivých činností, plánovaná data plnění těchto činností a klíčové milníky projektu. Harmonogram  projektu bývá v praxi většinou vyjádřen formou <strong>Ganttova diagramu</strong>, který vyjydřuje časové návaznosti činností. Jednotlivé činnosti a dílčí procesy mohou probíhat souběžně a jejich dokončení může být podmíněno kteroukoliv z dalších rozpracovaných částí.</p>
<p><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/gant.png" border="0" alt="" width="668" height="196" /></p></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Wed, 04 Jun 2014 15:49:36 +0000</pubDate>
		</item>
		<item>
			<title>Řízení projektu</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/163-rizeni-projektu</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/163-rizeni-projektu</guid>
			<description><![CDATA[<div class="feed-description"><p class="MsoNormal">Projektové řízení můžeme definovat jako <em><strong>plánování</strong></em>, <em><strong>organizování</strong> </em>a <em><strong>řízení činností</strong> <strong>a jejich</strong> <strong>zdrojů</strong> </em>v rámci uceleného projektu za respektování časových, zdrojových a nákladových omezení (obvykle s cílem dosažení maximálního ekonomického efektu).</p>
<p class="MsoNormal">Projektové <span style="line-height: 1.3em;">řízení musí odpovědět na následující otázky:</span></p>
<ul>
<li>Jak dlouho bude trvat realizace projektu?</li>
<li>Jaké jsou časové a finanční rezervy pro splnění plánu?</li>
<li>Je dostatek zdrojů ke komplementaci projektu, jak je naplánován?</li>
<li>Jaké jsou náklady na jednotlivé zdroje aplikované na projektu?</li>
</ul>
<h3>Nástroje řízení</h3>
<ul>
<li><span style="line-height: 1.3em;"><strong>Metoda kritické cesty</strong> (Critical Path Method – CPM) – síťová analýza</span></li>
<li><span style="line-height: 1.3em;"><strong>Technika hodnocení a kontroly programů</strong> (Program Eval</span><span style="line-height: 1.3em;">uation and </span><span style="line-height: 1.3em;">Review Technique – <strong>PERT</strong>) – síťový uzlově orientovaný gra</span><span style="line-height: 1.3em;">f</span></li>
<li><span style="line-height: 1.3em;"><strong><a href="https://lucie.zolta.cz/index.php/statnice-vsb?layout=edit&amp;id=162#gantuvdiagram">Ganttův diagram</a></strong> – úsečkový, grafická prezentace na ča</span><span style="line-height: 1.3em;">sové ose</span></li>
<li><span style="line-height: 1.3em;"><strong>Exekutivní informační systémy</strong> (Executive Information S</span><span style="line-height: 1.3em;">ystems –EIS)</span></li>
<li><span style="line-height: 1.3em;"><strong>Distribuované projektové řízení</strong> – aplikuje a integruje </span><span style="line-height: 1.3em;">nástroje pro </span><span style="line-height: 1.3em;">plánování a řízení inovací, nástroje pro podporu rozh</span><span style="line-height: 1.3em;">odování, </span><span style="line-height: 1.3em;">CAD,CAM,…</span></li>
</ul>
<h2>Metoda kritické cesty</h2>
<p><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/330px-Critical_path_algorithm.svg.png" border="0" style="border: 0; float: right; margin-left: 10px; margin-right: 10px;" /></p>
<p class="MsoNormal">Sestrojíme orientovaný, ohodnocený graf reprezentující projekt. Každá hrana v něm má svoji váhu a každý vrchol své označení + dvě prázdné proměnné (levá a pravá) pro zápis hodnot cest. Hrany, které budou ležet na cestách budeme označovat. Graf může obsahovat i více než jednu kritickou cestu.</p>
<p class="MsoNormal">Nejprve projdeme graf zleva ze vstupního vrcholu (hodnota jeho levé proměnné je na začátku 0). Do levé proměnné tohoto vrcholu pak zapíšeme hodnotu cesty (hodnota cesty z předchozího vrcholu + hodnota hrany). Hranu vybíráme tak, že při vstupu do nějakého vrcholu budeme vybírat vždy hranu, ze které dostaneme nejvyšší hodnotu cesty (např. do vrcholu D půjdeme po hraně z B, protože cesta má hodnotu 7, což je vyšší než z C, kde má cesta hodnotu 4).</p>
<p class="MsoNormal">Tímto postupem vyplníme levé proměnné všech vrcholů a dojdeme až do výstupního (koncového) vrcholu grafu. V jeho levé proměnné nyní máme minimální délku projektu.</p>
<p class="MsoNormal">Druhý průchod grafu začínáme v koncovém vrcholu, opíšeme hodnotu z jeho levé proměnné do pravé a jdeme proti směru orientovaných hran (vpravo). Nyní však vybíráme cestu s nejmenší možnou hodnotou a její hodnotu hran odečítáme, výsledek zapíšeme do pravé proměnné vrcholu (např. do D půjdeme přes G, protože dostaneme hodnotu 7, což je menší, než kdybychom tam šli přímo z H). Když dojdeme do počátečního bodu, měli bychom v něm mít vpravo 0. Vrcholy se stejnými hodnotami vlevo a vpravo leží na kritické cestě (na obrázku označené červeně).</p>
<h3 class="MsoNormal">Soft skills při vedení projektu</h3>
<p><span style="text-decoration: underline;">Co to znamená vést skupinu?</span></p>
<ul>
<li><span style="line-height: 1.3em;">Dosahovat se skupinou požadovaných </span><span style="line-height: 1.3em;">výsledků</span></li>
<li><span style="line-height: 1.3em;">Vytvářet postoje, které motivují skupinu k </span><span style="line-height: 1.3em;">nejlepšímu výkonu</span></li>
<li><span style="line-height: 1.3em;">Přinášet postoje skupiny uspokojení z </span><span style="line-height: 1.3em;">práce na projektu a z jejich vlastních </span><span style="line-height: 1.3em;">výsledků</span></li>
<li><span style="line-height: 1.3em;">Využívat schopností vést skupinu, </span><span style="line-height: 1.3em;">získaných dříve studiem i zkušenostmi</span></li>
</ul>
<p><span style="text-decoration: underline;">Rozdíl mezi řízením a vedením</span></p>
<ul>
<li><span style="line-height: 1.3em;"><strong>řízení =</strong> Autoritativní proces, kdy vedoucí řídí, </span><span style="line-height: 1.3em;">rozkazuje a nařizuje</span></li>
<li><span style="line-height: 1.3em;"><strong>vedení</strong> = Vedoucí je se svou skupinou, umožňuje </span><span style="line-height: 1.3em;">skupině vidět výsledky a učit se z chyb</span></li>
</ul>
<p style="padding-left: 30px;">Ideální je, když vedoucí řídí úkoly a vede lidi.</p>
<p><span style="text-decoration: underline;">Definice ideálního vedoucího</span></p>
<ul>
<li>je v denním kontaktu s členy skupiny - zajímá se o ně a motivuje je</li>
<li>je k dispozici v případě potřeby</li>
<li>soustředí se na hlavní cíle projektu a připomíná je ostatním</li>
<li>rozpoznává včas překážky a odstraňuje je</li>
<li>je důsledný, dodržuje sliby</li>
<li>podílí se se skupinou o maximum informací</li>
<li>informuje a naslouchá</li>
<li>ví co lidé dělají a co by chtěli dělat</li>
<li>pomáhá skupině dosáhnout cílů a aby lidé cítili úspěch</li>
<li>rozhoduje se bez omluv, rozhodnutí lehce nemění</li>
<li>vyjednává s dobrou vůli a otevřeně</li>
<li>předpokládá že členové skupiny jsou zralí, mají snahu růst, jsou motivovaní a že pracují kvalitně</li>
<li>nešetří uznáním a odměnami</li>
</ul>
<p><a href="http://prince-2.cz/index.php/index/page/1038_principy-metodiky-prince2" style="margin: 0px; padding: 0px; color: #095197; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 21.760000228881836px;"><img src="https://lucie.zolta.cz/images/ikona-zdroje-12.jpg" border="0" alt="" style="margin: 0px; padding: 0px; border-style: none;" /></a> <span class="popisek"> Čerpáno ze skript Information Management (Ing. Přemysl Soldán)</span></p></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Wed, 04 Jun 2014 18:22:56 +0000</pubDate>
		</item>
		<item>
			<title>Řízení rizik</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/164-rizeni-rizik</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/164-rizeni-rizik</guid>
			<description><![CDATA[<div class="feed-description"><p>Je potřeba vymezit si důsledně všechna možná rizika pro konkrétní projekt. Rizika vznikají ještě před zahájením samotného projektu a také v jeho průběhu. </p>
<p><span style="text-decoration: underline;"><span style="line-height: 1.3em; color: #333333; font-family: Tahoma, Helvetica, Arial, sans-serif; font-size: 12px; text-decoration: underline;">Věcným výstupem procesu analýzy rizik</span></span><span style="line-height: 1.3em; color: #333333; font-family: Tahoma, Helvetica, Arial, sans-serif; font-size: 12px;"> je dokument který obsahuje:</span></p>
<ul>
<li><span style="line-height: 1.3em;">popis IS</span></li>
<li><span style="line-height: 1.3em;">stanovení úrovně hrozeb</span></li>
<li><span style="line-height: 1.3em;">odhad ztrát</span></li>
<li><span style="line-height: 1.3em;">stanovení protiopatření</span></li>
<li><span style="line-height: 1.3em;">určení zbytkových rizik</span></li>
</ul>
<h3>Druhy rizik a jejich příklady</h3>
<p><span style="line-height: 1.3em;">Rizika <strong>projektová</strong></span></p>
<ul>
<li>špatná komunikace členů týmu - rozdílná interpretace toho co mělo být uděláno </li>
<li>opoždění v čase - špatné plánování, malá časová rezerva</li>
<li>kompetence - pracovníci neodpovídají kvalifikaci</li>
<li>neznámá kvalita produktu</li>
<li>neschopnost pracovat jako tým - kulturní rozdíly</li>
<li>ztráta klíčové osoby - nemocenská, mateřská</li>
<li>selhání technických zdrojů</li>
<li>nedodržení rozpočtu</li>
</ul>
<p><span style="line-height: 1.3em;">Rizika <strong>finanční - </strong></span><span style="line-height: 1.3em;">daňové změny, </span><span style="line-height: 1.3em;">inflace, </span><span style="line-height: 1.3em;">změny úrokových sazeb</span></p>
<p><span style="line-height: 1.3em;">Rizika <strong>přírodní - </strong></span><span style="line-height: 1.3em;">povodně, </span><span style="line-height: 1.3em;">zemětřesení</span></p>
<p>Rizika <strong>vyšší moci</strong> - <span style="line-height: 1.3em;">války, katastrofy</span></p>
<h3><span style="line-height: 1.3em;">Řízení rizik</span></h3>
<p>Disciplína se zabývá tvorbou činností, navzájem provázaných, které se snaží zamezit nebo zmírnit výskyt rizik nebo nemilých překvapení. <span style="line-height: 1.3em;">Rizika ohrožují dosa</span><span style="line-height: 1.3em;">žení našich cílů, mají potenciálně negativní dopad na naši činnost a s určitou pravděpodobností se u naší činnosti vyskytnou.</span><span style="line-height: 1.3em;"> </span><strong><em><span style="line-height: 1.3em;">Řízení rizik</span><span style="line-height: 1.3em;"> </span><span style="line-height: 1.3em;">se </span><span style="line-height: 1.3em;">snaží tyto negativní dopady co nejvíce eliminovat.</span></em></strong></p>
<p>Řízení rizik se skládá ze 4 činností:</p>
<p>1.  <strong>   I<span style="line-height: 1.3em;">dentifikace rizik </span></strong><span style="line-height: 1.3em;">a oblastí hrozeb - vyhotoví se jejich seznam </span></p>
<p>2.  <strong>   Hodnocení rizik - </strong>pro určení hodnoty rizika je nutné nejdříve určit následující hodnoty:</p>
<ul>
<li><em style="line-height: 1.3em;"><strong>dopad rizika</strong></em><span style="line-height: 1.3em;"> - na projekt a jeho průběh</span></li>
<li><span style="line-height: 1.3em;"><em><strong>pravděpodobnost</strong> </em>- s jakou pravděpodobností riziko nastane</span></li>
</ul>
<p style="padding-left: 30px;"><em style="line-height: 1.3em;"><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/risk2.jpg" border="0" width="305" height="141" style="border: 0; float: left; margin-top: 20px; margin-bottom: 20px;" /></em><span style="line-height: 1.3em;"><span style="line-height: 1.3em;">- následně se stanoví </span><strong>hodnota rizika</strong><span style="line-height: 1.3em;"> podle tabulky, která </span></span><span style="line-height: 1.3em;">určujeme míru akceptovatelnoti rizik (vlevo)</span></p>
<p>- můžeme mít i víc jak 3 sloupce a řádky, záleží jak podrobnou chceme mít stupnici</p>
<p>- všechny rizika mají přidělené dvě hodnoty od 1-3 s jejich dopadem (I) a s jejich pravděpodobností (P)</p>
<p>=&gt; riziko odpovídá jednomu políčku v tabulce kde se protly jeho hodnoty - <em>high/ medium/ low, </em>kdy high jsou vysoké rizika které se musí neprodleně řešit<em style="line-height: 1.3em;"> </em></p>
<p>3. <strong>    Strategie zvládnutí rizik</strong></p>
<p style="padding-left: 30px;"><span style="line-height: 1.3em;">Po důkladném zhodnocení rizik je nutné vytvořit plán rizik, ve kterém bude uvedeno určení strategie zvládnutí, minimalizace nebo eliminace rizik. </span><span style="line-height: 1.3em;">Faktory, které ovlivňují tvorbu strategie: fáze projektu, velikost, priorita, komplexnost, časová a finanční náročnos</span>t. <em><strong>Tvorba plánu rizik</strong></em> není nijak složitá, ale je prioritně důležité rozpoznat všechna závažná rizika, které mohou náš projekt ovlivnit a k těmto rizikům navrhnou účinná protiopatření.</p>
<p style="padding-left: 30px;">V tabulce musí být uvedeno: <em>riziko</em>, <em>váha rizika</em>, jeho<em> pravděpodobnost</em> a jeho <em>hodnota</em>. Dále zde musí být stanoveno <em>preventivní opatření</em>, pokud riziko nastane, jaké kroky podniknout k jeho odstranění nebo minimalizaci. Důležité je také určit <em>odpovědnou osobu</em> spojenou s provedením preventivního opatření. Určení <em>krizového scénáře</em> je další důležitou součástí tabulky plánu rizik. Krizový scénář se stanovuje pro případ, že se nepodaří riziko odstranit nebo jej minimalizovat. </p>
<p>4.<strong>     Monitoring vývoje rizikových stavů</strong></p>
<p style="padding-left: 30px;"><span style="line-height: 1.3em;">Během jakéhokoli projektu se mohou objevit další rizikové události a proto musejí být rizika stále monitorována. Nikdy nemůžeme určit a rozpoznat všechna rizika a pravděpodobnost, se kterou mohou nastat, proto je důležité abychom stále identifikovali nová rizika a přehodnocovali rizika, která byla již dříve rozpoznána. To znamená, že Plán rizik a jejich řízení se bude stále měnit v čase.</span></p></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Wed, 04 Jun 2014 19:37:02 +0000</pubDate>
		</item>
		<item>
			<title>Kvalitativní a kvantitativní analýza rizik</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/165-kvalitativni-a-kvantitativni-analyza-rizik</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/165-kvalitativni-a-kvantitativni-analyza-rizik</guid>
			<description><![CDATA[<div class="feed-description"><h3>Kvantitativní</h3>
<p style="margin: 8px 0px; padding: 0px; line-height: 1.7em; font-family: arial, helvetica, sans-serif; font-size: 13px;">Kvantitativní analýza je náročnější na zdroje a její provedení trvá mnohem déle než kvalitativní analýza rizik. Je tomu tak proto, že hodnotu aktiva (<span style="margin: 0px; padding: 0px; line-height: 1.3em;">aktivum = cokoli v organizaci co má má nějakou cenu)</span><span style="margin: 0px; padding: 0px; line-height: 1.3em;"> je nutné vyjádřit v penězích stejně jako možnou škodu v případě realizace konkrétní hrozby. Vyjádření škody ve finančních jednotkách však umožňuje jednodušší rozhodování ve fázi zvládání rizik, kdy vybíráme vhodná opatření.</span></p>
<p style="margin: 8px 0px; padding: 0px; line-height: 1.7em; font-family: arial, helvetica, sans-serif; font-size: 13px;"><span style="margin: 0px; padding: 0px; text-decoration: underline;">Výpočet:</span> <span style="margin: 0px; padding: 0px; line-height: 1.3em;">pravděpodobnost výskytu události * potenciální ztráta = odhad ztrát (očekávaná ztráta) - ALE/EAC</span></p>
<p class="MsoNormal" style="margin: 8px 0px; padding: 0px; line-height: 1.7em; font-family: arial, helvetica, sans-serif; font-size: 13px;"><span style="margin: 0px; padding: 0px; text-decoration: underline;">Problém:</span> nespolehlivost výsledku daná nepřesností výchozích údajů</p>
<p class="MsoNormal" style="margin: 8px 0px; padding: 0px; line-height: 1.7em; font-family: arial, helvetica, sans-serif; font-size: 13px;"><span style="margin: 0px; padding: 0px; text-decoration: underline;">Výhoda:</span> konkrétní výsledky které se dají porovnávat</p>
<p style="margin: 8px 0px; padding: 0px; line-height: 1.7em; font-family: arial, helvetica, sans-serif; font-size: 13px;"><span style="margin: 0px; padding: 0px; text-decoration: underline;">Přístupy:</span> </p>
<ul style="margin: 10px 0px; padding: 0px 0px 0px 15px; list-style-position: outside; list-style-type: square; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: normal;">
<li style="margin: 0px; padding: 0px; line-height: 1.7em;">Analýza historických dat a statistik,</li>
<li style="margin: 0px; padding: 0px; line-height: 1.7em;">Analýza závislostí,</li>
<li style="margin: 0px; padding: 0px; line-height: 1.7em;">Síťové analýzy,</li>
<li style="margin: 0px; padding: 0px; line-height: 1.7em;">Simulace a modelování,</li>
<li style="margin: 0px; padding: 0px; line-height: 1.7em;">Marketingové průzkumy a analýzy trhu,</li>
</ul>
<p class="MsoNormal" style="margin: 8px 0px; padding: 0px; line-height: 1.7em; font-family: arial, helvetica, sans-serif; font-size: 13px;"><span style="margin: 0px; padding: 0px; text-decoration: underline;">Postup:</span></p>
<p style="margin: 8px 0px; padding: 0px; line-height: 1.7em; font-family: arial, helvetica, sans-serif; font-size: 13px;"><span style="margin: 0px; padding: 0px; line-height: 1.3em;">1. <strong>Identifikace a kvantifikace aktiv </strong></span></p>
<ul style="margin: 10px 0px; padding: 0px 0px 0px 15px; list-style-position: outside; list-style-type: square; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: normal;">
<li style="margin: 0px; padding: 0px; line-height: 1.7em;"><span style="margin: 0px; padding: 0px; line-height: 1.3em;">Jak se dané aktivum podílí na výnosech, resp. kolik zisku nám generuje?</span></li>
<li style="margin: 0px; padding: 0px; line-height: 1.7em;"><span style="margin: 0px; padding: 0px; line-height: 1.3em;">Kolik by stálo opětovné pořízení aktiva a zprovoznění?</span></li>
<li style="margin: 0px; padding: 0px; line-height: 1.7em;"><span style="margin: 0px; padding: 0px; line-height: 1.3em;">Jakou bychom zaplatili pokutu v případě porušení důvěrnosti, integrity a dostupnosti?</span></li>
</ul>
<p style="margin: 8px 0px; padding: 0px; line-height: 1.7em; font-family: arial, helvetica, sans-serif; font-size: 13px;">2. <strong>Identifikace a kvantifikace hrozeb</strong></p>
<ul style="margin: 10px 0px; padding: 0px 0px 0px 15px; list-style-position: outside; list-style-type: square; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: normal;">
<li style="margin: 0px; padding: 0px; line-height: 1.7em;"><span style="margin: 0px; padding: 0px; line-height: 1.3em;">Kvalitativní analýza by </span><span style="margin: 0px; padding: 0px; line-height: 1.3em;">měla obsahovat skutečná fakta a dostupné údaje. Pozitiva tohoto přístupu jsou zejména ve schopnosti hodnotit dopady na organizaci nebo jedince, které nelze elementárně vyjádřit v peněžních jednotkách (jak je běžné ukvantitativních analýz). Hodnocení dopadů kvalitativním přístupem však v dnešních metodikách postrádá konzistentnost a schopnost pokrýt všechny aspekty, podle kterých je nutné dopady hodnotit. V praxi si každý rizikový analytik vytváří vlastní způsoby hodnocení dopadů a i dalších parametrů pro stanovení míry rizika.</span></li>
</ul>
<p style="margin: 8px 0px; padding: 0px; line-height: 1.7em; font-family: arial, helvetica, sans-serif; font-size: 13px;">3. <strong>Identifikace a kvantifikace zranitelnosti</strong></p>
<ul style="margin: 10px 0px; padding: 0px 0px 0px 15px; list-style-position: outside; list-style-type: square; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: normal;">
<li style="margin: 0px; padding: 0px; line-height: 1.7em;"><span style="margin: 0px; padding: 0px; line-height: 1.3em;">V této fázi bychom se měli u každé dvojice hrozba – aktivum zamyslet nad tím, jakou škodu by mohla hrozba způsobit. Tato ztráta se nejčastěji uvádí v procentech a označuje se zkratkou EF (Exposure Factor). Pro její určení si musíme položit podobné otázky jako v případě stanovení hodnoty aktiva, konkrétně:</span></li>
<ul style="margin: 10px 0px; padding: 0px 0px 0px 15px; list-style-position: outside; list-style-type: square;">
<li style="margin: 0px; padding: 0px; line-height: 1.7em;"><span style="margin: 0px; padding: 0px; line-height: 1.3em;">O kolik se sníží výnosy resp. zisk v případě narušení důvěrnosti, integrity a dostupnosti?</span></li>
<li style="margin: 0px; padding: 0px; line-height: 1.7em;"><span style="margin: 0px; padding: 0px; line-height: 1.3em;">Jaké jsou náklady na zotavení se z dané hrozby a obnovu normální funkčnosti?</span></li>
<li style="margin: 0px; padding: 0px; line-height: 1.7em;"><span style="margin: 0px; padding: 0px; line-height: 1.3em;">Jakou bychom zaplatili pokutu v případě porušení důvěrnosti, integrity a dostupnosti?</span></li>
</ul>
</ul>
<p style="margin: 8px 0px; padding: 0px; line-height: 1.7em; font-family: arial, helvetica, sans-serif; font-size: 13px;">4. <strong>Stanovení výše škody</strong></p>
<ul style="margin: 10px 0px; padding: 0px 0px 0px 15px; list-style-position: outside; list-style-type: square; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: normal;">
<li style="margin: 0px; padding: 0px; line-height: 1.7em;"><span style="margin: 0px; padding: 0px; line-height: 1.3em;">V okamžiku, kdy jsme stanovili hodnotu aktiva (AV), pravděpodobnost hrozby (ARO) a hodnotu zranitelnosti (EF), můžeme přistoupit ke stanovení výše celkové škody tzv. ALE (Annualized Loss Expectancy), kterou získáme součinem těchto hodnot: <strong style="margin: 0px; padding: 0px;">ALE=AV*EF*ARO</strong>.</span></li>
</ul>
<h3>Kvalitativní</h3>
<p style="margin: 8px 0px; padding: 0px; line-height: 1.7em; font-family: arial, helvetica, sans-serif; font-size: 13px;">Používá slov k popisu rozsahu možných následků a pravděpodobností, že se tyto následky přihodí. Užité škály mohou být přizpůsobeny nebo upraveny tak, aby vyhovovaly okolnostem, a různá rizika mohou být popsána různým způsobem.</p>
<p style="margin: 8px 0px; padding: 0px; line-height: 1.7em; font-family: arial, helvetica, sans-serif; font-size: 13px;">Kvalitativní analýza je méně náročná na zdroje a trvá kratší mnohem kratší dobu než kvantitativní analýza rizik. Především proto, že hodnotu aktiva není nutné vyjadřovat v penězích stejně jako možnou škodu v případě realizace konkrétní hrozby. To však vede k horší kontrole nákladů ve fázi zvládání rizik, kdy vybíráme vhodná opatření.</p>
<p style="margin: 8px 0px; padding: 0px; line-height: 1.7em; font-family: arial, helvetica, sans-serif; font-size: 13px;"><span style="margin: 0px; padding: 0px; text-decoration: underline;">Kvalitativní analýza se používá:</span></p>
<ul style="margin: 10px 0px; padding: 0px 0px 0px 15px; list-style-position: outside; list-style-type: square; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: normal;">
<li style="margin: 0px; padding: 0px; line-height: 1.7em;">Jako úvodní přehled vedoucí k identifikaci rizik, která vyžadují podrobnější zkoumání;</li>
<li style="margin: 0px; padding: 0px; line-height: 1.7em;">Tam, kde tento druh analýzy postačuje k rozhodování; nebo</li>
<li style="margin: 0px; padding: 0px; line-height: 1.7em;">Tam, kde číselné údaje nebo zdroje nejsou dostatečné k provedení kvantitativní analýzy.</li>
</ul>
<p style="margin: 8px 0px; padding: 0px; line-height: 1.7em; font-family: arial, helvetica, sans-serif; font-size: 13px;"><span style="margin: 0px; padding: 0px; text-decoration: underline;"><span style="margin: 0px; padding: 0px; line-height: 1.3em;">Princip:</span></span><span style="margin: 0px; padding: 0px; line-height: 1.3em;"> </span>Kvalitativní analýza rizik je založena na expertním odhadu jednotlivých aktiv (aktivum = cokoli v organizaci co má má nějakou cenu), hrozeb a zranitelností a pro jejich vyjádření používá slovního nebo číselného hodnocení. Umožňuje tak poměrně snadno a rychle identifikovat ta největší rizika. ).</p>
<p style="margin: 8px 0px; padding: 0px; line-height: 1.7em; font-family: arial, helvetica, sans-serif; font-size: 13px;"><span style="margin: 0px; padding: 0px; line-height: 1.3em;"><span style="margin: 0px; padding: 0px; text-decoration: underline;">Nevýhody:</span> </span>Oproti kvantitativní analýze rizik, kde je způsob výpočtu víceméně daný a nikdo ho nezpochybňuje, tak v případě kvalitativní analýzy rizik neexistuje pouze jediná možnost, jak se dobrat výsledku. Možnost zvolit si v podstatě jakoukoliv stupnici pro stanovení hodnoty aktiv, hrozeb a zranitelností představuje sice na jednu stranu výhodu, ale na stranu druhou to komplikuje srovnávání výsledků AR provedených nejrůznějšími společnostmi.</p>
<h3 style="margin: 8px 0px; padding: 0px; line-height: 1.7em; font-family: arial, helvetica, sans-serif; font-size: 13px;"><strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 1.3em;">Kvantitativní vs. kvalitativní</span></strong></h3>
<p style="margin: 8px 0px; padding: 0px; line-height: 1.7em; font-family: arial, helvetica, sans-serif; font-size: 13px;">Analytici upřednostňující kvantitativní přístup oproti kvalitativnímu často argumentují tím, že kvalitativní hodnocení dopadů je prováděno s vysokou mírou subjektivity, kdy výsledná hodnota závisí z velké části na osobním názoru hodnotitele. Pro stanovení kvantitativní hodnot se využívají výše uvedené metodiky a nástroje (simulace, analýza historických dat a statistik, marketingové průzkumy a analýzy trhu atd.), které však mohou v sobě zahrnovat také jistou míru subjektivity. Odborníci na finance mají k dispozici celou řadu nástrojů na výpočty odhadovaných hodnot, nicméně žádná předpověď rizik i matematicky podložená, nemůže být stoprocentní. Kvantitativní přístupy využívající finanční škály jsou velmi vhodné, pokud je po provedené analýze nutné najít zdroje na pokrytí zjištěných rizik. </p></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Thu, 05 Jun 2014 06:42:10 +0000</pubDate>
		</item>
		<item>
			<title>Testovací plán</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/169-testovaci-plan</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/169-testovaci-plan</guid>
			<description><![CDATA[<div class="feed-description"><p> </p>
<p><span style="line-height: 1.3em;">Testovací plán je výchozím dokumentem testovací dokumentace. V něm jsou stanoveny základní podmínky, za kterých bude testování probíhat.</span></p>
<p>Obvykle obsahuje testovací plán tyto údaje.</p>
<ul>
<li><strong>Cíl testování </strong>- definuje, čeho by mělo být testováním dosaženo. Cílem může být například ověření všech funkčností systému, nebo kontrola správné funkčnosti dodatečně přidaných component, stejně tak se může ověřovat správné fungování aplikace na zákazníkem dodané produkční platformě a podobně.</li>
<li><strong>Přehled plánovaných testů</strong> - ten vychází z testovacích požadavků. Ty vychází v převážné míře z dodaných příkladů užití (Use case), dále mohou vyvstat z komunikace se zákazníkem nebo z bussines případů. Jednoduše řečeno je snaha navrhnout takový seznam testů, který postihne všechny funkčnosti aplikace a to z důrazem na použití ze strany zákazníka.</li>
<li><strong>Stanovení priorit </strong>- pro jednotlivé testované prvky aplikace a tedy i pro jednotlivé testy. Nejvyšší prioritou jsou označené ty prvky, které jsou z hlediska funkce aplikace nejvýznamnější, nebo ty, u kterých v případě nefunkčnosti hrozí největší riziko nesplnění cílů testování. Všechny ostatní prvky jsou otestovány až v případě otestování prvků s nejvyšší prioritou.</li>
<li><strong>Testovací strategie</strong> - popisuje, jaké typy testů budou provedeny (např. zátěžové, funkční apod.) a s jakým cílem (obvykle s vazbou na konkrétní use case). Jednotlivé testy pak zařazuje do konkrétních fází testování (integrační testy, akceptační testy apod.) Dále se zde popisují techniky, kterými budou prováděny jednotlivé typy testů. Velice důležité je i stanovení způsobu, jakým se budou testy vyhodnocovat, a kritérií, podle kterých je test označen jako kompletní.</li>
<li><strong>Požadavky na zdroje</strong> - slouží k definování požadavků, které musí být splněny, aby bylo možné testy provést. Sem se řadí jednak požadavky technického rázu jako je příprava testovacího hardwaru, instalace softwaru, zpřístupnění serverů a podobně. A dále zdroje lidské. Zde je vyjmenováno požadované složení testovacího týmu včetně požadavku na spolupráci jiných pracovníků (např. při instalaci a správě testovacího prostředí)</li>
<li><strong>Definice rizik </strong>- slouží k vymezení situací, které mohou ohrozit úspěšné testování. Sem může spadat například nedodání aplikace ve stanoveném termínu, nedostupný testovací nástroj, nebo nedostatek proškolených pracovníků. U těchto rizik se stanoví míra jejich závažnosti a návrh protiopatření.</li>
</ul>
<p> </p></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Thu, 05 Jun 2014 10:02:44 +0000</pubDate>
		</item>
		<item>
			<title>Modelovací jazyky byznys procesů – IDEF0, UML, EPC, BPMN</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/174-modelovaci-jazyky-byznys-procesu-idef0-uml-epc-bpmn</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/174-modelovaci-jazyky-byznys-procesu-idef0-uml-epc-bpmn</guid>
			<description><![CDATA[<div class="feed-description"><p>Účelem modelování je vytvoření takové abstrakce procesu, která umožňuje pochopení všech jeho <span style="line-height: 1.3em;">aktivit, souvislostí mezi těmito aktivitami a rolemi zapojenými do tohoto procesu.</span></p>
<p><span style="line-height: 1.3em;"><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/cokdo.jpg" border="0" width="413" height="207" style="border: 0; float: right;" /></span></p>
<p><span style="line-height: 1.3em;">Při sestavování podnikového modelu je n</span>ejprve je nutné identifikovat, jaké funkce daná organizace či podnik má plnit a za jakým účelem. </p>
<ol>
<li><span style="line-height: 1.3em;">Hledáme co je </span><strong style="line-height: 1.3em;"><em>vstupem a výstupem</em> </strong><span style="line-height: 1.3em;">těchto </span><em style="line-height: 1.3em;"><strong>funkcí</strong> </em><span style="line-height: 1.3em;">a jak jsou tyto funkce strukturovány. Následuje </span></li>
<li><span style="line-height: 1.3em;">Další krok popisující jak tyto funkce budou zajišťovat transformaci vstupů na výstupy pomocí k tomu </span><span style="line-height: 1.3em;">určených <em><strong>aktivit a procesů</strong></em>.</span></li>
<li><span style="line-height: 1.3em;">Nakonec je nutné definovat, čím konkrétně jsou v předchozích krocích </span><span style="line-height: 1.3em;"><em><strong>definované toky</strong></em> dané a kdo a co bude realizovat specifikované aktivity. </span></li>
</ol>
<p>V podstatě tedy existují tři základní přístupy, které se využívají k modelování procesů, a které vychází <span style="line-height: 1.3em;">ze tří základních typů použité abstrakce: </span></p>
<ol>
<li><strong style="line-height: 1.3em;">Funkční přístup</strong><span style="line-height: 1.3em;"> zaměřený především na funkce, jejich strukturování, vstupy a výstupy. Příkladem metody je <strong>IDEF</strong>.</span></li>
<li><span style="line-height: 1.3em;">Přístup specifikací <strong>chování</strong> je zaměřen na řídící aspekt vykonávání procesu cestou stanovení </span><span style="line-height: 1.3em;">událostí a podmínek, za kterých mohou být jednotlivé aktivity prováděny. Příkladem je metoda <strong>EPC, BPMN.</strong><br /></span></li>
<li><span style="line-height: 1.3em;"><strong>Strukturální</strong> přístup je zaměřen na statický aspekt procesu. Cílem je postihnout entity a zdroje </span><span style="line-height: 1.3em;">vystupující v procesu včetně jejich atributů, činností (služeb) a vzájemných vazeb. Určuje se pomocí <strong>UML</strong>.</span></li>
</ol>
<h2><span style="line-height: 1.3em;">IDEF </span><span style="font-family: Tahoma, Helvetica, Arial, sans-serif; font-size: 12px; line-height: 1.3em;">(Integration DEFinition)</span></h2>
<p>Metoda IDEF, konkrétně IDEF0, poskytuje modelovací jazyk s danou <span style="line-height: 1.3em;">syntaxí a sémantikou, umožňující vytvořit strukturovanou grafickou reprezentaci systému nebo </span><span style="line-height: 1.3em;">organizace. Budeme se zabývat typem </span><strong>IDEF0</strong> určeným pro účely sestavení funkčního modelu, který strukturovaným způsobem <span style="line-height: 1.3em;">popisuje funkce modelované doménové oblasti (existuje i IDEF1- struktura systému a IDEF2- chování). </span></p>
<p><span style="line-height: 1.3em;"><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/idef.jpg" border="0" width="497" height="327" style="border: 0; float: right;" /></span></p>
<p>Skládá se z následujících prvků:<span style="line-height: 1.3em;"> </span></p>
<p>1. <strong>Funkce</strong> (Function) popisující činnost transformující vstup na požadovaný výstup. </p>
<p>2. <strong>Vstupem</strong> (Input) jsou data nebo objekty, které budou funkcí transformovány na výstup. </p>
<p>3. <strong>Výstupem</strong> (Output) rozumíme data nebo objekty produkované funkcí. </p>
<p>4. <strong>Řízení</strong> (Control) je dáno pravidly potřebnými k vytvoření požadovaného výstupu. </p>
<p>5. <strong>Mechanismus</strong> (Mechanism) definuje prostředky nutné k realizaci funkce. </p>
<p>Každá funkce nese své číselné <span style="line-height: 1.3em;">označení (ID) a případně také označení diagramu - aby bylo možné </span>vytvářet hierarchii diagramů odpovídající <span style="line-height: 1.3em;">dekompozici funkcí (rozložení na podfunkce). Je zde pravidlo že </span>diagram by neměl mít méně než tři a více než <span style="line-height: 1.3em;">šest funkcí. Platí zde také důležitá vlastnost těchto diagramů, kdy výstupy dané funkce mohou být </span><span style="line-height: 1.3em;">vstupem, řízením či mechanismem jiných funkcí. Tímto způsobem jsou definovány vzájemné </span><span style="line-height: 1.3em;">závislosti mezi funkcemi. </span></p>
<p> <em>Příklad IDEF0 - realizace zakázky.</em><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/idef2.png" border="0" alt="" width="691" height="470" /></p>
<p> </p>
<h2>EPC (Event-driven Process Chains)</h2>
<p>Určuje jaká bude <span style="line-height: 1.3em;">posloupnost aktivit, případně, které z aktivit budou moci být realizovány souběžně </span><span style="line-height: 1.3em;">(paralelismus). S</span>počívá v řetězení událostí a aktivit do posloupnosti realizující požadovaný cíl. Z obecného pohledu vykonávání procesu událost definuje vstupní podmínku (precondition) <span style="line-height: 1.3em;">uskutečnění aktivity. Ukončení aktivity pak definuje další událost – výstupní podmínku </span><span style="line-height: 1.3em;">(postcondition), na kterou mohou navazovat další aktivity. Z toho vyplývá, že každá aktivita je </span><span style="line-height: 1.3em;">vymezena dvěmi událostmi a tak je i jednoznačně definován její začátek a konec. </span></p>
<p>Byznys proces specifikovaný <span style="line-height: 1.3em;">pomocí EPC diagramu využívá následujících elementů:</span></p>
<ul>
<li><span style="line-height: 1.3em;"><strong>Aktivity</strong> (Activities), které jsou základními stavebními bloky určují, co má být v rámci procesu </span><span style="line-height: 1.3em;">vykonáno. </span></li>
<li><span style="line-height: 1.3em;"><strong>Události</strong> (Events) popisují situace před a/nebo po vykonání aktivity. Aktivity jsou vzájemně </span><span style="line-height: 1.3em;">propojeny pomocí událostí. Jinak řečeno, nějaká událost může vyjadřovat výstupní podmínku </span><span style="line-height: 1.3em;">jedné aktivity a současně vstupní podmínku jiné aktivity. </span></li>
<li><span style="line-height: 1.3em;"><strong>Logické spojky</strong> (Connectors) se používají ke spojování aktivit a událostí. Tímto způsobem je </span><span style="line-height: 1.3em;">popsán řídící tok procesu. EPC používá tři typy spojek: ∧ (AND – a současně), ∨ (OR – nebo) </span><span style="line-height: 1.3em;">a XOR (exclusive OR – vzájemně se vylučující nebo). </span></li>
</ul>
<p><span style="line-height: 1.3em;"><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/epc.png" border="0" alt="" /></span></p>
<p>- vždycky je střídání události s aktivitou a mezitím dáváme logické spojky. Je tu ale pravidlo, že nemůžeme jít z události do spojky OR nebo XOR (jedině z aktivity).</p>
<p> </p>
<h2>BPMN (Business Process Model and Notation)</h2>
<p>Poskytuje grafické znázornění pro specifikaci podnikových procesů v procesním diagramu (BPD). Procesní diagram je založen na flowchart technologii, která je velmi podobná diagramu aktivit.</p>
<p><img src="https://lucie.zolta.cz/images/skola/SoftwaroveIng/1280px-BPM_300dpi.png" border="0" alt="" width="573" height="319" /></p>
<p>Pomocí BPMN vznikají jednoduché diagramy, které se skládají z omezeného počtu grafických prvků. Díky tomu je pro vlastníky procesů, vývojáře a analytiky snadné porozumět procesním tokům i samotným procesům. BPMN se rozděluje na čtyři základní kategorie, viz níže. Tyto čtyři kategorie usnadňují tvorbu jednoduchých diagramů podnikových procesů a také umožňují tvorbu nových druhů tokových objektů a artefaktů, které přispívají k lepší srozumitelnosti diagramů.</p>
<dl><dt><strong>Flow objects</strong> - Tokové objekty</dt></dl>
<ul>
<li>Events - Události</li>
<li>Activities - Aktivity / Činnosti</li>
<li>Gateways - Brány</li>
</ul>
<dl><dt><strong>Connecting objects</strong> - Spojovací objekty</dt></dl>
<ul>
<li>Sequence flow - Sekvenční tok</li>
<li>Message flow - Tok zpráv</li>
<li>Association - Asociace</li>
</ul>
<dl><dt><strong>Swim lanes</strong> - Plavecké dráhy (Kontexty)</dt></dl>
<ul>
<li>Pool - Bazény (Kontext)</li>
<li>Lane - Dráhy (Oddíly kontextu)</li>
</ul>
<dl><dt><strong>Artifacts</strong> - Artefakty</dt></dl>
<ul>
<li>Data object - Datové Objekty</li>
<li>Group - Skupiny</li>
<li>Annotation - Anotace</li>
</ul></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Fri, 06 Jun 2014 20:05:12 +0000</pubDate>
		</item>
		<item>
			<title>Struktura OS</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/176-struktura-os</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/176-struktura-os</guid>
			<description><![CDATA[<div class="feed-description"><h4>Co vše provádí operační systém</h4>
<ul>
<li>Organizuje přístup a využívání zdrojů počítače (čas procesoru, přístup k datům na discích, přístup do paměti).</li>
<li>Fyzicky zajišťuje vstup a výstup dat podle požadavků ostatních programů.</li>
<li>Komunikuje s uživatelem a na základě jeho pokynů vykonává požadované akce.</li>
<li>Reaguje na chybové stavy programů a mylné požadavky uživatelů tak, aby tyto chyby nezpůsobily zásadní destrukci systému nebo poškození dat.</li>
<li>Spravuje komunikaci s periferiemi. Definuje nastavení klávesnice, citlivost myši a dalších zařízení.</li>
<li>Eviduje využívání systémových zdrojů apod.</li>
</ul>
<h3>Struktura OS</h3>
<p>Operační systém je zpravidla tvořen tzv. jádrem (kernel), ovladači V/V zařízení (driver), příkazovým procesorem (shell) a podpůrnými systémovými programy.</p>
<ul>
<li><strong>Jádro </strong>- po zavedení do paměti řídí činnost počítače, poskytuje procesům služby a řeší správu prostředků a správu procesů.</li>
<li><strong>Ovladač </strong>- zvláštní (pod)program pro ovládání konkrétního zařízení standardním způsobem. Použití strategie s ovladači umožňuje snadnou konfigurovatelnost technického vybavení.</li>
<li><strong>Příkazový procesor</strong> - program, který umožňuje uživatelům zadávat příkazy ve speciálním, obvykle jednoduchém jazyce.</li>
<li>Podpůrné programy - do této kategorie jsou mnohdy zahrnovány i překladače (jazyk C v OS UNIX) a sestavující programy. Stojí na stejném místě jako aplikační programy.</li>
</ul>
<h3>Jádro OS</h3>
<p>Jádro se zpravidla dělí na dvě podstatné části:</p>
<ol>
<li><em><strong>Správa procesů</strong></em> - správa procesů (prakticky není u jednoduchých OS) řeší problematiku aktivování a deaktivování procesů podle jejich priority resp. požadavků na prostředky.</li>
<li><em><strong>Správa prostředků</strong></em> - zajišťuje činnost V/V zařízení, přiděluje paměť, případně procesory. Velmi důležitou částí správy prostředků je: správa souborů - způsob ukládání souborů a přístupu k nim. Moderní OS zajišťují jednotný pohled na soubory a zařízení. Zařízení jsou považovány za soubory se speciálním jménem.</li>
</ol>
<h3>Generické komponenty OS</h3>
<ul>
<li><span style="line-height: 1.3em;">Správa procesoru (procesorů) </span></li>
<li><span style="line-height: 1.3em;">Správa procesů (proces – činnost řízená programem) </span></li>
<li><span style="line-height: 1.3em;">Správa vnitřní (hlavní) paměti </span></li>
<li><span style="line-height: 1.3em;">Správa souborů Správa I/O systému </span></li>
<li><span style="line-height: 1.3em;">Správa vnější (sekundární) paměti Networking, distribuované systémy Systém ochran Interpret příkazů</span></li>
</ul>
<p><strong>Správa procesů</strong></p>
<ul>
<li><span style="line-height: 1.3em;"><strong>Proces</strong> – činnost řízená programem, provedení programu, „process“ nebo „task“</span></li>
<li><span style="line-height: 1.3em;">Proces potřebuje pro svou realizaci jisté zdroje (CPU, paměť, I/O zařízení, …)</span></li>
<li><span style="line-height: 1.3em;">Z hlediska správy procesů je OS zodpovědný za:</span></li>
<ul>
<li><span style="line-height: 1.3em;">Vytváření a rušení procesů</span></li>
<li><span style="line-height: 1.3em;">Potlačení a obnovení procesů</span></li>
<li><span style="line-height: 1.3em;">Synchronizace procesů a jejich vzájemná komunikace</span></li>
</ul>
<li><span style="line-height: 1.3em;">Variantou procesu je tzv. Vlákno – jednotka plánování činností definovaná v programu. Vlákna používají zdroje přidělené procesu.</span></li>
</ul>
<p><strong>Správa procesoru</strong></p>
<ul>
<li><span style="line-height: 1.3em;">OS vybírá procesy běžící na dostupných procesorech.</span></li>
<li><span style="line-height: 1.3em;">Dále podle typu OS zde patří i plánování vláken.</span></li>
</ul>
<p><strong>Správa vnitřní paměti</strong></p>
<ul>
<li><span style="line-height: 1.3em;">Vnitřní pamětí se myslí primární, operační paměť, neboli fyzický adresový prostor (pole samostatně adresovatelných slov nebo bytů), repositář pohotově (rychle) dostupných dat sdílený CPU a I/O zařízeními.</span></li>
<li><span style="line-height: 1.3em;">Vnitřní paměť energeticky závislá, ztrácející se po výpadku energie.</span></li>
<li><span style="line-height: 1.3em;">OS je z hlediska správy vnitřní paměti odpovědný za:</span></li>
<ul>
<li><span style="line-height: 1.3em;">Vedení přehledu, který proces v daném okamžiku využívá kterou část paměti</span></li>
<li><span style="line-height: 1.3em;">Rozhodování, kterému procesu po uvolnění paměti tuto paměť poskytnout</span></li>
<li><span style="line-height: 1.3em;">Přidělování a uvolňování paměti</span></li>
</ul>
<li><span style="line-height: 1.3em;">Programátor vidí logický adresový prostor – ten je vymezen formou adresy v instrukci. OS zavádí programy a data do tohoto prostoru podle potřeby. Transformaci logické adresy na fyzickou se zpravidla provádí až při provádění instrukce. Struktura logického adresového prostoru může být lineární (pole) nebo dvojdimensionální (kolekce samostatných lineárních segmentů proměnné délky).</span></li>
</ul>
<p><strong>Správa I/O systémů</strong></p>
<p><span style="line-height: 1.3em;">Poskytuje repositář vyrovnávacích pamětí a univerzální rozhraní ovladačů (driverů) I/O zařízení, a pak také samotné ovladače (drivery).</span></p>
<p><strong>Správa vnější paměti</strong></p>
<p>Správa energeticky nezávislé, sekundární paměti s dostatečnou kapacitou. Jako sekundární paměť obvykle slouží disky. <span style="line-height: 1.3em;">OS je zodpovědný za:</span></p>
<ul>
<li><span style="line-height: 1.3em;">Správu volné paměti</span></li>
<li><span style="line-height: 1.3em;">Přidělování paměti souborům</span></li>
<li><span style="line-height: 1.3em;">Plánování činnosti disku</span></li>
</ul>
<p><strong>Správa souborů</strong></p>
<p><em><strong>Soubor</strong> </em>– identifikovatelná kolekce souvisejících dat definovaná svým tvůrcem. Obvykle reprezentuje i programy i data.</p>
<p>OS je z hlediska správy souborů zodpovědný za:</p>
<ul>
<li><span style="line-height: 1.3em;">Vytváření a rušení souborů</span></li>
<li><span style="line-height: 1.3em;">Vytváření a rušení adresářů (katalogů)</span></li>
<li><span style="line-height: 1.3em;">Podporu primitivních operací pro manipulaci se soubory a adresáři</span></li>
<li><span style="line-height: 1.3em;">Zobrazování souborů do sekundární paměti</span></li>
<li><span style="line-height: 1.3em;">Archivování souborů na energeticky nezávislá média</span></li>
<li><span style="line-height: 1.3em;">Networking, distribuované systémy</span></li>
</ul>
<p><em><strong>Distribuovaný systém</strong></em> – kolekce procesorů nesdílejících ani fyzickou paměť, ani hodiny. Procesory distribuovaného systému jsou propojeny komunikační sítí. Komunikace je řízena protokoly.</p>
<p><strong>Systém ochran</strong></p>
<p>Mechanismus pro řízení přístupu k systémovým a uživatelským zdrojům. Tento systém je součástí všech vrstev OS.</p>
<p>Systém ochran musí:</p>
<ul>
<li><span style="line-height: 1.3em;">Rozlišovat mezi autorizovaným a neautorizovaným použitím</span></li>
<li><span style="line-height: 1.3em;">Poskytnout prostředky pro své prosazení</span></li>
</ul>
<p><strong>Interpret příkazů</strong></p>
<ul>
<li><span style="line-height: 1.3em;">Většina zadání je předávána operačnímu systému řídícími příkazy, které zadávají požadavky na:</span></li>
<li><span style="line-height: 1.3em;">Správu a vytváření procesů</span></li>
<li><span style="line-height: 1.3em;">Ovládání I/O zařízení</span></li>
<li><span style="line-height: 1.3em;">Správu sekundární paměti</span></li>
<li><span style="line-height: 1.3em;">Práci v síti</span></li>
</ul>
<p><span style="line-height: 1.3em;">Program, který čte a interpretuje příkazy je označován v různých OS různými názvy – command line interpreter, shell, …</span></p>
<p><span style="line-height: 1.3em;"> </span></p>
<h3>Struktura OS podle jádra</h3>
<ul>
<li><span style="line-height: 1.3em;">Monolitická jádra (Monolithic kernel)</span></li>
<li><span style="line-height: 1.3em;">Otevřené systémy (Open systems)</span></li>
<li><span style="line-height: 1.3em;">Microkernel</span></li>
</ul>
<h2><span style="line-height: 1.3em;">Monolitický OS</span></h2>
<p>OS je na jednom místě (pod „červenou čárou“). Aplikace používá dobře definované rozhraní systémových volání pro komunikaci s jádrem.</p>
<p><span style="line-height: 1.3em;"><img src="https://lucie.zolta.cz/images/skola/Site/aa1.jpg" border="0" width="419" height="250" style="border: 0; float: right;" /></span></p>
<p>Příklady OS – Unix, Windows NT / XP, Linux, BSD, …</p>
<p>Monolitické jádro je specifické pro komerční systémy.</p>
<p><span style="text-decoration: underline;">Výhody:</span></p>
<ul>
<li><span style="line-height: 1.3em;">Dobrý výkon</span></li>
<li><span style="line-height: 1.3em;">Dobře pochopená koncepce</span></li>
<li><span style="line-height: 1.3em;">Jednoduché pro vývojáře jádra</span></li>
<li><span style="line-height: 1.3em;">Vysoká úroveň ochrany mezi aplikacemi</span></li>
</ul>
<p><span style="text-decoration: underline;">Nevýhody:</span></p>
<ul>
<li><span style="line-height: 1.3em;">Žádná ochrana mezi komponentami jádra</span></li>
<li><span style="line-height: 1.3em;">Není jednoduše a bezpečně rozšiřitelné jádro</span></li>
<li><span style="line-height: 1.3em;">Celková struktura je ve výsledku komplikovaná, neexistují hranice mezi moduly jádra </span></li>
</ul>
<h2>Otevřené Systémy</h2>
<p>Aplikace, knihovny i jádro jsou všechny v jednom adresovém prostoru.</p>
<p>Jestli se to zdá být jako šílená myšlenka, zde jsou příklady – MS-DOS, Mac OS 9 a starší, Windows ME, 98, 95, 3.1, Palm OS.</p>
<p><img src="https://lucie.zolta.cz/images/skola/Site/aa2.jpg" border="0" width="457" height="221" style="border: 0; float: right;" /></p>
<p>Tato koncepce bývala velmi běžná.</p>
<p><span style="text-decoration: underline;">Výhody:</span></p>
<ul>
<li><span style="line-height: 1.3em;">Velmi dobrý výkon</span></li>
<li><span style="line-height: 1.3em;">Velmi dobře rozšiřitelné</span></li>
<li><span style="line-height: 1.3em;">Výhodné pro jednouživatelské OS</span></li>
</ul>
<p><span style="text-decoration: underline;">Nevýhody:</span></p>
<ul>
<li><span style="line-height: 1.3em;">Žádna ochrana mezi jádrem a aplikacemi</span></li>
<li><span style="line-height: 1.3em;">Nepříliš stabilní</span></li>
<li><span style="line-height: 1.3em;">Skládání rozšíření může vést k nepředvídatelnému chování</span></li>
</ul>
<h2>Microkernel OS</h2>
<p>Filosofie návrhu – chráněné jádro obsahuje pouze minimální (malou, čistou, logickou) množinu abstrakcí:</p>
<ul>
<li><span style="line-height: 1.3em;">Procesy a vlákna</span></li>
<li><span style="line-height: 1.3em;">Virtuální paměť</span></li>
<li><span style="line-height: 1.3em;">Komunikace mezi procesy</span></li>
</ul>
<p>Všechno ostatní jsou server-procesy běžící na uživatelské úrovni.</p>
<p>Příklady OS – Mach, Chorus, QNX, GNU Hurd</p>
<p><img src="https://lucie.zolta.cz/images/skola/Site/aa3.jpg" border="0" width="422" height="274" style="border: 0; float: right;" /></p>
<p>Zkušenosti s tímto návrhem jsou smíšené.</p>
<p><span style="text-decoration: underline;">Výhody:</span></p>
<ul>
<li><span style="line-height: 1.3em;">Přidáním server-procesu se rozšíří funkcionalita OS</span></li>
<li><span style="line-height: 1.3em;">Jádro nespecifikuje prostředí OS</span></li>
<li><span style="line-height: 1.3em;">Servery na uživatelské úrovni se nemusí zabývat hardwarem</span></li>
<li><span style="line-height: 1.3em;">Silná ochrana OS i sám proti sobě (části OS jsou oddělené servery)</span></li>
<li><span style="line-height: 1.3em;">Jednoduché rozšíření na distribuovaný nebo multiprocesorový systém</span></li>
</ul>
<p><span style="text-decoration: underline;">Nevýhody</span></p>
<ul>
<li><span style="line-height: 1.3em;">Výkon (Systémová volání viz. dále)</span></li>
<li><span style="line-height: 1.3em;">Špatná minulost</span></li>
</ul>
<p> </p>
<h3>Systémová volání – příklad</h3>
<p><img src="https://lucie.zolta.cz/images/skola/Site/aa4.jpg" border="0" alt="" width="677" height="378" /></p>
<p> </p></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Sat, 07 Jun 2014 06:56:53 +0000</pubDate>
		</item>
		<item>
			<title>Builder</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/183-builder</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/183-builder</guid>
			<description><![CDATA[<div class="feed-description"><p>Slouží k abstrahování tvorby složitých objektů. A to tak, aby stejné výrobní schéma mohlo být použito pro tvorbu různých objektů. Způsob konstrukce těchto objektů je tedy stejný, jednotlivé kroky se však liší. </p>
<p>Použití Stavitele je vhodné u rozdílných tříd s podobným procesem konstrukce. Samotné třídy mohou být rozdílné a nezávislé. Tím se liší od Abstraktní továrny, která slouží k tvorbě podobných objektů. </p>
<p>Konstrukci provádí konkrétní implementace rozhraní Builder, ale proces konstrukce řidí třída Director. </p>
<p><img src="https://lucie.zolta.cz/images/skola/BuilderPatternUMLDiagram.png" border="0" alt="" /></p>
<p><em><strong>Příklad:</strong></em></p>
<p>Klient přijde do fastfoodu a chce hlavní menu. Hlavní menu se skládá z hamburgeru, přílohy a nápoje. Výrobní postup je vždy stejný, jen některé kroky mohou být vynechány nebo zaměněny - někdo si objedná cheeseburger jiný může chtít chickenburger bez nápoje. </p>
<p>Pracovník na přepážce je directorem - vytváří objednávku a řídí pracovníky. O realizaci jednotlivých kroků se starají různé implementace třídy Builder -např. vytvářeč chickenburger menu, vytvářeč cheeseburger menu, apod. Jejich výsledkem je kompletní produkt - balíček se sestaveným jídlem. <span style="line-height: 1.3em;">Menu je možné odebrat teprve poté, kdy jsou všechny kroky konstrukce dokončeny.</span></p>
<p><img src="https://lucie.zolta.cz/images/skola/0001.jpg" border="0" alt="" /></p>
<p>Zjednodušeně: Ke konstrukci jednoho objektu slouží právě jeden Builder, proces konstrukce řídí Direktor, objekt ke konstrukci vybírá klient předáním Builderu Direktoru, po ukončení konstrukce si z Builderu pouze vybere výsledek metodou getResult.</p>
<p>Stavitelů ke konstrukci jednoho objektu může být voláno i více. Například pokud je výsledný produkt Composite může být při jeho konstrukci voláno více stavitelů, případně stejný stavitel několikrát za sebou. Tak je zajištěno například vytváření složitých objektů grafického rozhraní operačního systému.</p>
<p> </p></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Fri, 25 Jul 2014 07:44:35 +0000</pubDate>
		</item>
		<item>
			<title>Facade</title>
			<link>https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/185-facade</link>
			<guid isPermaLink="true">https://lucie.zolta.cz/index.php/softwarove-inzenyrstvi/185-facade</guid>
			<description><![CDATA[<div class="feed-description"><p>Návrhový vzor Facade představuje řešení, jestliže je nutné zjednodušit vstupní bod do systému.</p>
<p>Při vývoji systému se lehce může stát, že celková jeho struktura se stává velmi těžce zvládnutelnou. I použitím návrhových vzorů se mnohdy dostáváme k velmi komplexnímu systému tříd s mnoha vazbami. Navíc každý systém může obsahovat i několik subsystému, které ještě zvětšují obtížnost pochopení zákonitostí systému. Facade představuje „high-level“ rozhraní, které slouží k zjednodušení komunikace mezi klientem a systémem.</p>
<p>Klient komunikuje se systémem pomocí Facade, kterému zasílá požadavky. Facade tyto požadavky zasílá příslušným objektům. Jinak řečeno Facade překládá svoje rozhraní do jednotlivých rozhraní v systému. Říkáme, že Facade je rozhraním systému, ale ve skutečnosti není použito standardní Java rozhraní (deklarované jako interface), ale Facade je implementován jako třída.</p>
<p><img src="https://lucie.zolta.cz/images/skola/0facade.gif" border="0" width="500¨" style="border: 0;" /></p>
<h4>Příklad</h4>
<p>Představme si systém, jehož úkolem je realizovat vyřízení zakázky ovoce, které objednávají maloobchody. V takovémto systému by neměla chybět třída respektive modul, která zajišťuje skladové hospodářství (Sklad ovoce), prodej ovoce (Obchod) a evidenci platby pohledávek (Účetnictví). Jelikož takové struktura je pro maloobchod nepřehledná, byla vytvořena třída Zásobování, která umožňuje průhlednou komunikaci s těmito moduly. Maloobchod si může zjistit stav svých dluhů, dotázat se na množství ovoce na skladě, zjistit jeho cenu a objednat si určité množství. Zásobování pouze překládá jeho požadavky na příslušné metody tříd v systému.</p>
<p> </p>
<p><img src="https://lucie.zolta.cz/images/skola/0facade2.gif" border="0" width="550" style="border: 0;" /></p></div>]]></description>
			<author>verca.zolta@seznam.cz (Verca)</author>
			<category>Softwarové inženýrství</category>
			<pubDate>Fri, 25 Jul 2014 10:03:48 +0000</pubDate>
		</item>
	</channel>
</rss>
