Cプログラムオブジェクト向け設計の詳細

2197 ワード

前言
C++や他のオブジェクト向け言語を学んだことがある人は、オブジェクト向けプログラミングに多くのメリットがあることを知っています.オブジェクト向けプログラミングにはいくつかの特徴があります.
オブジェクト向けプログラム設計における概念は主に、オブジェクト、クラス、データ抽象、継承、動的バインド、データパッケージ、マルチステート、メッセージングを含む.これらの概念を通じて対象に向かう思想が具体的に体現された.
1)オブジェクトオブジェクトは、実行期間の基本エンティティであり、データをカプセル化して操作するコードの論理エンティティである.
2)クラスは同じタイプのオブジェクトの抽象である.1つのオブジェクトに含まれるすべてのデータとコードは、クラスによって構築できます.
3)パッケージ化は,外部からの干渉や不確実性を回避するために,データとコードを結合することである.オブジェクトの一部のデータとコードはプライベートであってもよく、外部からアクセスできないため、データとコードの異なるレベルへのアクセス権を実現することができます.
4)継承継承は,あるタイプのオブジェクトに別のタイプのオブジェクトを取得させる特徴である.継承によりコードの再利用が可能になります.既存のクラスから派生した新しいクラスは、元のクラスの特性を自動的に有し、独自の新しい特性を持つことができます.
5)多態多態とは,異なる事物が異なる表現形式を持つ能力を指す.マルチステートメカニズムは、異なる内部構造を有するオブジェクトが同じ外部インタフェースを共有できるようにし、コードの複雑さを低減する.
6)動的バインディングバインディングとは、プロシージャ呼び出しを対応するコードにリンクする動作を指す.動的バインドとは、所与のプロシージャ呼び出しに関連付けられたコードが実行期間にのみ知られるバインドであり、マルチステート実装の具体的な形式である.
7)メッセージングオブジェクト間ではコミュニケーションが必要であり,コミュニケーションの経路はオブジェクト間で情報を送受信することである.メッセージの内容には、メッセージを受信するオブジェクトの識別、呼び出す必要がある関数の識別、および必要な情報が含まれます.メッセージングの概念は、現実世界の記述をより容易にする.
8)メソッドメソッド(Method)はクラスができることを定義するが,必ずしもやるとは限らない.
次に、以上の特徴を一歩一歩実現していきましょう.
抽象(オブジェクトとクラス)
抽象的な鍵はクラス概念の出現であり、方法とデータをカプセル化してクラスを形成し、このクラスは異なるオブジェクト間の共通部分を体現し、この過程は抽象である.
  • クラスの実装
  • クラスを実現する方法は簡単で、C言語のstructタイプを使えばいいです.1つの例は次のとおりです.
    struct sample{
        
        int a;
        int (*look)();
    
    }

    これにより、struct sampleは関数自体ではなく関数のポインタのみを含む点で、C++クラスとは異なる「クラス」が実現されます.したがって、[オブジェクト作成](Object Creation)ではC++とは異なります.
  • オブジェクトの作成
  • 「オブジェクト」を作成する場合、struct sampleタイプの変数空間を割り当てることができます.一般的には、動的割り当て空間関数mallocを使用します.割り当て空間の後、lookポインタを割り当てて、次のように完全なオブジェクトを形成する必要があります.
    int look(){
        printf("hello world");
    }
    sample *Crete(){
        struct sample* p =(struct sample *) malloc(sizeof(struct sample));
        p->look = look;
        return p ;
    }
    

    このクラスのインプリメンテーションとオブジェクトの作成が完了しました.
  • オブジェクトの参照
  • クラスとオブジェクト作成関数を実装すると、プログラムでこのオブジェクトを参照できます.次のようになります.
    #include /  create      >
    int main(void){
        sample * tmp;
        tmp =Create();
        tmp->look();
        return 0;
    }

    以上から,C++のように静的に割り当てることなく動的にオブジェクトを割り当てるしか実現できないが,大丈夫であり,動的に空間を割り当てることも我々にとって利点がある.
    未完待続...次編:CプログラムはJava interface機能を実現する.