初探Object Pascalのクラス(二)

2244 ワード

クラスのアクセスレベル(可視性)
クラスには5つのアクセスレベル(可視性):
  • プライベート(Private)
  • 公有(Public)
  • 保護(Protected)
  • (Published)
  • 自動(Automated)
  • プログラマーとして、クラスを作成するだけでなく、クラスを使用します.チームプログラミングでは、一部のプログラマーはクラスの作成者であり、他のプログラマーはクラスの使用者である.クラス・アクセス・レベルがクラス・オペレーションで担当する役割を理解するには、まずクラスの使用方法を理解する必要があります.
    どのクラスにもクラスの共通部分があり、これらの共通部分は外部にアクセス可能であり、同時にクラスにもプライベート部分があり、クラスのプライベート部分はクラスの内部実装である.完璧に設計されたクラスとしては、クラスの使用者にとって知る必要がなく、共通ビューから隠すコンテンツの一部も含まなければならない.
    データ抽象(Data abstraction)はクラスの内部実装であり,外部には見えない.
    データ抽象は、ユーザが理解しないクラスの内容を理解することを回避したり、ユーザが混乱を生むべきではないものを混同したりすることを回避したりすることができる.例えば、人々が車に入って鍵を回して車を起動するとき、車の操作に関する具体的な詳細を知りたいですか?もちろんいいえ、人々は知っておくべきものだけを知りたいです.すなわち、安全運転車である.この場合、ハンドル、ペダル、クラッチ、速度計など、自動車と運転者とのインターフェースを表すものにしか関心がなく、運転者はこれらのコンポーネントのどれが彼のニーズに合っているかを知るだけで、自動車を正しく運転することができる.
    逆に、エンジン、駆動システム、電子システムは共通ビューから隠されており、エンジンはハウジングに包まれており、見たくない限り、見なくてもいいし、エンジンの詳細を知る必要はありません.考えてみれば、車の各方面を理解してこそ車を運転することができるなら、車を運転するのはどんなに面倒なことか.同様にクラスも内部実装をプライベートに維持し、クラスのユーザーもこれらの隠された内容を考慮する必要はありません.クラスの内部作業はプライベートですが、ユーザーインタフェースは公開されています.
    保護アクセスレベルは、プライベートクラスメンバーと同様にクラスユーザによってアクセスできませんが、本クラスから派生したクラスは保護クラスにアクセスできます.さらに自動車を例にとると、現在、乗用車を大型バスに拡張する必要があると仮定し、そのためには、自動車の基本的な構造を理解し、少なくとも駆動レバーとフレームをどのように修正するかを知らなければならない.この場合、受けを汚さなければならず、自動車の構造を理解しなければならないが、これらは以前は人々にとって重要ではなかった.
    コンポーネントを記述するときに公開アクセスレベルを使用します.どのコンポーネントの宣言もpublishedセグメントにあり、設計段階でObject Inspectorに表示されます.
    Object Pascalはクラスのアクセスに関するキーワードで、public、private、protected、publishedです.クラスを宣言するときは、メンバーのアクセスレベルを特に宣言し、クラスの宣言はキーワードclassを使用します.次の例を見てください.
    type
      TVehicle = class
      private
        CurrentGear: Integer;
        Started: Boolean;
        Speed: Integer;
        procedure StartElectricalSystem;
        procedure StartEngine;
      protected
        procedure StartupProcedure;
      public
        HaveKey: Boolean;
        Start: Boolean;
        procedure SetGear(Gear: Integer);
        procedure Accelerate(Acceleration: Integer);
        procedure Brake(Factor: Integer);
        procedure Turn(Direction: Integer);
        procedure ShutDown;
      end;

    上記の例では3つのストレージレベルしか使用されず、所与のクラスではすべてのアクセスレベルを使用しなくてもよいが、上記の例では公開(published)アクセスレベルは使用されず、望まない限りアクセスレベルを使用しなくてもよい.しかし、一般的には少なくとも共通セグメントとプライベートセグメントが必要です.