Sap-abap-encapsulation

提供:Dev Guides
移動先:案内検索

SAP ABAP-カプセル化

カプセル化はオブジェクト指向プログラミング(OOP)の概念であり、データとデータを操作する機能を結び付け、外部の干渉や誤用から安全に保ちます。 データのカプセル化により、データを隠すという重要なOOPコンセプトが生まれました。 カプセル化は、データとそれらを使用する機能をバンドルするメカニズムであり、データの抽象化は、インターフェイスのみを公開し、実装の詳細をユーザーから隠すメカニズムです。

ABAPは、クラスと呼ばれるユーザー定義型の作成を通じて、カプセル化とデータ隠蔽のプロパティをサポートします。 前に説明したように、クラスにはプライベートメンバー、保護メンバー、パブリックメンバーを含めることができます。 デフォルトでは、クラスで定義されているすべてのアイテムはプライベートです。

インターフェイスによるカプセル化

カプセル化とは、実際には1つの属性とメソッドを異なるクラスで変更できることを意味します。 そのため、データとメソッドには、別のクラスに非表示にできるさまざまなフォームとロジックを含めることができます。

インターフェイスによるカプセル化を考えてみましょう。 インターフェイスは、異なるクラスで異なる機能を持つ1つのメソッドを作成する必要がある場合に使用されます。 ここでは、メソッドの名前を変更する必要はありません。 同じメソッドを異なるクラス実装で実装する必要があります。

次のプログラムには、インターフェイスinter_1が含まれています。 属性とメソッドmethod1を宣言しました。 また、Class1やClass2などの2つのクラスを定義しました。 したがって、両方のクラス実装でメソッド「method1」を実装する必要があります。 メソッド「method1」をクラスごとに異なる方法で実装しました。 選択の開始では、2つのクラスに対して2つのオブジェクトObject1とObject2を作成します。 次に、異なるオブジェクトでメソッドを呼び出して、別々のクラスで宣言された関数を取得します。

Report ZEncap1.
Interface inter_1.
   Data text1 Type char35.
   Methods method1.
EndInterface.

CLASS Class1 Definition.
   PUBLIC Section.
      Interfaces inter_1.
ENDCLASS.

CLASS Class2 Definition.
   PUBLIC Section.
      Interfaces inter_1.
ENDCLASS.

CLASS Class1 Implementation.
   Method inter_1~method1.
      inter_1~text1 = 'Class 1 Interface method'.
      Write/inter_1~text1.
   EndMethod.
ENDCLASS.

CLASS Class2 Implementation.
   Method inter_1~method1.
      inter_1~text1 = 'Class 2 Interface method'.
      Write/inter_1~text1.
   EndMethod.
ENDCLASS.

Start-Of-Selection.
   Data: Object1 Type Ref To Class1,
      Object2 Type Ref To Class2.

   Create Object: Object1, Object2.
   CALL Method: Object1→inter_1~method1,
                Object2→inter_1~method1.

上記のコードは、次の出力を生成します-

Class 1 Interface method
Class 2 Interface method

カプセル化されたクラスは、外部の世界にあまり依存していません。 さらに、外部クライアントとのやり取りは、安定したパブリックインターフェイスを通じて制御されます。 つまり、カプセル化されたクラスとそのクライアントは疎結合です。 ほとんどの場合、明確に定義されたインターフェイスを持つクラスは、別のコンテキストにプラグインできます。 正しく設計されると、カプセル化されたクラスは再利用可能なソフトウェア資産になります。

戦略の設計

私たちのほとんどは、実際にクラスメンバーを公開する必要がない限り、デフォルトではクラスメンバーをプライベートにするという苦い経験を​​通じて学んでいます。 それはちょうど良いカプセル化です。 この知恵は、データメンバーに最も頻繁に適用され、すべてのメンバーにも等しく適用されます。