2017-01-28 17 views
5

私はC++で大規模なプログラムを設計するのにはかなり新しいです。私は一連の操作を書いています。それぞれの操作には、独自のクラスがあり、ProcessMgrクラスによって呼び出されます。したがって、その基礎となるの多くを露出させない、インターフェイスと実装の設計構造?

class ProcessMgr 
{ 
private: 
    class OperationOne; 
    class OperationTwo; 
    class OperationThree; 
} 

class ProcessMgr::OperationOne 
{ 
public: 
    ... 
}; 
class ProcessMgr::OperationTwo 
{ 
public: 
    ... 
}; 
class ProcessMgr::OperationThree 
{ 
public: 
    ... 
}; 

これはOperationクラスへのアクセスの種類を制御するために私を可能にします:

私は、各操作を呼び出すことができ、そこからインターフェース・クラスとしてProcessMgrを使用していますコード。

このコードを使用するユーザーは、特定の方法でOperationクラスと対話でき、Operationsクラスのすべてのコンテンツに完全にアクセスできないことが重要です。

私の質問:

1)これは、大規模なプログラムを設計する良い方法ですか?このように構造化されたCURLのようなほとんどの図書館はありますか?

2)インターフェイスと実装を分離する方法が改善されていますか?

+1

プログラムの全体的なデザインは多くの変数に依存しますが、コードの目的を説明するとベストなデザインを理解するのに役立ちます。 – ZivS

+0

ここではC++プログラマーではありませんが、名?これはC++のものですか?それは完全に私を捨てた.. – CKing

+0

更新された質問@ZivS –

答えて

4

C++(または他のOOP言語)の通常のインターフェイスは、定義を提供します。 "operation-classes"はインターフェイスから派生する必要があり、実装をクライアントから切り離す必要があります。この原則はDependency inversion principle(DIP)と呼ばれています。

DIPから、共通のUMLダイアグラムは次のようになります。クライアントはインタフェースとだけ精通している enter image description here

ので、あなたが特定のサブクラスへのアクセスを制御することができます。 実装は次のようになります。

class ProcessMgr { 
    virtual void foo() = 0; 
    virutal void bar() = 0; 
} 

class Operation1 : public ProcessMgr { 
    virtual void foo() { ... } 
    virtual void bar() { ... } 
} 

class Operation2 : public ProcessMgr { 
    virtual void foo() { ... } 
    virtual void bar() { ... } 
} 

DIPはSOLIDと呼ばれる非常に良い原則、一連の原則です。大きなプロジェクトをデザインするためには、はるかに多くのことがあり、学びます。しかし、SOLID原理は、ソフトウェアアプリケーションを設計する方法を理解する良いスタートです。

関連する問題