小女巫 发表于 2015-1-18 11:40:47

JAVA教程之廓清Java言语接口与承继的实质

首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。承继盘算机学院研二的兄弟与我会商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可以更好的表现计划,这是让我出神的缘故原由之一。


还有就是总有人问我到底该学习什么语言,什么语言有前途,那么我的回答是不论是C,C++,java,.net,ruby,asp或是其他语言都可以学,编程的关键不是语言,而是思想。

admin 发表于 2015-1-21 12:35:22

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧

爱飞 发表于 2015-1-30 18:24:07

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

活着的死人 发表于 2015-2-6 14:46:58

你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。

愤怒的大鸟 发表于 2015-2-16 16:20:39

Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)

精灵巫婆 发表于 2015-3-5 06:35:44

Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台

蒙在股里 发表于 2015-3-11 23:38:21

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

山那边是海 发表于 2015-3-21 08:45:02

Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站

谁可相欹 发表于 2015-4-12 23:54:49

是一种将安全性(Security)列为第一优先考虑的语言

透明 发表于 2015-4-13 08:09:29

是一种为 Internet发展的计算机语言

小妖女 发表于 2015-4-16 01:01:45

当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?

第二个灵魂 发表于 2015-4-16 14:11:48

是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言

再现理想 发表于 2015-4-22 05:10:21

Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站

飘灵儿 发表于 2015-4-28 21:10:28

Java是一种计算机编程语言,拥有跨平台、面向对java

小魔女 发表于 2015-6-22 15:48:30

是一种使网页(Web Page)产生生动活泼画面的语言

仓酷云 发表于 2015-6-26 20:51:47

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

简单生活 发表于 2015-7-4 04:43:33

一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从

柔情似水 发表于 2015-7-7 01:28:03

自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

莫相离 发表于 2015-9-28 06:11:54

至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。

兰色精灵 发表于 2015-10-4 01:13:19

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
页: [1]
查看完整版本: JAVA教程之廓清Java言语接口与承继的实质