pátek 22. srpna 2003

DHTML precizně

DHTML se může, a po hříchu stává v rukou nezkušeného vývojáře noční můrou pro všechny jenž s ním přijdou do styku. Nejedná se pouze o návštěvníky stránek, kde je výsledek nejviditelnější, ale i další činnosti s tím spojené jako je údržba nebo vývoj.

Aaron Boodman v článku Well-Behaved DHTML: A Case Study ukazuje na příkladovém DHTML skriptu, zásadní problémy, které se s jeho implementací mohou vyskytnout a zároveň formuluje 5 základních kroků pro vývoj DHTML skriptů.

  • Určete logickou strukturu provedení
  • Vytvořte plně funkční příklad provedení
  • Určete požadavky všech přístupových zařízení(dále UA)
  • Napište kód převádějící logické požadavky na požadavky UA
  • Otestujte každou cílovou platformu

úterý 19. srpna 2003

Konec interní podpory MySQL v PHP

PHP od verze 5.0 opouští interní podporu populárního databázového systému MySQL, jehož přímá podpora byla integrována do samotného jádra systému. Tento krok, ke kterému byli přinuceni vývojáři, byl způsoben změnou licence na GPL, pod kterou je MySQL šířena. Více informací a možnosti alternativního řešení přináší server interval.cz v článku MySQL a PHP5

pondělí 18. srpna 2003

Snazší práce s objekty v JavaScriptu

JavaScript je objektově orientovaný programovací jazyk. Pro vyjádření vztahu předek-potomek se využíva takzvaná prototypová dědičnost. Každý objekt je vytvořen podle určitého kopyta(šablony), který se nazývá prototyp. Všechny metody a vlastnosti získá instance daného objektu právě z onoho kopyta, právě z tohoto důvodu se jedná o prototypovou dědičnost, objekty dědí od jejich prototypu.

Přiřazení vlastnosti(property) nebo metody provádíme přes vlastnost prototype daného objektu. Pokud bychom chtěli objektu String přiřadit metodu, která by například vracela pravdivostní hodnotu true|false podle toho jestli řetězec začíná daným prefixem, zapsaly bychom to pomocí prototypové dědičnosti takto.

 
   String.prototype.startsWith = startsWith;

   function startsWith(prefix){    
     len = prefix.length;
     foo = this.substring(0,len);  
     return (foo == prefix);  
   }
 

Při použití by pak volání alert("dagblog".startsWith("xx")); vracelo false a alert("dagblog".startsWith("dag")); true. Jinak řečeno, všechny řetězce by měly metodu startsWith, kterou by dědily od jejich prototypu.

V případě, že bychom chtěli vyjádřit dědičnost mezi dvěma objekty, například objekt Auto a objekt Škoda, museli bychom pomocí vlastnosti prototype přiřadit objektu Škoda všechny vlastnosti objektu Auto, které chceme zdědit.

Tolik moje krátká vsuvka do objektové implementace JavaScriptu. Nicholas C. Zakas v článku Rethinking JavaScript Objects ukazuje mnohem pohodlnější způsob dědění ve vztahu předek-potomek a to přímo na úrovní prapředka všech objektů tj. na objektu Object. Zároveň ukazuje způsob zapouzdření(zakrytí) proměnných objektu.

Dědičnost vs. implementace

Allen Holub v článku Why extends is evil rozebírá problematiku dědičnosti(extends) oproti implementaci(implements). Mimo jiné tvrdí, že více jak 80 procent kódu může být přepsáno(provázáno) pomocí interfacu oproti použití konkrétního předka. Mezi hlavní nevýhody dědění tj. použití předka, patří zbytečná provázanost mezi objekty ztráta flexibility.