ココア(API)

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

ココア
開発者アップル社。
で書かれているCC ++Objective-CSwift
オペレーティング・システムマックOS
タイプソフトウェアフレームワーク
ライセンス
いくつかのオープンソースコンポーネントを所有している[引用が必要]
WebサイトApple Developer

Cocoaは、デスクトップオペレーティングシステムmacOS用のAppleのネイティブオブジェクト指向 アプリケーションプログラミングインターフェイス(API)です

Cocoaは、ヘッダーファイルに含まれているFoundation KitApplication Kit、およびCore DataフレームワークCocoa.hと、C標準ライブラリやObjective-Cランタイムなどに含まれているライブラリとフレームワークで構成されています。[1]

Cocoaアプリケーションは通常、Appleが提供する開発ツール、具体的にはXcode(以前のProject Builder)とInterface Builder(現在はXcodeの一部)を使用して、プログラミング言語 Objective-CまたはSwiftを使用して開発されます。ただし、Cocoaプログラミング環境には、Clozure CLLispWorksObject PascalPythonPerlRubyAppleScriptなどの他のツールを使用して、 PasCocoaPyObjCなどブリッジメカニズムを使用してアクセスできます。CamelBonesRubyCocoa、およびD / Objective-Cブリッジ。ブリッジメカニズムの必要性を排除するMacRubyという名前のRuby言語実装は、以前はAppleによって開発されましたが、NuブリッジなしでCocoaで使用できるLispのような言語です。シンプルなテキストエディタでObjective-CCocoaプログラムを記述し、コマンドラインまたはmakefileからGNUコンパイラコレクション(GCC)またはClangを使用して手動でビルドすることもできます

エンドユーザーにとってCocoaアプリケーションは、Cocoaプログラミング環境を使用して作成されたアプリケーションです。Cocoaプログラミング環境は多くの一般的なUI要素(ボタン、スクロールバーなど)を提供し、Appleのヒューマンインターフェイスガイドラインに準拠するようにアプリケーションの多くの側面を自動化するため、このようなアプリケーションは通常、使い慣れたルックアンドフィールを備えています。

iOSiPadOStvOS、およびwatchOSの場合、 Cocoa Touchという名前の同様のAPIが存在します。これには、ジェスチャ認識アニメーション、およびさまざまなグラフィカルコントロール要素のセットが含まれます。これは、 iPhoneiPod TouchiPadApple TVAppleWatchなどのAppleデバイスのアプリケーションで使用されます。

歴史

Cocoaは、1980年代と1990年代にNeXTによって開発されたNeXTSTEPおよびOpenStepプログラミング環境からのいくつかのソフトウェアフレームワーク(主にAppKitFoundationKit)の系統を継続しています。Appleは1996年12月にNeXTを買収し、その後、OpenStepの直接の後継となるRhapsodyオペレーティングシステムの開発に取り掛かりました。BlueBoxという名前のクラシックMacOSアプリケーション用のエミュレーションベースがあったはずです。ライブラリとバイナリサポートのOpenStepベースはYellowBoxと呼ばれていましRhapsodyはMacOS Xに進化し、YellowBoxはCocoaになりました。したがって、Cocoaクラスは、NSStringやNSArrayなどの文字NSで始まります。これらは、OpenStepフレームワークの元の所有権用語であるNeXTSTEPを表します。[2]

OpenStepの開発に費やされた作業の多くは、Mac OS Xの開発に適用され、Cocoaが最も目立つ部分です。ただし、違いがあります。たとえば、NeXTSTEPとOpenStepはテキストとグラフィックスの画面表示にDisplay PostScriptを使用しましたが、CocoaはAppleのQuartzPortable Document Format(PDF)イメージングモデルを使用していますが、その基盤となるテクノロジーは使用していません)に依存しています。Cocoaは、NSURLやWebKit HTMLクラスなどを含む一定レベルのインターネットサポートも備えていますが、OpenStepは、NSFileHandleクラスとBerkeleyソケットを介したマネージドネットワーク接続の基本的なサポートしかありませんでした。

結果として得られたソフトウェアフレームワークには、便宜上、Cocoaという名前が付けられました。これは、この名前がす​​でにAppleによって商標登録されているためです。この名前が現在使用される前の何年もの間、AppleのCocoa商標は、子供向けのマルチメディアプロジェクトデザインアプリケーションの名前として生まれました。このアプリケーションは、もともとApple Advanced Technology GroupでKidSimという名前で開発され、その後「Cocoa」という名前に変更され、商標登録されました。この名前は、Apple用のCocoaを開発するために雇われたPeter Jensenによって造られたもので、Webページに埋め込まれているため、「Javaforkids」を想起させることを目的としています。[3]このソフトウェアフレームワークの新しい商標 を登録する際に発生する可能性のある遅延を回避するために、商標、つまり「Cocoa」という名前が再利用されました。元の「ココア」プログラムは、スティーブ・ジョブズがアップルに戻った後の合理化の1つで、アップルで中止されました。その後、サードパーティにライセンス供与され、2014年まで StagecastCreatorとして販売されました。

メモリ管理

Cocoa環境の機能の1つは、動的に割り当てられたメモリを管理するための機能です。ベンダーとユーザーの両方のほとんどのクラスが派生するFoundationKitのNSObjectクラスは、メモリ管理のための参照カウントスキームを実装します。NSObjectルートクラスから派生したオブジェクトはretainreleaseメッセージに応答し、保持カウントを保持します。「exists 」というタイトルのメソッドはretainCount、その名前とは逆に、通常、オブジェクトの正確な保持カウントを返しません。これは主にシステムレベルの目的で使用されます。手動で呼び出すことはAppleによって推奨されていません。

alloc1で作成された、またはcopy保持カウントが1の、新しく割り当てられたオブジェクト。そのオブジェクトにretainメッセージを送信すると保持カウントが増加し、メッセージを送信するとrelease保持カウントが減少します。オブジェクトの保持カウントがゼロに達すると、C ++デストラクタと同様のプロシージャによって割り当てが解除されます。dealloc呼び出される保証はありません。

Objective-C 2.0以降、Objective-Cランタイムはオプションのガベージコレクターを実装しましたが、これは廃止され、自動参照カウント(ARC)のために廃止されました。このモデルでは、ランタイムは「保持」や「解放」などのCocoa参照カウント操作をno-opsに変換しました。ガベージコレクターは、Objective-C2.0のiOS実装には存在しません。Objective-Cのガベージコレクションは、優先度の低いバックグラウンドスレッドで実行され、ユーザーエクスペリエンスの応答性を維持することを目的として、Cocoaのユーザーイベントで停止できます。従来のガベージコレクターはMacOS Xバージョン10.13でも引き続き使用できますが、Appleが提供するアプリケーションはそれを使用しません。

2011年、LLVMコンパイラは自動参照カウント(ARC)を導入しました。これは、Objective-Cソースコードの静的分析を実行し、必要に応じて保持メッセージと解放メッセージを挿入することで、従来のガベージコレクタに取って代わります。

主なフレームワーク

Cocoaは、フレームワークと呼ばれる3つのObjective-Cオブジェクトライブラリで構成されていますフレームワークは、実行時にプログラムのアドレス空間に動的にロードできるコンパイル済みオブジェクトである共有ライブラリと機能的に似ていますが、フレームワークは関連するリソース、ヘッダーファイル、およびドキュメントを追加します。Cocoaフレームワークは、バンドルの一種として実装され、前述のアイテムが標準の場所に含まれています。

Cocoaアーキテクチャの重要な部分は、その包括的なビューモデルです。これは、アプリケーションフレームワークの従来の方針に沿って編成されていますが、 Quartzが提供するPortable Document Format(PDF)描画モデルに基づいています。これにより、 PostScriptのような描画コマンドを使用してカスタムの描画コンテンツを作成できます。これにより、自動プリンタサポートなども可能になります。Cocoaフレームワークは、描画グラフィックのすべてのクリッピング、スクロール、スケーリング、およびその他の雑用を管理するため、プログラマーは基本的なインフラストラクチャの実装から解放され、アプリケーションのコンテンツの独自の側面に集中できます。

Model–view–controller

Xerox PARCSmalltalkチームは、最終的に、開発を容易にし、コードを再利用することにつながる設計哲学に落ち着きました。model-view-controller(MVC) という名前のこの概念は、アプリケーションを3セットの相互作用するオブジェクトクラスに分割します。

  • モデルクラスは、問題のドメインデータと操作(人/部門/予算のリスト、定型化されたテキストのセクション/段落/脚注を含むドキュメントなど)を表します。
  • ビュークラスは、人間とコンピューターの相互作用のための視覚的表現とアフォーダンスを実装します(キャプション付きアイコンのスクロール可能なグリッドや可能な操作のポップアップメニューなど)。
  • コントローラクラスには、モデルデータをビュー表現として表示し、アフォーダンスによって開始されたユーザーアクションをモデル操作にマップし、2つの同期を維持するために状態を維持するロジックが含まれています。

Cocoaの設計はかなりですが、MVCの原則を完全に厳密に適用しているわけではありません。OpenStepでは、提供されたクラスのほとんどは、高レベルのViewクラス(AppKit内)またはNSStringのような比較的低レベルのモデルクラスの1つでした。同様のMVCシステムと比較して、OpenStepには強力なモデルレイヤーがありませんでした。たとえば、「ドキュメント」を表す株式クラスはありません。Cocoaへの移行中に、モデルレイヤーが大幅に拡張され、デスクトップアプリケーションに共通の機能を提供するために、いくつかの事前にロールされたクラスが導入されました。

Mac OS X 10.3で、AppleはNSControllerファミリのクラスを導入しました。これは、コントローラ層に事前定義された動作を提供します。これらのクラスは、Cocoa Bindingsシステムの一部と見なされ、 Key-ValueObservingKey- ValueBindingなどのプロトコルも広範囲に使用します「バインディング」という用語は、2つのオブジェクト間の関係、多くの場合、ビューとコントローラー間の関係を指します。バインディングにより、開発者は、きめ細かい動作を調整するのではなく、宣言型の関係に集中することができます。

Mac OS X 10.4の登場により、Appleは、モデル層での変更の追跡と永続性を標準化するCore Dataフレームワークを導入することにより、この基盤をさらに拡張しました。実際、このフレームワークは、アプリケーションデータに変更を加え、必要に応じて変更を元に戻し、データをディスクに保存してから読み込むプロセスを大幅に簡素化します。

3つのMVCドメインすべてにフレームワークのサポートを提供することで、Appleの目標は、開発者が作成する必要のある定型文または「グルー」コードの量を減らし、リソースを解放してアプリケーション固有の機能に時間を費やすことです。

遅延バインディング

ほとんどのオブジェクト指向言語では、メソッドの呼び出しは、メモリ内のコードへのポインタによって物理的に表されます。これにより、特定のコマンド処理クラスが必要になり、通常は責任の連鎖パターンに従って編成されるため、アプリケーションの設計が制限されますCocoaはほとんどの部分でこのアプローチを保持していますが、Objective-Cの遅延バインディングにより柔軟性が高まります。

Objective-Cでは、メソッドはセレクター、つまり呼び出すメソッドを説明する文字列で表されます。メッセージが送信されると、セレクターがObjective-Cランタイムに送信され、使用可能なメソッドのリストと照合され、メソッドの実装が呼び出されます。セレクターはテキストデータであるため、ファイルに保存したり、ネットワーク経由またはプロセス間で送信したり、その他の方法で操作したりできます。メソッドの実装は、コンパイル時ではなく、実行時に検索されます。これにはわずかなパフォーマンスの低下がありますが[5]、遅延バインディングにより、同じセレクターが異なる実装を参照できるようになります。

同様のトークンで、CocoaはKey-Valueコーディング(KVC)と呼ばれる普及したデータ操作方法を提供します。[6]これにより、オブジェクトのデータまたはプロパティを実行時に名前で検索または変更できます。プロパティ名は、値のキーとして機能します。従来の言語では、この遅延バインディングは不可能です。KVCは、優れた設計の柔軟性につながります。オブジェクトのタイプを知る必要はありませんが、KVCを使用してそのオブジェクトのプロパティを検出できます。また、Cocoa用語のKey-Value Observing(KVO)を使用してこのシステムを拡張することにより、 undo-redoの自動サポートが提供されます。

遅延静的バインディングは、静的バインディングと動的バインディングの間のどこかでのバインディングの変形です。プログラムが実行される前の名前のバインドは静的(初期)と呼ばれます。プログラムの実行中に実行されるバインディングは動的です(遅延または仮想)。

リッチオブジェクト

Cocoaの最も便利な機能の1つは、システムが提供する強力なベースオブジェクトです。例として、 Unicode文字列を提供するFoundationクラスNSStringと、およびプログラマーがGUIに文字列オブジェクトを配置できるようにするAppKitのシステムについて考えてみます。 NSAttributedString NSText

NSTextおよびそれに関連するクラスは、文字列の表示と編集に使用されます。関連するオブジェクトのコレクションにより、アプリケーションは、単純な1行のテキスト入力フィールドから、カーニング合字、任意の形状のテキストの実行などの完全なプロのタイポグラフィ機能を備えた完全な複数ページ、複数列のテキストレイアウトスキーマまで、あらゆるものを実装できます。回転、完全なUnicodeサポート、およびアンチエイリアスされたグリフレンダリング。段落のレイアウトは、組み込みの「定規」を使用して、自動的に、またはユーザーが制御できます。 "任意のテキストビューに添付できるオブジェクト。システム全体の言語辞書のセットを使用して、スペルチェックが自動的に行われます。無制限の元に戻す/やり直しのサポートが組み込まれています。組み込みの機能のみを使用して、テキストエディタアプリケーションを作成できます。わずか10行のコードで。新しいコントローラーオブジェクトを使用すると、これはゼロに近づく可能性があります。拡張機能が必要な場合、CocoaがObjective-Cを使用すると、これは簡単なタスクになります。Objective-Cには「カテゴリ」の概念が含まれます。、」これにより、既存のクラスを「インプレース」で変更できます。機能は、フレームワークの元のクラスを変更したり、そのソースにアクセスしたりすることなく、カテゴリで実行できます。他の一般的な言語では、この同じタスクで新しいクラスを派生させる必要があります。追加された機能をサポートし、元のクラスのすべてのインスタンスを新しいサブクラスのインスタンスに置き換えるサブクラス。

実装とバインディング

CocoaフレームワークはObjective-Cで書かれています。Cocoaフレームワーク( Javaブリッジと呼ばれる)のJavaバインディングも、Objective-Cをより一般的な言語に置き換えることを目的として利用可能になりました[7]が、これらのバインディングはCocoa開発者の間で人気がなく、CocoaのメッセージパッシングセマンティクスはJavaなどの静的に型付けされた言語。[8] Cocoaのランタイムバインディングの必要性は、Cocoaの主要な機能の多くがJavaでは利用できないことを意味します。2005年、AppleはJavaブリッジが非推奨になることを発表しました。つまり、10.4以降のmacOSバージョンでCocoaに追加された機能は、Cocoa-Javaプログラミングインターフェイスに追加されません。

Apple Worldwide Developers Conference (WWDC) 2014で、AppleはObjective-Cに代わるものを目的としたSwiftという名前の新しいプログラミング言語を発表しました。[9]

AppleScriptObjC

もともと、AppleScript Studioは、より単純なCocoaアプリケーションを開発するために使用できました。[10] ただし、Snow Leopardの時点で、非推奨になっています。これは、Cocoaフレームワークを使用しながらAppleScriptでプログラミングできるAppleScriptObjCに置き換えられました。[11]

その他のバインディング

他の言語で利用可能なサードパーティのバインディングには、Clozure CLMonobjcおよびNObjectiveC#)、Cocoa#(CLI)、CocodaoおよびD / Objective-C Bridge、[12] [13] LispWorksCamelBonesPerl)、PyObjCPython)、FPC PasCocoaLazarusおよびFree Pascal)、RubyCocoaRuby)。[14] NuObjective-Cを使用していますオブジェクトモデルを直接使用できるため、バインディングを必要とせずにCocoaフレームワークを使用できます。

その他の実装

GNUstepやCocotronなどのCocoaフレームワークの主要部分のオープンソース実装もあり[15] 、クロスプラットフォームのCocoaアプリケーション開発でMicrosoftWindowsLinuxなどの他のオペレーティングシステムをターゲットにすることができます

も参照してください

参考文献

  1. ^ a b Macテクノロジーの概要:OSXフレームワークDeveloper.apple.com。2013年9月18日に取得。
  2. ^ Amit Singh(2006年6月19日)。Mac OS X内部:システムアプローチISBN 0-321-27854-2ココアは、「NS」プレフィックスで示されているように、NeXTからの重要な継承です。
  3. ^ Mardesich、Jodi(1997年4月14日)。「AppleのRhapsodyかつての忠実なソフトウェアライターの酸っぱいメモは、重要な会議が迫っているので、新しいOSを心配している」いいえ。モーニングファイナル。サンノゼマーキュリーニュース2015年8月13日取得
  4. ^ HybridWorldCilinder.be。2013年9月18日に取得。
  5. ^ ウィキブックス-いくつかのObjective-Cの利点
  6. ^ 「Key-Valueコーディングプログラミングガイド」2021年9月27日取得
  7. ^ Steve Klingsporn(2003)。「JavaでのCocoaアプリの作成」MacTech19(12)。
  8. ^ 「Javaブリッジの使用」(PDF)Apple Inc. Javaは強く型付けされた言語であるため、コンパイル時に操作するクラスとインターフェイスに関する詳細情報が必要です。したがって、Objective-CクラスをJavaクラスとして使用する前に、それらの説明を記述してコンパイルする必要があります。
  9. ^ 「Appleの最高機密のSwift言語は、仕事からObjective-Cを維持するために成長し、現在はそれを置き換えることを目指しています」
  10. ^ 「AppleScriptStudioプログラミングガイド(非推奨):AppleScriptStudioについて」Apple、Inc 2013年11月20日取得
  11. ^ 「AppleScriptObjCリリースノート」Apple、Inc 2013年11月20日取得
  12. ^ Cocodao、D言語でCocoaアプリケーションを作成するためのブリッジ。
  13. ^ D / Objective-C BridgeCocoaの言語バインディングメカニズム。
  14. ^ 実装のより広範なリスト
  15. ^ Cocotron、Cocoaのフリーソフトウェア実装。

参考文献

外部リンク

  1. ^ ガーフィンケル、シムソン; マホニー、マイケルK.(2002)。Cocoaアプリケーションの構築:ステップバイステップガイドオライリー。CiteSeerX10.1.1.394.3248_