工作半年多一直在做JAVA软件,因为之前一直在做嵌入式C,说实话半年时间只能从一个门外汉达到入门的级别。临近项目结题之际,有必要对这段时间的收获进行总结总结。
面向对象JAVA的思想确实与C语言有很大差异,需要在实际项目中慢慢体会。经过博士的认真教导,我觉得主要在代码简洁性以及异常处理这两个方面有了比较大提高。
JAVA充分强调类的概念,讲究如何分类,如何封装方法,以及相互调用,而C语言是面向过程,以前写起代码来行云流水,容易一个函数几十行甚至上百行,只注重功能实现,易忽略代码的高效性与简洁性,这样在出问题查代码以及程序功能复用上就会有很大问题。函数应该具有高度的模型抽象性,尽可能解决实现某一种专用的功能。这也是为什么大型软件的组织编写需要先写出框架再进行单元实现的原因,这样可以使结构和功能非常清晰,易于维护。以后即使在嵌入式编程中也应该遵循这样流程。
第二个方面就是对于程序的异常处理方面的改进。一个实际可靠的系统可能会遇到各种异常情况,简单实现功能的软件面对这些异常显得太单薄,肯定不能用。写出一个比较好的完整的程序,可以从三点考虑,一是编码的时候充分考虑各种可能发生的情况,对于有返回值得函数一定要对其值进行判断,不能想当然的认真其一定会执行成功;对于指针的处理一定要仔细,不要忘记指针的空间分配和对防止出现野指针。二是后期一定要进行充分的测试,最好搭建一个模拟测试环境进行黑盒测试,尽量多的发现问题,将这些问题记录下来,逐点改进,然后回归测试,这一点比前者更重要,决定了用户的适用体验。三是追踪用户反馈,发现软件系统在实际环境中随着实际的增长所暴露出来的问题,一个变量累计达到最大值后清零复位都有可能引起系统异常甚至重启,相信很多实际系统都发生过类似的事故。做好前期异常处理可以为后期维护节省很多时间和成本。
除了代码上提升了一些认识,还学会了 络编程一些知识,比如TCP/IP 以及SNMP。 基于TCP设备很多,通过套接字实现,也是进程/线程通信的一种方式,此外用到的还有共享队列、等待唤醒以及共享内存。在JAVA中建立一个套接字很容易,直接new Socket()然后调用输入输出流就可以了,收发数据和串口没什么区别。建立套接字的一般流程是服务器方为:socket(创建套接字)->bind(绑定本地地址)->listen(监听端口请求)->accept(与客户端连接)->send/recv->close; 客户端的流程为:socket(创建套接字)->connect(连接主机)-> send/recv->close.UDP套接字的建立就是服务器省去了listen(监听端口请求)->accept(与客户端连接)建立连接的过程,客户端省去了connect(连接主机)的过程,就是建立套接字就可以直接收发数据了。
SNMP简单 络管理协议是一种基于UDP的应用层协议,占用161以及162端口,像交换机、路由器、无线AP、调制解调器等都支持这种管理方式。几乎所有设备都支持SNMPv1版本,无加密方式,基于MIB中的OID进行变量索引。SNMP 文包含版本 、团体 以及协议数据单元PDU,利用GET-SET共5种SNMP 文:Get-request、Get-next-request、Get-response、Set-request、trap命令进行交换。其中trap是主动上 的缺陷,占用端口162,trap包括企业enterprise、trap类型、时间戳等。分为0-6共7种数据类型,如冷启动、热启动、端口DOWN、端口UP,如果trap类型为6的话为企业自定义的trap类型,需要特定代码来指明。有一个麻烦事儿就是不知道一个变量的OID具体在哪个mib库里面,找起来很麻烦,这时候要借助一个叫ManageEngine OpUtils 6的软件将OID扫出来,通过其值去反推OID值。
软件架构方面采用分层形式,通过消息队列实现数据的同步处理,具体设计还得通过在以后项目中摸索。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!