Tφmto Φlßnkem otevφrßme serißl, v n∞m₧ se postupn∞ nauΦφme programovat v prost°edφ Cocoa û v pln∞ objektovΘm v²vojovΘm systΘmu, kter² zahrnuje i podporu prßce s databßzemi nebo tvorbu WWW aplikacφ. Dnes Cocoa pat°φ firm∞ Apple, prost°edφ vÜak vzniklo v rßmci firmy NeXT a jejφho operaΦnφho systΘmu NeXTStep. Prßv∞ luxus a flexibilita tohoto v²vojovΘho prost°edφ byly patrn∞ rozhodujφcφm faktorem, kter² Apple p°ed t°emi roky p°im∞l za bezmßla p∙l miliardy dolar∙ firmu NeXT koupit.
Jestli₧e produkt Cocoa pat°φ Applu, je z°ejmΘ, ₧e jeho p°irozen²m ₧ivotnφm prost°edφm jsou poΦφtaΦe Macintosh. Ani ostatnφ platformy vÜak nep°ichßzejφ ·pln∞ zkrßtka: tΘm∞° kompletnφ Cocoa je souΦßstφ hostujφcφho systΘmu WebObjects for NT, kter² je na trhu ji₧ dßvno. Pro u₧ivatele Linuxu a ostatnφch prost°edφ je nad∞jφ projekt GNUStep, jeho₧ cφlem je uvolnit kompletnφ prost°edφ odpovφdajφcφ "kakau" v rßmci GNU licence. KoneΦn∞ stßle existuje nad∞je, ₧e firma Apple se rozhodne vyu₧φt bezproblΘmovou portabilitu prost°edφ a bude nabφzet sv∙j Mac OS X i pro jinΘ platformy û k≤d pro poΦφtaΦe Sun SPARC, Hewlett-Packard PA-RISC a IBM PC kompatibilnφ mß k dispozici, staΦilo by jej trochu oprßÜit...
Copak je to za novinky...
Je vhodnΘ si uv∞domit, ₧e aΦkoli technologicky je Cocoa patrn∞ nejmodern∞jÜφm z dnes u₧φvan²ch v²vojov²ch prost°edφ, novinkou v pravΘm smyslu slova nenφ: vzniklo toti₧ jako v²vojovΘ prost°edφ NeXTStepu p°ed patnßcti lety. To je jeho nesmφrnß v²hoda, proto₧e dφky tomu jsou ji₧ jeho d∞tskΘ chyby dßvno vychytßny. Navφc existuje po celΘm sv∞t∞ Üirokß zßkladna programßtor∙, kte°φ ji₧ s Cocoa û p°esn∞ °eΦeno s n∞Φφm velmi, velmi podobn²m û majφ rozsßhlΘ zkuÜenosti.
Tehdy ovÜem nikdo o kakau jeÜt∞ nemluvil: v²vojovΘ prost°edφ NeXTStepu se naz²valo OpenStep. Firma Apple jej nejprve z nep°φliÜ jasn²ch d∙vod∙ p°ejmenovala na "Yellow Box", a teprve pom∞rn∞ nedßvno mu p°id∞lila jmΘno Cocoa û je v tom vid∞t dalÜφ h°φΦka na tΘma Java, a navφc nßzev Cocoa hezky aliteruje se jmΘny alternativnφch prost°edφ, kterß Apple nabφzφ pro zachovßnφ kompatibility se star²mi verzemi Mac OS: Classic a Carbon.
Co nenajdete ve v²loze, hledejte uvnit°!
Ka₧dΘ v²vojovΘ prost°edφ se sklßdß v zßsad∞ z knihoven slu₧eb, je₧ mohou vyu₧φvat aplikace, kterΘ v n∞m vytvß°φme, a ze skupiny prost°edk∙, je₧ nßm v tom pomßhajφ: p°ekladaΦe programovacφch jazyk∙, editory zdrojov²ch text∙, debuggery, generßtory obrazovek a podobn∞. V tomto odstavci si zb∞₧n∞ ukß₧eme, jak na tom v tomto sm∞ru je Cocoa.
Kolik °eΦφ znßÜ...
Dnes je v∞tÜina v²vojov²ch prost°edφ postavena kolem n∞kterΘho konkrΘtnφho programovacφho jazyka. Ne tak ovÜem Cocoa û od samΘho zaΦßtku je toto prost°edφ navr₧eno pro mo₧nost prßce s vφcemΘn∞ libovoln²m jazykem a v souΦasnosti je jeho standardnφ souΦßstφ jazyk∙ p∞t:
- Objective C je zßkladnφm jazykem, ve kterΘm je cel² systΘm vytvo°en. Objective C je standardnφ jazyk C s dopln∞nou podporou objekt∙ na podobn²ch principech, na jak²ch je zalo₧en SmallTalk. Dφky tomu nabφzφ nesrovnateln∞ vyÜÜφ programßtorsk² luxus pro prßci s objekty ne₧ C++, nebo dokonce Java. S Objective C se v tomto serißlu seznßmφme blφ₧ a budeme jej pou₧φvat pro v∞tÜinu p°φklad∙.
- Alternativnφm jazykem je krom∞ Objective C takΘ Java. Pro prßci s objekty nenabφzφ tak pohodlnΘ slu₧by jako Objective C a vinou ΦßsteΦnΘ interpretace je takΘ pomalejÜφ. Na druhou stranu vÜak mß nezastupitelnou roli tam, kde po₧adujeme plnou p°enositelnost: v Jav∞ je mo₧nΘ psßt k≤d distribuovanΘ aplikace, kter² pob∞₧φ v rßmci WWW prohlφ₧eΦe klienta na libovolnΘ platform∞.
- Standardnφ jazyk C je v prost°edφ Cocoa takΘ pln∞ podporovßn. Jeho vyu₧itφ je zΦßsti omezeno tφm, ₧e C nepodporuje prßci s objekty, tak₧e z n∞j nejsou p°φmo p°φstupnΘ objektovΘ knihovny. Mßme-li vÜak hotov² k≤d v C, kter² chceme do prost°edφ Cocoa p°enΘst, nenφ v tom ₧ßdn² problΘm.
- Velmi podobn∞ jako C podporuje Cocoa takΘ jazyk C++. PlnΘ vyu₧itφ objektov²ch knihoven z C++ mo₧nΘ nenφ (v kontrastu k rozÜφ°enΘmu omylu je nutnΘ si uv∞domit, ₧e C++ nenφ plnohodnotn² objektov² jazyk). Mßme vÜak k dispozici jeho p°ekladaΦ a m∙₧eme jej vyu₧φt pro p°enos libovolnΘho k≤du, napsanΘho ji₧ d°φve v C++, do prost°edφ Cocoa.
- Poslednφm ze standardn∞ podporovan²ch jazyk∙ je WebScript, interpretovan² objektov² jazyk se syntaxφ odvozenou od Objective C nebo Javy û m∙₧eme si vybrat a podle pot°eby a nßlady pou₧φvat tu Φi onu variantu. Vyu₧itφ WebScriptu je omezeno na internetovΘ aplikace, pro n∞₧ je ostatn∞ takΘ urΦen tφm, ₧e je pln∞ interpretovan².
Za zmφnku stojφ samoz°ejmost, kterß v jin²ch prost°edφch zdaleka samoz°ejmß nenφ: v Cocoa m∙₧eme bez nejmenÜφch problΘm∙ v rßmci jedinΘ aplikace jazyky libovoln∞ mφchat û jedin²m omezenφm je, ₧e vφce r∙zn²ch jazyk∙ nesmφme pou₧φvat v jednom zdrojovΘm souboru...
Knihovny slu₧eb
Mezi rysy, je₧ dßvajφ prost°edφ Cocoa jeho v²jimeΦnΘ postavenφ, bezpochyby pat°φ i nesmφrn∞ luxusnφ knihovny slu₧eb. S t∞mi se v pr∙b∞hu naÜeho serißlu samoz°ejm∞ seznßmφme podrobn∞ji. Zde si prozatφm jen v rychlosti projdeme Φty°i zßkladnφ skupiny knihoven, kterΘ Cocoa nabφzφ û jejich p°ehled vidφme na obr. 1:
Zßkladem vÜeho je Foundation Kit. V n∞m jsou soust°ed∞ny zßkladnφ slu₧by pot°ebnΘ p°i tvorb∞ libovolnΘ aplikace, bez ohledu na konkrΘtnφ prost°edφ, ve kterΘm pob∞₧φ: kontejnerovΘ objekty, nesmφrn∞ luxusnφ prßce s textov²mi °et∞zci s plnou podporou UNICODE i °ady osmibitov²ch k≤dovßnφ, p°φstup k soubor∙m, komunikace mezi procesy a mnoho dalÜφch slu₧eb.
Enterprise Objects Framework, zkrßcen∞ EOF, dopl≥uje a rozÜi°uje slu₧by Foundation Kitu o p°φstup k databßzφm. EOF je navr₧en natolik flexibiln∞, ₧e databßze mohou b²t vlastn∞ libovolnΘ, vΦetn∞ prost²ch DBF nebo dokonce textov²ch soubor∙; nejΦast∞ji vÜak spolupracuje s v²konn²mi SQL servery.
P°ipravujeme-li aplikaci, je₧ bude pro interakci s u₧ivatelem vyu₧φvat standardnφ slu₧by operaΦnφho systΘmu (tj. myÜ, klßvesnici, obrazovkovß okna a podobn∞), sßhneme po knihovn∞ AppKit. V nφ jsou t°φdy reprezentujφcφ vÜechny standardnφ prvky u₧ivatelskΘho rozhranφ, od oken nebo menu a₧ po poslednφ tlaΦφtko. Navφc je zde kompletnφ podpora interakce s u₧ivatelem a pln∞ p°enositelnΘ grafickΘ slu₧by, nezßvislΘ na konkrΘtnφm Window Serveru.
Knihovna WebObjects naopak poslou₧φ v p°φpad∞, kdy by nßm slu₧by AppKitu byly mßlo platnΘ, proto₧e aplikace mß s u₧ivateli komunikovat prost°ednictvφm internetu. Mφsto klßvesnice a obrazovky se tak vlastn∞ stßvß u₧ivatelsk²m rozhranφm aplikace WWW browser, b∞₧φcφ na jakΘkoli platform∞. Podporuje-li takov² prohlφ₧eΦ Javu, m∙₧e takovß aplikace b∞₧et zΦßsti i u klienta. Jinak v²konn² k≤d b∞₧φ jen na serveru a s klientem komunikuje prost°ednictvφm protokolu HTTP.
Samoz°ejm∞ ₧e Cocoa obsahuje °adu dalÜφch knihoven. SouΦßstφ Mac OS X Serveru je nap°φklad knihovna AIAT obsahujφcφ slu₧by pro fulltextov² p°φstup k dat∙m, kit Interceptor pro p°φm² p°φstup na obrazovku nebo knihovnu Zip se slu₧bami pro komprimaci dat. Ty jsou vÜak relativn∞ podru₧nΘ û my se v tomto serißlu soust°edφme na zßkladnφ slu₧by Φty° v²Üe popsan²ch knihoven.
Za zmφnku stojφ jeÜt∞ to, jak jsou knihovny v prost°edφ Cocoa reprezentovßny: na rozdφl od v∞tÜiny ostatnφch systΘm∙ zde nejde o "n∞jakou DLLku", ale o propracovan² mechanismus naz²van² framework. SouΦßstφ frameworku jsou krom∞ vlastnφch knihoven takΘ podp∙rnΘ soubory, hlaviΦkovΘ soubory pro p°ekladaΦ, dokumentace a podobn∞. Tak je vÜechno na jednom mφst∞ a nem∙₧e dojφt ke zmatk∙m. Frameworky navφc vyu₧φvajφ propracovan² systΘm verzφ a v p°φpad∞ zßsadnφch zm∞n je mo₧nΘ v jedinΘm frameworku ulo₧it i starÜφ verze knihoven, aby starÜφ aplikace nadßle bez problΘm∙ pracovaly.
Aplikace a pomocnΘ prost°edky
SamotnΘ skv∞lΘ knihovny a p°ekladaΦe nestaΦφ û je t°eba mφt k dispozici p°inejmenÜφm dobr² editor zdrojovΘho k≤du a debugger. Nadto prßv∞ Cocoa ukazuje, jak obrovsk²m usnadn∞nφm prßce m∙₧e b²t vizußlnφ programovßnφ, kdy₧ se ud∞lß po°ßdn∞ û v dlouhodobΘm pr∙m∞ru trvß tvorba stejnΘ aplikace v prost°edφ Cocoa zhruba desetinu Φasu oproti jin²m prost°edφm!
O integraci celΘho v²vojovΘho °et∞zu se starß aplikace ProjectBuilder û sama obsahuje editor zdrojovΘho k≤du a umφ spolupracovat s debuggerem, a podle pot°eby sama spouÜtφ ostatnφ aplikace. Okno ProjectBuilderu se dv∞ma zdrojov²mi soubory v Jav∞ a v Objective C vidφte na obr.2.
Pracujeme-li s databßzemi, pot°ebuje EOF znßt podrobnou strukturu dat a jejich vzßjemn²ch relacφ. K tomu slou₧φ EOModeler, kter² je vid∞t na obr. 3. Strukturu dat v n∞m specifikujeme pomocφ E-R model∙. EOF pak ji₧ sßm na zßklad∞ modelu vytvß°φ a udr₧uje objekty reprezentujφcφ data v databßzi a jejich vzßjemnΘ vazby.
SkuteΦnou magii, umo₧n∞nou plnohodnotn²m objektov²m systΘmem, nabφzφ InterfaceBuilder û aplikace pro interaktivnφ tvorbu a ·dr₧bu objektov²ch sφtφ. Jak jmΘno naznaΦuje, nejΦast∞ji se takovΘ sφt∞ sklßdajφ z objekt∙ u₧ivatelskΘho rozhranφ. To ilustruje takΘ p°φklad na obrßzku 4a û nata₧enφm ΦernΘ Φßry mezi posuvnφkem a textov²m polem jsme prßv∞ "naprogramovali", ₧e hodnota zobrazenß v poli bude v₧dy odpovφdat pozici posuvnφku. InterfaceBuilder vÜak nenφ v ₧ßdnΘm p°φpad∞ omezen jen na prßci s grafick²mi objekty: na obr. 4b vidφme jinΘ propojenφ, jφm₧ jsme urΦili, ₧e databßzov² objekt Studio bude reprezentovat polo₧ku studia odpovφdajφcφ zvolenΘmu filmu v databßzovΘm objektu Movie.
Podobnß kouzla pro internetovΘ aplikace dokß₧e WebObjectsBuilder. Obr. 6 ukazuje, jak jsme navßzali tlaΦφtko ve vytvß°enΘ WWW strßnce na metodu performTest. Vedle je navφc vid∞t ji₧ d°φve vytvo°enß vazba mezi prom∞nnou userName a textov²m polem. Jakmile pak n∞kdo otev°e URL takovΘto aplikace ve svΘm WWW prohlφ₧eΦi, zobrazφ se strßnka vypadajφcφ n∞jak jako obr. 6 û na mφst∞ "OCSoftware" samoz°ejm∞ bude libovoln² text, kter² byl zrovna ulo₧en v prom∞nnΘ userName. Jestli₧e pak u₧ivatel prohlφ₧eΦe klepne na tlaΦφtko, spustφ se v aplikaci metoda performTest...
OvÜem₧e i podp∙rn²ch prost°edk∙ je v systΘmu Cocoa mnohem vφc. Mßme zde k dispozici nap°φklad luxusnφ profiler pro vyhledßvßnφ "bottleneck∙" v pomal²ch aplikacφch nebo t°eba aplikace pro vyhledßvßnφ a odstra≥ovßnφ alokovanΘ nevyu₧itΘ pam∞ti. Podobn∞ jako u knihoven, v naÜem serißlu se soust°edφme jen na ty zßkladnφ.