3

たとえば、ゲーム開発者、アニメーションソフトウェア開発者、アバター開発者が製品を拡張するためにライブラリ/ DLLとして使用するミドルウェアSDKを、C++とJavaの両方で開発しています。

私が知りたいのはこれです:これらのタイプのAPIの開発のための標準的な「ベストプラクティス」はありますか?

使いやすさ、読みやすさ、効率などの観点から考えています。

4

5 に答える 5

6

このテーマに関する私のお気に入りの 2 つのリソース: http://mollyrocket.com/873http://video.google.com/videoplay?docid=-3733345136856180693

于 2008-09-15T13:23:05.653 に答える
3

Windows でサード パーティのライブラリを使用することから、次の 2 つのことを学びました。

ライブラリを静的ライブラリではなく DLL として配布するようにしてください。これにより、異なる C コンパイラとリンカー間の互換性が向上します。ビジュアル C++ のスタティック ライブラリに関するもう 1 つの問題は、ランタイム ライブラリの選択によって、ライブラリが別のランタイム ライブラリを使用するコードと互換性がなくなり、ランタイム ライブラリごとに 1 つのバージョンのライブラリを配布する必要が生じる可能性があることです。

可能であれば、c++ は避けてください。C++ の名前マングリングはコンパイラによって大きく異なり、Visual C++ 用にビルドされたライブラリを Windows の別のビルド環境からリンクできる可能性は低いです。C に関して言えば、特に dll を使用している場合は、はるかに優れています。

本当に c++ の優れた部分 (コンストラクターとデストラクタによるリソース管理など) を利用したい場合は、c++ で便利なレイヤーを構築し、c 関数を隠すソース コードとして配布します。ユーザーはソースを取得してローカルでコンパイルするため、ローカル環境で名前の変更や abi の問題が発生することはありません。

Java からの c/c++ コードの呼び出しについてあまり知らなくても、名前マングリングの問題があるため、c++ コードよりも c コードを使用する方がはるかに簡単であると思います。

「Imperfect C++」という本には、ライブラリの互換性に関する議論があり、非常に役に立ちました。

于 2008-09-16T11:48:56.837 に答える
1

yrp が言及した Josh Bloch のビデオは古典的です。

一般的なガイドライン:

  1. 主にインターフェイス、ファクトリ、およびビルダーの観点から API を定義してください。
  2. どのパッケージとクラスが API の一部であるかを明確に指定してください。
  3. API に対してコンパイルするために特別に使用される jar を提供してください。
  4. 継承やテンプレート メソッド パターンに大きく依存しないでください。時間の経過とともに、これは壊れやすく壊れてしまいます。
  5. シングルトン パターンは使用しないでください。少なくとも細心の注意を払って使用してください。
  6. 使用方法と概念を説明するパッケージおよびクラス レベルの javadoc を作成してください。
于 2008-09-15T14:31:51.727 に答える
0

何を解決するかに応じて、API を設計する方法はたくさんあります。この質問に対する完全な答えは、ギャング・オブ・フォー・パターン・ブックなどの本全体に値すると思います。特に Java の場合、および一般的な OO プログラミングの場合は、Effective Java 2nd Editionをお勧めします。1 つ目は、一般的で多くの一般的なプログラミング パターンであり、それらが適用される場合とその利点です。効果的な Java は Java 中心ですが、その一部は、どのプログラミング言語にも適用できるほど一般的です。

于 2008-09-15T12:43:11.787 に答える
0

Framework Design Guidelinesをご覧ください。.NET 固有であることはわかっていますが、そこから多くの一般的な情報を学ぶこともできます。

于 2008-09-15T13:13:49.013 に答える