面向对象地本质-抽象

来源:互联网 发布:linux自动执行r脚本 编辑:程序博客网 时间:2024/05/22 04:45
 什么是面向对象的本质?近日在阅读一位网友在CSDN博客上发表的文章,作者认为对象,对象的职责,以及对象之间的交互构成了OO思想的本质。在我看来,抽象更接近OO思想的本质。我是从以下几点考虑的:
1.抽象使我们更接近于事物的本质。抽象的过程就是一个提炼存在于事物之间共同拥有的元素,而这些事务之间共同拥有的元素往往是这一事物区别于其他事物关键的东西,这些元素就构成了事物的本质。


2.抽象的思维方式使我们能够控制问题域或者系统的复杂度,从而使我们能够找到解决问题的方式。一个问题域或者系统有很多具体的,细节的东西,这些具体的,细节的东西相互交织,使我们很难对问题域(或者系统)进行正确的分析,也就是我们平常所说的无从下手。而抽象的强大优势就在于它可以使我们暂时忽略这些具体的,细节的东西,这样呈现在我们面前的就是一个相对简单的问题域(或者系统)。通常的情况下,我们会根据抽象度的不同,将问题域(或者系统)划分成不同的层次,越往上,抽象度越高,涉及到细节的东西就越少。通过这样的分析,我们就更能把握问题域(或者系统)。


3.抽象是继承和多态的基础。在抽象的过程中,我们获得是事物本质的东西和事物独特的东西,这样我们很自然的认识到抽象的事物和具体的事物之间是一种继承的关系,而他们之间的不同性可以通过多态来表现出来。

在分析什么是OO思想本质的时候,我们不得不提及一本OO领域相当经典的一本书:GoF的<设计模式>。这本书向我们传达OO思想中最为重要的一个思想:任何可能变化的地方都可以抽象出一个抽象基类,当我们利用抽象基类进行操作,进行交互的时候,我们已经为随后的扩展敞开了一扇大门。在这里核心的思想就是抽象,由于抽象的过程很难把握,所有抽象就成了OO设计的难点。

在另一本经典巨著<Code Complete>中,作者强调了控制系统复杂度的在计算机软件系统中的重要性,我们可以通过在设计阶段使用抽象的方法进行系统分析;在系统的实现阶段,通过封装和信息隐藏来控制系统的复杂度。这本书也强调了抽象在计算机软件系统的重要性。

对抽象的分析和理解,使我们越来越不关系对象的内部细节(至少在开始编码之前),而是关心这些对象能提供那些功能。抽象的结果表现为一组(或者多组)具有内部联系的接口的组合。这时候虽然我们的设计思想还处在OO思想的范畴内,但是更确切的说,我们已经转化到"面向接口"的设计思想上了。面向接口思想已经得到了广泛的应用,无论从Java语言规范,到COM标准规范,无不体现了"面向接口"的思想。

原创粉丝点击