如何看懂面向对象的程序

到目前为止,个人认为,要看懂程序(除去语法知识外),就是要明白该程序包含的重要骨干对象,明白对象的定义,以及这些对 象之间的层次结构,对象之间的逻辑关系。 有这些的文档知识,看起来就简单;没有这些方面的文档知识,只能靠自己摸索。

那什么是对象?这是一个用的比较泛滥的词汇。

面向对象里所说的对象,是一个数据结构加上多种操作;

基于对象里所说的对象,是仅是一个数据结构,没有操作。但实际上还是需要提供操作的,只是不以对象的方式体现,(以函数的方式) 这些操作可能比较分散。

举例来说,Windows中,可以认为一切设备都是对象,这是基于对象的 在UNIX 中,可以认为一切设备都是文件,这也是基于对象的。而面向对象,则可以参考Java.

对象,多态性是体现在方法上,比如C++,直接用虚拟方法(函数)直接实现类的多态,而JAVA 则是为了简单起见,直接用抽象类来代替了。我觉的,方法的虚拟是实现类多态的本质。一个方法,有相同的方法名,却有着不同的方法实现,这就实现了方法的多态,进一步的说是实现了类的多态。

对象,继承性是体现在数据结构和方法上的。C++里面有着具体的实现,比较复杂。父类和子类,父类的数据结构、子类的数据解如何初始化?父类的数据结构、子类的数据结构如何析构?等等问题,在JAVA 里面就简单化掉了。

讲了这么多,要看懂程序,无非是说明,面向过程(以函数为主),面向对象(以对象为主)的程序两者之间设计的注重点上不同的。

看懂程序所说的对象(最上段落说的对象),显然在概念上大于程序语言上的对象,但又是基于程序语言上对象这个概念。

另加2010-4-13:

面向对象和面向过程编程的区别,还体现在继承上。之前对继承的概念不是很透彻,这可能是因为受传统教育中,继承学习教育的时候的误导。老师们或者书上都是从一个具体的事情出发,比如动物,动物下面有猴子,人类;鱼啊什么的。把继承的概念通过这种类型的比喻说明,自然给我造成了理解的不透彻。父类,特别指的是父类中的一个方法,比如 void eat(){ },其实对于子类来说,没有什么意义,因为子类的吃是不同的,子类中xx要自己实现 void eat() { }。要理解继承(或者说实际中的运用),应该从下往上说。即,先说子类,把子类确定的方法移动到父类中,而在子类中去实现不确定的方法。

   可以把知道的事情先理出来,然后再去确定未知的因素

   虚函数或者说虚拟类,就是一种这样实现的思路,而继承其实也可以理解成是这么的一种实现思路(通过或者也可以不通过虚拟方法,子类中hook父类的方法,父类中的方法是子类应能确定的方法,而子类的hook方法本身是不确定,得视具体子类而定。其次,还可以使用super这个指针,把一个方法内的前块或者后代码,移动到父类当中去)。

继承是类的继承,而类有数据结构和操作函数构成,上面讲了方法(函数),现在来讲数据结构。对数据结构而言,那么传统教育的例子就有意义了。父类中能存在共性的数据结构,每个子类都能拥有。比如动物,有一个布尔类型的数据结构,boolean isAlive ,相信这个对于子类来说都是有意义的。

例子:1

01 class Father {
02     /** 可以先实现,能确定的事情*/
03     public void begin(){
04        
05         done();
06     }
07    
08     public void done(){
09         System.out.println("I am Father");
10     }
11 }
12
13 class Sun extends Father{
14    
15     public void done(){
16         System.out.println("I am Sun");
17     }
18
19 }
20
21 public class main {
22
23     public static void main(String[] args) {
24        
25         Sun s= new Sun();
26        
27         s.begin();
28
29     }
30
31 }

输出是:I am Sun

例子:2

01 interface Animal {
02     public void done();
03 }
04
05 class Father1 implements Animal {
06    
07     public void done(){
08         System.out.println("I am Father");
09     }
10 }
11
12 class Father2 implements Animal {
13    
14     public void done(){
15         System.out.println("I am Sun");
16     }
17 }
18
19 public class main {
20
21     public static void main(String[] args) {
22        
23         Father1 a = new Father1 ();
24         Father2 s = new Father2 ();
25         begin(a);
26         begin(s);
27        
28     }
29    

     /** 可以先实现,能确定的事情*/
30     public static void begin(Animal a){
31         a.done();
32     }

33
34 }

输出是:I am Father1
              I am Father2

例子1是上下关系、例子2是平行关系实现本文中红颜色字所包含的那个意思。



郑重声明:资讯 【如何看懂面向对象的程序】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——