深入Delphi编程(OOP)

豆豆网   技术应用频道   2007年11月19日  【字号: 收藏本文

内容摘要:OOP的英文全称是Object Oriented Programming,翻译过来就是面向对象编程。OOP是一种非常重要的编程思想。也许你会对这种抽象的东西不感兴趣,可是几乎任何一个高手都会告诉你:“语言并不重要,重要的是编程思想。”

  如果将这个原则放到现实世界中,那就很容易理解了:“狗”继承自“动物”,因为狗也是一种动物。所以可以将一个“狗”类型的值赋予“动物”类型的变量,因为“狗”具有“动物”的一切特征。但反过来,“动物”不具有“狗”的所有特征,因此反向赋值是不行的。

  那么,这种兼容规则在编程中究竟有什么用处呢?

  请注意下面这段代码:

  var
  MyAnimal1, MyAnimal2: TAnimal;
  Begin
  MyAnimal1 := TAnimal.Create;
  MyAnimal2 := TDog.Create;
  MyAnimal1.Sound;
  MyAnimal2.Sound;
  ...

  MyAnimal1和MyAnimal2都是TAnimal的变量,而且都调用了Sound方法。但是,执行的结果是完全不同的:前者执行的是TAnimal.Voice的代码,而后者执行的是TDog.Voice的代码!其原因很简单,因为MyAnimal1被赋予了TAnimal类型的对象,而MyAnimal2被赋予了TDog类型的对象。也就是说,一个TAnimal类型的变量,当它调用Sound方法时,所执行的代码是不确定的:可能执行TAnimal.Voice的代码,也可能执行的是TDog.Voice的代码,取决于它当时引用的是一个什么样的对象。

  再看:

  MyAnimal1 := TAnimal.Create;
  MyAnimal1.Sound;
  MyAnimal1.free;
  MyAnimal1 := TDog.Create;
  MyAnimal1.Sound;
  ...

  同一个变量MyAnimal1,在第一次调用Sound方法时,执行的是TAnimal.Voice的代码,在第二次时执行的是TDog.Voice的代码。MyAnimal1.Sound这行代码不需要变化,程序可以根据不同的情况赋予该变量不同的对象,从而使它执行不同的代码。这就是多态的定义。

  这个非常重要的特点大大地增加了代码的可复用性。如前所述,只需要简单地写下一行代码,就可以让程序执行不同的功能,因为这个虚拟方法同TAnimal的任何派生类都是兼容的,甚至连那些还没有编写出来的类也是一样。而程序员并不需要了解这些派生类的细节。利用多态性写出来代码,还具有简洁和维护性好的特点。

  现在我们可以回到本文的1.2节结尾处的问题了。抽象方法本身不能够做任何事情,必须在子类中被重载并实现,才能够完成有意义的工作。但抽象方法的存在,相当于为父类留下了一个接口,当程序将一个子类的对象赋予父类的变量时,父类的变量就可以调用这个方法,当然此时它运行的是相应的子类中重载该方法的代码。如果没有这个抽象方法,父类的变量就不能调用它,因为它不能调用一个只在子类中存在、而在父类中不存在的方法!

  关于OOP的介绍就到此这止。在以上这些篇幅里,介绍的只是OOP最基本的一些概念,让读者对OOP有一定的系统认识,也为下文的讨论打好基础 。更多、更深入的东西等待着你自己去发掘。

  本文已经多次强调OOP的重要性,这里还要强调一次:对OOP的掌握程度,在某种意义上决定着你对Delphi世界的理解能力。

作者:左轻侯    责编:豆豆技术应用

正在加载评论...