快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

新蒲京澳门赌场网站:再谈面向对象



谈到面向工具,这方面的文章异常多。然则,明确地给出工具的定义或阐明工具的定义的异常少——至少我现在还没有发明。其初,“面向工具”是专指在法度榜样设计中采纳封装、承袭、抽象等设计措施。可是,这个定义显然不能再得当现在环境。面向工具的思惟已经涉及到软件开拓的各个方面。如,面向工具的阐发(OOA,Object Oriented Analysis),面向工具的设计(OOD,Object Oriented Design)、以及我们常常说的面向工具的编程实现(OOP,Object Oriented Programming)。许多有关面向工具的文章都只是讲述在面向工具的开拓中所必要留意的问题或所采纳的对照好的设计措施。看这些文章只有真正相识什么是工具,什么是面向工具,才能最大年夜程度地对自己有所裨益。这一点,生怕对初学者以致是从事相关事情多年的职员也会对它们的观点隐隐不清。下面我从一样平常的观点启程,再引申到软件开拓领域新蒲京澳门赌场网站中所涉及到的工具的观点。

上一篇文章中我曾举过一个树的例子来阐明工具的观点。这里我仍旧使用它对工具的观点做阐述。“工具”一词,英文为“Object”,德语为“Sachen”,都可以译做“物体”。着实所有的物体都可以作为我们的工具——只要我们留意并对它思虑了。一小我从生下来到进行第一次的户外活动,他将打仗到许许多多的新鲜事物,他将睁大年夜眼睛好奇地看着这陌生的统统。大概对他来说,那些高大年夜的器械,有干,有枝,有叶——虽然那时他并不知道这些——其映象已经深刻地印在了他的脑海中。此时对他来说,树并不是工具,由于在他的脑筋傍边只有树的映象,而没有对树的精神上的意向。当他再大年夜一点时,大概他会想着爬到树上去玩一下子——但此时树也还不是他的工具。存在的工具只是他自己——他想让自己去做某件事。长大年夜今后,大概他他成了一名木匠——就像我们成了法度榜样员,用他的锯子、斧头把一棵树砍下来做成一张桌子——就像我们使用Java 、C/C++说话开拓出一套数据库系统。在这里,树是木匠的工具,而数据库系统是法度榜样员的工具。于是,我在这里给工具下一个定义:工具是人脑中的物质意识和精神意识。普通地讲,便是事物在人脑中的映象和人脑对事物的意向。之以是要在这里强调“事物”,是我要阐明这里所说的“物质”并不是物理学中的物质,思维活动、事物间的关系我们也称为是物质的。

真正要在较深的层面上评论争论什么是工具是很繁杂的,由于这要涉及到精神意识本色的问题,远远越过了我们要评论争论的范围。我们不要评论争论什么高妙的问题,就以实用为主。我就使用这个观点来举一个简单的例子。木匠前面有一张桌子。他可能要面临两个问题:一是给桌子添加一些部件如抽屉,这样桌子就可以放更多的器械;二是装饰一下桌子,使得它更美不雅。在这里,桌子是他的工具——他对桌子进行思虑了,这使得他对桌子的意向性也显着地显露出来。我们以致可以把改造桌子称为“面向工具的改造”,由于那不是随意的改造。这一点我在随后对面向工具思惟的阐明中提到为什么说是“不是随意的改造”。斟酌一下“面向工具”,可以知道它是一个动宾关系的短语。动词“面向”外面,这个短语含有“若何去做”的意思,这可以说是涉及到了措施论的范畴了。这也给我们供给了一个紧张的信息:“面向工具的做......”不仅扳连到什么是工具的问题,还扳连到若何去做的问题。木匠若何去做他的桌子,我们不必担心:他肯定能做好的——假如他是一个优秀的木匠的话。他有着富厚的履历,他有一套自己的措施,他知道若何去做。大概在做桌子之初就已经做了优越的设计以为今后的“进级”作筹备。这就像一个履历富厚的法度榜样员:他知道怎么设计才能让自新蒲京澳门赌场网站己的法度榜样布局清晰、易懂,轻易排错也易于掩护。

有一点要留意的是,工具不是实体,它可以离开实体而存在。这是由于,工具只不过是人脑思维活动的产物;我们可以用某种要领如自然说话、丹青等将它表示出来,就像我们在软件开拓中所说的工具用类(法度榜样傍边)或系统布局图(如流程图,层次图,HIPO图等)来描述一样。

于是,我们就可以工具我们一样平常在软件开拓领域里所评论争论的工具下个定义了:工具由一个数据集以及对该数据集的操作组成。这个定义得当法度榜样说话中的类,也得当对全部系统而言。大概大年夜家会对这个定义感觉很认识:这新蒲京澳门赌场网站不是法度榜样或进程的定义吗?留意,这里的工具是有“自我意识新蒲京澳门赌场网站”的,也便是说,它是有自己的行径的。而“进程”指的是一系列的二进制流的聚拢,是一次运交活动。在法度榜样中,我们用类来描述工具,而对全部的系统,我们用系统图来描述。在这里,系统也是我们的工具。数据集就像事物在我们大年夜脑中的映像,对数据集的操作就犹如我们对事物的意向。假如我们仔细考察系统的各个部分,那么,它们也可以看作是工具。“面向工具的XX”便是要求我们若何合理地分配工具之间的层次布局,使得它清楚清楚明了,在维持效率的同时还便于排错、掩护。我们有一个专业名词来表示已经定型、获得大年夜家认可的软件措施,那就我们常说的模式。各行各业都邑有它自己的一样平常的措施模式,如修建业有修建模式,软件开拓有其开拓模式。我想,当初爱因斯坦之以是做出几个丑陋的凳子,便是由于他不相识凳子的设计模式吧。这就犹如很多多少编程初学者,轻细大年夜一点的法度榜样就会写出紊乱不堪的、除了自己谁也看不懂的代码,大概过了几天连自己都看不懂了。

在软件开拓历程傍边,系统(我们面对的最终工具)的阐发、设计才是最紧张的。而这两方面是慎密结合在一路的。这两步没有做好,下面的编码实现事情很难玩成,可以说是寸步难行。我曾经在一家软件公司(说是公司,着实加上老板才只有六、七小我)做过一段光阴。那时老板叫我们用Java做一个数据库系统(藏书楼治理系统),用来当招牌,今后也好对接项目有利。我以为他会先拿出一个设计图让我们看,不虞他说现在就开始做。说其实的,那时我对这方面根本没有履历。我当时就对他说,你至少得把你设计的蓝图给我们看一看吧?他说没有,他也不知道若何做,曩昔没做过。还说我们边做边进修。我说那至少你应该先做新蒲京澳门赌场网站一做系统阐发吧。他说如果我有这能力还能在这里呆着?结果可想而知,我们在那里呆了几天,这里瞧一瞧,那里看一看,又在机子上写一写,什么也没做成。老板望见我们轻细有所松懈,就赓续地催匆匆快做快做。后来我受不了,就一小我跑了。也不知道他们做成了没有。可以说这是一个不成功的例子。就算是写成了,没有阐发、设计的结果肯定也是很难掩护的。这就象是请来的木匠,把一套家具打造得很分歧理,看上去异常糟糕可能还很不实用。有谁会乐意用这样的家具?法度榜样包设计得不好,有谁能用得好?无论谁用起来都邑很吃力。假如说一个项目没有设计好,纵然开拓出来了,后来的掩护事情别人怎么能接手?在我们中国软件领域有这样工作的例子很多。当然,孕育发生这样环境的缘故原由很多,中国的系统体例、公司的实力也是一大年夜方面。然则若何去做,有是一个范围很宽的话题了。

上面聊得多了。工具是一个对照广泛的观点,在我们平日软件领域里也是这样。工具之间可以包孕工具。对木匠来说,一套组百口具是一个工具,一件衣柜也是工具——全局和局部都要斟酌。对他们来说,若何从整体到部分的设计出受人好评的家具,是必要富厚的履历和优越的设计措施的。对我们来说也是这样。除了要打下踏实的基础功,积累富厚的履历,还要留意进修我们的前辈们给我们留下的器械,以及同业们的好的措施。现在,有关面向工具的册本、文章都很多,我们都应该去看看、去进修。

全文说了这许多,只谈了有关面向工具的观点。有几位同伙来信问到若何划分工具层次、布局对系统运行的紧张性等,受篇幅所限,不能述及。还有可能有的同伙对工具的理解不是很合理,这里我谈一下我的不雅点。工具在系统运行时是有其生命期的。然则,在运行内工具自身的改变(如,动态地增添、缩减功能,数据集的变更等)不能看作是改变了工具。例如对付一个二叉树,初始化时只有根节点,当然我们可以看作是一个节点工具,但一样平常我们是将它当作一个整体的二叉数工具。当树天生之后,它照样那个工具,而不能把它当作是别的一个工具了。假如你那样理解的话,就把工具的各个运行时期分分开来了,这就与工具的观点有曲解了。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

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