Kakao

Cocoa (z  angličtiny  -  " kakao ") je objektově orientované API pro operační systém macOS od společnosti Apple . Je to jedno z pěti hlavních API dostupných v Mac OS X – Cocoa, Carbon , Toolbox (pro spouštění starších aplikací Mac OS 9 ), POSIX a Java . Jazyky jako Perl , Python a Ruby nejsou považovány za hlavní jazyky, protože v nich zatím není napsáno mnoho seriózních aplikací pro Mac OS X.

Aplikace , které používají Cocoa, jsou obvykle vyvíjeny pomocí vývojového prostředí Xcode společnosti Apple (dříve nazývané Project Builder ) a Interface Builder pomocí programovacích jazyků : C , Objective-C a Swift . Prostředí Cocoa je však dostupné i při vývoji v jiných jazycích, jako je Ruby , Python a Perl pomocí knihoven odkazů ( MacRuby , PyObjC a CamelBones ). Programy Objective-C Cocoa je také možné psát v běžném textovém editoru a ručně je kompilovat pomocí makescriptů GCC nebo GNUstep .

Z pohledu koncového uživatele jsou aplikace Cocoa aplikace napsané pomocí programovacího prostředí Cocoa. Takové aplikace mají obvykle charakteristický vzhled a dojem, protože toto prostředí výrazně usnadňuje podporu pokynů pro lidské rozhraní společnosti Apple.

Historie kakaa

Cocoa je pokračováním softwarových prostředí NeXTSTEP a OPENSTEP , které byly vyvinuty společností NeXT na konci 80. let. Apple získal NeXT v prosinci 1996 a začal pracovat na operačním systému Rhapsody , který měl být přímým nástupcem OPENSTEP. Měla zahrnovat takzvaný „Blue Box“ ( Blue Box ), který poskytuje emulaci aplikací Mac OS . Základ knihovny a podpora formátu spustitelných souborů OPENSTEP se nazývala „Žlutá skříňka“ ( Žlutá skříňka ). Rhapsody se vyvinul v Mac OS X a ze žluté krabice se stalo kakao. Výsledkem je, že názvy tříd kakaa začínají písmeny NS (pro NeXTStep [1] ): NSString, NSArray atd.

Většina kódu napsaného pro OPENSTEP se dostala do Cocoa a Mac OS X, ale existují určité rozdíly. Například NeXTSTEP a OPENSTEP používaly technologii Display PostScript k zobrazení textu a grafiky na obrazovce , zatímco Cocoa používá systém Quartz společnosti Apple (který používá stejný model zobrazení jako PDF ). Kromě toho má Cocoa podporu pro internet, jako je třída NSURL a třídy WebKit pro práci s HTML , zatímco OPENSTEP měl pouze omezenou podporu pro práci se síťovými připojeními pomocí třídy NSFileHandle a soketů Berkeley.

Dříve se značka „Kakao“ používala jako název aplikace, která dětem umožňuje vytvářet multimediální projekty. Tato aplikace, původně známá jako KidSim , je nyní vlastněna třetí stranou a označena jako Stagecast Creator . Ukončení podpory programu bylo provedeno v souladu s racionalizací, která následovala po návratu Steva Jobse do Applu. Staré jméno bylo znovu použito, aby se zabránilo zpoždění registrace nové ochranné známky , a Stagecast souhlasil s vývojem bývalého Cocoa pod novým názvem.

Správa paměti

Jednou z funkcí prostředí Cocoa je mechanismus pro správu dynamicky alokované paměti. Třída NSObject, ze které je odvozena většina tříd Cocoa, standardních i vlastních, implementuje mechanismus počítání odkazů pro správu paměti . Objekty odvozené od NSObject reagují na zprávy retaina releaseukládají počet odkazů, který lze zjistit odesláním zprávy objektu retainCount. Objekt nově vytvořený pomocí metod allocnebo copymá počet odkazů jedna. Odeslání zprávy objektu retainzvyšuje počet odkazů a odeslání zprávy release jej snižuje. Když počet referencí dosáhne nuly, objekt je smazán a paměť, kterou zabíral, je uvolněna (uvolnění paměti pro objekty Objective-C  je stejné jako volání destruktoru pro objekty C++. Metoda deallocdělá v podstatě totéž jako destruktor v C++. hovor není zaručen). Tento přístup k počítání referencí je velmi podobný modelu COM společnosti Microsoft s jeho rozhraním IUnknown . IUnknown poskytuje funkce podobné retainjak releasea AddRef.Release

Kromě počítání referencí mohou programátoři využít také fondy autorease. Odeslání zprávy autoreleaseobjektu zaregistruje objekt v nejbližším fondu automatického uvolnění aktuálního vlákna pro budoucí vydání. Když se uvolní samotný fond automatického uvolnění, odešle zprávu releasepro každou dříve odeslanou zprávu autorelease. Automaticky uvolněné fondy se obvykle vytvářejí a uvolňují na začátku a na konci smyčky zpráv, což zajišťuje, že provádění programu ukončí blok, ve kterém byly objekty registrovány pro autodealokaci. To znamená, že aplikace běží předvídatelně a uvolňuje paměť pro uživatele transparentně, zatímco při použití automatického shromažďování odpadu ve většině případů program při spuštění náhle přestane reagovat na akce uživatele.

Automatický sběr odpadu v Cocoa je podporován od Objective-C 2.0, kdy byl vyvinut v Xcode 3.0, který je součástí Mac OS X 10.5 Leopard. Programátor má nyní možnost volit mezi automatickou a manuální manipulací s pamětí. Názory na nejefektivnější způsob správy paměti se různí. Někteří programátoři tvrdí, že počítání referencí je lepší, protože umožňuje vývojářům mít jemnou kontrolu nad tím, kdy jsou objekty uvolněny, bez nutnosti ručního přidělování paměti pro každý objekt, který je v programu použit, a nezpůsobuje zpoždění výkonu související s automatickým sběr odpadků. Jiní říkají, že celé toto schéma je k ničemu, že automatické shromažďování odpadu ve stylu Java  je nejlepším řešením, protože výrazně snižuje pravděpodobnost programátorských chyb při práci s pamětí. Sběr odpadu v Cocoa nenarušuje zpětnou kompatibilitu programů, používá se pouze pro projekty s ním speciálně sestavené.

Je také možné tyto dva přístupy kombinovat. Moderní garbage collectors se často umožňují spouštět a zastavovat uprostřed úlohy, což umožňuje aplikaci řídit množství času přiděleného systémovým voláním. Zdá se, že kombinace tohoto přístupu s fondy AppKit, které se automaticky uvolňují na konci smyčky zpráv, nabízí nejlepší kompromis. Podobný systém byl úspěšně implementován v GNUstep , volně šiřitelném GNU analogu OpenStep .

Hlavní rámce

Kakao sestává primárně ze dvou objektových knihoven Objective-C nazvaných Frameworks . Rámce jsou zhruba stejné jako dynamické knihovny . Jsou to zkompilované objekty, které se načítají do adresního prostoru programu za běhu, ale kromě toho rámce zahrnují prostředky, hlavičkové soubory a dokumentaci. Cocoa také obsahuje systém pro správu verzí, který zabraňuje problémům vyskytujícím se v Microsoft Windows (takzvané " DLL peklo ").

Klíčovým prvkem architektury Cocoa je model pohledu. Navenek je organizován jako běžný rámec, ale implementován pomocí PDF pro všechny kreslicí operace poskytované Quartz . To umožňuje programátorovi kreslit, co chce, pomocí příkazů jazyka podobného PostScriptu . Navíc automaticky poskytuje možnost vytisknout libovolný pohled. Vzhledem k tomu, že Cocoa zvládá ořezávání, posouvání, škálování a další běžné úlohy vykreslování grafiky, je programátor zbaven nutnosti implementovat základní infrastrukturu a může se soustředit na jedinečné aspekty vyvíjené aplikace.

Model-View-Behavior

Týmy programátorů Smalltalk v Xerox PARC nakonec vyvinuly filozofii, která jim umožnila zjednodušit vývoj a výrazně zvýšit množství opakovaně použitelného kódu. Tento koncept, známý jako paradigma Model-View-Behavior (MVC), rozděluje aplikaci do tří sad vzájemně se ovlivňujících tříd. Třídy modelu představují data, jako jsou dokumenty, soubory nastavení nebo objekty v paměti. Pohledy, jak název napovídá, zobrazují data (často vizuálně). Třídy chování obsahují logiku, která propojuje modely s jejich příslušnými pohledy a udržuje je synchronizované.

V Cocoa architektuře jsou principy MVC přísně dodržovány. V OpenStep byla většina tříd buď reprezentacemi na vysoké úrovni (třídy AppKit), nebo relativně nízkoúrovňové modelové třídy (jako je NSString). Ve srovnání s podobnými systémy MVC postrádal OpenStep silnou modelovou základnu. Například neexistovala žádná základní třída, která by představovala dokument. Během přechodu na Cocoa se modelová základna neuvěřitelně rozšířila, aby zahrnovala několik tříd připravených k použití, které poskytovaly funkce běžné pro většinu uživatelských aplikací.

V Mac OS X 10.3 Apple představil NSController, rodinu tříd MVC, které poskytují standardní funkce chování. Tyto třídy jsou považovány za součást systému Cocoa Bindings , který široce využívá protokoly jako Key-Value Coding a Key-Value Observing . Termín vazba znamená spojení dvou objektů, často pohledu a chování. Cocoa Bindings umožňuje vývojáři soustředit se na popis vztahů mezi objekty, místo aby podrobně popisoval chování programu.

S vydáním Mac OS X 10.4 Apple dále rozšířil základní třídy představením Core Data frameworku , který automatizuje sledování změn v modelech a jejich ukládání (například do souboru). Tento framework výrazně zjednodušuje práci s daty v aplikaci tím, že poskytuje automatickou podporu pro čtení dokumentů ze souboru a jejich ukládání do souboru, stejně jako architektury pro vracení a vracení změn.

Poskytnutím rámců pro podporu všech tří vrstev MVC je cílem společnosti Apple snížit množství „lepícího“ kódu, který musí vývojáři psát, a ušetřit tak čas na psaní funkcí specifických pro aplikaci.

Pozdní vazba

V objektově orientovaných jazycích, jako je Java nebo C++ , jsou volání metod fyzicky reprezentována v paměti jako ukazatele. To omezuje návrh aplikace, protože název metody, která má být volána, musí být znám předem. Zatímco Cocoa si tento přístup z větší části zachovává, pozdní vazba v Objective-C umožňuje větší flexibilitu.

V Objective-C jsou metody reprezentovány selektorem , což je řetězec, který popisuje vyvolávanou metodu. Když je objektu odeslána zpráva, prostředí Objective-C získá selektor, který najde, a poté zavolá požadovanou metodu. Protože selektor je textový řetězec, lze jej uložit do souboru, předat po síti nebo mezi procesy nebo zpracovat jiným způsobem. Hledání kódu, který je spuštěn při volání metody, se provádí za běhu programu, nikoli za jeho kompilace. To jen mírně zpomaluje výkon, ale stále to umožňuje, aby stejný selektor ukazoval na různé implementace metody.

Podobně má Cocoa komplexní objektovou technologii nazvanou Key-Value Coding (KVC). Umožňuje vám přistupovat k datovému prvku nebo vlastnosti objektu a také je za běhu měnit podle názvu – název vlastnosti slouží jako klíč k její hodnotě. KVC vede k extrémní flexibilitě návrhu – nepotřebujete znát typ objektu, ale pomocí KVC lze získat jakoukoli jeho vlastnost. Kakaová technologie zvaná Key-Value Observing (KVO) navíc automaticky synchronizuje vlastnosti objektů, které spolu souvisí.

Objekty bohaté na funkce

Jednou z nejužitečnějších věcí na Cocoa jsou výkonné „základní objekty“, které systém poskytuje. Jako příklad se podívejte na Foundation NSStringa třídy NSAttributedString, které poskytují podporu pro řetězce Unicode , a na systém NSTextv AppKit, který umožňuje programátorovi zobrazovat řetězce v GUI.

NSTexta související třídy se používají k zobrazení a úpravě řetězců. Tyto objekty vám umožňují v aplikaci implementovat cokoli, od nejjednoduššího jednořádkového pole pro zadávání textu po systém rozvržení, který podporuje stránkování a více sloupců, stejně jako profesionální typografické funkce, jako je vyrovnání párů , ligatury , obtékání textu kolem jakýchkoli formulářů, text rotace, plná podpora Unicode a vyhlazování písem . Vlastnosti odstavce lze ovládat jak programově, tak uživatelem pomocí objektu pravítka, který lze připojit k jakémukoli pohledu, který zobrazuje text. Kontrola pravopisu může být také provedena automaticky, pomocí jediného slovníku pro všechny aplikace a „zakrouceného podtržení“ průkopníkem společnosti Microsoft (v Cocoa to vypadá jako červená tečkovaná čára). K dispozici je vestavěná podpora pro neomezené vrácení a opakování. Pouze pomocí vestavěné funkce je možné napsat textový editor ve 13 řádcích kódu . S novými objekty kontroleru lze tento počet řádků snížit na nulu. To je v ostrém kontrastu s rozhraním TextEdit API v dřívějších verzích Mac OS.

Objective-C velmi usnadňuje rozšíření funkčnosti stávajících tříd. Podporuje takzvané kategorie , které umožňují upravovat stávající třídy "na místě". Pomocí kategorií můžete přidat požadovanou funkcionalitu, aniž byste v nich provedli změny, a dokonce i bez přístupu ke zdrojovému kódu existujících tříd. V jiných běžnějších jazycích by to vyžadovalo, aby programátor vytvořil novou třídu, která podporuje další funkce, a pak pečlivě nahradil všechny použité objekty nadřazené třídy touto novou.

Implementace

Cocoa frameworky jsou napsány v Objective-C , a proto je tento jazyk jazykem volby pro psaní aplikací Cocoa. K dispozici je i bundle pro jazyk Java (Cocoa-Java Bridge), který se však mezi vývojáři příliš netěší. Navíc použití pozdní vazby znamená, že mnoho klíčových vlastností kakaa nelze v Javě použít. V roce 2005 Apple oznámil, že Cocoa-Java bude zastaralá. Jinými slovy, funkce přidané do Cocoa ve verzích Mac OS X po 10.4 nebudou přidány do rozhraní Cocoa-Java.

AppleScript Studio , které je součástí Xcode Tools, umožňuje psát jednoduché aplikace Cocoa v AppleScriptu . Existuje také skriptovací jazyk třetí strany, F-Script , pro Cocoa, který umožňuje přímý přístup k objektům Cocoa a poskytuje sadu nástrojů GUI pro sledování jejich stavu.

Balíčky třetích stran jsou dostupné také pro jiné jazyky: [2]

Kromě toho existují bezplatné implementace základních částí Cocoa, které umožňují vývoj aplikací pro různé platformy (včetně Windows ):

Existují projekty, které překládají aplikace Cocoa napsané v Objective -C do webových aplikací v JavaScriptu :

Viz také

Poznámky

  1. Vysvětlení vzhledu předpony NS Archivováno 23. 2. 2011 .  (anglicky) na Apple Developer Connection
  2. Odkazy F-Script archivovány 16. července 2007.

Literatura

Odkazy