CPFMACOSX: Cocoa: Co je to?

Něco málo historie

Příběh Cocoa začíná okouzlujícím kouskem historie. Jednou, dva týpci se jménem Steve rozběhli ve své garáži společnost, která se jmenovala Apple Computers.

Společnost rychle rostla, a tak najmuli zkušeného ředitele jménem John Sculley aby jim dělal CEO. Po několika neshodách John Sculley odsunul Steva Jobse na pozici kde neměl vůbec žádnou kontrolu nad společností. Steve Jobs odešel aby založil jinou polečnost, nazvanou NeXT Computer.

NeXT najali malý tým vynikajících inženýrů. Tento malý tým vyvinul počítač, operační systém, tiskárnu, továrnu a sadu vývojářských nástrojů. Každý kousek byl roky napřed před konkurenčními technologiemi, a lidé byli ohromeni a udiveni. Naneštěstí tito ohromení lidé nekoupili ani počítač ani tiskárnu. V roce 1993 byla továrna zavřena a NeXT Computer, Inc., se stal NeXT Software, Inc.

Operační systém a vývojářské nástroje se nadále prodávaly pod jménem NeXTSTEP. I když průměrný uživatel počítače nikdy neslyšel o NeXTSTEPu, byl velmi populární mezi vědci, investičními bankami a intelligence agencies. Toto byli lidé kteří vyvíjeli každý týden nové aplikace, a objevili že NeXTSTEP jim umožnil uskutečnit jejich nápady rychleji než jakákoli jiná technologie.

Co to bylo za operační systém? NeXT se rozhodl použít Unix jako jádro NeXTSTEPu, spoléhajíc na zdrojový kód pro BSD Unix z University of California v Berkeley. Proč Unix? Unix padal mnohem méně než Microsoft Windows nebo Mac OS a měl silné, spolehlivé síťové nástroje.

Apple uvolnil zdrojový kód k Unixové části Mac OS X pod jménem Darwin. Vývojářská komunita pokračuje ve vylepšování Darwinu. Více informací o Darwinu najdete na http://macosforge.org.

NeXT poté napsali pro operační systém window server. Window server přebírá události od uživatele a předává je aplikacím. Aplikace pak posílá příkazy pro vykreslování zpět window serveru aby aktualizoval to co uživatel vidí. Jednou z pěkných věcí na NeXT window serveru je, že příkazy pro vykreslování které přijímá jsou ty samé které mohou být zaslány tiskárně. Takže programátor musí napsat příkazy pro vykreslování pouze jednou, a pak je může použít buď pro kreslení na obrazovku nebo pro tisk na tiskárně. V dobách NeXTSTEPu psali programátoři kód který generoval PostScript. V prostředí Mac OS X píší programátoři kód který využívá framework CoreGraphics (také známý jako Quartz). Quartz umí vytvořit grafiku pro obrazovku, tiskárnu nebo vygenerovat PDF data. Portable Document Format je otevřeným standartem vytvořeným Adobe Corporation pro vektorovou grafiku.

Pokud jste někdy předtím používali Unixové stroje, jste provděpodobně obeznámeni s X window serverem. Mac OS X window server je kompletně odlišný, ale plní stejnou funkci jako X window server: získává události od uživatele, předává je aplikacím a zobrazuje data aplikací na obrazovku. Momentálně má X protokol slabou podporu vyhlazených fontů a průhlednosti. To je jeden z důvodů proč Mac OS X window server vypadá mnohem lépe než X window server.

NeXTSTEP přišel se sadou knihoven a nástrojů které umožnily programátorům elegantně pracovat s window manažerem. Knihovny byly nazvány frameworky. V roce 1993 byly frameworky a nástroje zrevidovány a přejmenovány na OpenStep, který byl později přejmenován na Cocoa.

Jak můžete vidět na obrázku 1.1, window server a vaše aplikace jsou Unixovými procesy. Cocoa umožňuje vaší aplikaci přijímat události z window serveru a vykreslit je na obrazovku.



S frameworky pracujete v jazyce nazvaném Objective-C. Stejně jako C++ je Objective-C rozšířením programovacího jazyka C a dělá z něj objektově orientovaný jazyk. Avšak narozdíl od C++, Objective-C je slabě typovaný jazyk který je extrémně výkonný. S výkonností je potřeba více zodpovědnosti: Objective-C dovoluje programátorům dělat hloupé chyby. Objective-C je velmi jednoduchou nadstavbou C a sami poznáte že je velmi lehké se jej naučit.

Programátoři milovali OpenStep. Umožnil jim jednodušeji experimentovat s jejich nápady. Popravdě, Tim Berners-Lee vyvinul první webový prohlížeč a první webserver na NeXTSTEPu. Bezpečnostní analytici mohli kódovat a testovat nové finanční modely mnohem rychleji. Fakulty mohly vyvíjet aplikace které jim umožňovaly pokračovat ve výzkumu. Nevím na co jej používala intelligence community, ale intelligence agencies koupily tisíce kopií OpenStepu. Protože byly vývojářské nástroje OpenStepu tak užitečné, byly portovány pro Solaris, a Windows NT a samotný operační systém NeXTSTEP byl portován pro nejpopulárnější CPU: Intel, Motorola, PA-RISC od Hewlett-Packard a SPARC. (zvláštní je že OpenStep neběžel na Macu do první verze Mac OS X serveru, známého jako Rhapsody, který byl vydán v roce 1999).

Apple Computer pracovali po mnoho let na vývoji operačního systému který měl mnoho vlastností NeXTSTEPu. Tento usilovný vývoj byl známý jako Copland. Projekt Copland se vymknul kontrole a Apple se konečně rozhodnuli vytrhnout trn z paty a koupit další verzi Mac OS od jiné společnosti. Po průzkumu existujících operačních systémů Apple vybral NeXTSTEP. Protože NeXT byla malá společnost, koupil ji Apple v roce 1996 jednoduše celou.

Kam zapadám já v této historii? Psal jsem kód pro počítače NeXT na Wall Street dokud mě NeXT nenajali abych učil programování v OpenStepu ostatní vývojáře. Byl jsem zaměstnancem NeXTu když se spojil s Apple a učil jsem mnoho inženýrů v Apple jak psát aplikace pro Mac OS X. Teď když už nepracuji pro Apple, učím programování v Cocoa na Big Nerd Ranch, Inc.

NeXTSTEP se stal Mac OS X. Uvnitř je to pořád Unix, a můžete v Mac OS X spustit všechny standartní Unixové programy jako Apache Web Server, navíc je stabilnější než Windows nebo Mac OS 9. Uživatelské rozhraní je překrásné. Vy, jako vývojář, budete milovat Mac OS X protože vám Cocoa umožní psát plnohodnotné aplikace extrémně efektivně a elegantněji.

Nástroje

Budete milovat Cocoa, ale pravděpodobně ne hned. Prvně se musíte naučit základy. Začněme nástroji které budete používat.

Všechny nástroje pro vývoj v Cocoa jsou součástí Mac OS X Developer Tools a dostanete je zdarma spolu s Mac OS X. I když díky těmto vývojářským nástrojům přibude ve vašem systému dalších tucet aplikací, budete primárně používat jen dvě z nich: Xcide a Interface Builder. O překlad vašeho kódu se na pozadí postará překladač GNU C (gcc) a s chybami vám pomůže GNU debugger (gdb).

Xcode sleduje všechny prostředky které vaše aplikace používá: kód, obrázky, zvuky atd.. Kód budete upravovat v Xcode a Xcode váš kód přeloží a spustí vaši aplikaci. Můžete Xcode použít také ke spuštění a ovládání debuggeru.

Interface Builder je nástroj pro tvorbu GUI. Umožňuje vám rozvrhnout okna aplikace a přidat do nich widgety. Avšak umí i mnohem více. Interface Builder vám umožňuje vývojáři vytvořit objekty a nastavit jejich atributy. Většina těchto objektů jsou prvky UI, jako třeba tlačítka nebo textová pole, ale některé budou instance tříd které sami vytvoříte.

Jazyk

Všechny příklady v této knize jsou napsány v Objective-C. Objective-C je jednoduchou nadstavbou jazyka C a ovládnutí tohoto jazyka vám zabere něco kolem dvou hodin pokud znáte C a nějaký objektově orientovaný jazyk jako je Java nebo C++.

Cocoa aplikace je možné vyvíjet i pomocí Ruby nebo Pythonu. Tato kniha se však tímto tématem nezabývá, ale lze najít spoustu informací na webu. Abyste však těmto informacím porozuměli, budete potřebovat pracovní znalost jazyka Objective-C.

Objective-C se nedávno dočkal velké revize. Všechen kód v této knize je napsán v Objective-C 2.0. Apple přidal do Objective-C 2.0 garbage collector, který je volitelný (opt-in); to znamená že si můžete vybrat zda jej použijete či ne. Kód v této knize je obojetný (dual mode); to znamená, že bude fungovat at už garbage collector použijete nebo ne.

O překlad Objective-C kódu se postará gcc, GNU C překladač. Tento překladač vám dovolí volně mísit kód napsaný v C, C++ a Objective-C v jednom souboru.

GNU debugger, gdb, budete používat k nastavení zarážek a prohlížení proměnných za běhu programu. Objective-C vás nechá udělat spoustu hloupostí; určitě proto oceníte decentní debugger.

Objekty, třídy, metody a zprávy

Všechno programování v Cocoa se děje pomocí objektově orientovaného návrhu. Tato část jen stručně shrnuje termíny používané v objektově orientovaném programování. Pokud jste nikdy předtím tuto techniku nepoužívali, pak vám doporučuji přečíst si The Objective-C Language. Tuto knihu v PDF formátu najdete na webu Apple (http://developer.apple.com/documentation/cocoa/conceptual/objectivec/ObjC.pdf).

Co je to objekt? Objekt je jako struktura v C: zabírá místo v paměti a obsahuje proměnné. Proměnné v objektu se nazývají proměnné instance. Takže když pracujeme s objekty, první otázka obvykle je: jak si vyhradíme místo na objekt? Jaké proměnné instance má objekt? Jak zrušíme objekt když s ním dále nepotřebujeme pracovat?

Některé proměnné instance objektu mohou být ukazatele na jiné objekty. Tyto ukazatele umožňují jednomu objektu aby věděl o těch ostatních.

Třídy jsou struktury které mohou vytvářet objekty. Třídy specifikují proměnné které má objekt mít a jsou zodpovědné za vyhrazení paměti pro objekt. Říkáme že objekt je instance třídy která jej vytvořila (obrázek 1.2).



Objekt předčí strukturu, protože může mít na sebe navázané funkce. Funkcím říkáme metody. Metodu zavoláme tak, že pošleme objektu zprávu (obrázek 1.3).


.framework. Základní frameworky můžete najít v /System/Library/Frameworks.

Cocoa se skládá ze tří frameworků:

  1. Foundation: Každý objektově orientovaný jazyk potřebuje standardní hodnotové a pomocné třídy včetně kolekcí. Foundation framework obsahuje řetězce, datumy, seznamy, vlákna a časovače.
  2. AppKit: Všechny věci pro uživatelské rozhraní lze najít ve frameworku AppKit. Najdete zde okna, tlačítka, textová pole, události a třídy pro vykreslování. Tomuto framworku se také říká ApplicationKit
  3. Core Data: Tento framework usnadňuje ukládání vašich objektů do souboru a jejich zpětné načtení do paměti. Tomuto frameworku říkáme perzistentní.

MNožství dalších frameworků zajišťuje věci jako je enkrypce, QuickTime a vypalování CD, ale tato kniha se soustředí na Foundation, AppKit a Core Data, protože se používají nejčastěji. Jakmile jednou tyto frameworky ovládnete, bude pro vás snadnější porozumět i těm ostatním.

Lze také vytvářet vlastní frameworky ze tříd které si sami napíšete. Obvykle tuto potřebu ucítíte když začnete opakovaně používat sadu tříd ve více aplikacích.

Jak používat tuto knihu

Když jsem začal psát tuto knihu, představoval jsem si že provázím přítele aktivitami které mu pomohou porozumět programování v Cocoa. Tato kniha slouží jako průvodce těmito aktivitami. Často po vás budu chtít abyste něco napřed udělali a detaily či teorii vám vysvětlím zpětně. Pokud se budete cítit zmateně, čtěte dále, na odpověď narazíte obvykle o odstavec nebo dva dál.

Pokud s pořád budete cítit ztraceni, můžete najít pomoc na webu téhle knihy: http://www.bignerdranch.com/products/. Stejně tak tam najdete chyby z knihy, tipy a příklady. Najdete tam i řešení k příkladům které si můžete stáhnout. Každá kapitola vás provede procesem přidávání nových vlastností do aplikace. Kniha ale neslouží jako kuchařka. Předkládá vám myšlenky a příklady pak tyto myšlenky demonstrují v akci. Nebojte se experimentovat.

Cocoa frameworky obsahují něco kolem 300 tříd. Všechny třídy mají dokumentaci dostupnou online (k té se dostanete přes menu Help v Xcode). Cocoa programátoři stráví spoustu času čtením těchto stránek. Ovšem pokud neporozumíte tomu jak Cocoa funguje, může být těžké najít to pravé místo kde začít. Pokaždé když narazíte v této knize na novou třídu, najděte si ji v dokumentaci. Možná neporozumíte všemu co tam najdete, ale určitě oceníte bohatství těchto frameworků. Poté co dočtete tuto knihu, stane se dokumentace vaším průvodcem.

Cocoa většinou plní svůj slib: běžné věci jsou jednoduché a ne tak běžné věci jsou možné. Pokud budete muset napsat větší množství kódu k dosažení poměrně jednoduché věci, pak se zřejmě ubíráte špatným směrem.

Typografické konvence

Aby tato kniha byla přehlednější, použil jsem několik typografických konvencí.

Jména tříd začínají v Objective-C vždy velkými písmeny a v této knize je také píšu tučným písmem s pevnou šířkou. Jména metod začínají v Objective-C malými písmeny a jsou také uvedeny tučným písmem s pevnou šířkou. Například "Třída NSObject má metodu dealloc".

Ostatní literály (včetně jmen proměnných instance) na které narazíte jsou uvedeny písmem s pevnou šířkou. Stejně tak jména souborů. Například "Přiřaďte hodnotu nil proměnné favoriteColor v souboru MyClass.m".

Pozn. překladatele: Moje konvence jsou stejné, až na to že nepoužívám tučné písmo.

Běžné chyby

Protože jsem viděl už opravdu hodně, hodně lidí jak pracuje s touto knihou, měl jsem možnost pozorovat chyby které se opakovaly pořád dokola. Zde jsou dvě chyby které se vyskytují nejčastěji: chyby v názvech a velikosti písmen a zapomenuté spojení.

Chyby s velikostí písma jsou problém, protože C a Objective-C jsou citlivé na velikost písma - překladač nezachází s Foo a foo jako se stejnou proměnnou. Pokud máte problém něco přeložit, zkontrolujte si že jste napsali všechna jména správně.

Když vytváříte aplikaci, používáte Interface Builder k propojení objektů. Zapomenutá spojení obvykle nezabrání v tom aby se aplikace přeložila a spustila, ale vyústí v nestandardní chování. Pokud se tedy vaše aplikace nechová správně, zkontrolujte propojení v Interface Builderu.

Je snadné při prvním překladu přehlédnout některé varovné zprávy. Protože Xcode používá inkrementální překlad, nemusíte vidět ty stejné varovné zprávy při dalším překladu, dokud nevyčístíte a znovu nesestavíte projekt. Pokud si tedy nevíte rady, zkuste projekt vyčistit a sestavit znovu.

Jak se učit

Na moje lekce chodí nejrůznější skupiny lidí: bystří a méně bystří, motivovaní i líní, zkušení i nováčci. Ti kdo si z lekcí odnesou nejvíce sdílí nevyhnutelně jednu vlastnost: neztrácí pozornost při vysvětlování dané tematiky.

Prvním trikem jak udržet pozornost je dostatek spánku. Doporučuji vám spát deset hodin denně při studiu nových věcí. Předtím než toto doporučení zamítnete, zkuste to. Probudíte se svěží a připravení se učit. Kofein neslouží jako náhrada za spánek.

Druhý trik je přestat přemýšet o sobě. Mnoho studentů si myslí "Sakra, tohle je na mě moc těžké. To jsem asi hloupej" když se učí něco nového. Protože hloupost je v naší kultuře tak nevyslovitelně strašná věc, straví studenti obvykle několik hodin vymýšlením argumentů proč nejsou hloupí a přesto mají problémy pochopit danou věc. Ve chvíli kdy se tímhle začnete zaobírat, ztratili jste svoji vůli se soustředit.

Míval jsem šéfa jménem Rock. Rock vystudoval astrofyziku na Cal Tech ale nikdy nedostal práci v níž by využil znalosti nebes. Jednou jsem se ho zeptal jestli nelituje svého vzdělání. Řekl "Vlastně mít vzdělání v astrofyzice se mi prokázalo velmi užitečným". "Některé věci ve světě kolem nás jsou prostě obtížné. Když s něčím zápasím, tak si občas pomyslím 'Sakra, tohle je těžký'. Tak jsem hloupej?', ale pak si vzpomenu že mám titul z astrofyziky na Cal Tech; Nemůžu být hloupej".

Předtím než se pustíte dál, ujistěte sami sebe že nejste hloupí a že některé věci jsou zkrátka těžké. Vyzbrojeni tímto bláznivým ujištěním a odpočinutou myslí jste připravení ovládnout Cocoa.

Cocoa Programming for Mac OS X, Obsah | Dr3dweRkZ | Cocoa Programming for Mac OS X, Začínáme