快捷搜索:

Java编程思想面向对象逻辑思维方法

什么是面向工具的设计思惟?大概有不少初学者对这个观点还有许多不明白的地方,分外是这个处于新旧思惟交替的期间,许多人刚刚学完现在看来是快要淘汰的只是面向历程的说话。他们的脑筋还没有离开面向历程思惟的束缚,昂首却发明,“面向工具”早已经盛行开来,这个陌生的词漫天飘动。随便拿起一本盛行谋略机技巧册本,那里会没有“面向工具”的字眼!于是心中便惶惑了:什么叫“面向工具”?不感兴趣者,一带而过;有志于在这方面成长的,慌忙找到一本有关册原本啃究竟什么是“面向工具”。然而,冲要破思惟的束缚,说难也不难,说到要深刻熟识却也不轻易。笔者在做了一些轻量级的事情后,颇以为有点心得,不怕贻笑大年夜方,写出已供广大年夜同业品评斧正。

“工具(Object)”一词,早在十九世纪就有征象学大年夜师胡塞尔提出并定义。工具是天下中的物体在人脑中的映象,是人的意识之所以为意识的反应,是做为一种观点而存在的先念的器械,它还包括了人的意愿。举例阐明吧。当我们熟识到一种新的物体,它叫树,于是在我们的意识傍边就形成了树的观点。这个观点会不停存在于我们的思维傍边,并不会由于这棵树被砍掉落而消掉。这个观点便是现实天下傍边的物体在我们意识傍边的映象。我们对它还可以有我们自己的意愿,虽然我们并不必要付诸实现——只要在你的脑中想着把这棵树砍掉落做成桌子、凳子等——我们就把它叫做意向。于是,工具便是客不雅天下中物体在人脑中的映象及人的意向。只要这个工具存在我们的思维意识傍边,我们就可以籍此判断同类的器械。譬如,当我们看到别的一棵树是,并不会由于所见的第一棵树不在了掉去了供参照的模板而不熟识这棵树了。当我们打仗某些新事物时,我们的意识就会为这些事物确立一个工具。当然这个历程是怎么形成的,那就不是我们所能评论争论的问题了。上面所说的工具钻研的是一样平常意义上的问题,因而它可以外推到统统事物。我们常常所说的“工具”,一班指的是办理信息领域内所碰到问题的措施。分外是利用软件技巧来决问题的措施。如我们常常碰着的面向工具的编程(Object-Oriented Programming)、面向工具的阐发(Object-Oriented Analysis)、面向工具的设计(Object-Oriented Design)等。利用前面所先容的关于工具的观点,可以对这些问题做进一步的阐发。在面对较繁杂的系统,我们可以将它作为一个工具来进行阐发。一个系统(办理某个问题的全套办理规划)作为一个工具,可以由多个部分组成。同样,这个工具也可以由多个工具组成。对付同类的事物,可以由一个工具来表示。这样做的益处是显而易见的,它机动而高效,可以大年夜大年夜减轻设计职员的事情量,简化实际的模型。举一个例子。在关系型数据库的设计傍边,我们可以把一个元组算作工具,给它定义一组操作措施。这些措施将适用于所有元组,从而我们不必在更大年夜的范围内去细致的斟酌不合的元组(如判断一个元素是否合法):由于它们有一组公共的面向本身的措施,它们“自己”可以“办理”自己的问题。更上一层的工具可所以一个表、视图等。表工具在元组工具的根基上又有它们自己的措施,如增添、删除等。从这个层面上讲,它也只必要做“自己”的工作,由于有元组工具的支持,它无须去斟酌像元素是否合法这类的工作。以致,无意偶尔为了满意我们还可以将元素或表群算作时工具并定义它们自己的措施。这样,更能显示面向工具的上风。

上面所评论争论的可以说是面向工具的阐发措施。在详细的设计历程傍边,还应该采纳适当的要领。由于面向工具的思惟固然很先辈,假如做得不好的话,同样不能达到预期的效果。这主要表现在处置惩罚工具与工具的关系上没有做好,工具与工具的层次不分明。如上面所举得关系型数据库得例子,假如在元组层面上得工具过多得斟酌一个表工具得身分,或一个表层面上工具过多地斟酌一个元组工具的身分,以致去斟酌元素层面上的身分,这些都不是好的面向工具的设计措施。这一点,在说话实现方面,Java比C++更有上风,由于它不允许多重承袭,从而使工具之间的关系更明确。谁也不会否认C++的功能更强大年夜,然则它也要由次付出伟大年夜价值——当现在代码库成长到必然程度、必然规模时,个工具之间的层次关系将变得非常繁杂,给后继应用者得进修、理解带来很大年夜的艰苦,利用上很难把握。别的,虽然C++具备面向工具的处置惩罚能力,但它照样保留了很多面向历程的器械。用C++完全可以不用面向工具的思惟来进行法度榜样设计,当然人们不会这样去做——除了那些只是把C++当作是C扩充的初学者,这就为今后的成长埋下了隐患。在者一方面,Java的限定更多一点。就者一点还远远不敷。搞开拓的是人,开拓措施是由人抉择的。要利用面向工具的措施开拓出优秀的软件,必须要求开拓职员具有优越的面向工具的思惟。好的工程师可以使用适当的对象开拓出优秀的软件——而不在乎他所应用的说话对象——Java、C++、Object Pascal、Ada等。

您可能还会对下面的文章感兴趣: