cobol声明变量面向Java开发人员的Flex开发指南
2012-04-14 18:24 cobol inspect cobol视频 阅读(235) 评论(0) 编辑 收藏 举报除非你过去四年的编程生涯都是在山下度过的,否则必定对”富互联网应用”——或按潮人的叫法“RIA”——略有所闻。万一你真是如前所述的隐居型开发者,那我把重任交给Google,请它帮你找出RIA的正式定义。我们暂且把它定义成,具有在设计上更注重更操作性和效率的用户界面,不同于传统Web应用那种“输入地址,等待网络传输一个Web页面,填写表格,点击按钮,等待网络传输另一个Web页面”的交互循环。AJAX是一种RIA,Silverlight也是,但比它们出现早得多的,是Adobe的Flash。
因为新鲜感,对RIA的关注重心,大都集中在AJAX和老朋友JavaScript等工具。但是过去三年里,Apple迅速且戏剧化崛起,并在移动市场占有主导地位,对此产生了极大挑战。以最新的浏览器技术和宽带连接为前提来建立Web应用是不够的,因为连美国自己都做不到这两点。实际上,即使有最新的浏览器技术和最快的连接,只要开发人员打算用超越基本HTML的技术来开发Web应用,就会突然发现自己掉进了一个泥潭,互相冲突的浏览器实现、网络延迟、几十种JavaScript库、错估的用户预期,劈头盖脸而来。
作为一个职业生涯中大部分时间都在关注后端的开发者,我从来都不太关心前端开发者使用的工具和技术。实际上我曾经把前端贬得一文不值,说那一头的大部分开发”除了看看像素变颜色就没有什么了”。这话比较难听,我承认,但你也应该承认,除开最近几年,传统应用的UI设计一向不是业内的时尚话题:放个表单,用户填两下子,然后提交给服务器,实质工作都是我们后端人员做的。所谓实质工作包括:验证所有的输入(免得万一用户真的是一名黑客,用Telnet伪装浏览器来跳过所有”完美的”JavaScript验证逻辑);调用一些数据库和Web服务,说不定还是并行的;纠合一些模板技术或视图生成技术,准备好将要返回的各种HTML、CSS和JavaScript片段,组装起来;最后传输回去给浏览器渲染和显示。
多美好的时光。
不过最近有几件事情发生,我重新认清UI行业的现状:
移动设备市场——iPhone、Android还有WindowsPhone——火热到如果忽视它们就意味着从软件开发行业中退休。虽然我挺想提前退休的,不过短时间内经济上不可行,还有两个小孩要上大学呢。
说到孩子,我的大儿子非常热衷于成为一名游戏开发者,对父子携手完成一两个游戏构想也很有兴趣。当然,对于我们这些做“大事”、搞“企业”开发的人,游戏一般不是我们关心的主题……但是除了想多花点时间跟我儿子在一起,把应用"游戏化"的概念在网络经营和市场营销的圈子里正迅速走红,因此是值得多探讨一些。
说到游戏,游戏有许多有意思的情况:与传统基于表单的应用相比,它们有各种各样的沟通和展示需求。当然游戏不是个例——如果能加快响应速度,甚或实现离线使用,那么很多商业应用也会受益。不管我们多么希望可以假定每个用户有永久在线的宽带连接,严峻的现实是飞机上的互联网连接十分罕见,宾馆的ISP经常无缘无故消失,会议现场的无线连接太难以捉摸。事实上,公平地说,虽然我们在各种场合见到的网络连接多了,可是优质的的连接更难找了。这种状况严重损害了传统浏览器客户端的效果。
最后,Adobe找到了我,问我是否有兴趣从一个Java开发者的角度探讨Flex,深入了解它并反馈结果。充分披露原则要求我申明他们付费让我写这批文章,但是基于个人诚实原则,其实我一直想找个借口来好好了解一下Flex,所以他们的邀请乐得我“屁颠儿屁颠儿的”,可以这么说。
所以,我的计划就是照他们的要求,在InfoQ设一个专栏,以Java从业人员的眼光(而不是艺术家打扮画Flash故事板的Web设计师的眼光)来介绍Flex,观察的角度不限于呆板的传统业务应用,还有各种不同的角度,包括游戏/游戏化,与已有的Java应用程序集成,以及作为移动设备客户端技术的适用性。
我们可以开始了吗?
Flash平台(Flex的基础)几乎像浏览器一样普及,已经安装到全世界的浏览器中接近十年时间。它被当作一种透过浏览器向不知情大众送上可爱动画短片、视频剪辑和奇怪游戏的手段。多年以来,要想完成HTML规范之外的任何事情,这是除JavaApplet以外的唯一方法,而JavaApplet的问题一点也不少。显然,Flash要求用户安装一个本地插件,但这是必要的代价,况且很多用户早就为了看跳舞仓鼠或者玩其他什么可爱游戏,已经下载安装过了。
不幸,很多开发者仍将Flash拒之千里,因为它最初是按照"创意"类用户的习惯设计的,采用了美工人员比较熟悉的概念,例如故事板、时间轴、动画效果等。完全没有什么表单栏、对象模型、核心验证逻辑组件之类的东西。这意味着,如果一位开发者想要利用这个平台,将不得不面对各种模样怪异的工具,陌生的术语,还有一帮子不灌可乐品咖啡的用户群。
除了外表的差异,Flash平台其实和它的Java表亲很相似,都有一个基于字节码的执行引擎,都被移植到多种平台。(从很多方面来看,如果Java“一次编写,处处运行”的口号没有那么多“如果”,真能在客户端成为现实,cobol声明变量面向Java开发人员的Flex开发指南那差不多就应该是Flash插件的样子。)Flash执行.SWF(读作"swiff")文件而不是.class或.jar文件,这种文件格式也像.class文件一样是公开的。而且几年前,Adobe通过Flex开发包进一步了Flash平台,提供Flex的目的是让开发者不需要使用面向美工人员的Flash工具,也能轻松地创建SWF。
因此,第一步是获取SDK,这个可以在Adobe的网站找到。稍微观察下就可以发现,Flex有几种下载,主要的不同点是授权协议模式-最大的"AdobeFlexSDK"包含若干基于Adobe自定开源协议的软件,有可能不被某些组织接受,所以Adobe提供了另一种下载"OpenSourceFlexSDK",基于MPL授权协议的。一般来说,除非你的组织有特殊严格要求,否则"AdobeFlexSDK"完全适合研究和原型开发用途,但是如果想投入商业产品应用,那么需要请律师先看一下授权协议。我们将用最新发布的Flex4.5SDK来进行;如果你还没有准备好,花点时间完成下载吧。
下载回来的SDK是一个简单的ZIP文件,解压到你硬盘中任何方便的,最好放到离其他开发工具近的地方。在我的系统里,我喜欢把所有工具都放在"prg"目录下,所以FlexSDK在我的Windows电脑里就放在"C:\Prg\flex-4.5"的;请看图1-1。在该目录下存放了一系列工具和文件,看过JDK目录的开发者会觉得它的目录结构很熟悉。"bin"目录存放着开发者心爱的各种工具(所以应该将其径放进“PATH”变量),"samples"目录下有各种示例应用,还有其他目录就不一一说明了。
检验Flex是否已经安装好,最快最简单的办法是运行一下"bin"里面的一个工具——mxmlc,也就是我们马上就会认识的Flex编译器。所以,假设C:\Prg\flex-4.5\bin已经加到PATH变量,直接输入"mxmlc",看看有没有反应;如果一切都没问题,你就会看到传统编译器"我其实没有做任何事情"的响应,看图1-3。
开发者遇到新平台,写的第一个程序必然是"HelloWorld",不仅是向(Kernighan和Ritchie)致敬,也因为它展示了我们可以用新平台写出的最简单的程序。对于某些平台,像最初的C编译器,只要三行文本和一次命令行调用就完成了一个有意义的可执行程序;当平台变得更复杂,构建的步骤也越来越复杂。(Java开发者回想起“Hello,EJB!”所需的步骤,依然会。)Flex还是比较简单的,虽然不至于只用一个文本文件就变出花来。
我们暂时可以忽略例中的大部分HTML基本骨架——关键元素在中间部分即<OBJECT>标签下的<EMBED>子标签。显而易见,"src"属性指定当在页面被浏览器加载显示时,被执行的SWF文件名。<PARAM>标签描述该SWF文件所在的URL;因为我们是在本地文件系统操作,所以该属性与<OBJECT>中的"src"属性完全相同。"width"和"height"属性的作用是不言而喻的。所有这些在Adobe的网站上有详细的描述,想了解所有标签的用途和可能参数的读者,请看这个链接
。(简单补充一下,<OBJECT>是给IE3.0看的,<EMBED>是给NetscapeNavigator2.0看的。是的,Flash有这么老。)
有心人可以在浏览器里打开这个页面,看看会得到什么结果。虽然没多大看头,但是当作一个快速测试,检查一下机器上是否已经安装好了Flash插件。虽然这检查有点多余,不过万一真的没装,现在是一个很好的下载时机。
一句话说明FlashPlayer和64位浏览器的关系:它俩合不来。具体来说,Flash还不支持64位浏览器,所以尝试在64位浏览器中运行Flash一定会失败。Adobe回应说,"用32位版的浏览器算了,反正大家都用",以及"将支持64位",请参考这里
MXML文件本身就是一种合乎规格的XML文件,所以里面的XML命名空间跟一般的XML命名空间并无不同,即限定不同的标记名称的语法作用域。可以把这些命名空间当作Java包的角色来看待。代码中声明的一长串命名空间前缀,实际我们只用到其中两个,fx:(下一个例子会用到)和s:。多数Flex程序都喜欢把这一串命名空间写全,因为声明额外的命名空间不会对最后生成的程序有任何影响(就像导入未使用的Java包),所以可以算作一种好习惯,至少目前如此。
其余的标记比较简单明了:"s:Application"标签说明这是一个应用程序,它包含一个子控件"s:Button"。只要曾经编写过HTML表单,就不会对这几个标签的属到陌生,这是故意设计的。我们还没有说明按钮被点击时会做什么,但本着“早发布,常发布”的,我们先运行一下看看。
如果什么都没显示,或者出于某种原因,您的浏览器开始从Adobe下载软件,请勿慌张;先前搭建的HTML脚手架正在替用户忙碌,从Adobe网站上下载最新的Flash播放器。这一迹象表明你的机器还没有安装Flash播放器,等待几分钟,点击几个“你确定吗?”对话框,Flash就应该准备好了。
还有问题的话,请访问<<Adobe的网址>>以验证Flash是否已经正确安装。如果还失败,你可能需要联系您的系统管理员去排除故障,这超出了本文所讲的范围。
构建Flex应用程序必不可少的步骤是用mxmlc工具将MXML文件编译成SWF文件。假设mxmlc已经存在径中,且.mxml文件在同一目录,执行“mxmlcMyFirstFlex4App.mxml”,命令行编译器万年不变的工作过程就开始了:它会回馈说明当前执行到的步骤,如果代码正确无误,执行完毕的时候目录下就会多出来一个新生成的.swf文件。如果我们再次在浏览器中打开先前的HTML脚手架文件,等Flash插件加载完毕,就可以看到如图2-3的内容。现在的页面内容仍然没什么看头,因为当用户(你、我、或者刚好经过的大姨妈Sally)点击按钮时没有任何反应。
有经验的JavaScript用户会很快注意到JavaScript和ActionScript的一些不同之处;Adobe选择脱离传统的JavaScript,尝试解决对JavaScript语言的一些常见。例如,ActionScript比JavaScript有更严格的类型,所以AS的声明语句要求有"类型描述符",帮助编译器确认没有用错对象。ActionScript在使用一个包(库)之前,先要进行引用,所以例中脚本块的开头有一行"import"语句。
函数的命名就像JavaScript一样没有什么,只是按照惯例写成"control_handler"的格式,如果这不符合你的编码习惯,请随意更改。(只是之后不要抱怨。)
重新编译代码产生一个新的SWF,现在可以响应按钮点击了,在浏览器中重新载入"hello.html"页面,点击按钮会产生图2-5的结果。编程前辈们,接受我们的HelloWorld吧!
只要是写过5分钟Java代码的开发者,都知道Ant构建工具的好处——让人类从事任何重复工作都是在等着出错而已,随之而去还有生产力和发展势头。(如果你从来没有浪费过时间在调试上,从来没有遇到过编译失败,那就请你从本系列的下一篇文章开始看吧。)因为Flex是像Java一样的综合开发,显然应该有一个与Ant角色地位相当的工具,Adobe做得更好:他们没有重复造轮子,而是让Flex提供一系列Ant任务插件,让Java/Flex开发者易于将Flex集成到他们构建脚本中。
(是的,这意味着你需要安装Ant,无论作为IDE一部分还是直接从命名行运行都可以(请参考这里
)。如果你居然没有安装Ant,请自动摘下Java开发者的牌子,回去弄你的COBOL吧,我们会装作什么都没有看到。如果喜欢用Maven,那就要靠自己了——Adobe没有提供现成的支持。尽管你可以找到一些教程说明如何把FlexSDK安装到Maven仓库,但老实说,如果你使用Maven……叫救命罢。马上。)
是的,这就是一段没意思的Ant代码,但现在打好基础将来会有回报。写好这段Ant脚本,以后所有的Flex项目都可以用它来做模板,就像当初servlet还新鲜的时候,我们给Java/web-app写的Ant脚本一样。
顺便一提,好奇的读者如果想了解编译器命令行参数的完整列表,请输入"mxmlc-help"即可,这个列表同时也是<mxmlc>标签属性的完整列表。Adobe在FlexSDK/ant目录下的README文件中说明,编译器参数直接对应Ant任务的属性。因此,如果我们想启用命令行参数"-compiler.debug",就给<mxmlc>任务加上一个属性,"compiler.debug=true"。
嗯,还行。就是有点小问题。
从入门到出师,还有很长的要走:我们还要讨论两套UI组件、输入事件、远程通信、库,还要学一种完整的语言(ActionScript),学过这些基础之后,才真正进入到有意思的主题,例如动画、游戏(我个人的最爱)和移动设备(有争议的主题)等等。幸运地是,我有充足的时间时间慢慢写,Adobe也有足够的预算来让我做这件事,所以这篇文章仅仅是“从Java开发者的角度学习Flex和Flash”系列短文的第一篇。日后我们会逐一介绍Flex和Flash所提供的一切。
且听下回分解。
关于作者
TedNeward是一名Java和.NET开发者、顾问、作家,他发现自己对“让像素变变颜色”非常有兴趣。他居住在太平洋西北地区。
查看英文原文:BusyJavaDeveloper’sGuidetoFlex
cobol声明变量·[教程]Java泛型简明教程(13顶)
·外刊IT评论:只要一个返回语句...(3顶)
·外刊IT评论:交易(5顶)
·由Java说起:编程语言还需要开源...(7顶)
·外刊IT评论:编程语言不需要开源...(6顶)