2017-08-22 4 views
-2

私はマイクロコントローラ用のプログラムをC++で書いています。それに接続されたコンピュータからいくつかの数値を入力する関数を書く必要があります。C++は関数の流れを整理します

この関数は、コンピュータからデータ(文字)を取得し、その文字が有効かどうかをチェックし、実際の数字で文字を変換するなど、多くの異なる明確なタスクを実行する必要があります。単一の機能として書かれていると、少なくとも500行の長さになります。だから私は短い関数のグループと他のものを唯一意味のある順序で呼び出す1つの "main"関数を書くでしょう。これらの関数は、コードの残りの部分では決して呼び出されません(もちろんmain関数を除く)。ひとつ最後のこと - 関数はお互いにかなりの変数を渡す必要があります。


これらの機能を整理するにはどうすればよいでしょうか?私の最初の難しさは、パブリックセクションの "main"関数だけを持つクラスと、他の関数と、プライベートメンバーとしてさまざまな関数で共有される変数を作成することでしたが、これが良い方法であるかどうか疑問に思っていました。この「機能のグループ」私はそのような何かをする必要があります使用する例えば「クラス」のC++概念...:

class GetNumbers { 
    public: 
     //using the constructor as what I called "main" function 
     GetNumbers(int arg1, char arg2) { 
      performFirstAction(); 
      performSecondAction(); 
      ... 
     } 
    private: 
     performFirstAction() {...}; 
     performSecondAction() {...}; 
     ... 

     bool aSharedVariable; 
     int anotherVariable; 
     ... 
}; 

そして、私が実際に入力するコンピュータからこれらの数字を必要とします: 「メイン」機能通常のクラスメソッド(やないコンストラクタ)を作成

GetNumbers thisMakesNoSenseInMyOpinion (x,y); 

はさらに悪化するようだ:

GetNumbers howCanICallThis; 
howCanICallThis.getNumbers(x,y); 
... 
//somewhere else in the same scope 
howCanICallThis.getNumbers(r,s); 

答えて

0

これは実際にはソフトウェア設計の質問です。正直言って、他の人たちとコンポーネントを共有していない限り、私は本当にカプセル化されているかについてあまり心配しています。

多くのライブラリ(新旧)は、特定の方法で使用される関数ファミリを作成することがあります。時には彼らは "ステートマシン"を内蔵していますが、特定の順序で機能が使用されていることを強制する特別な方法はありません。これはよく書かれている限り、大丈夫です。関数のグループは、同じ単語で接頭辞を付けられ、ライブラリとしてパッケージ化され、再利用可能な場合、誰かがdllにリンクして適切なヘッダーを含めることができます。

https://en.wikipedia.org/wiki/Finite-state_machine

有限状態機械(FSM)または有限状態オートマトン(FSA、複数:オートマトン)、有限オートマトン、または単に状態マシンは、計算の数学的モデルです。

計算のセットを編成するもう一つの方法は、クラスとしてそれらをパッケージ化することで、コンストラクタは、必要な入力を受け入れることができ、そして...

  1. キックコンストラクタで必要な計算オフ
  2. ようなパブリック関数呼び出しの後に計算キックオフ - 基本的にCと一緒にfunctor(()演算子のオーバーロードセットを持つクラス)
  3. にそれを作る>(計算)を
  4. 偶然の他のオプション...

これには、後で結果を計算する方法が複数ある場合は、戦略パターンと呼ばれるものを使用してオンザフライで置き換えることができるため、いくつかの利点があります。コンピュータプログラミングにおいて

https://en.wikipedia.org/wiki/Strategy_pattern

、(また、ポリシーパターンとして知られている)ストラテジーパターンは、実行時にアルゴリズムを選択可能にする行動デザインパターンです。

最終的には、一貫している限り、どちらを使用するかは関係ありません。あなたが特定の言語でもっと「慣用的」なものを作ろうと思っているのであれば、そこに行って、ウェブ上のコードを見て、物事がどのように行われているかを感じる必要があります。異なるコミュニティは、最終的に主観的に異なるスタイルを好む。

関連する問題