注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 [业内传闻]今天,7月25日..
 帮助

Delphi高手突破学习笔记三


2008-05-09 15:00:27
 标签:笔记 Delphi 高手   [推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://wzcsying.blog.51cto.com/284684/76094
一、继承
关于继承,我只记录了一段话,很经典:
         失败的继承关系设计,总是让基类拥有比派生类更多的额外的能力,哪怕是一个函数/方法。因此,记住总是弱化你的基类,强化你的派生类,总是让派生类比基类更强大。
二、多态
        Charlie Calvert对多态的描述——多态性是允许用户将父对象设置成为与一个或更多的它的子对象相等的技术,赋值之后,基类对象就可以根据当前赋值给它的派生类对象的特性以不同的方式运作。
        更简单地说就是:多态性允许用户将派生类类型的指针赋值给基类类型的指针。多态性在Object Pascal中是通过虚方法(Virtual Method)实现的。
         什么是“虚方法”?虚方法就是允许被其派生类重新定义的方法。派生类重新定义基类虚方法的做法,称为“覆盖”(override)。
两个概念:覆盖(override)和重载(overload):
         覆盖是指派生类重新定义基类的虚方法的方法。而重载,是指允许存在多个同名函数,这些函数的参数表不同(或许是参数个数不同,或许是参数类型不同,或许两者都不同)。重载的概念并不属于“面向对象编程”。重载的可能的实现是:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说)。
        重载:函数的调用入口地址在编译期间就已经静态(记住:是静态!)确定了。这样的确定函数调用入口地址的方法称为早绑定。
        覆盖:当派生类重定义了基类的虚方法后,由于重定义的派生类的方法地址无法给出,其调用地址在编译期间便无法确定,故基类指针必须根据赋给它的不同的派生类指针,在运行期动态地(记住:是动态!)调用属于派生类的虚方法。这样的确定函数调用地址的方法称为晚绑定。
        引用一句Bruce Eckel的话:“不要犯傻,如果它不是晚绑定,它就不是多态”。
注意:重载只是一种语言特性,与多态无关,与面向对象也无关!
 
        封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块,它们的目的都是为了代码重用。而多态则是为了实现另一个目的——接口重用。

本文出自 “烧赤壁的博客” 博客,请务必保留此出处http://wzcsying.blog.51cto.com/284684/76094





    文章评论
 
 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: