9

私はCでアプリケーションを開発することを計画しています。私のプログラミング経験は、常にオブジェクト指向言語でした。したがって、アプリケーションを設計するときは、クラス、インターフェイス、継承、ポリモーフィズムなどの観点から常に考えます。

私が見たすべてのCの本は、Cでプログラミングする方法や特定のトピックに焦点を当てる方法を扱っていますが、Cのアプリケーションアーキテクチャについて説明しているものは見つかりませんでした。利用不可?すべてをモジュール化して適切に整理し、コードの重複を回避するにはどうすればよいですか(OOPではコードの重複が多くなるとは思われません)。

編集: 「CでOOPコードを書く方法」についての答えを探していません。モジュール化され、適切に編成されたCアプリケーションを構造化するための標準的な実践方法を探しています。標準的な実践方法がいくつかのOOP機能をハックすることである場合、それは十分に公平ですが、そうでない場合、そのルートを進むように私に指示する意味はありません。

4

5 に答える 5

7

それは別の考え方です。Cのコア哲学は次のように要約できます。

data + algorithms = programs

したがって、Cでアプリケーションを設計するには:

  1. データが何であるかを注意深く考え、structそれをよく反映するを定義し、データのさまざまなビュー間の関係を促進する必要があります。

  2. どのアルゴリズムがどのデータに作用し、どのデータを生成するかを考える必要があります。これは、必要なものを明確にし、struct再利用可能なコードブロックを作成するために一緒にブロックする必要があるものを示すのに役立ちます。

  3. OOPアプローチからこのアプローチに移行する1つの方法は、1 struct+ 1の.cファイル=クラスを想像し、.hファイルに構造体定義と外部からアクセス可能な関数(パブリックメソッド)を入れることです。

  4. メモリの割り当てや解放などの退屈なことを行うには、多くのコードを作成する必要があります。思ったほど悪くはありませんが、これを設計に織り込んでください。

于 2013-03-25T09:13:21.127 に答える
4

Cプロジェクトを指向オブジェクトプロジェクトとして設計してから、クラスを構造に置き換えることができます。これは、このトピックとこのトピックで私に推奨されました

于 2013-03-25T09:03:23.110 に答える
2

また、再利用可能なCソフトウェアを作成するには、DavidR.Hansonによるこの本を読んでください。

https://sites.google.com/site/cinterfacesimplementations/

基本的なOOPは、AlexSchrinerのOOC.pdfブックに記載されている手法を使用して行うのが最適です。

于 2013-03-25T09:06:30.353 に答える
2

まず、問題を解決するためのコンポーネントとそれらの相互作用を特定します。次に、各コンポーネント内で、以下のプラクティスを使用できます。

  1. 最初にパブリック関数を設計します。
  2. 関数が機能するデータ構造(つまり構造体)を設計する
  3. 対応する構造体をポインタ引数として使用するようにパブリック関数を変更します。[cにはインスタンス変数の概念はありません。構造を定義し、関数間で構造を渡す必要があります]。
  4. 関連するデータ構造を持つ関数をヘッダーファイルにグループ化します。
  5. 定義したヘッダーファイルを含む別のcファイルでパブリック関数に実装を提供します。
  6. すべてのプライベート/ヘルパーメソッドを静的にして、他のcファイルに表示されないようにします。
  7. Cには名前空間の概念がないため、パブリック関数が既存のライブラリ関数と競合しないようにしてください。{ヘッダーファイルの短縮名}_{関数名}のような名前マングリングを使用している人もいます
  8. メモリの割り当てと解放は開発者の責任です。設計されたパブリック関数とともに、メモリを割り当ててクリアするための初期化関数と解放関数を用意することをお勧めします。
  9. 使い慣れたコーディングスタイルに従ってください。
  10. 各コンポーネントを共有ライブラリとして設計し、毎回コンパイルする必要がないようにします。
于 2013-03-25T10:20:04.790 に答える
1

CでTDDを練習することは可能です。CプログラミングとTDDを参照してください。

TDDの練習に慣れている場合は、コードを適切に整理してモジュール化するのに役立つことをご存知でしょう。

于 2013-03-25T11:39:01.123 に答える