java 面向对象程序设计浅谈三



java 面向对象程序设计浅谈三。今天将继续解读”java 面向对象程序设计”,今天将要博的是:封装,前面所设计的Animal类,其中legs属性是让其他所有的类都能够直接使用或是修改,这样的方式直接简单,但有个严重问题,legs 属性是int类型,范围很大,可以是负数,这和现实对象中的数据有所不同,所以我们必须要保护这类的属性,防止别人乱用,保护的方式就是把属性隐藏起来,只能通过特定的方法才能访问,修改这个属性.这是面向对象程序设计的一个非常重要的观念—–信息隐藏(information hidin).目的主要有两个,一个就是刚刚提到的保护类中的数据,不让这些数据被错误地使用或破坏;第二个就是隐藏些不需要给别人知道的细节,以防止别人误会.

为了实现信息隐藏的目标,把原来类中的public,改成private,private 是访问权限最小的,只有它自己可以访问.下面将原来的UML重写:

Animal

-legs:int

+Animal()

+Animal(int1:int)

+eat()

+move()

+getLegs():int

+setLegs(1:int)

 

      图中legs属性前面是表示public的加号”+”,变成了表示private的”-”.而下面多了两个方法,一个是setLegs,一个是getLegs,下面用java写出来来.


public class Animal …{     private int legs;     public Animal()     …{          setLegs(4);      } public Animal(int l) …{ setLegs(l); } public void eat() …{ System.out.println(“eating”); } public void move() …{ System.out.println”Moving”); } public void setLegs(int l) …{ if(l!=0&& l+=2&&l!=4)…{ System.out.println(“Wrong number of legs!”); return; } legs=l; } public getLegs()…{ return legs; } }

 

这个新版的Animal类程序代码,除了上面说的信息隐藏,在setLegs方法中,我们还验证传入的数值是不是0,2,4,即顺便检查一下从构造函数所传入的参数值是否正确.

信息隐藏只是”封装”(encapsulation)的一个最主要的目的,封装是面向对象程序设计中一个重要的特性,它除了把一些重要的信息隐藏起来外,还有几个特点:

隐藏类实现的细节:

对于用户来说,因为他看不到已经声明为private的属性,只能由一些特定的方法才能来访问这些数据,至于类内部到底如何动作的,用户并不知道也不需要知道.

强制用户通过单一窗口访问数据:

因为信息已经被隐藏起来,所以除了通过指定的方法之外,没有别的路径可以访问到类中的数据,因些每个人使用此类的方式都是一致的.

程序维护容易:

因为通过单一窗口来访问对象的一些属性和数据,所以用户只需要知道窗口是哪一个,至于类内部如何去取得,可能直接是返回一个变量值,或是去读取数据库,或是从网络上捉取,都不会影响用户的使用,所以在程序代码的更新或维护上变得更容易.

ok,今天就说这些了,就是”封装”;信息的隐藏.要过年了,我的心情也不错,因为我又长大了一岁,又学会了很多东西,又遇到了很多挫折,又更坚强了,又更成熟了…:)