初探Object Pascal的类(二)

类的存取级(可见性)

类有五个存取级(可见性):

  • 私有的(Private)
  • 公有的(Public)
  • 保护的(Protected)
  • 公布的(Published)
  • 自动的(Automated)

作为一个程序员,不仅要创建类而且要使用类。在团队编程中,一些程序员是类的创建者,而另一些程序员是类的使用者。要理解类存取级在类操作中的所担当的角色,首先必须理解怎样使用类。

在任何类中,都有类的公用部分,这些公用部分对外界是可存取的,同时类也有私有部分,类的私有部分是类的内部实现。作为一个设计完美的类还需要包括一部分内容,这些内容对类的使用者来说是不需要知道的,要把这部分内容从公用视图中隐藏掉。

数据抽象(Data abstraction)就是类的内部实现,对外部来说不可见。

数据抽象可以使用户避免了解一些用户不要了解的类的内容,也可以使用户避免混淆一些用户本不该产生混淆的东西。例如,当人们进入汽车并转动钥匙启动汽车时,想知道有关汽车操作的具体细节么?当然不,人们只想知道需要知道的东西。即安全驾驶汽车,在这种情况下,人们只关心类似于方向盘、脚踏板、离合器、速度计等等代表汽车与驾驶员之间接口的东西,驾驶员只需要知道这些组件的哪个符合他的需要,能正确驾驶汽车就可以了。

相反,发动机、驱动系统和电子系统就从公用视图中隐藏掉,发动机被车壳包住,只要不想看它,就可以不要看它,不需要知道有关发动机更具体的细节。想想看,如果需要了解汽车的方方面面才能驾驶汽车的话,那么驾驶汽车该多麻烦呀。同样类也保持它的内部实现私有,类的用户也不必考虑这些隐藏起来的内容。类的内部工作保持私有,但用户界面是公开的

保护存取级与私有类成员一样是不能被类用户存取的,但由本类派生的类可以存取保护类。再以汽车为例子,假设现在需要把小汽车扩展成一个大客车,为了做到这一点,就必须要了解汽车的一些基本结构,起码必须知道怎样修改驱动车杆和车架。在这种情况下,就必须得弄脏受,并且必须要了解一些汽车的结构,而这些以前对人们来说并不是很重要。

编写组件时要用公布存取级,任何组件的声明都在published段,在设计阶段它出现在Object Inspector中。

Object Pascal与类的存取有关的关键字,它们是publicprivateprotectedpublished,当声明类的时候要特别声明其成员存取级,类的声明用关键字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;

上面的例子中只用到了三个存储级,在给定的类中可以不用全部存取级,上面的例子就没有用到公布(published)存取级,只要不想要就可以不用任何存取级。但一般起码要有公用段和私有段。

posted on 2011-12-30 01:43  pchmonster  阅读(1937)  评论(1编辑  收藏  举报

导航