Fyzika nejsou jen vzorečky

To jediné, co mě ve škole drží při smyslech je ta špetka zábavy, kterou zažiji hlavně o přestávkách, ale především o hodinách fyziky. Jelikož mám lajstung, tak si užiji srandy kopec. Ano, je to můj nejoblíbenější učitel, pan Ebert, který svými parádními hláškami oživuje monotónní průběh školního dne. Rozhodl jsem se s vámi o ty nejlepší zaznamenané kousky z posledních hodin podělit a tak jsem se porozhlédl po okrajích heftru z fyziky.

  • Tobiasovi při vysvětlování, že v testu může používat jakékoli proměnné, pokud je definuje: In dem Test kannst du alles verwenden, wenn du das definierst. Du kannst auch… …McDonald schreiben, wenn du das definierst…
  • Při počítání zapeklitého příkladu vyšel Bobovi na jeho vědecké kalkulačce jiný výsledek než panu Ebertovi, unaven složitými výpočty prohlásil: Ehm, das ist sau komisch!
  • Po přestěhování do nové školní budovy si vychvaloval naši novou fyzikální třídu a s upřímnou radostí povídal: In diesem Zimmer hört ihr meine Kaffeemaschine nicht.
  • Při dotazu typu ano/ne, potom co byl někdo vyvolán: Die anderen schütteln den Kopf wie beim Rock-Konzert.
  • Tobias měl v rámci výpočtu příkladu u tabule vysvětlit fiktivní méně inteligentní postavě, Andreasovi Schmiedovi, jakto že může krátit coulomb s ampérsekundami. Nevzpomněl si, že coulomb odpovídá ampérsekundě, a byl trochu zmatený. Poté, co mu pan Ebert otázku sám zodpověděl, prohlásil: …und schon ist Andreas Schmied zufrieden und geht wieder sein Haus putzen.

Hodiny fyziky jsou prostě to nejlepší, co se do mého nabitého a z větší části nudného rozvrhu dostalo a opravdu ani v nejmenším nelituji toho, že jsem si nevzal lajstung angličtiny a dnešní test za 13 je jen dalším důkazem.

štítky: , ,

Pravé objektově orientované programování v PHP

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 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ů.

A: Strukturální přístup

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 include. 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.

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.

B: Objektově strukturální přístup

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 Zend Framework, CakePHP nebo český Nette Framework. PHP frameworky jsou nejčastěji psané v objektovém kódu a založené na MVC architektuře.

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.

C: Pravý objektový přístup

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ří model 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.

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.

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.

Asociace typu M:N

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 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á.

Diagram 1: Asociace typu M:N ve fázi analýzy

Diagram 1: Asociace typu M:N ve fázi analýzy

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 zjistiSeznamZaku() vrací asociativní pole všech objektů typu Žák, které daný objekt typu Učitel vyučuje. Na opačné straně vrací operace zjistiSeznamUcitelu() asociativní pole všech objektů typu Učitel, které vyučují daný objekt typu Žák. 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.

Diagram 2: Asociace typu M:N s atributy a operacemi tříd

Diagram 2: Asociace typu M:N s atributy a operacemi tříd

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ů Učitel a Žák 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. Příklad tabulek je v MySQL.

Diagram 3: Pohled na zamýšlené databázové tabulky

Diagram 3: Pohled na zamýšlené databázové tabulky

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 Výuka nebo jednoduše spojením názvů obou spojovaných tříd, tzn. UčitelŽák. 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 Učitel a právě na jeden objekt typu Žák. Jako celek jsem určil třídu Učitel z toho důvodu, že budeme vypisovat žáky, které učitel vyučuje. Objekty typu Učitel jsou tedy odpovědné za životní cyklusy objektů typu Výuka. Stejně tak bychom mohli třídu Výuka přiřadit třídě Žák. Výsledek je zobrazen na diagramu 4.

Diagram 4: Využití propojující třídy Výuka

Diagram 4: Využití propojující třídy Výuka

Na diagramu 5 jsou zobrazeny tabulky relační databáze, které jsou nyní propojené přes cicí klíče (foreign keys) tabulky Výuka.

Diagram 5: Pohled na konečné tabulky databáze

Diagram 5: Pohled na konečné tabulky databáze

(pozn. děkuji maartymu za upozornění komentářem, že EA umí modelovat databáze…)

Metoda zjistiSeznamZaku() nyní vybere z tabulky Výuka veškeré řádky, u kterých je idUcitele rovno id hledaného učitele. Metoda vytvoří pole objektů typu Žák, jejichž id se nachází v nalezených řádcích v tabulce Výuka. Toto pole nakonec vrátí. Již zmiňovaný skript nyní může pole projít a vypsat jméno a příjmení.

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 Doctrine, který je inspirován Hibernate pro Javu.

štítky: , ,

Za čerstvým vzduchem

Tak jsem právě dorazil z ozdravného pobytu na horské chatě. Se Šimonem, Durym a strejdou Martinem jsme zase jednou vyrazili za zimními radovánkami do Krušných hor. Zabydleli jsme se zase na Martinově chatce v Okounově. Tentokrát ale chatu obklopovalo dobrých 30cm sněhu.

Strejda Martin utíká před frézou

Strejda Martin utíká před frézou

Hned druhý den jsme museli vstávat extrémně brzo, protože strejda Martin udělal pravděpodobně chybu v plánování. Na cestě z Mýtinky na Horní Halži nás postihla sněhová kalamita. Strejda Martin přeřadil na všechny čtyři a tak jsme za křečovitého držení všech madel projeli několik serpentýn. Ale před silnicí zasypanou 1,5 metru vysokou vrstvou sněhu jsme museli zastavit. Začali jsme odhazovat sníh stylovou skládací umělohmotnou lopatkou. Ještě, že nám jela naproti sněžná fréza. Ten den se na Klínovci lyžovalo celkem dobře, ale chlapci neměli upravené sjezdovky. Domácí sauna byla při večerních hodinách v provozu a venku čekala pro skok připravená vrstva sněhu. Přál bych vám zažít ten pocit. Nejlepší fór byly ale Šimonovy nově nalezené pantofle – obě pravé.

Pátek 13. jsme kupodivu přežili také. Program byl celkem podobný předchozímu dni. Po příjezdu ze sjezdovky jsem se strejdou čerpal jímku. Až tohle budu vyprávět dětem, ty se budou divit. Ještě musím zmínit Duryho kuchařské umění. Ten chlapec nejprve udělal čínu a pak se nás zeptal, jestli si dáme jídlo. Jenže to jsme pak ještě museli čekat půl hodiny, než mu došlo, že musí ještě uvařit rýži.

Po sobotním intenzivním lyžování na Alšovce jsme jeli do kláštereckých lázní na masáž a do bazénu. Dury byl oblečen ve vietnamských striptérských plavkách stylu „nevadí, tady učíhnu“, Šimon si při hledání kouzelného čudlíku opařil prsty a po nás se strejdou šlapala masérka při thajské masáži. Po vyhodnocení nejpoužívanějších slov pobytu, kterými byly „ty vole“ a „barvička“, jsme zalehli polomrtví k televizi a postupně usínali. Když potom hledal strejda Martin v lednici Krajanku, byla už dávno u Šimona v žaludku, to byl srandy kopec. Tak pánové, za rok znova!

štítky: ,

Letem světem kulometem

Chtěl bych vás všechny přivítat na mém novém blogu, jehož vznik je zachycen ukrutně otravnou historií. Plánoval jsem blog uplácat ze stavebních kamenů Zend Frameworku, kterým se v současné době zabývám. Což o to, chyběla mi pouhá administrace. Z časových důvodů jsem nakonec přenechal žezlo profesionálům a napasoval to na WordPress, který už administrací disponoval. Není tak špatný, jak se mi o něm v rámci bujných nocí zdálo, ale strukturální funkce jako the_title(), wp_list_archives() a have_posts() mi v budoucnu opravdu chybět nebudou.

Co že to od blogu očekávám? No, budu informovat společnost o dění v mém okolí, o volejbalových událostech, o informačních technologiích a pokusím se osvětlit, jak psát “správně” objektové aplikace v PHP. To vše budou doprovázet decibely z rádia Fun1 a za okny pěkné slunečné dny. Nevyžadujte ode mě obrovskou aktivitu, nemám čas se pomalu ani najíst a žiju ve stresu a to hlavně kvůli škole, kvůli které ztrácím spousty času na to, čemu bych se chtěl doopravdy věnovat.

Minulý týden jsem dostal vysvědčení, se kterým jsem jakž takž spokojen. Nepropadnul jsem. Pokud bych ještě třikrát zopakoval průměr známek 10, tak už se ani teoreticky nemusím dostavit k maturitním zkouškám a maturitu udělám. A pak už na mě s největší pravděpodobností čeká vysněné studium informatiky na TU v Drážďanech. Mimo školy pracuji ještě na projektu, který spočívá ve vývoji webové hry založené na serverové technologii (konkrétně PHP). Tento projekt je považován jako Besondere Lernleistung a na dokončení mám ještě necelý rok.

Nějak takto bych si představoval stručný úvod do mé blogovací činnosti, přeji mnoho krásných chvil strávených nad čtením řádků nabytých velmi kvalitním obsahem. A pamatujte:

„Dobrá nálada nevyřeší všechny vaše problémy, ale nasere tolik lidí, že stojí za to si ji udržet.“
(z filmu Kameňák 2)

štítky: