类的存取级(可见性)
类有五个存取级(可见性):
- 私有的(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;
上面的例子中只用到了三个存储级,在给定的类中可以不用全部存取级,上面的例子就没有用到公布(published)存取级,只要不想要就可以不用任何存取级。但一般起码要有公用段和私有段。