c++ --> java

  从c++到java,我们公司要更改开发语言了,把现在用vc做的系统改成用java去做了,第一步就得就得把上层界面改了.由于之前接触过java语言的一些基础知识,现在学起来的不难,但是要马上把一个成型了的系统改用java确实给我压力不小, 不能一步步从头到尾的学了,所以只有从网上下载的一些java源程序仔细专研,还有就是看一些前辈门写的关于java gui软件的好的构架, 基本这些构架有如下特点,原文引用如下:

1. 层次清晰的控制框架是必要的
很多软件上的优秀的设计思想都要引进到GUI程序开发中来,比如MVC模型,讲究将界面呈现和逻辑处理分离开来。在JDK的基础类库中某些包也引进来这种模型,但事实上整个程序的控制结构也需要引进这种思想。如果没有这种概念,就会导致类似这样的现象:在每个显示组件比如按钮的相关激发事件如鼠标单击事件中填写了大把的逻辑处理代码,不但组件开发者自己可能难以驾驭,而且给工程的维护上带来麻烦,在有些情况下甚至变得非常混乱,比如这个组件的状态改变会影响到软件窗口的另外一个组件的改变,这样处理起来就变得十分麻烦,实际上麻烦可能不止这些,两个组件的开发者不是同一个人,需要互相交流,甚至预计不到以后又会在哪个版块添加受此影响的组件!如果引进好的控制框架,部署相关的实现了控制器和数据处理接口的模块,由统一的控制器来处理及分发事件,而各个经过封装的显示组件均可实现了视图组件的相关接口,比如接受状态改变的方法receive(Event),当接受到某种事件后做出相应的变化。同时显示组件可以利用send(Event)方法将必要的自身状态变化信息交给控制器处理。这样的程序控制思想上类似于WEB开发中的Struts技术,只是有些区别并且没那么复杂,桌面应用程序有自身的一些特性,比如在这里控制器可以准确地将某个事件发送到指定的组件,因为处于同一个虚拟机,显示组件可以根据ID注册到控制器。
2. 数据驱动的版面布局和显示
桌面应用跟WEB应用相比较而言外观版面的控制上比较简单一点,这样也就更加便于通过配置文件来影响程序界面的布局风格等。这样使得软件的控制上变得灵活,因为配置文件比硬编码要灵活很多,至少无需编译,而且便于理解和维护。举个例子,如果我要开发一个IDE的开发环境,在界面的左边会显示工具属性栏,在工具的右边显示相关的表单,但是做好后别人看了却说更喜欢属性栏在右边,那边如果这个左右布局是由配置文件决定的,那么改动起来比较容易。同样,诸如菜单项的生成也可以根据配置文件来进行。另外相关的字体设置等也可以在配置文件中指定。
3. 统一的界面风格管理
尽量不要在各个组件中各自实现某个特殊的“花样”,这样不利于软件的维护。在进行WEB开发的时候我们用到样式表来定义界面风格,在Java界面编程里面也有对应的事物,那就是UIManager—界面管理器,通过界面管理器可以定制界面风格,在JDK1.5里面,可以通过配置xml文件来制定界面风格,这就又证明了数据驱动界面是一个很好的做法。
4. 尽量使用较新的界面设计开发包
传统的AWT有很大的局限性,所以在采用界面组件API方面,我想应该尽量利用新出现的优秀的作品,比如布局管理器,在jdk1.4之后就出现了更方便的布局管理器比如SpringLayout,另外市面还有很多其它的公司开发的用来进行界面开发的开发包非常有用,都可以有效引进来,增强开发能力。个人认为不用太担心是否标准API问题,因为并不是商业逻辑组件,对于桌面应用来说这并不重要。
5. 灵活区分前后台工作及引进线程技术
桌面应用软件中要进行各种处理工作,有些时候并不需要用户等待某个事件完成之后才能继续其它的操作,这样就可以新开单独的线程进行相关的处理,而用户可以在界面上继续操作。尽量不要造成用户需要继续操作而界面像是资源不足一样地不响应任何事件。
6. 简便灵活的应用交付
因为是桌面应用程序,在交付给用户使用时一定要有简便灵活性。我们不能指望每个应用程序都像部署服务器端的应用那样到客户现场去安装运行环境,安装数据库,设置环境变量等等,那样软件就会让用户生厌没有生命力了。首先必须有简单的安装程序,安装程序必须包含两个独立的部分,安装Java运行环境和安装应用程序本身,这样可以根据用户的机器上是否有Java运行环境来决定是否安装该环境。安装程序是一个方面,这个可以通过各种第三方软件制作。但是安装后的运行牵涉到很多问题,CLASSPATH及其它环境变量的设置,资源文件的加载,目标数据的定位等等,还有用户可能不是直接点击程序执行而是激发的快捷方式,这样也会引起相关的路径问题。个人认为用Jar压缩包的形式交付应用程序比较好,将各种必要的配置文件都打包到一起,同时方便java,javaw或者其它的exe文件调用执行,在进行文件关联的时候不会出现命令窗口,当然这个有其它相关方式解决,但是更重要的是可以把各种资源文件绑到一起,不用担心classpath等问题,这个方面可以参考ONE-JAR技术,是一个很好的解决方案,就是将应用程序和其它类的jar文件制作成为特定结构的Jar。另外,任何情况下都可以通过
System.getProperty(“system.class.path”)来得到唯一的应用程序所在的绝对路径确定资源位置。


   现代的程序开发大都基于组件的,一块一快堆起来的,想用拿来就用,不想用移除即可,所以开发大型的应用软件这种开发思想非常重要.

   我碰到的另一个难题是java与c++通讯的问题,c++的灵活性纵人皆知,这主要体现在指针的使用,对memory的操作,当然用c++开发的程序正因为如此才导致程序容易crash,难以找到其中的bug,所以java取消了指针保留了引用,这种做法必然牺牲了c++的灵活性.还是回到他们之间通讯的问题吧. 在网上查找的一些资料大部分都是沉滞滥调,通篇一律,他们只管writeInt(), writeFloat(),writeObject(),好想没注意到字节序,字符编码的问题,如在java用的是unicode,而在c++中用的ascii,在java中一个char占用两个字节,在c++中占用一个字节.java与c++程序的通讯问题还是有待解决.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值