SAPABAP-カプセル化

カプセル化は、オブジェクト指向プログラミング(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

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

設計戦略

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