java方面编程的初级学员必需掌握的基础知识:java语言、HTML、JSP以及至少一种数据库。这是最低的标准,但是也是最高的要求,因为基本上其他相关的技术和架构都是基于这些以上的。总之,我觉得都是一通百通,基本上做一个项目就能熟练掌握一种技术。
至于企业方面:本人先后在国内几个大的软件公司工作过,外企也差不多。小公司我没有去过,但是我觉得小公司不能去,学的技术好像很多,但是其实阻碍了一个工程师从一个工程师到项目经理或者技术经理的发展,因为小公司做的不可能是很大的项目,难么架构和设计不那么严谨,这样从宏观来看对一个程序员是没有好处的。
企业方面根据所做项目的不同用到的技术也不一样,而基本上大一点的公司都有自己的主营项目,也就是强项。比如亚信是做通信行业的,目前处在web化阶段,其对于java工程师的需求很大,但是它的核心还是C语言的,所以一个java程序员在这样的公司是不会有多大发展的,也学不到什么东西,值得一提的是这种公司都有自己的工具软件,也就是把一些常用的模块或者功能都做好了,你只要调用就行了,所以基本上你到这种公司学不到高深的技术,以后跳槽也难! 现在大一点的公司都有自己的工具软件,目的是封装常用的模块,缩短开发周期,提高运行效率,但是对于喜欢技术的人来说就没有什么好处了。
最后,想说的是:企业其实需要的是学习能力强的人,踏实肯干就会得到认可。至于技术都是进入公司以后的事情,只要上面说的几样搞清楚了,面试谈的不错,加点技巧就可以了!
java 学习资料要视频干什么呢? 用Eclipse工具自己买本书或者到网上下几个程序源代码研究一下,再写几个小例子就差不多了!
这些都是我的心得,我是工作4年的java工程师,也许说得不准确,但确实是亲身所见。希望你别走我的弯路,祝你顺利开心!
Ⅱ 初学电脑编程需要什么
初学电脑编程需要学习英语,选择一门编程语言,要有数学基础,具体介绍如下:
1、英语基础
计算机英语与传统的英语知识不同,需要了解的大部分是计算机的专业单词或者词汇,普遍较为简单。但是在高级编程中,会出现比较生涩的词汇,对于想要参与计算机语言设计以及在职业发展上有更多追求的同学可以自学一下大学英语。
2、选择一门编程语言
选择一门编程语言。虽然目前编程语言有600种左右,但是比较流行的编程语言只有几十种,所以尽量选择流行程度比较高的编程语言来入门编程。对于没有明确编程场景的初学者来说,尽量选择全场景编程语言,比如Java、Python、C#等就是不错的选择
3、数学基础
当然拥有初中阶段的数学基础也可以成为一名合格的程序员,这也是目前很多计算机编程培训学校招收初中毕业学生的原因。但想要成为一名优秀的程序员,最少要高中及以上的数学基础,而且要懂得如何举一反三,灵活运用。
4、了解计算机操作系统原理
所有的开发或者说软件应用都是在特定的操作系统上进行的,所以计算机操作系统原理可以说是基础中的基础是必须要了解的。
5、数据结构和算法
这门课程能够决定一个人程序设计水平的高低,是学习过程中需要重点掌握的。C和C++都是可以选择的,前期可以先学C,再学C++会相对简单一些。
在学习编程语言的过程中,也需要同时学习计算机网络、数据库等相关知识,在当前的云计算和大数据时代背景下,还需要掌握如何通过云计算(PaaS)来辅助开发,以及如何利用大数据平台的各种资源。
Ⅲ Adobe Flash Player 11的最新功能
通过Adobe®Flash®Player运行时交付极具吸引力的用户体验,支持本机64位操作系统和浏览器,加速图形渲染、异步位图解码、高分辨率位图支持等等。
本机64位支持
FlashPlayer现在可利用Linux®、MacOS和Windows®上对64位操作系统和64位网页浏览器的本地支持。
Stage3D加速图形渲染*
探索Adobe高性能2D/3DGPU硬件加速图形渲染的新架构,为应用程序高级渲染提供了低级Stage3DAPI,带来互动体验类的框架开发。
*个人计算机的初始支持。
鼠标控制
针对新的内容类别制作身临其境的全景游戏,其中包括需要利用无限滚动、鼠标锁定、相对坐标以及右键和中键事件的第一人称视角游戏。
三次Bezier曲线
轻松创建复杂的三次Bezier曲线,无需通过cubicCurveTo绘制API自定义ActionScript®API。
增强的高分辨率位图支持
可以开发使用大量位图的应用程序。BitmapData对象不再局限于16兆像素(16,777,215像素)的最高分辨率,最大位图的宽度/高度不再局限于8,191像素。
异步位图解码
通过解码初始加载而非点播加载的图像,提高应用程序的响应,提供更流畅的动画。图像视需要缓存。
创造令人赞叹的媒体体验
借助FlashPlayer的高级音频和视频功能创造令人赞叹的媒体体验。
相机的H.264/AVC软件编码
来自您的计算机摄像头的美丽流媒体视频,具有更高的压缩效率和行业广泛的支持,实现高品质的实时通信(例如,视频聊天和视频会议)和视频直播节目。
受保护的HTTP动态流化(HDS)
跨设备保护流视频,同时取消部署复杂的许可证服务器。
多线程视频解码
提供流媒体和实时交互视频,改进了播放性能并提高了Windows、MacOS和Linux系统上运行的高比特率内容的帧速率。
回声消除(仅限桌面)
向游戏、企业和其他类型应用程序添加实时VoIP功能,而无需用户佩戴降噪耳机。用户可以使用台式机或便携式计算机内置的喇叭进行聊天。
高质量视频编解码器
通过渐进式下载、HTTP流或RTMP流,提供高达1080p的高清(HD)质量视频,足以媲美当今最佳的视频编解码器,包括网络上最流行的视频格式On2VP6、On2VP6-S和行业标准H.264。
Speex音频编解码器
充分利用高清晰、开放源代码Speex语音编解码器,它为语音编码提供了等待时间较短的备选方案。FlashPlayer还支持ADPCM、HE-AAC、MP3和Nellymoser。
内容保护
回放使用FlashPlayer中的AdobeFlashAccess保护的媒体可支持各种业务模型,包括用于流化和下载的视频点播、租赁和电子售出。
HTTP动态流化
使用标准HTTP基础结构和SWF级回放组件,交付视频点播和实时多位速率流化。交付直播和录制媒体,包括对FlashAccess的HTTP流媒体视频的全面内容保护。
电话的G.711音频压缩
通过FlashMediaGateway(FMG)和其他第三方客户端(通过开放RTMP协议),支持与传统电话系统的互操作性,而无需转码。
StageVideo硬件加速
在嵌入式和全屏模式下,享受网络上高清晰度H.264视频的优美、流畅回放。AdobeFlashPlayer利用StageVideo硬件加速视频管线,具备更高的帧速率和更低的功耗。
InternetExplorer9硬件加速渲染支持(仅限桌面)
充分利用InternetExplorer9中的硬件加速图形,借助硬件渲染表面提高图形性能并实现无缝合成。
H.264视频硬件解码
跨支持的设备以最低的开销交付顺畅的高品质视频。硬件解码卸载CPU任务、改进视频回放、降低系统资源的使用、维持电池寿命。
快速切换
借助根据不断变化的网络条件自动调整的流显示出众的视频效果。FlashPlayer经过增强,缩短了位速率之间的切换时间。
AdobeFlashAccess®
利用关键旋转支持、V3许可证链接、域名支持、增强输出保护以及设备过滤功能。
流重新连接
即使连接中断时,也可以通过缓冲区播放RTMP流。在ActionScript中加入重新连接逻辑,重新建立服务器连接并在不中断视频的情况下继续流化。 延伸FlashPlayer的运行时功能,在浏览器中实现前所未有的用户体验。
图形多核支持
借助利用最多四个CPU的多核支持加快矢量、位图、滤镜和视频呈现,其中包括真正的1080p视频。
矢量数据类型
使用类型化数组类实现更高的数据性能、效率和错误检查效果。
ActionScript3.0
实现卓越的性能,通过:复杂的应用程序;大型数据集;基于ECMAScript标准(ECMA-262)的ActionScript3.0面向对象的可重用代码库。
全局错误处理
编写一个处理程序就可以处理之前不属于try/catch语句的所有运行时错误。通过捕捉和处理意外运行时错误和显示自定义错误消息,改善应用程序可靠性和用户体验。
麦克风访问(仅限桌面)
访问来自麦克风的实时和连续波形的二进制数据,以创建新类型的音频应用程序。
动态生成声音
使用增强的声音API生成音频并创建新的音频应用程序类型,如混音器和音序器、游戏实时音频、甚至音频观测仪。实时处理、过滤和混合音频。
绘制API
借助可重新设置样式的属性、3DAPI以及无需逐行编码即可绘制复杂形状的新方式,更轻松地完成运行时绘制。
文本引擎
使用新的、极其灵活的文本布局引擎创建新颖的文本控制,该引擎与TextField并存,后者提供对文本布局和交互API的低级访问,用于创建组件级文本对象。
二进制文件支持
借助对二进制数据的直接字节访问,增强您的网络应用程序。通过为新的文件和数据类型添加支持等新方式控制和访问数据,或实时处理声音数据以创建新的声音效果。
缓冲的流追赶
处理位图、将矢量数据复制到位图中以及在运行时使用位图效果。
上下文菜单
通过对常见文本字段上下文菜单项使用支持纯文本和富文本的ActionScriptAPI,控制上下文菜单中可以显示的内容。剪贴板菜单以安全、受控方式提供对剪贴板的访问。
音频硬件解码
借助硬件加快音频解码、避免CPU密集型分析和解压缩,从而降低了移动设备的CPU负载和延长电池寿命。
硬件加速
利用图形卡的硬件处理能力将SWF文件绘制到浏览器中并加快位图、滤镜、混合模式和视频叠加的合成计算,与软件处理相比速度更快。
全屏、硬件加速模式
为用户提供硬件加速、多核增强、全屏视频回放功能,实现跨主要操作系统和浏览器的高分辨率观看。
图形呈现
在运行时享受快速、高质量的按比例图像缩减。通过位图缓存减少矢量和图形呈现,提高性能。.
消除锯齿引擎(Saffron3.1)
借助增强的Saffron和消除锯齿引擎,享受消除锯齿后更高的文本性能和质量,对于亚洲字符呈现尤为明显。笔触字体支持降低了内存要求。
ActionScriptVirtualMachine2
充分利用ActionScript3.0以及为富Internet应用程序优化的AVM2。AVM2包含一个JIT编译器,它可以将ActionScript字节代码转换为本机代码,从而实现最高执行速度。
优化的SWF管理(仅限移动)
优化移动CPU和内存限制的SWF载入和回放,以提供更好的用户体验。不查看时会自动暂停SWF回放,从而降低CPU、电池和内存使用。
睡眠模式(仅限移动)
通过在移动设备转入屏幕保护程序或类似模式时减慢FlashPlayer定时器,降低移动设备上的CPU和电池消耗,并且不中断音频/视频回放。来电使FlashPlayer暂停。
FlashPlayer高速缓存
使用开放源代码Flex框架等公用平台组件构建应用程序,缩小SWF文件大小并缩短应用程序下载时间。FlashPlayer可以将公用组件放入本地高速缓存,然后供任何域的SWF文件使用。
周期定时器
通过消除对不同浏览器定时器实时的依赖性,实现一致的跨平台行为,降低CPU使用并延长电池寿命。以任意帧速率回放视频,增加回放保真度。
轻量级应用程序大小
轻量级、二进制SWF文件格式使您能以较小的文件提供引人入胜的内容。
渐进式应用程序加载
缩短启动时间,实现快速的用户体验。FlashPlayer在下载时执行SWF内容。
硬件加速视频演示
在嵌入式和全屏模式下,享受网络上高清晰度H.264视频的优美、流畅回放。AdobeFlashPlayer利用StageVideo硬件加速视频管线,具备更高的帧速率和更低的功耗。 降低跨不同设备、软件、网络和用户环境创建、测试和部署内容的成本,最终提高经营业绩。
跨平台和浏览器一致性
创建能以一致、可靠、向后兼容并且安全的方式访问的内容,并且可以跨主要操作系统和浏览器访问它们。通过重用代码、资源、框架、工具和服务,为桌面和移动平台创建应用程序、内容和视频。
快速采用
使用最新功能设计内容,并在几个月内瞄准主体用户。快速采用FlashPlayer的新发行版使开发人员能借助尖端技术获得更多用户。
安装简单
为用户提供了顺畅的上下文升级体验。FlashPlayer包含快速安装和自动更新通知功能,实现FlashPlayer新发行版的快速采用,开发人员可以自信锁定这样的目标。
FlashPlayer后台更新
借助此次针对Windows系统进行了功能增强的更新机制,现在可以向终端用户更有效率地提供新版本的运行时。 利用Android™、BlackBerry®Tablet和iOS操作系统的本机文本输入控件,开发移动应用程序。
移动平台支持
向移动设备提供内容。目标移动操作系统包括Android和BlackberryTabletOS。合作伙伴可以获得一个移植工具包和基于Linux®的参考实施,用于将FlashPlayer移植到其他平台。
StageVideo硬件加速
在嵌入式和全屏模式下,享受网络上高清晰度H.264视频的优美、流畅回放。AdobeFlashPlayer利用StageVideo硬件加速视频管线,具备更高的帧速率和更低的功耗。
移动文本输入
如果未检测到物理键盘,可以借助TextField支持使用本机设备虚拟键盘输入文本。在移动设备上编辑文本时,会自动升起和降下一个虚拟键盘,从而实现无阻、直观的文本编辑。
多触和手势
借助面向多触和本机手势事件的全新ActionScript3.0API,充分利用最新的硬件和操作系统用户交互功能。为广泛的设备创建多触感知内容。
加速计输入
将加速计输入用于用户输入控制以及控制屏幕方向。从本机设备加速计传感器读取x、y、z轴的加速值,指定计算机的更新速度以节省电池寿命。
H.264视频硬件解码
跨支持的设备以最低的开销交付顺畅的高品质视频。硬件解码卸载CPU任务、改进视频回放、降低系统资源的使用、维持电池寿命。
音频硬件解码
借助硬件加快音频解码、避免CPU密集型分析和解压缩,从而降低了移动设备的CPU负载和延长电池寿命。
优化的SWF管理(仅限移动)
优化移动CPU和内存限制的SWF载入和回放,以提供更好的用户体验。不查看时会自动暂停SWF回放,从而降低CPU、电池和内存使用。
睡眠模式(仅限移动)
通过在移动设备转入屏幕保护程序或类似模式时减慢FlashPlayer定时器,降低移动设备上的CPU和电池消耗,并且不中断音频/视频回放。来电使FlashPlayer暂停。
硬件加速视频演示
在嵌入式和全屏模式下,享受网络上高清晰度H.264视频的优美、流畅回放。AdobeFlashPlayer利用StageVideo硬件加速视频管线,具备更高的帧速率和更低的功耗。
本机文本输入UI(移动)
移动应用程序现在可以利用Android、BlackBerryTablet和iOS操作系统上的本机文本输入控件,包括特定平台的用户交互行为,例如放大倍率和文本选择。
与Android浏览器渲染引擎更进一步的集成(需要Android3.0.1或更高版本)
由于FlashPlayer与增强的Android3.0浏览器进一步集成,您可以充分利用丰富的交互式网络内容更快、更好的渲染实现更顺畅、响应更快的浏览体验。
智能手机
您可以感受到为充分利用新款智能手机和Tablet中的下一代处理器而度身定制的性能提升。FlashPlayer以智能方式利用多核和GPU技术流畅地交付FLV文件。
自动软键盘支持
在与丰富内容交互、需要键盘输入的触摸屏设备上享受更出众的体验。简化需要键盘输入的应用程序开发,使其易于优化移动设备的桌面应用程序。
移动文本输入
如果未检测到物理键盘,可以借助TextField支持使用本机设备虚拟键盘输入文本。在移动设备上编辑文本时,会自动升起和降下一个虚拟键盘,从而实现无阻、直观的文本编辑。
多触和手势
借助面向多触和本机手势事件的全新ActionScript3.0API,充分利用最新的硬件和操作系统用户交互功能。为广泛的设备创建多触感知内容。 通过本机JavaScript对象表示法(JSON)、套接字进度事件、JPEG-XR支持、增强SWF压缩、垃圾收集API和删除容器的子组件,提高您的开发马力。
本机JSON(JavaScript对象表示法)
ActionScript开发人员现在可以利用高性能本地解析和生成JSON格式数据。开发人员可以将现有数据无缝集成到他们的项目中。
垃圾收集通知
GC通知API对垃圾收集进度提供了额外的控制,使垃圾收集过程不会破坏用户体验。
JPEG-XR支持
支持JPEG-XR高级图像压缩标准(国际标准ISO/IEC29199-2),具备比JPEG更高效的压缩,同时支持有损和无损压缩,并增加对alpha通道透明度的支持。
高效率SWF压缩支持
利用LZMA压缩减少SWF文件大小高达40%,通过缩短下载时间和减少带宽消耗,使用户能够从更丰富的体验中受益。
新的removeChildrenAPI
DisplayObjectContainer现在实施了removeChildrenAPI,使开发人员能够运用单一API调用,快速删除容器的所有子对象。
新的MovieClip属性
利用新的MovieClip.isPlaying特性,返回MovieClip的当前播放状态。
套接字进度事件
通过确定写入缓冲区剩余字节数的新特性以及数据发送至网络层的新事件,改进数据传输管理。新的API允许应用程序轻松跟踪进展情况并提供反馈。 通过FlashPlayer中的本机设备功能实现高度创新的电影体验来吸引用户。
3D效果
从2D开始,然后将您的动画转换为3D。AdobeFlashProfessional软件简单易用的API和3D工具实现动态动画,原先只是有经验的ActionScript®用户或自定义第三方库才能实现。
MacOS自动更新通知
添加实时动态效果,如模糊、投影、发光、斜角、渐变发光等。使用混合模式、径向渐变以及与通过PixelBender技术创建的自定滤镜和效果结合的笔触增加创作选项。
自定义滤镜和效果
创建电影体验实时效果。借助PixelBender,效果既可用于AdobeAfterEffects®CS5软件的作品制作,也可以与FlashPlayer一起实时使用。将独特的滤镜、效果和混合模式应用于所有显示对象。
子像素文本渲染
FlashPlayer中的文本可读性得到改进,尤其对于基于复杂字符的语言。
高级文本支持
充分利用灵活的文本引擎,它为网络带来了印刷级出版。借助开放源代码文本布局框架获得对文本布局更高的控制力,这是一个用于创建多语言网络应用程序的可扩展库。
移动文本输入
如果未检测到物理键盘,可以借助TextField支持使用本机设备虚拟键盘输入文本。在移动设备上编辑文本时,会自动升起和降下一个虚拟键盘,从而实现无阻、直观的文本编辑。
本机自定义鼠标光标
定义自定义本机鼠标光标,从而增强用户体验和提高性能。
多触和手势
借助面向多触和本机手势事件的全新ActionScript3.0API,充分利用最新的硬件和操作系统用户交互功能。为广泛的设备创建多触感知内容。
加速计输入
将加速计输入用于用户输入控制以及控制屏幕方向。从本机设备加速计传感器读取x、y、z轴的加速值,指定计算机的更新速度以节省电池寿命。
动画与合成
借助Alpha通道、蒙版和图层支持等动画及合成功能为设计注入活力。创建与图像及视频集成、令人赞叹的动态图形。
图像导入
动态导入GIF、渐进JPEG和PNG文件。
颜色校正
交付颜色准确的网络应用程序,令喜爱的网络目标外观如您所愿。颜色校正可以与显示器的ICC颜色配置文件配合,允许您将SWF文件转换为标准RGB。
3D效果
可处理高达16,777,216像素(4096x4096)的大型位图,每侧最大长度可达8191像素。 利用新的隐私功能为用户提供更多的安全性和存储控制,带来更加透明和可信的体验。
安全随机数生成器
开发人员现在可以利用加密安全随机数生成来构建更安全的算法和协议。
TLS安全套接字支持
利用客户端/服务器应用程序对安全通信的全新支持。
简化本地存储管理
以简单与集成的方式进一步控制用户隐私,通过浏览器隐私设置界面清除本地存储,就像现在用户清除他们的浏览器cookie一样。
本地设置管理器
借助简化的控制更轻松地管理FlashPlayer隐私、安全性和存储设置。用户可以从Windows®、Mac和Linux®计算机的控制面板或系统首选项直接访问FlashPlayer设置管理器。
MacOS自动更新通知
由于MacOS上支持软件更新自动通知,您可以更轻松地随时使用最新的新增功能。 创建各种应用程序,它们与浏览器密切集成、充分利用本地系统资源并为用户提供了更安全的体验。
异步位图解码
通过解码初始加载而非点播加载的图像,提高应用程序的响应,提供更流畅的动画。图像视需要缓存。
二进制套接字
充分利用与现有自定协议的互操作性,借助紧凑的数据表示法提高数据传输性能。
共享对象
在本地计算机或服务器上的SWF文件之间实时共享数据。
二进制数据访问
借助开放、紧凑的ActionMessageFormat(AMF)交换二进制数据。通过ActionScript对象序列化,保持和检索 应用程序状态。
本地连接
在同一客户端上运行的应用程序之间传输和共享数据。
全球化支持
使用操作系统区域设置首选项或与当前选定区域设置无关的特定格式处理文本和列表,并根据位置环境显示信息。
文件上载和下载API
允许用户从您的网络应用程序上载并保存文件,为他们带来真实体验。新的文件参考运行时访问无需往返服务器,即可实现本地数据处理。
输入法编辑器
通过从您的应用程序中访问操作系统IME,实现本地化输入。
读/写剪贴板访问
允许用户通过剪贴板菜单以安全、受控的方式访问剪贴板,以便您编写用于粘贴文本的处理函数。
浏览器专用模式(仅限桌面)
使用主机浏览器的“专用浏览”模式,因此不会在本地保留本地数据和浏览活动,为SWF和HTML内容提供了一致的专用浏览机制。在Firefox、Chrome和InternetExplorer中受支持。
内存不足管理
当SWF文件尝试分配的内存超出设备上的可用内存时,通过关闭相应实例,自动防止内存不足浏览器崩溃。
外部API
通过外部FlashPlayerAPI与基于HTML、DHTML和Ajax的网络应用程序集成。
提供一致的网络体验
Adobe致力于通过采用开放技术推动创新,提供一致、与众不同的网络体验。
开放规范
创建产品和技术,它们实施了SWF、FLV/F4V、RTMP和AMF规范。Adobe使开发人员能轻松访问这些规范。
开放源代码支持
利用Adobe对开源活动的支持,包括Tamarin开源项目的ActionScript虚拟机,提供一个开源Flex框架,并支持Linux版FlashPlayer。
公共缺陷库
通过FlashPlayer公共缺陷和问题管理系统请求新功能、报告缺陷、为缺陷投票和追踪状态。
SWF搜索
依赖于动态网络内容和RIA大幅改善的搜索结果。Adobe通过向主要合作伙伴提供经过优化的FlashPlayer技术,与搜索行业的领先公司合作。
OpenScreenProject
充分利用OpenScreenProject™,这是一个行业联合的项目,旨在帮助用户跨多个屏幕顺畅访问和共享丰富的内容,而无论所使用的设备、操作系统、浏览器或网络。
Ⅳ 关于ASP连接Excel数据库无法更新的问题
为什么会有Visual FoxPro 要淘汰的传闻呢,我不是很清楚。但这两年微软对Visual FoxPro的不宣传态度却是为这股谣言起到了推波助澜的作用。另外Visual FoxPro 确实是一个容易引起误会的产品,初级用户很容易对它产生“不怎
我们说Visual FoxPro是面向对象化的语言,是有根据的。面向对象化的语言必须具备四个特性:抽象(Abstraction)、封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)。对照一下Visual FoxPro,是不是支持这四大特性!
当然,Visual FoxPro 与C++和Object Pascal 一样都是历史悠久的语言,所以语言中有很多面向过程的语素。我知道很多学校在教学中,只是教导学生们使用Visual FoxPro的面向过程的语言特色,而忽视了面向对象的教学,同样的问题也存在于广大的 Visual FoxPro 程序员中。我们必须明白:不能因为我们没有使用Visual FoxPro面向对象的强大功能,而说Visual FoxPro不是面向对象的语言,这就像不能因为天下雨、没有出太阳,而说太阳被天狗吃掉了——多么的幼稚可笑!
我们知道Visual FoxPro对数据的操作沿用了多年来的面向过程的做法,这与现在流行的开发工具有很大的不同。我觉得,微软这样做是有它的道理的:
第一,面向过程的数据处理,更能发挥XBase语言体系的灵活与随意的特色。这一点,你用过其他的数据库开发工具,然后再用用Visual FoxPro就明白了。
第二,不直接提供面向对象的数据处理组件,不代表不允许用户封装自己的数据处理组件。很多优秀的 Fox程序员,都会自己封装专门数据处理组件,这才是Visual FoxPro编程的高尚境界!
面向记录与面向集合之争
根据笔者的浅薄认知,关系型数据库处理可以分为面向记录操作和面向集合操作。
各种开发工具支持的客户端光标体系就是面向记录操作的,它们支持记录之间的绝对定位,更明白地说就是可以在记录之间导航,诸如:SKIP、GO TOP之类的语句。Visual FoxPro 无疑是此道的绝对高手,20年的语言发展,聚集了大量面向记录的语言要素。这是因为这样,我们才会反复强调:Visual FoxPro的Cursor 体系灵活、强大!
各类大型数据库,如Oracle、SQL Server 是面向集合处理的代表,看看正统的SQL 语言,绝对没有数据导航之说,数据记录之间是平等的,一切都要讲关系、摆条件!
随着技术的发展,人们开始注意到,不能分割这两种对数据的操作方式,于是大型数据库支持了游标语素,Fox也支持符合规范的SQL 语言。
产品定位导致Visual FoxPro变化不易为人们感觉。微软要把Visual FoxPro作为三层构架(或是多层构架)的中间层开发工具。
什么是三层构架呢?第一层是用户界面:它包含了用户界面,让使用者输入,输出,查询等工作;第三层是资料层:它就是用来放资料的地方,一般是指后端数据库,主要有包括 Oracle、SQL Server 等,它主要是提供一个很大的地方,来有规则的存放数据;第二层是商务逻辑层(中间层):有人要说了:存取资料,直接从第一层跳到第二层可不可以?当然可以,没有人规定不能走捷径,而且从数据库直接抓资料,既快又好,那为什么搞出个第二层呢?
商务规则是经常变化的,比如上班从8 点改为10 点,那电脑怎那么知道老板因为不景气少让大家上二个小时班呢?它一定无法知道,你必须告诉它,这时问题就来了,如果你有很多部电脑,例如:100 台,你就得一部部换新程序。如果这是一个挂在Internet上的网络程序,难道总让用户download新程序不成?
更重要的是,在大量客户存在的环境里,传统的两层构架根本没有能力承担巨大的工作压力,必须通过某种中间系统实现压力平衡,这就是中间层的另一妙用!
中间层是没有图形界面设计的代码编写,并且是OOP方式的代码编写,不仅要熟悉后台数据库的特性,还要考虑前台界面工具的特性,最重要的是商务逻辑的构架,同时还要求懂得IIS、MTS(COM+)、NT的安全设置等复杂枯燥的东西。有趣的是,近年来 Visual FoxPro 的各种改进,更多的是在这些方面下功夫,到了最新版本的Visual FoxPro 7 更是在此方面增加了若干特性,下面就让我用四个问题来说明Visual FoxPro 在开发中间层方面的贡献:
问题一:Visual FoxPro能开发出稳定、有效率的Server程序吗?能,在1999年发布的Visual FoxPro SP 3中微软赋予了Visual FoxPro开发多线程进程的内组件的能力,并增加了新的运行时刻库VFPnT.DLL(n代表版本号),支持其运行,在这个运行库中,删除了大量老式的和界面控制元素,使得它更小巧。但是由于Visual FoxPro6本身不是很稳定(加打SP4或SP5才有所改善),所以这个很棒的功能在Visual FoxPro 6下并不能充分发挥,直到Visual FoxPro 7出现才使它的显示出英雄本色!
问题二:分布式的事务、动态负载平衡怎么实现?Visual FoxPro 7对COM+有很好的支持,借由COM+就可以解决这两个问题了!
问题三:作为Server程序,客户程序怎样与Server交换数据集合?这是Visual FoxPro 6开发的Server程序的致命弱点,我们知道Visual FoxPro是用来处理数据的,但不能与外界自由交换数据集合会大大降低开发、使用以及程序运行效率!在Visual FoxPro 7里我们XML就可以快速、轻易的传递大型数据集合,真正做到数据集的来去自由。现在回想Visual FoxPro 6中我们用的那种“循环+属性”的做法,真有天上与人间的感受!
问题四:能不能让Visual FoxPro开发的Server任由客户使用,叫干什么就干什么?可以的,在Visual FoxPro 7里提供了一个全新的函数:ExecScript()。有了它,就可以一次执行多条客户端送来的符合Visual FoxPro规范的语句:你可以定义变量、做查询、更新数据、修改表结构……
微软确实实践着让Visual FoxPro在中间层运行的承诺。但遗憾的是:由于国内用户的水平、国内软件应用的领域,对大多数Fox Fans 无法感受Visual FoxPro日新月异的变化——对他们来说,Visual FoxPro确实“没有改变”!
Visual FoxPro 只能局限于桌面应用程序的开发吗?
技术在进步,软件技术的应用不断在拓宽,Internet 已经是众多开发工具竞相支持的应用领域。Visual FoxPro 从版本 5 开始不断扩充对Internet的支持,到最新的Visual FoxPro 7 更是增加了对Web Service的支持。我们可以把Visual FoxPro 对Internet的支持分为三大部分:
第一,简单的HTML的转换。Visual FoxPro 自带的“Web 发布”就是这类型的工具,利用HTML和DHTML的模版,支持Visual FoxPro数据的Web化,这是一种全静态的 Web 支持。
第二,适合于企业内部使用的 Active Document 技术。是不是希望快速、简单的把Visual FoxPro应用程序转变为Web 应用程序,这个Active Document 技术就是最佳的选择。它支持 App 程序运行在IE中,它的缺点是:在客户端必须安装Visual FoxPro的运行库、客户端与数据库间依然是紧密的有状态的关系,属于F/S构架——只是界面能够运行在IE之中了。它的开发快速以及它依然基于传统构架,决定了这个技术只能运行在企业内部,一般不能在广域网络中发布。
这技术是Visual FoxPro 6提出的,当时在 Tool 菜单里还有一个专门的菜单项。到了而今的Visual FoxPro 7,这个菜单项已经取消了,但并不是说Visual FoxPro 7 不支持Active Document,只是这种并不出色的技术没有必要再放在醒目的位置了。
第三,基于COM 的 Web 应用。
Visual FoxPro 真正能被用于Web 开发,就是通过 COM 支持的。
这里您要有个认识,作为数据库开发工具,Visual FoxPro 不是FronPage这样的用于开发Web 界面的工具(也许未来的 Visual FoxPro 会支持 Web 界面的开发)。Visual FoxPro 完全是作为 Server 运行在网站的后台,为各种应用提供服务。使用 Visual FoxPro 编写的 COM 组件能够被IIS支持,压在后台进行各种运作——这就是真正意义上的Visual FoxPro 的Web应用,也是典型的多层构架的中间层!
这个阶段,Visual FoxPro 对 Web的支持有可以划分为三个层次:
FoxISAPI。
这是最先登场的技术,当年 ASP 技术还没有出现的时候,我们在 IIS 里就可以通过 ISAPI 技术实现动态网页开发。
Web Server
ASP 技术出现了,我们知道 ASP 技术的一大特色就是支持服务器端的组件的应用。用 Visual FoxPro 的编写的 COM 组件就能运行在 IIS 里,供 ASP 调用。
Web Service
这是 Visual FoxPro 7 的新特性,也是当前最热门的技术。它与Web Service的最大不同就是:Web Server 组件只能通过 ASP 程序调用,而Web Service可以供任何系统在全球范围调用,无论客户端的硬件平台、软件平台,只要它支持SOAP、支持XML就可以了。
更夸张一点说:只要能上网,就可以享用 Web Service 提供的服务!
有人也许会问:我可以用VB、VC++建立对象组件时,为何我要用Visual FoxPro 来建立相同的组件? 微软对这一问题有专门的评论,大意为:快、重复使用性、跨语言重复使用性。“快”是指用Visual FoxPro开发的组件撷取、处理资料都极为迅速,并且Visual FoxPro能够非常迅速的建立字符串。到底有多快,我想数据处理、存取的速度大家平时都领教过了,字符串生成速度我这里有个数据不妨一看,这是台湾的一位高手做的试验——将1M的数据写入文本中,结果VC++ 6.0程序用了3.5秒、VB 6.0程序用了11秒、Java 1.1.5用了24秒、Visual FoxPro 6.0用了7秒;“重复使用性”是指Visual FoxPro具备OOP的功能;“跨语言重复使用性”是指Visual FoxPro编写的对象编译以后成为COM、COM+对象组件,这样就可以在其他语言中使用它了。
不要以为Visual FoxPro是“低端产品",无论从数据库(DBF Base)品质还是开发环境评价Visual FoxPro,它都是一个“高端工具”。
许多人认为Visual FoxPro只能用来开发单用户系统或是文件服务器构架的小型网络系统——这是谬误——这种无知的言论在许多讲C/S、三层构架的书中都有(特别是一些VB、PB、Delphi的数据库编程书)。我可以很负责任的告诉大家完全可以用Visual FoxPro开发C/S结构的系统。这里说的C/S构架绝对是正宗的,不是用什么F/S构架在糊弄大家。在C/S构架中我们常常选择Visual FoxPro作为客户端开发工具,以Oracle、SQL Server等网络数据库压在后台,使用Visual FoxPro内置的Remote View和SPT技术,这样就可以完美地解决问题。这里不能详细展开,只特别介绍Visual FoxPro的本地引擎在开发中的作用。Visual FoxPro的本地引擎特别强大(上文我们说过处理百万条记录不费吹灰之力),我们在设计系统时可以十分简单的将远程数据与本地数据结合,很简单、很有效地控制网络数据流量、提高系统工作效率(我看过不少VB、Delphi、PB的书,他们很少在怎样控制网络数据流量、提高系统工作效率论述,不知是不屑一顾,还是其他什么原因)。
我认为Visual FoxPro的本地引擎在C/S构架下起码有三项伟大的用途。其一:非经常变动数据的本地存储。我国的邮政编码与地区的关系是相对稳定的数据,而且数据量也不是太小,我想总有上千个记录(我没仔细考察过具体情况),我们把这些信息存储在客户端的计算机中,就可以在使用邮政编码及其相关信息时从本地得到数据,这样能使高系统效率同时节省网络资源(这是C/S开发的重要原则),只在邮政编码发生变化时在服务器上统一更新,下载更新客户机上的数据。如果用别的软件实现同样的功能,绝对比Visual FoxPro麻烦而且效果绝对不及Visual FoxPro,这因为Visual FoxPro的数据引擎直接支持远程数据读取,能很好的融合本地数据与远程数据;其二:离线数据包。单位里总有人出差,在千万里路之外能不能拿着笔记本为客户发订单、与客户签合同,就像在自己的办公室一样?当他回到公司时只要把笔记本连到服务器中,发送更新就行了。Visual FoxPro的离线视图是经济且高效安全的方案(当然您可以使用远程拨入或建一个Web网站,这些Visual FoxPro可能干)。其实离线数据包还有一个重要的功能:当下载的数据是大量的(除非万不得已请不要这样设计系统),这种情况下使用离线视图可以数据集自动转化为物理表,充分利用Visual FoxPro的高速与灵活,完成后连线更新后端数据源——一切都很简单。我认为:离线视图绝对是Visual FoxPro在C/S系统中的一个卖点,虽然ADO也支持类似的东西,但肯定不及Visual FoxPro有效率;其三:数据驱动。您是否知道,Visual FoxPro中绝大多数文件格式实际上都是DBF文件,如DBC、SCX、FRX等,他们都可以由Visual FoxPro的本地引擎驱动完成复杂的任务。在设计C/S结构时如果要存储用户设置、自定义文件格式,用Visual FoxPro的本地引擎帮忙绝对比其他软件简单,因为你用的是换汤不换药的方法,但它简单、有效率。
Visual FoxPro 开发C/S系统时,最与众不同的特色就是对远程数据的操控是通过本地数据库来实现的,Remote View、Connection都作为本地数据库的对象被管理起来,完美的衔接本地数据与远程数据。这种在客户端建立远程数据逻辑的做法,与最新的ADO.NET有相似之处!
在三层构架中,Visual FoxPro可以充当任意一层的任务,但本人以为大中型系统的数据库部分应以网络数据库为主。客户端界面用Visual FoxPro也是可以的,但一般限于企业内部,在Internet上我们通常使用IE作为客户界面。在三层构架中Visual FoxPro最胜任中间层的开发,它简单(开发难度与普通的Visual FoxPro项目相差不大)、快速的字符串生成、支持COM技术、它支持(MTS)COM+技术、它支持XML(Visual FoxPro 7.0提供3个与XML有关的函数)、它具有强大本地数据引擎、灵活的数据处理方式、它支持多线程的服务组件的开发。
可能有人要问:用ASP+脚本语言一样可以开发Web系统,何必加个中间层。的确,目前在市面上与多讨论Web的书都直接使用脚本语言来开发整个系统,这是十分不正确的做法,甚至有写书还说硬件越来越快,因此使用脚本语言来开发整个系统并没有什么关系。会说出这样话的作者通常都是没有实际开发Web应用经验的人。脚本语言,如VBScript是一种解释性语言,运行效率很低,他们只合适作为胶水程序。开发Web系统正统的做法是:把应用逻辑编写成COM、DCOM对象,然后用少量的脚本语言来驱动/使用这些对象。这样系统开发时工作量会大一些,但它符合开发任何数据库应用程序的最基本的原则:分离应用逻辑与用户界面。这样系统就会变的容易维护了——你可以经常变换那些胶水程序来改变Web页面,应用逻辑变换时你又可以改变某一个逻辑对象,而不用为杂乱且关系复杂的代码发愁。再者,由于Visual FoxPro是高效、灵活的数据处理语言,任何商业逻辑都可以用它来代码化,并且您可以获得几十倍甚至上百倍于ASP+脚本语言的运行效率,以及更为强健的执行效果。
Visual FoxPro 的语言看上去蛮难的。
人们在赞扬 Visual FoxPro 始终是褒扬他的易学易用,我不同意这种观点(我不知道他们站在什么立场上说话)。我看问题的角度是“成为一名还过得去的 Visual FoxPro 程序员”,我的结论是Visual FoxPro 作为一个开发工具并不是好学的。这不是说Visual FoxPro的语法、概念像C那么繁复,而是指:即使是简单的应用,也要掌握很多Visual FoxPro的概念、语法、函数,可能还要较深入了解OOP——往往让人摸不到深浅。比如,拿数据库系统最重要的功能——查询来讲,Visual FoxPro就“花样繁多”。我曾统计过,不算“List、Browse"等交互式命令,Visual FoxPro起码支持4条命令(Find,Seek,Locate,Select-SQL)、3个函数(Lookup(),Seek(),Indexseek()),(当然其中有的已经淘汰)这些命令的关键字、函数的参数众多,有的要求索引, 有的可以用索引但要求优化索引……而这在VB、Delphi中绝对就只是两三个方法的事情。从上面的例子中如果您只看到了Visual FoxPro的繁杂,那么您就完全错了:在VB、Delphi实现查询功能的原理与Visual FoxPro应是一样的,但他们封装了许多环节,而Visual FoxPro就把许多东西更低阶(当然不如VC++那么低层次,但是已经比使用对象的语言难多了)的展示给我们,所以Visual FoxPro的开发者往往比使用其他的开发工具开发者更会思考、更懂得的数据库开发的真谛,因为工具逼迫他们朝这个方向努力……
用Visual FoxPro有助于提高程序员对数据库概念的理解。许多在Visual FoxPro程序员中不是问题的问题往往成为那些使用对象处理数据的程序员的噩梦。比如在Visual FoxPro中数据缓冲、事务处理都是重要的概念(事实上要干活就必须了解这些东西),在其他开发环境中一味强调方便快速往往忽视程序员的基本概念培养,编出的东西要么效率不高、要么老出问题。读书人都懂得:基本概念、基本理论是命根子,这就是Visual FoxPro带给我们的好处。
有趣的是Visual FoxPro繁、难也就到这个程度了 ,他的学习难度曲线是所有语言中最平稳的——不像在有些语言中,基础开发十分容易,一旦深入却难度很高。在Visual FoxPro中初级应用、中级应用、高级应用的难度差异很小——就是那些似曾相识的语句、易于理解的函数。Visual FoxPro的这种高级应用不太难,初级应用不十分容易的特性,对初入门者来讲是无法体会其中的妙处的,这就造成了Visual FoxPro的不太友好形象;
同时,Visual FoxPro的难度却带来了很多的好处(前文我已谈了很多),Visual FoxPro比其他语言在数据处理上更快速、更灵活,数据处理方式更多、更完备。设想一下用Visual FoxPro开发数据对象时,我们可以使用丰富多彩的语句、函数,实现十分复杂、变化多端的功能,用其他语言开发数据对象,它们的功能只能是建立在已有的数据对象的功能之上(这叫继承),变化就少了,功能就弱了。如果要实现Visual FoxPro的Xbase+SQL 那样灵活、强大的功能恐怕要使用底层的API了——这太可怕了!
OOP不仅是指“面向对象”的开发环境,更是一种开发思想、开发技术,Visual FoxPro 在后者上做得更好。
我们讲过Visual FoxPro完全支持OOP的开发,但有趣的是在数据处理方面,微软实际上没有提供什么现成的对象(FFC是Visual FoxPro 6.0才有的,且封装性、适应性都不尽如人意),这一点我不知是Visual FoxPro的福气还是祸害。说“福气”这将逼迫程序员掌握这门并不太简单的技术(可能用“思想方法”更恰当),而不是简单地使用对象。OOP对于中间层的开发来讲是很重要的,因为COM组件必须是建立在OOP思想上的,要开发这种组件就必须掌握OOP技术;讲“祸害”这使Visual FoxPro变得不易于学习和使用了(就我个人而言,真正体会到“用Visual FoxPro应会编制数据处理对象”这一问题也是在使用了Visual FoxPro好长时间之后的事情了)。事实上现在很多诽谤攻击Visual FoxPro的人都没有深刻的认识这一问题——他们只感到Visual FoxPro用起来不及Delphi、PB、VB容易,但他们从不想该怎样开发数据处理对象,到编写COM组件时就要他们的命了。那些“精英们”大多不懂OOP,他们只懂“点”操作符号——仿佛对象的使用就是OOP,他们有什么资格来批评我们呢?
Visual FoxPro的界面能力真的很差吗?
我认为作为数据库系统的开发工具微软为我们提供的那些内置控件加上十几个附送的ActiveX控件已经够用了。
我们讨论Visual FoxPro控件应从两方面入手,第一就是界面美观问题,再就是数据处理、分析是否方便。很多人很在意的前一个问题,我倒是不以为然——控件不多特别是美化界面的控件不多并不代表Visual FoxPro就开发不出赏心悦目的软件,我的感受是软件界面的专业化程度、高级别的审美、整体的效果要比个别的界面特效重要千万倍,实际效果可要好上千万倍。看看国外用Visual FoxPro编制的程序您就会明白这个道理了;我对Visual FoxPro的不满在于数据处理、分析控件不全,特别是缺少了一批数据分析控件。比如没有可以与数据捆绑的图表控件、没有可以列示捆绑交叉表的表格控件、没有可以捆绑数据的数据透视表格控件……在这个问题上Visual FoxPro确实应该向Delphi、PB等软件学习,这是我们对未来的Visual FoxPro的期望!
Visual FoxPro与OLE DB、ADO
ADO是Windows环境下主流的数据存取的解决方案,那些以对象操作数据的语言基本上都使用ADO实现数据存取,如:VC++、VB、Delphi。在Visual FoxPro的开发环境中好像看不到ADO的影子,是不是Visual FoxPro不支持ADO呢?ADO其实是一组COM对象,Visual FoxPro支持COM,当然支持ADO。
我认为:Visual FoxPro对ADO的支持只是停留在较低的水平。这并不是说Visual FoxPro限制了什么ADO的功能(所有功能都能用),而是指:用起来不方便,不像在VB、Delphi中方便。这种不方便主要体现在ADO的Recordset无法与Visual FoxPro的内置控件捆绑。其原因是:Visual FoxPro 不认识ADO的Recordset,只能将记录逐条读取,而不是一下子认得整个Recordset。这样数据就不能被捆绑了,同时也不能对ADO直接使用Visual FoxPro强大的数据处理功能(ADO是用来存取数据而处理数据还要靠客户软件)。
就象Visual FoxPro使用ODBC连接远程数据源那样,ADO通过OLE-DB与数据提供者对话。 (By the way: Visual FoxPro 7是OLE-DB提供者,这样就可以 通过正宗的OLE-DB驱动程序在其他开发工具中使用ADO存取Visual FoxPro数据了 。)
ADO能为Visual FoxPro带来什么?首先要注意的是:ADO与Visual FoxPro的数据引擎是毫无关系的系统,从某种程度上讲ADO的出现为Visual FoxPro提供了一种全新的远程数据处理方式。
ADO是多层应用程序中数据集合传递的最好解决方案。如果我们用Visual FoxPro开发了一个中间层系统,用VB开发了用户界面,当中间层要传递一个cursor到VB的客户端就不可以使用Visual FoxPro的cursor或DBF,因为VB不认得他们。使用ADO的Recordset就可以解决问题,因为大家都认得他;Visual FoxPro 只能通过Visual FoxPro 7支持XML后才能弥补Visual FoxPro本地引擎在应用程序传递数据集的不足。
ADO可以存取非关系型数据库。ADO是微软的Universal Data Access构架的主将,它可以存取Excel等非关系型数据数据库的数据。通过ODBC存取远程数据的Visual FoxPro就无此能力了。但是我使用了ADO存取Excel后很失望,因为连接必须是独占的,所以这种功能带给我们的帮助只是有限的!
ADO可以弥补Visual FoxPro在远程数据存取时的不足之处。譬如Visual FoxPro不认得SQL Server中nText、nVarchar、nChar等数据类型,但ADO可以。
在Visual FoxPro使用ADO存在如下缺点:
Visual FoxPro只能通过COM的方式识别ADO的Recordset,不能像表格那样读写它,这样就出现了两个问题:Recordset无法与Visual FoxPro的内置控件捆绑;无法直接使用Visual FoxPro强大的数据处理功能(ADO是用来存取数据而处理数据还要靠客户软件)。
Visual FoxPro中使用代码实现ADO的全部功能,但代码量大、书写麻烦。
对待以上不足Visual FoxPro开发小组在Visual FoxPro 6推出不久后就发布了一个叫VFPCOM.DLL的组件,可以用它部分解决ADO的Recordset与Visual FoxPro的cursor的转换和ADO事件的绑定 ,Visual FoxPro 更是内置支持 COM 事件绑定。在本文的第一版中,笔者曾有这样的希望:“Visual FoxPro 更具效率的支持ADO”。现在我的看法有了一些改变,我认为在 Visual FoxPro 处理数据,无论是本地、还是远程数据,无论是什么构架的系统,最佳的解决方案认识内置的数据引擎,而不是现在流行的ADO,现在 Visual FoxPro对ADO的支持程度已经足够了!
Visual FoxPro的数据引擎与ADO相比有什么优势呢?
Visual FoxPro数据引擎系统资源耗用小,ADO毕竟是COM组件要花用更多的资源。
作为系统共用组件,使用ADO可能会在不同应用系统中产生ADO的版本问题,这就像我们常遇见的ActiveX的控件版本问题。
ADO只是数据存取组件,它没有数据处理功能,要处理数据必须使用客户应用程序,如VB、Delphi。Visual FoxPro数据引擎同时支持数据存取、数据处理,我已多次强调Visual FoxPro在这两方面的伟大功能;
ADO没有本地数据库作为强大的支持,有需要将远端数据暂时存放在物理文件中ADO绝对不及Visual FoxPro。Visual FoxPro的数据库是桌面数据库中最好的,远端数据暂存其中不仅方便,而且伸缩性强。