まず、私はプログラミングの初心者なので、あまりからかわないでください。
シグナルが使用されているのを見たのはGUIツールキットだけで、GUIツールキットにはすべて独自のシグナルが付属しています。では、Boost:SignalsはこれらのGUIツールキットでも使用できますか?これは良い考えでしょうか?信号には他にどのようなアプリケーションがありますか?
4 に答える
Signalsは、Smalltalk / Objective Cメッセージや他のさまざまな(C#などの)言語のイベントによく似たイベントメッセージングの実装です。
さまざまなタスクに使用できます。オブザーバーパターンをご覧ください。
なぜオブザーバーパターンを使用するのですか?
利点は主に組織的なものです。大規模なアプリケーションで作業する場合は、開発チームの一貫性を維持するのに役立つ再利用のパターンを適用することが重要です。
特定のパターンの実装が事実上(またはそれに近い)になると、新しいチームメンバーが以前に実装を使用したことがある場合だけでなく、人気があるため、新しいチームメンバーのリードアップ時間が短縮される可能性が高いため、特に便利です。実装の数は、学習をスピードアップするために利用できる広範なリソースとドキュメントがあることを意味します。
純粋なコードの観点からは、すべてのパターンが肥大化したように見えますが、ソフトウェア開発に伴うコストの60%以上がメンテナンスのライフサイクルにあることを理解し始めると、一貫性を保つために追加のコードを追加する価値があります。
他の利点は、実装のスタイルに応じて、ソフトウェアの再利用を支援することです。オブザーバーパターンは、クラスをモジュール化して相互に分離するのに役立ちます。これは、さまざまなチームがコンポーネントをより簡単に構築できるという点で、または単にコンポーネントの交換が容易であるという点で、組織的なメリットでもあることをお勧めします。
ほんの 2 セントですが、シグナルは GUI ツールキットで (またはそのために) 使用されるだけではありません。これらは、データのプロデューサーとそのレシーバーを分離したいコンテキストで使用されます (たとえば、上記のオブザーバー パターン)。そのアイデアをスレッドと組み合わせると、アクターを簡単に実装できます。これは、並行タスクの興味深いパターンです (たとえば、Erlang と Scala はアクターを使用します)。
考えられる用途の1つは、GUIツールキットの実装です。基本的には、ネイティブシステムからメッセージ(またはそれらがたまたま呼び出されたもの)を取得して信号を生成するように配線を設定します。そこから、信号のルーティングと処理のためのコードは(少なくともある程度)移植可能になります。
他の人が言及したオブザーバー パターンに加えて、コールバック関数を作成する必要がある場合はいつでも、あるクラスが別のクラスに何かが発生したことを通知できるようにする必要がある場合は、代わりにシグナルとスロットを使用できます。コールバックに対する大きな利点は、コールバック関数を追加および削除するために多くのボイラー プレート コードを処理し、呼び出し元または呼び出し先がスコープ外になったときに自動的に切断されることです。
ただし、コールバックは実際には Observer パターンの単なるインスタンスです。