仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1665|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA网页设计最年夜限定地进步代码的可重用性

[复制链接]
海妖 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:51:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一旦你有了思想,那你编的程序就有了灵魂,不管是什么语言到了你的手里都会是你的工具而已,他们的价值是能尽快帮助你实现你想要的目标。但是如果你没有了思想,那就像是海里的帆船失去了船帆,是很难到打海的另一边的。重用是一种神话,这仿佛正在日渐成为编程职员的一种共鸣。但是,重用大概难以完成,由于传统面向对象编程办法在可重用性方面存在一些不敷。本技能申明了构成撑持重用的一种分歧办法的三个步骤。第一步:将功效移出类实例办法因为类承继机制缺少准确性,因而关于代码重用来讲它并非一种最幻想的机制。也就是说,假如您要重用某个类的单个办法,就必需承继该类的其他办法和数据成员。这类包袱不用要地将要重用此办法的代码庞大化了。承继类对其父类的依附性引进了分外的庞大性:对父类的变动会影响子类;当变动父类或子类中的任一方时,很难记着掩盖了哪些办法(大概没有掩盖哪些办法);并且是不是应当挪用响应的父类办法也不开阔爽朗。实行单一观点性义务的任何办法都应当是自力的,并应将其作为要重用的首选办法。要完成这一点,我们必需前往到历程式编程,将代码移出类实例办法并将其移进全局可见的过程当中。为了进步这类历程的可重用性,您应当像编写静态有用办法那样编写这类办法:每一个历程只利用其本身的输出参数和/或对其他全局可见历程的挪用完成其事情,并且不该该利用任何非部分变量。这类内部依附性的削弱下降了利用该历程的庞大性,从而可增进在别处对它的重用。固然,即使那些不企图重用的代码也会从这类布局中受害,由于它的布局老是相称明晰。在Java中,办法不克不及离开类而存在。可是,您能够接纳相干步骤,使办法成为单个类的、大众可见的静态办法。作为示例,您能够接纳相似上面如许的一个类:classPolygon{..publicintgetPerimeter(){...}publicbooleanisConvex(){...}publicbooleancontainsPoint(Pointp){...}..}并将其变动为相似以下的情势:classPolygon{..publicintgetPerimeter(){returnpPolygon.computePerimeter(this);}publicbooleanisConvex(){returnpPolygon.isConvex(this);}publicbooleancontainsPoint(Pointp){returnpPolygon.containsPoint(this,p);}..}个中,pPolygon以下所示:classpPolygon{staticpublicintcomputePerimeter(Polygonpolygon){...}staticpublicbooleanisConvex(Polygonpolygon){...}staticpublicbooleancontainsPoint(Polygonpolygon,Pointp){...}}类名pPolygon反应了该类所封装的历程次要与范例Polygon的对象有关。类名前的p暗示该类的独一用处就是将大众可见的静态历程构造起来。但是,在Java中类名以小写字母开首是不标准的,像pPolygon如许的类其实不完成一般的类功效。这就是说,它不代表一类对象;它只是该言语所需的一个构造实体。在以上事例中所作变动的全体效果就是,客户端代码不再非要经由过程承继Polygon来重用其功效。如今这一功效在pPolygon类中是以历程为单元供应的。客户端代码仅利用它所需的功效,而不用体贴它不必要的功效。这其实不意味着类不会在新的历程式编程作风中发扬主动感化。恰好相反,类要实行需要的分组义务,并封装它们所代表的对象的数据成员。别的,类经由过程完成多个接口而具有的多态性使其具有了出色的可重用性,请参阅第二步中的申明。可是,您应当将经由过程类承继取得可重用性和多态性的办法回类到优先级较低的手艺中,由于将功效包括在实例办法中并非完成可重用性的最好选择。四人合著的滞销书DesignPatterns扼要说起了一种与这一手艺只要渺小不同的手艺。那本书中的Strategy形式倡始用一个共公接口将相干算法的每一个系列成员都封装起来,以便客户端代码可交换这些算法。由于一种算法一般被编写为一个或几个自力的历程,因此这类封装夸大重用实行单一义务(即一个算法)的历程,而不夸大重用包括代码和数据、实行多项义务的对象。本步骤也表现了一样的基础头脑。但是,用接口封装算法意味着将算法编写为完成该接口的一个对象。这意味着我们仍旧被束厄局促在与数据耦合在一同的历程及其封装对象的其他办法上,因此使重用变得庞大。每次利用算法时必需实例化这些对象也是个成绩,这将下降程序的功能。侥幸的是,DesignPatterns供应的一种办理计划可办理这两个成绩。在编写Strategy对象时您可以使用Flyweight形式,以使每一个对象唯一一个尽人皆知的共享实例(该实例处置实行成绩),如许每一个共享对象就不会在两次会见之间保护形态(因而该对象不包括任何成员变量,从而办理了很多耦合成绩)。天生的Flyweight-Strategy形式将本步骤中封装功效的手艺高度集成在全局可用的无形态过程当中。第二步:将非基础数据范例的输出参数范例转换为接口范例经由过程接口参数范例而非经由过程类承继使用多态性,这是在面向对象编程办法中完成可重用性的真正基本,正如AllenHolub在"BuildUserInterfacesforObject-OrientedSystems,Part2"中所讲的那样。“...可重用性是经由过程编写接口,而不是经由过程编写类来完成的。假如一个办法的一切参数均为一些已知接口的援用,而这些接口又是由您从未听过的一些类完成的,那末该办法可对编写代码时还不存在的类的对象举行操纵。从手艺上讲,可重用的是办法,而不是传送给该办法的对象。”将Holub的叙述使用到第一步的了局,一旦某个功效块可作为一个全局可见的自力历程,您就能够经由过程将它的每一个类级输出参数范例转换为接口范例,从而进一步进步它的可重用性。如许,完成该接口范例的任何类的对象都切合该参数的请求,而不单单是切合原始类的请求。如许,该历程便潜伏地可用于更多的对象范例。比方,假定您有一个全局可见的静态办法:staticpublicbooleancontains(Rectanglerect,intx,inty){...}该办法旨在判别给定的矩形是不是包括给定的地位。此处您应当将rect参数的范例从类范例Rectangle变动为接口范例,以下所示:staticpublicbooleancontains(Rectangularrect,intx,inty){...}Rectangularcouldbethefollowinginterface:publicinterfaceRectangular{RectanglegetBounds();}如今,可形貌为Rectangular的类(便可完成Rectangular接口)的对象都可作为rect的参数传送给pRectangular.contains()。我们经由过程放宽对可传送给办法的参数的束缚来进步办法的可重用性。可是,就以上示例而言,当Rectangle接口的getBounds办法前往一个Rectangle时,您大概不晓得利用Rectangular接口会有甚么实践的优点;也就是说,假如我们晓得我们要传进的对象在被哀求时能前往Rectangle;为何不传进Rectangle范例而要传进接口范例呢?最主要的缘故原由与汇合有关。假定有如许一个办法:staticpublicbooleanareAnyOverlapping(Collectionrects){...}该办法旨在判别给定汇合中的rectangular对象是不是有堆叠。接上去,在办法体中,当您顺次处置汇合中的每一个对象时,假如没法将对象转换为诸如Rectangular如许的接口范例,怎样才干会见谁人对象的rectangle呢?独一的选择是将对象转换为特定的类范例(我们已知该类中有一个办法能供应rectangle),这意味着该办法必需事前晓得它要对何品种范例举行操纵,因而重用它时只能利用这些范例。这就是这一步起首要制止的成绩!第三步:选择耦合性较小的输出参数接口范例在实行第二步时,应当选择何种接口范例来替换给定的类范例呢?谜底是:能充实形貌历程对参数的请求且包袱起码的任何接口。参数对象要完成的接口越小,任一特定类能完成该接口的时机就越年夜--因此其对象可用作该参数的类的数目也就越多。很简单看出,假如您有以下如许一个办法:staticpublicbooleanareOverlapping(Windowwindow1,Windowwindow2){...}该办法旨在判别两个(假定为rectangular)窗口是不是堆叠,假如该办法仅请求它的两个参数供应它们各自的rectangular坐标,则最好简化这两个参数的范例以反应这一现实:staticpublicbooleanareOverlapping(Rectangularrect1,Rectangularrect2){...}以上代码假定后面的Window范例对象也能完成Rectangular。如今您就能够重用任何rectangular对象的第一个办法中所包括的功效。您大概有过量次如许的履历,即充实指定了参数请求的可用接口包括过量不用要的办法。碰着这类情形时,您就应在全局称号空间中界说一个新的大众接口,以便其他大概面对一样困境的办法重用这个接口。您也大概有过量次如许的履历,即最好创立一个共同的接口来指订单个历程对一个参数的请求。您所创立的接口只会用于谁人参数。当您但愿将参数看成C中的函数指针处置时常常会呈现这类情形,比方,假定有如许一个历程:staticpublicvoidsort(Listlist,SortComparisoncomp){...}该历程经由过程利用给定的对照对象comp对列表的一切对象举行对照,从而对给定的列表举行排序,sort对comp的全体请求就是挪用其单个办法实行对照。因而,SortComparison应当是仅包括一个办法的接口:publicinterfaceSortComparison{booleancomesBefore(Objecta,Objectb);}该接口的独一用处就是为sort供应一种会见完成其事情所需功效的办法,因而SortComparison不该在别处重用。小结以上三步旨在改善用更传统的面向对象办法编写的现有代码。将这三个步骤与面向对象编程分离利用便可构建一种新的办法,您可用这类新办法编写今后的代码,如许编写代码将进步办法的可重用性和内聚性,同时也会削减办法的互相耦合及庞大性。很分明,您不该该对实质上不合适重用的代码实行这些步骤。这类代码一般存在于程序的暗示层。创立程序用户界面的代码及将输出事务绑定到完成实践操纵的把持代码是不成重用的两个例子,由于它们的功效随程序的分歧而相差甚远,基本没法完成可重用性。
认真的记,感觉很紧张根本就没有时间和能力,来对技术知识点进行思考。这样课下就只能对知识进行简单的理解,其实简单的理解就是记忆课堂上讲的知识点,
活着的死人 该用户已被删除
沙发
发表于 2015-1-21 16:24:33 来自手机 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
飘飘悠悠 该用户已被删除
板凳
发表于 2015-1-27 06:05:15 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
若相依 该用户已被删除
地板
发表于 2015-2-3 11:53:41 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
小魔女 该用户已被删除
5#
发表于 2015-2-8 20:29:02 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
分手快乐 该用户已被删除
6#
发表于 2015-2-21 20:22:05 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
冷月葬花魂 该用户已被删除
7#
发表于 2015-3-6 20:50:11 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
兰色精灵 该用户已被删除
8#
发表于 2015-3-10 23:17:12 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
第二个灵魂 该用户已被删除
9#
发表于 2015-3-11 02:35:55 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
因胸联盟 该用户已被删除
10#
发表于 2015-3-16 08:20:24 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
深爱那片海 该用户已被删除
11#
发表于 2015-3-22 21:20:49 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
灵魂腐蚀 该用户已被删除
12#
发表于 2015-3-24 17:07:29 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
透明 该用户已被删除
13#
发表于 2015-3-25 00:01:46 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
admin 该用户已被删除
14#
发表于 2015-3-27 00:08:16 | 只看该作者
是一种使用者不需花费很多时间学习的语言
再见西城 该用户已被删除
15#
发表于 2015-4-12 00:35:47 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
柔情似水 该用户已被删除
16#
发表于 2015-5-7 03:00:07 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
简单生活 该用户已被删除
17#
发表于 2015-6-8 19:39:04 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
飘灵儿 该用户已被删除
18#
发表于 2015-6-8 22:35:59 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
山那边是海 该用户已被删除
19#
发表于 2015-6-10 05:00:31 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
海妖 该用户已被删除
20#
 楼主| 发表于 2015-6-26 19:33:03 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 03:22

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表