<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kubánek.org &#187; OOP</title>
	<atom:link href="http://kubanek.org/blog/stitky/oop/feed/" rel="self" type="application/rss+xml" />
	<link>http://kubanek.org</link>
	<description>Blog o programování, volejbale a zážitcích ze života</description>
	<lastBuildDate>Mon, 10 May 2010 20:50:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>S objekty do světa</title>
		<link>http://kubanek.org/blog/s-objekty-do-sveta/</link>
		<comments>http://kubanek.org/blog/s-objekty-do-sveta/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 19:39:18 +0000</pubDate>
		<dc:creator>Lukáš Kubánek</dc:creator>
				<category><![CDATA[Informační technologie]]></category>
		<category><![CDATA[Doctrine]]></category>
		<category><![CDATA[Enterprise Architect]]></category>
		<category><![CDATA[Nette Framework]]></category>
		<category><![CDATA[Objektově.cz]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[USDP]]></category>
		<category><![CDATA[WebExpo]]></category>

		<guid isPermaLink="false">http://localhost/kubanek.org/?p=123</guid>
		<description><![CDATA[Musím se přiznat, že jsem na prvním ročníku konference WebExpo postrádal přednášku o pravém objektovém programování webové aplikace. Smutnil jsem, že se žádná významná osoba touto problematikou nezajímala. Postupem času jsem si začal uvědomovat zatemnění především začínajících vývojářů při neúplném pochopení architektury MVC a především zanedbávání modelu, který byl často nahrazován databázovými dotazy přímo v [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Musím se přiznat, že jsem na prvním ročníku konference WebExpo postrádal přednášku o pravém objektovém programování webové aplikace. Smutnil jsem, že se žádná významná osoba touto problematikou nezajímala. Postupem času jsem si začal uvědomovat zatemnění především začínajících vývojářů při neúplném pochopení architektury MVC a především zanedbávání modelu, který byl často nahrazován databázovými dotazy přímo v controllerech. Pořekadla jako <em><em>„</em></em><em>Model je funkční základ aplikace.<em>“</em></em> nebo <em><em>„</em><em>N</em></em><em>a model lze napasovat několik různých UI<em>.“</em></em> se řadili pouze mezi teoretické poučky.</p>
<p style="text-align: justify;">Podobný problém zaznamenal i Tomáš Jukin a tak jsme se rozhodli vyrazit s objekty mezi lidi.  Na letošním WebExpu si v rámci našeho workshopu <a href="http://webexpo.cz/workshop/vyvoj-objektovych-webovych-aplikaci-v-php-metodikou-usdp-pomoci-uml/">Vývoj objektových webových aplikací v PHP metodikou USDP pomocí UML</a> povíme, že vývoj webových aplikací na základě bezhlavého psaní kódu už dnes neletí. Vysvětlíme si, jak efektivně modelovat webové aplikace pomocí objektové metodiky Unified Software Development Process a jako jednotný dorozumívací jazyk v rámci vývojového týmu (popř. přímo s klienty) používat UML. Nad obyčejný podřadný kód posadíme abstraktní rovinu, která nám pomůže udělat si obrázek o systému mnohem rychleji než marné orientování v kódu. Značnou výhodou hotové aplikace bude její velmi dobrá upravitelnost a rozšiřitelnost.</p>
<p style="text-align: justify;">Náš 3,5 hodinový workshop se koná v sobotu 17.10.2009 časně zrána. Workshop bude rozdělen do dvou částí. Nejprve si povíme něco málo nezábavného o teorii modelování informačních systémů, metodice Unified Software Development Process a notačním jazyku UML. V druhé části vás provedeme řízením reálného projektu na základě metodiky USDP. Budeme si hrát na vývojový tým a společnými silami vyvineme použitelnou objektovou webovou aplikaci. Účastníci si v rámci workshopu vyzkouší CASE nástroj Enterprise Architect, získají teoretické základy metodiky USDP a jazyka UML a pochopí jak správně nakládat s modelem z architektury MVC na reálném příkladu založeném na technologiích <em>Nette Framework </em>a <em>Doctrine</em>. Pište správné objektové webové aplikace a bude se vám lépe usínat!</p>
]]></content:encoded>
			<wfw:commentRss>http://kubanek.org/blog/s-objekty-do-sveta/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Pravé objektově orientované programování v PHP</title>
		<link>http://kubanek.org/blog/prave-objektove-orientovane-programovani-v-php/</link>
		<comments>http://kubanek.org/blog/prave-objektove-orientovane-programovani-v-php/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 13:48:50 +0000</pubDate>
		<dc:creator>Lukáš Kubánek</dc:creator>
				<category><![CDATA[Informační technologie]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[Nette Framework]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://localhost/kubanek.org/?p=89</guid>
		<description><![CDATA[Kdo by neznal čím dál více se rozšiřující serverový skriptovací jazyk s nedomyšlenou rekurzivní zkratkou PHP, který je známý nejen jako výukový trenažér pro amatérské webmastery. Statistiky ukazují, že dnešní hostingový program bez podpory PHP je buď ten nejlevnější nebo s chybou v metrixu. S příchodem páté verze se v PHP objevuje objektová syntaxe a [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Kdo by neznal čím dál více se rozšiřující serverový skriptovací jazyk s nedomyšlenou rekurzivní zkratkou <a href="http://php.net/">PHP</a>, který je známý nejen jako výukový trenažér pro amatérské webmastery. Statistiky ukazují, že dnešní hostingový program bez podpory PHP je buď ten nejlevnější nebo s chybou v metrixu. S příchodem páté verze se v PHP objevuje objektová syntaxe a PHP se mění z výukového trenažéru na kvalitní objektový serverový skriptovací nástroj, se kterým lze dělat velké věci. Protože PHP projekty z našeho světa jen tak nezmizí, rozhodl jsem se sepsat článek, který kategorizuje a odděluje od sebe jednotlivé přístupy tvorby PHP projektů.</p>
<h2>A: Strukturální přístup</h2>
<p style="text-align: justify;">Každý, kdo zná PHP, se ve svém životě setkal s koncepcí PHP projektíku založeného na statických stránkách, jejichž obsah se přepíná pomocí jediného GET parametru a jazykového konstruktu <em>include</em>. V lepších případech je využita databáze nebo zápis do souborů. Takovýto projekt využívá pouze strukturálních funkcí, nejčastěji implementovaných přímo v PHP.</p>
<p style="text-align: justify;">PHP projekt založený na strukturálním přístupu obvykle postrádá logiku a je nejčastěji založen na práci s textem. Vůbec nechci tento přístup odsuzovat, naopak, takový přístup disponuje největší perzistencí v porovnání s dalšími přístupy, ale hodí se jen na malé, velmi jednoduché projekty.</p>
<h2>B: Objektově strukturální přístup</h2>
<p style="text-align: justify;">Ne nadarmo se řadí PHP mezi multiparadigmatické programovací jazyky. Hlavně několik posledních let se začíná rozrůstat síla PHP frameworků, které programátorům uzpůsobují a mnohdy ulehčují jejich programátorský styl. Z těch nejznámějších zmíním <a href="http://framework.zend.com/">Zend Framework</a>, <a href="http://cakephp.org/">CakePHP</a> nebo český <a href="http://nettephp.com/">Nette Framework</a>. PHP frameworky jsou nejčastěji psané v objektovém kódu a založené na MVC architektuře.</p>
<p style="text-align: justify;">Při tvorbě PHP projektu, který využívá některý z objektově psaných frameworků, je kód projektu psaný samozřejmě také objektově. Důležité je, uvědomit si, že pokud je objektový kód, nemusí být objektová i logika. V objektově strukturálním přístupu aplikace logiku postrádá a z pohledu architektury je stále strukturální. Aplikace pouze plní za sebou seřazené a do tříd obalené metody. Takovýmto přístupem jsou koncipovány středně složité projekty, které vyžadují složitější komponenty (například z knihovny frameworku) a usnadňují práci programátorovi, mnohdy bohužel na úkor perzistence.</p>
<h2>C: Pravý objektový přístup</h2>
<p style="text-align: justify;">Pokud chceme programovat náš PHP projekt opravdu objektově, musíme naučit systém přemýšlet. Proto v pravém objektovém přístupu využíváme nejen objektové syntaxe, ale i objektové logiky, na které je postavena systémová architektura. Nejen že systém využívá objektového kódu některého frameworku, ale pracuje i s našimi doménovými objekty, které tvoří problémovou doménu projektu. Tyto objekty tvoří <em>model </em>MVC architektury a jsou nejčastěji mapovány do databází pomocí některého ORM nástroje, který může být integrován přímo do frameworku.</p>
<p style="text-align: justify;">Takový přístup bychom měli zvolit, pokud se jedná o složitější PHP projekt. Vzniklý systém nevyniká perzistencí, proto je nutno ho co možná nejlépe optimalizovat (databázové dotazy – kvalitní ORM, dobře navrhnutá architektura, cache…), ale vyniká správností objektového konceptu.</p>
<p style="text-align: justify;">Musím ještě podotknout, že žádný z přístupů není nejhorší a žádný nejlepší, protože vždy záleží na konkrétním PHP projektu. I když osobně preferuji pravý objektový přístup, tak se mi zamlouvá i strukturální přístup pro jednoduché projekty. Nejmíň se mi ale zarývá pod nehty objektově strukturální přístup, protože nejsem schopný kloubit správný objektový koncept a logicky strukturální přístup. Je to jako duševní bariéra. Ale každému vyhovuje něco jiného.</p>
]]></content:encoded>
			<wfw:commentRss>http://kubanek.org/blog/prave-objektove-orientovane-programovani-v-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Asociace typu M:N</title>
		<link>http://kubanek.org/blog/asociace-typu-mn/</link>
		<comments>http://kubanek.org/blog/asociace-typu-mn/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 19:09:57 +0000</pubDate>
		<dc:creator>Lukáš Kubánek</dc:creator>
				<category><![CDATA[Informační technologie]]></category>
		<category><![CDATA[databáze]]></category>
		<category><![CDATA[Doctrine]]></category>
		<category><![CDATA[OOP]]></category>

		<guid isPermaLink="false">http://localhost/kubanek.org/?p=37</guid>
		<description><![CDATA[Rozhodl jsem se publikovat první technicky založený článek. Mapování objektů do relační databáze je pro dnešní objektové jazyky občas oříškem. Největší neplechu páchá asociace typu M:N. Ta není dnešními objektovými jazyky přímo podporována. V tomto článku přiblížím, jak úspěšně vysvětlit objektovým jazykům, že hvězdičky můžou svítit na obou stranách.
Cože to vlastně ta asociace typu M:N [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Rozhodl jsem se publikovat první technicky založený článek. Mapování objektů do relační databáze je pro dnešní objektové jazyky občas oříškem. Největší neplechu páchá asociace typu M:N. Ta není dnešními objektovými jazyky přímo podporována. V tomto článku přiblížím, jak úspěšně vysvětlit objektovým jazykům, že hvězdičky můžou <em>svítit</em> na obou stranách.</p>
<p style="text-align: justify;">Cože to vlastně ta asociace typu M:N je? Každý se s ní už určitě setkal. Na diagramu 1 je zobrazen jednoduchý příklad. Učitel může vyučovat několik žáků z různých tříd a zároveň každý žák může být vyučován několika různými učiteli. Dokážu si představit, že obě analytické třídy budou nahrazeny návrhovými třídami a že hodnoty atributů budou uloženy ve dvou tabulkách relační databáze. Ve fázi analýzy je na tento diagram radost pohledět, jenže ve fázi návrhu už tak růžově nevypadá.</p>
<div id="attachment_64" class="wp-caption aligncenter" style="width: 328px"><a href="http://kubanek.org/download/2009/02/d1.png" rel="lightbox[37]"><img class="size-full wp-image-64 " title="Diagram 1: Asociace typu M:N ve fázi analýzy" src="http://kubanek.org/download/2009/02/d1.png" alt="Diagram 1: Asociace typu M:N ve fázi analýzy" width="318" height="101" /></a><p class="wp-caption-text">Diagram 1: Asociace typu M:N ve fázi analýzy</p></div>
<p style="text-align: justify;">Podívejme se nyní do pozdější fáze analýzy, co se s naší školskou delegací stalo. Na diagramu 2 jsou vidět doplněné atributy a operace. Jen objasním, že operace <em>zjistiSeznamZaku()</em> vrací asociativní pole všech objektů typu <em>Žák</em>, které daný objekt typu <em>Učitel</em> vyučuje. Na opačné straně vrací operace <em>zjistiSeznamUcitelu()</em> asociativní pole všech objektů typu <em>Učitel</em>, které vyučují daný objekt typu <em>Žák</em>. Některé jazyky místo pole používají kolekce objektů, tím už se ale náš článek nezabývá. Ostatní atributy a operace popisovat nemusím, protože jsem zvolil opravdu jednoduchý příklad.</p>
<div id="attachment_66" class="wp-caption aligncenter" style="width: 480px"><a href="http://kubanek.org/download/2009/02/d2.png" rel="lightbox[37]"><img class="size-full wp-image-66 " title="Diagram 2: Asociace typu M:N s atributy a operacemi tříd" src="http://kubanek.org/download/2009/02/d2.png" alt="Diagram 2: Asociace typu M:N s atributy a operacemi tříd" width="470" height="174" /></a><p class="wp-caption-text">Diagram 2: Asociace typu M:N s atributy a operacemi tříd</p></div>
<p style="text-align: justify;">Přenesme se nyní mezi řádky nějakého skriptu, který vypisuje ke každému učiteli všechny vyučované žáky. Pokud by se databáze sestávala pouze ze dvou tabulek, jako je vidět v diagramu 3, budou nám stále chybět reference mezi jednotlivými objekty typů <em>Učitel</em> a <em>Žák</em> a náš skript, ať už bude sepsán jakkoli, náš cílený problém nevyřeší a nedokáže ke každému učiteli vypsat všechny jím vyučované žáky. <em>Příklad tabulek je v MySQL.</em></p>
<div id="attachment_72" class="wp-caption aligncenter" style="width: 393px"><a href="http://kubanek.org/download/2009/02/d3.png" rel="lightbox[37]"><img class="size-full wp-image-72" title="Diagram 3: Pohled na zamýšlené databázové tabulky" src="http://kubanek.org/download/2009/02/d3.png" alt="Diagram 3: Pohled na zamýšlené databázové tabulky" width="383" height="159" /></a><p class="wp-caption-text">Diagram 3: Pohled na zamýšlené databázové tabulky</p></div>
<p style="text-align: justify;">Takže nám něco chybí. Pojďme se zbavit té ohyzdné asociace typu M:N a rozbijme ji na dvě asociace typu 1:M. Vložme mezi asociaci typu M:N jednu třídu navíc, kterou můžeme pojmenovat speciálním názvem například <em>Výuka</em> nebo jednoduše spojením názvů obou spojovaných tříd, tzn. <em>UčitelŽák</em>. Tato geniální třída bude sloužit jako pojítko mezi našimi třídami. Každá instance bude ukazovat právě na jeden objekt typu <em>Učitel</em> a právě na jeden objekt typu <em>Žák</em>. Jako celek jsem určil třídu <em>Učitel</em> z toho důvodu, že budeme vypisovat žáky, které učitel vyučuje. Objekty typu <em>Učitel</em> jsou tedy odpovědné za životní cyklusy objektů typu <em>Výuka</em>. Stejně tak bychom mohli třídu <em>Výuka</em> přiřadit třídě <em>Žák</em>. Výsledek je zobrazen na diagramu 4.</p>
<div id="attachment_73" class="wp-caption aligncenter" style="width: 583px"><a href="http://kubanek.org/download/2009/02/d4.png" rel="lightbox[37]"><img class="size-full wp-image-73" title="Diagram 4: Využití propojující třídy Výuka" src="http://kubanek.org/download/2009/02/d4.png" alt="Diagram 4: Využití propojující třídy Výuka" width="573" height="184" /></a><p class="wp-caption-text">Diagram 4: Využití propojující třídy Výuka</p></div>
<p>Na diagramu 5 jsou zobrazeny tabulky relační databáze, které jsou nyní propojené přes cicí klíče (foreign keys) tabulky <em>Výuka</em>.</p>
<div id="attachment_74" class="wp-caption aligncenter" style="width: 633px"><a href="http://kubanek.org/download/2009/02/d5_new.png" rel="lightbox[37]"><img class="size-full wp-image-74" title="Diagram 5: Pohled na konečné tabulky databáze" src="http://kubanek.org/download/2009/02/d5_new.png" alt="Diagram 5: Pohled na konečné tabulky databáze" width="623" height="385" /></a><p class="wp-caption-text">Diagram 5: Pohled na konečné tabulky databáze</p></div>
<p style="text-align: center;"><em>(pozn. děkuji maartymu za upozornění komentářem, že EA umí modelovat databáze&#8230;)</em></p>
<p style="text-align: justify;">Metoda <em>zjistiSeznamZaku()</em> nyní vybere z tabulky <em>Výuka</em> veškeré řádky, u kterých je idUcitele rovno id hledaného učitele. Metoda vytvoří pole objektů typu <em>Žák</em>, jejichž id se nachází v nalezených řádcích v tabulce <em>Výuka</em>. Toto pole nakonec vrátí. Již zmiňovaný skript nyní může pole projít a vypsat jméno a příjmení.</p>
<p style="text-align: justify;">Tak jsme si osvětlili, jak se manuálně vypořádat s asociací typu M:N. Nad relačními databázemi dnes ale existují ORM nástroje, které se s asociací typu M:N vypořádají automaticky a programátor ani nepocítí, že se v databázi nachází ještě nějaká propojovací tabulka. Takový ORM nástroj pro PHP je například <a href="http://doctrine-project.org/">Doctrine</a>, který je inspirován <a href="http://www.hibernate.org/">Hibernate</a> pro Javu.</p>
]]></content:encoded>
			<wfw:commentRss>http://kubanek.org/blog/asociace-typu-mn/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
