Cに「デザインパターン」はありますか?[閉まっている]


84

デザインパターンは一般的にオブジェクト指向プログラミングに関連するものであることを私は知っていますが、Cをプログラミングするときによく使用するパターンはありますか?

私は古典的なOOパターンの単純な翻訳には興味がなく、Duffのデバイスについては言及しないでください。;-)

回答:


86

私のお気に入りは、AdamTornhillによる「PatternsinC」シリーズです。

また、私はいつもgotoデコレータパターンのための素晴らしい貧乏人の道具だと思っています。

更新:cを使用する必要がある場合を除いて、CではなくRustrust-lang.org)を使用することを強くお勧めします。Rustには、速度やcとのバイナリライブラリの互換性など、cのすべての利点がありますが、コンパイラは複雑さの多くを処理して、コードがメモリセーフであり、データの競合がないことを確認します。また、移植性があり、一般的なタスク用の標準ライブラリがあり、さまざまなデザインパターン用にプログラミングするのがはるかに簡単です。


9
gotoデコレータとの関係について詳しく教えてください。
桂PRA

1
これは、Adam Tornhill(以前はPetersen)による素晴らしい小さなシリーズです。彼の完全な本が利用可能です。パターンのこの小さなセットはC.であなたに長い道のりがかかります
クリントPachl

10

デザインパターンは、言語機能が欠落していると見なされる可能性があります。デザインパターンの導入:再利用可能なオブジェクト指向ソフトウェアの要素は次のように述べています。

プログラミング言語の選択は、自分の視点に影響を与えるため重要です。私たちのパターンはSmalltalk / C ++レベルの言語機能を想定しており、その選択によって、簡単に実装できるものとできないものが決まります。手続き型言語を想定した場合、「継承」、「カプセル化」、「ポリモーフィズム」と呼ばれる設計パターンが含まれている可能性があります。同様に、私たちのパターンのいくつかは、あまり一般的ではないオブジェクト指向言語によって直接サポートされています。CLOSには、たとえば、Visitorなどのパターンの必要性を減らす複数のメソッドがあります。(斜体の鉱山

イタリック体の文はあなたの質問への答えです。


7

標準ライブラリのqsort関数など、コールバックを介したポリモーフィズム。必要なのは2つの要素を比較する方法だけで、それらの配列を並べ替えることができます。

関数のセット(vtables)を使用して型の関連するプロパティを表すことにより、これよりもはるかに洗練されたものになり、汎用ルーチンがそれを便利に処理できるようになります。たとえば、開いているファイルまたはネットワークポートに対する読み取り、書き込みなどの呼び出し。


私はコールバックの使用が好きです。各要素でコールバック関数を実行する一般的なデータ構造トラバース関数を作成できます。
onemasse 2010年

5

はい、あります。レイジー初期化、シングルトン、オブジェクトプール、オブジェクト状態などは、純粋なCで簡単に実装できます。

例(遅延初期化)


はい、おそらくそうですが、通常、これらのパターンの1つをCでどのように実装しますか?
onemasse 2010年

2
より良い点は、Cやその他の言語で悪いデザインパターン(シングルトン、別名グローバル変数など)を実装してはならないということです。
R .. GitHub STOP HELPING ICE

4
@R .:シングルトン自体が悪いパターンだとは思いません。それができ、ある場合に有用で生産することができる特定の場合にはコードの品質にとって有害です。しかし、開発者は、必要があり、設計pattersの長所と短所を知っており、慎重にそれらを使用しています。
vlad 2010年


2

デザインパターンは、多くの場合、既存の環境が提供するものから1レベルだけのものをモデル化します。Cを標準ライブラリとともに環境として使用する場合、著名なデザインパターンはオブジェクト指向です。


2

仮想ファイルシステムは、デザインパターンを学習するための完璧な例です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.