仓酷云
标题:
来看Java接口与承继的实质
[打印本页]
作者:
愤怒的大鸟
时间:
2015-1-18 11:27
标题:
来看Java接口与承继的实质
比如模式、敏捷方法什么的,这些思想好,但是实施的人没有理解而且没有正确运用这些知识导致了开发周期的延长。比如说对象,通过getName()方法不能获取对象的名字。
盘算机学院研二的兄弟与我会商Java,一会晤,几个成绩满是关于接口,接口有甚么用?为何要用接口?甚么时分该利用接口?很光荣他们不是问我Java怎样毗连SQLServer,大概是怎样开辟J2EE使用,这类成绩有杀伤力,避之则吉。往年盘算机学院本科有个卒业计划课题是做J2ME,选这个标题的先生在5月末都还在苦着脸研讨java.util.*这个包,这个这个……唉。
年夜多半人以为,接口的意义在于顶替多重承继。尽人皆知Java没有c++那样多重承继的机制,可是却可以实作多个接口。实在如许做是很牵强的,接口和承继是完整分歧的工具,接口没有才能取代多重承继,也没有这个任务。接口的感化,一言以蔽之,就是标记类的种别(typeofclass)。把分歧范例的类回于分歧的接口,能够更好的办理他们。OO的精华,我觉得,是对对象的笼统,最能表现这一点的就是接口。为何我们会商计划形式都只针对具有了笼统才能的言语(好比c++、java、c#等),就是由于计划形式所研讨的,实践上就是怎样公道的往笼统。(cowboy的名言是“笼统就是抽往像的部分”,看似奚弄,实以致理)。
计划形式中最基本的是工场形式(Factory),在我比来的一个很复杂的使用中,我想只管的让我的程序可以在多个数据库间移植,固然,这触及良多成绩,单是怎样兼容分歧DBMS的SQL就让人头痛。我们无妨先把成绩复杂化,只思索怎样毗连分歧的数据库。
假定我有良多个类,分离是Mysql.java、SQLServer.java、Oracle.java、DB2.java,他们分离毗连分歧的数据库,一致前往一个Connection对象,而且都有一个close办法,用于封闭毗连。只必要针对你的DBMS,选择分歧的类,就能够用了,可是我的用户他会利用甚么数据库?我不晓得,我但愿的是只管少的修正代码,就可以满意他的必要。我能够笼统以下接口:
packageorg.bromon.test;
publicinterfaceDB
{
java.sql.ConnectionopenDB(Stringurl,Stringuser,Stringpassword);
voidclose();
}
这个接口只界说两个办法,没有任何有实践意义的代码,详细的代码由实作这个接口的类来给出,好比Mysql.java:
Packageorg.bromon.test;
importjava.sql.*;
publicclassMysqlimplementsDB
{
privateStringurl=”jdbc:mysql:localhost:3306/test”;
privateStringuser=”root”;
privateStringpassword=””;
privateConnectionconn;
publicConnectionopenDB(url,user,password)
{
//毗连数据库的代码
}
publicvoidclose()
{
//封闭数据库
}
}
相似确当然另有Oracle.java等等,接口DB给这些类回了个类,在使用程序中我们如许界说对象:
org.bromon.test.DBmyDB;
利用myDB来操纵数据库,就能够不必管实践上我所利用的是哪一个类,这就是所谓的“开-闭”准绳。可是成绩在于接口是不克不及实例化的,myDB=newDB(),如许的代码是相对毛病的,我们只能myDB=newMysql()大概myDB=newOracle()。贫苦了,我仍是必要指定详细实例化的是哪一个类,用了接口跟没用一样。以是我们必要一个工场:
packageorg.bromon.test;
publicclassDBFactory
{
publicstaticDBConnectiongetConn()
{
Return(newMysql());
}
}
以是实例化的代码酿成:myDB=DBFactory.getConn();
这就是23种形式中最基本的一般工场(Factory),工场类卖力详细实例化哪一个类,而其他的程序逻辑都是针对DB这个接口举行操纵,这就是“针对接口编程”。义务都被推脱给工场类了,固然你也能够持续界说工场接口,持续把义务上抛,这就演化成笼统工场(AbstractFactory)。
全部过程当中接口不卖力任何详细操纵,其他的程序要毗连数据库的话,只必要机关一个DB对象就OK,而不论工场类怎样变更。这就是接口的意义----笼统。
承继的观点不必多说,很好了解。为何要承继呢?由于你想重用代码?这相对不是来由,承继的意义也在于笼统,而不是代码重用。假如对象A有一个run()办法,对象B也想有这个办法,以是有人就ClassBextendsA。这是不经年夜脑的做法。假如在B中实例化一个A,挪用A的Run()办法,是否是能够到达一样的目标?以下:
ClassB
{
Aa=newA();
a.run();
}
这就是使用类的聚合来重用代码,是委派形式的雏形,是GoF一向倡议的做法。
那末承继的意义安在?实在这是汗青缘故原由酿成的,最入手下手的OO言语只要承继,没有接口,以是只能以承继来完成笼统,请必定注重,承继的本意在于笼统,而非代码重用(固然承继也有这个感化),这是良多Java烂书最严峻的毛病之一,它们所酿成的暗影,我至今还没有完整挣脱,坏书害人啊,特别是进门类的,流毒太年夜。甚么时分应当利用承继?只在笼统类中利用,其他情形下只管不利用。笼统类也是不克不及实例化的,它仅仅供应一个模版罢了,这就很能申明成绩。
软件开辟的万恶之源,一是反复代码而不是重用代码,二是烂用承继,尤以c++程序员为甚。Java中取消多重承继,目标就是停止烂用承继,实长短常明智的做法,不外良多人都不睬解。Java可以更好的表现计划,这是让我出神的缘故原由之一。
java主要分三块,j2se:java的基础核心语言。j2me:java的微型模块,专门针对内存小,没有持续电源等小型设备。j2ee:java的企业模块,专门针对企业数据库服务器的连接维护。
作者:
海妖
时间:
2015-1-18 15:46
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名鼎鼎的banq在Jive2.1版本基础上改编而成,全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
作者:
不帅
时间:
2015-1-22 08:04
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
作者:
柔情似水
时间:
2015-1-26 22:54
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
作者:
因胸联盟
时间:
2015-2-4 21:16
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
作者:
山那边是海
时间:
2015-2-7 01:45
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
作者:
愤怒的大鸟
时间:
2015-2-8 19:41
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
作者:
再见西城
时间:
2015-2-9 23:44
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者:
若相依
时间:
2015-2-23 18:51
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
作者:
老尸
时间:
2015-2-25 20:09
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
作者:
莫相离
时间:
2015-3-8 02:10
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
作者:
冷月葬花魂
时间:
2015-3-15 19:33
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
作者:
简单生活
时间:
2015-3-22 03:09
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
作者:
仓酷云
时间:
2015-3-22 03:09
是一种使网页(Web Page)产生生动活泼画面的语言
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2