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

    技术2022-05-11  71

           今天将继续解读"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,今天就说这些了,就是"封装";信息的隐藏.要过年了,我的心情也不错,因为我又长大了一岁,又学会了很多东西,又遇到了很多挫折,又更坚强了,又更成熟了...:)


    最新回复(0)