什么是JAVA?什么是UNIPORTAL?

什么是JAVA,什么是UNIPORTAL

UB 38145 2004-6-21

 

 

 

         前言:

   本文是根据我的工作经验。主要介绍JAVA的编程思想,框架等概念,并且根据我对uniportal2周学习,介绍uniportal的相关概念。本文不对uniportal的具体使用进行说明,请参看相关文档。本文主要目的在于编程技术和思想的交流,难免有错误之处,恳请指正。

 

1.         什么是JAVA

JAVA是种编程语言,但他不仅限于一种语言,他的流行告诉我们,他是一种编程思想的革新,也是网络应用的主力。

 

JAVASUN公司在上世纪90年代初推出,最早的应用是嵌入式的小应用,比如,微波炉,遥控器等家电,满足独立于平台的需要。后来随着Internet的发展,从JAVA AppletWEB应用开始流行。以前的编程大多基于某种特定平台(操作系统),但是随着网络的发展,跨平台,可移植性的需求变得很迫切。“应用软件”发展的根本是要脱离硬件平台和操作系统平台的,这也是JAVA越来越流行的主要原因。

 

(说明:JDKJAVA的基本开发包(也就是API),主要由SUN提供(IBM也提供,稍有不同)。JDK1.0以前叫JAVAJDK1.1以后变化很大,一般叫JAVA2。)

JAVA的编程技术基本上是开源的,JAVA的发展非常快,目前JAVA的应用主要有3个方面:

(1)       J2MEJAVA2小应用平台。主要是手机,PDA等终端上的应用,如手机游戏等无线方面的应用,主要使用MIDlet

(2)       J2SEJAVA2标准应用平台。基础的JAVA编程核心包,包括swingawt)界面编程,util工具包,JDBC数据库编程等。

(3)       J2EEJAVA2企业级应用平台。主要的企业级网络应用平台,常说的三层(或者N层)架构就是说这个平台。包括EJBJSPSERVLET等。

 

注意:上面所说的J2EE等,是说“平台”(或者环境),我的理解是:与业务无关的软件语言系统平台,一种编程环境(其实就是一组APIJAVA语言的实际运用环境)。他是在操作平台(即操作系统)与业务应用平台(即框架,后面会说到)的中间的基础操作层。

 

 

2.         软件为什么要分层?

软件开发的发展必然带来可复用性,和可扩展性的需求不断增加,这与其他行业是一样的,人们总是不喜欢大量的重复劳动。而分层的根本目的就是把工作细分,职责明确划分。这样就可以把一个大系统划分成若干个部分的子系统,从而我们可以根据不同需求,复用这些子系统,或者扩展这些子系统。这也是软件的目标:“高内聚,低耦合”。子系统“高内聚”,层与层之间“低耦合”。很多人经常说的“脱耦”,就是指降低耦合度,减少层与层之间的关联性,从而提高复用性和扩展性。

 

   常见的JAVA应用,不仅仅是BS的结构。一般的三层架构是指:客户应用层,商业逻辑层,数据层。这其中每一层又可以根据具体应用分层若干层。

  1)客户应用层,对于网络应用常见的客户端是使用浏览器(Browser),所以常见的是使用JSPBS应用。不过,客户端也可以使用GUI,而且JAVAGUI做出来是很漂亮的,他可以通过JAVA WEB START进行增量下载,他与服务器短的连接与JSP没什么区别。对于uniportal而言,这也是为什么需要WEBAction,又需要EJBAction的原因,因为WEBAction是客户层的东西,你可以根据需要把JSP的东西换成GUI,而EJBAction(商业逻辑层)不用变。

  2)商业逻辑层,是很重要的一层。因为对于大多数应用系统,客户端和数据层是比较简单的,而商业逻辑是最复杂的。特别是大型行业软件,如:地税。不把商业逻辑层脱离开,那么整个系统的编程是很困难的,而且,维护的难度是无法想象的。这也是其他很多语言的弱点,不能把商业逻辑层分离,软件如果要升级,比如数据库升级更换,很可能带来整个系统的重做。这对一个几千万的软件项目是很难容忍的。

  3)数据层,我们目前常用的数据存储是使用关系型数据库,他的发展已经有很长的历史,而且已经很壮大。但是他与面向对象的编程是不协调的。打个比方:你家有2辆车,关系型数据库的做法是把2辆车的轮子拆下来放在一个表里,把方向盘拆下来放在另一个表里,把座位拆下来放在另一个表里……而面向对象的编程,在保存的时候,需要把一辆车开进车库放起来,在使用的时候,可以把整辆车开出来使用。显然,我们更喜欢面向对象的存储方式。所以,JAVA里有很多,O/R Mapping的工具,用它实现对象与关系数据库的映射,比如EJBEntity Bean),Hibernate等。这也是编程技术的一种革新,一个飞跃。另一方面,对象型数据库也发展了好几年了(很多是基于XML的),但是据我所知,困难重重。主要是性能和效率上的问题很难解决,而这是关系型数据库的特长,比如:各种复杂的查询。

 

 

 

3.         什么是面向对象(OO)?

    JAVA是真正面向对象的编程语言,你可能会说,JAVA中也有8种基本类型,intchardouble等,那不是对象。是的,他们不是对象,他们其实是“关键字”,不过,他们都有对应的包装类IntegerCharacter,这些都可以作对象使用。JAVA只是从效率上考虑而使用他们。

 

对象是什么?我认为,对象就是一种类型的实例化。他的基本特征就是:封装性,继承性,动态性。(注意,类和类型是指同一个意思,经常混用)。举个例子:人就是一种类型,男人就是他的继承类型,而男人张三就是个对象,他是个具体的实例,他有具体的身高,体重,年龄等属性值。

实际上,类是一种类型定义,他有属性名称定义,但是没有状态(即属性值),而对象对象就是给类型附上状态(即属性值),在计算机里也叫“实例化”,就是给这些状态值分配内存空间。

对于大多数操作系统,对象的内存空间是分配在“堆”上的,他是不连续的内存空间,因为你无法知道一个对象的实际大小,大小是用户自己定义的。而基本类型,比如intchar,的内存空间是分配在“栈”上的,他是连续的内存空间,因为这些类型是固定大小的,他的大小在每种机器上都有规定。(JAVA因为跨平台,所以基本类型的大小是固定的,比较大,而且对类型的要求很严格,是强类型语言)。

在“堆”上把数据取出来,自然要比从“栈”上取数据慢,所以,JAVA相对是比较慢的,他也很消耗内存。不过,硬件发展已经很快,而且对于企业级应用,一般都是数个CPU,数G内存,乃至集群服务器的使用,所以,对性能的约束不是很强。

 

 

面对对象一般是指面向对象的编程,但是我认为,面向对象的核心是面向对象的设计(OOD)。

与面向对象对应的是面向过程的编程,比如C

面向对象核心是对象,他是自底向上的编程,以对象为核心,组织对象关系,去添加业务逻辑。

面向过程的核心是过程,他是自顶向下的编程,以业务流程为核心,围绕过程去组织数据。

对于应用软件而言,我们需要面向对象的设计,因为,应用软件的业务流程是变化多端的,很多时候客户自己也不能描述清楚他需要的软件流程,他们原来是手工办公,他们无法理解软件原理,自然无法用软件思想描述清楚业务流程。而业务的核心其实是业务对象(或者说“实体”),因为对象和对象之间的关系才是业务最根本的东西,是不易变的东西。

 

其实我觉得,软件应该分为系统软件和业务软件。

1)系统软件:目的是控制机器或者帮助你控制机器,C/C++很合适。他关心的是“物理模型”,是系统流转的过程细节。

2)业务软件(或者应用软件):目的是构建客户业务流程,组织业务数据。具体说就是存取、分析业务数据。JAVA很适合,他关心的是“对象模型”,是对象与对象之间的关系。

 

另外,近期还有一种编程模式叫AOP,面向方面的编程,很流行。我认为他是面向对象的一种补充。他是更高一层的编程模式,他的核心是面向某一方面的应用,可以说面向对象和面向过程的编程都是纵向的思路,而面向方面的编程就是一种横向编程的编程模式。小到系统内的综合查询,大到某一领域的应用,如网络搜索(GOOGLE),或者行业软件,如地税,银行.(这又类似于另一个技术Web Service,不过WebService是一种远程的软件服务方式,AOP是一种编程方法和思路,而且JBOSS已经开始支持他,有文章介绍JBoss 4.0带了一个AOP框架。)

因为,我们不断想要提高软件复用性,不断想要把软件做成模块化,组件化,就像搭积木一样可以拼装成一个系统,这种模块化的“粒度”越来越大,就形成了某个方面,或者某个行业领域的复用,比如,你可以直接调用GOOGLE服务接口做搜索,调用银行服务接口做金融处理。这是软件编程思想的又一次革新。面向对象是基础,但他一般在小范围内使用,因为范围大了对象关系太复杂,而且内聚性太高会带来子系统之间的协调困难,这样会带来大范围(粗粒度)的连接使用困难,比如大系统内的综合查询会涉及到各个子系统的查询,分开做是不明智的而且困难的。而面向方面的编程正是这种问题的解决思路。

 

   由上所述,可以看出编程语言不仅仅是技能的不同,更深入的是编程思想的不同。

我以前在的都是小公司,做业务软件,系统内的各个部分我都要关心,所以我有这种想法,其实那就是“小作坊”的生产方式。华为的情况不一样,华为已经形成了一个“软件产业”,有清晰的生产流水线,每个部门都负责自己的那部分的工作,这样带来很高的生产效率,但是,对于每个环节可能不需要多少编程思想了,最重要的是熟悉业务。

   但是JAVA是软件发展的趋势,有很有多先进性(我说的是思想的先进性)。所以我想,我们可以多关注一些JAVA方面的软件思想,比如设计模式,框架等,他对于我们解决实际问题很有好处。

 

  另外,改变编程思想对我们现在的工作,代码的维护很重要。我目前看到的软件文档,大多是需求规格说明,物理模型,那些东西根本看不到代码的组织结构,那么多代码又很难一行行去分析,这样的系统代码很难维护,而且我看不到每个模块之间的关系,如果我以前不参加这个项目,就很难进行扩展,这对软件产品是非常不利的。所以,对于软件,使用UMLRational Rose)描述,远比使用物理模型(Viso)描述要重要。

   UML是什么?他是统一模式语言,是几个软件牛人想出来的工具。其实就是描述软件的图形语言。看图永远比看文字要直观,而且,看图更容易反映代码之间的关系。

举个例子:

软件需要的主要UML描述举例:

用例图:

活动图:(一般以时序图替代,他们可以相互转换。)

 

类图:

 

   如上所示,你可以很容易看清楚系统的结构,所用到的类以及方法都很明白,系统的设计思路,设计模式一目了然,要维护就很方便,更重要的是他让你的设计思路清晰,功能之间的关系明确,可以把系统做到最大程度的优化。如果让我去看长篇的WORD说明文档,我很容易头晕,而且,依赖需求文档和物理模型(仅仅描述硬件层的结构,以及简单的数据流向),你怎么保证你的系统的是正确的?并且是有效的?

  软件产品最重要不是能用,而是好用。因为客户不懂软件,但是软件维护,推广还是我们自己做,软件好不好,只有自己知道。

 

 

 

4.         什么是模式?什么是框架?

这两个概念都很模糊,这里简要说明,只是个人观点,仅供参考。

 

  设计模式:软件的设计模式来源于建筑工程,随着一个行业的成熟,需要大量规范化的模板,而且在处理很多问题的时候,会出现很多重复的问题,经过不断的经验总结,把一些好的问题解决方法归纳出来就形成了“模式”。

模式有很多层面的模式,有软件开发过程管理模式,比如:RUP(统一软件过程),XP(极限编程)。有编程模式,最出名的就是“四人帮”(四个软件牛人)写的23种设计模式。《设计模式》这本书的中文版是机械工业出版社出版的(他是用C++举例的),可以说是软件人员必备手册,不过,很多人(包括我)都有一个反映就是“看不懂”,呵呵。其他还有《JAVA与模式》是一个华裔博士写的,初学者很适合。常见的模式有“工厂方法”,“抽象工厂”,“代理模式”,“门面模式(facade)”,“单例模式(singleton”等。关于JAVA与模式的书籍现在也是多如牛毛,我只是初级应用者。

 

框架:他是某些特定领域系统的半成品。他可以帮助你封装解决很多底层问题,比如事务处理,用户安全等,他的主要作用是使系统结构稳定,约束代码人员的代码。就好像是一个房子的骨架,代码人员只需要根据业务往里面填业务逻辑代码。而且很多具体处理细节由框架处理,对代码人员是透明的,代码人员只要继承相应的“基础类”就可以了,(这些“基础类”就是框架。)

模式是一种抽象概念和工作方法,而框架是一种实际使用的代码集合。

常见的框架有STRUTSWEB应用,APACHE子项目),Hibernate(O/R Mapping使用,很好的东西,由一个叫Gavin King的牛人为主开发的)TCFJAVAGUI框架,要收费的。)

下面主要说一下WAF框架:

2000年左右,SUN为了推出J2EE这个平台,就要介绍J2EE的核心EJB的应用,他做了一个样例PetStore(网上宠物店的电子商务应用),来说明这个东西,这个系统使用的框架就叫WAFWeb Application Framework)。

先简单说一下EJB是什么,他是企业级JAVA BeanEntity Java Bean)。他与普通的JAVA应用的最大不同之处就是他支持分布式处理,就是说EJB可以分别发布在不同的应用服务器上。他包括3个部分,

(1)       Session Bean:做商业逻辑处理,内置事务,缓存等处理。

(2)       Entity Bean:做数据实体对象映射,即O/R Mapping,并且内置了事务处理,“状态机”机制等很多复杂功能,但是太高级了,性能一直是个问题,所以后来SUN又推出一个轻量级的东西叫JDO。但是,很多人(包括我)都喜欢用Hibernate

(3)       Message Driver Bean:做消息驱动处理,主要是异步的消息处理。

(说明:一般来说,支持EJB的服务器叫应用服务器,如:JBOSSWEBLOGICWEBSPHERERESIN等。不支持EJB的叫WEB服务器,如:TOMCATAPACHEIIS等。)

   

以上说的很简单,EJB里面还有很多复杂的东西(分布式应用程序实在是个很超前的东西,这也是体现JAVA优势的一个方面),为了展现那么复杂的一个平台,SUN就做了一个很复杂的框架,WAF,下图反映了这个框架的基本面貌:

WAF 

绿色部分就是代码人员要做的代码,其他部分就是框架本身的核心代码。

 

  WEBLOGIC安装后就带有PetStore这个系统的演示版,直接在启动菜单里启动就可以看到他的效果。在SUN的网站上也可以下载他的源码,不过,SUN是基于他自己的J2EE应用服务器做的发布和说明,那个应用服务器很难用。学习这个框架对掌握JAVAJ2EE技术的帮助很大,他本身就J2EE的核心应用。我曾经研究过他的代码,不过,很快头就晕了J

 

很明显,uniportal这个东西的核心就是WAF这个框架了(他把HTMLAction改名叫WEBAction,并且去掉了Entity Bean部分)。说白了,Uniportal就是WAFJBOSS

 

 

 

5.         什么是Uniportal

   其实前面已经把Uniportal的相关内容基本介绍了,整体脉络相信我也讲清楚了。

   先说说什么是Portal

   Portal本意是门户网站。其实对于B/S的系统来说,什么都可以看成是网站,只不过是复杂点和简单点的区别。

   不过,现在Portal的概念有很大改变,而且Portal这个东西最近很流行。Portal这个概念的外延很广,这里只是关于JAVA的应用方面简单介绍。

我以前做软件项目,是先做需求分析,再做宏观设计(包括软件框架,和对象模型),再做详细设计(类图,序列图等),再做编码,再做测试。(这是大项目的流程,小项目自然会有删减。)

   经过实践后就发现,宏观设计(软件框架)部分的设计和实现很费力,很希望能够尽可能的复用框架。

   (说明:框架设计并不是必须的,如果你的对象模型做的好,或者是做小项目,很多时候可以使用现有流行的成熟框架或者不用框架。不过,对于大项目,多人合作的项目,由于开发人员能力不一样,所以,框架可以起到很好的规范作用,并且减少代码人员的开发难度,核心工作都由框架完成,也便于扩展和维护。)

    后来,有人就干脆把成熟的框架和应用服务器结合起来,把应用服务器稍做改动(JBOSS是开源的应用服务器),把框架融合在里面,这就是现在的PortalBEAIBM都有他们的Portal产品。我们的Uniportal也就是这样。

   近期,SUNJCP(这个组织专门研究发布JAVA的新技术规范),发布了JSR168,这是一个Portalet的规范。(portaletportal的组件)。也就是说这个规范将使各个厂商的Portal规范化。不过,现在Uniportal还没有实现JSR168的规范。

   关于Uniportal的使用,相关文档已经很齐了,不做说明。而且,我现在还没用熟,还得继续慢慢研究。

 

 

   好了,感谢你耐心看完本文,欢迎指正并交流。请来信UB5023@msn.com .

如果文中图片看不到,请访问这里:http://ub1010.51.net/computer/java/JavaAndUniportal.doc

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值