时间:2024-07-28
任浩然,刘 丹
(延安职业技术学院 陕西 延安 716000)
计算机软件设计和开发为人们的学习、生活、工作带来了极大的便利,计算机技术的快速发展,软件变得越来越复杂,软件中的数据和数据结构是基本的运行资源,操作数据和数据结构的逻辑通常是算法,数据和算法组成的一个逻辑整体即是软件。数据通过独立的变量或者函数参数在传递或者流动,整个程序是线性地去组织和构成的。数据类型和具体的数据来定义变量,算法的代码逻辑来定义函数。两者之间没有必然的关联。在整个程序的主入口调试代码可以看到数据是如何在数据结构和算法的控制下流动的,函数一般可以将输入参数、输出数据、预期操作和算法表达清楚。编程方法面对整个处理过程更符合一般的线性的逻辑思维,但随着软件系统模块的增加,数据、数据结构和算法逻辑之间的关联关系成几何倍数的增加,程序的数据、数据结构和算法定义和编写也变得越来越困难。为了解决此问题,面向对象的编程语言[1]的设计思想出现,程序设计时,首先考虑系统中的对象,对象间直接的关系,对象之间的交互关系,确定对象的数据域。尽管面向对象的方式可以减少软件系统中面向过程编程所带来的复杂性问题,但由于类中的方法中的编程模式实际上还是面向过程的编码,因此需要一定的设计模式对软件系统进行解耦和复用,减少Java编程开发软件过程中复杂性膨胀与蔓延的情况。
Java编程语言的简单和稳定性体现在Java程序运行之前会进行代码的安全性检查,不支持goto语句,取消了指针的的语法,不需要关注内存分配和回收方面的问题。移除了指针的概念和其相关的操作,指针的操作可以自由移动并任意的读取和存放操作系统的内存地址。不管这个内存地址存储着的数据是否重要或正在被其他系统软件使用,经常有越界使用读写内存地址的数据导致了整个操作系统崩溃的情况,Java特定的垃圾回收方式,不需要程序员直接去控制内存对象的回收,从而极大地避免了危险的操作,提高了稳定性。除此之外定义后的变量只有在满足强制转换规则的情况下才能强转成功。在运行时的环境提供了稳定性保障机制,如字节码校验器、类装载器、运行时内存模型校验、文件访问限制等,Java在字节码的传输过程中还使用了公开密钥加密机制(PKC),进一步地提高了底层的稳定性。
面向对象是更加符合人的思维模式的,使用面向对象的方式开发软件编写程序更具有可读性,在现实生活中一个对象的属性和行为可以封装成一个类,把具体的业务逻辑功能实现封装成具体的方法,方法代码块中可以访问类中的变量和实例变量,私有的变量可以通过公有的方法进行设置和获取。所有的子类所共有的行为和属性抽取为一个父类,所有的子类继承该类可具备父类的属性和行为,继承具有单一性和传递性。这是代码的复用的一种有效方式。运行时类型由实际赋给该变量的对象决定,因此表现出子类对象特有的方法,多个类进行修改和扩展新功能时,父类的代码不会变更,只需要在子类的重写的方法中修改自身的业务逻辑即可,因为面向对象的特点,所有的扩展变得更加的简洁,符合人的思维习惯。
Java语言对多线程提供了极大的支持,线程对象一般是异步的抢占CPU等待着CPU的调度后执行,如果中间的细节全部交给程序员自己进行维护和管理,每个线程对象的私有程序计数器和堆栈以及CPU指令的地址都需要通盘考虑,及其容易将CPU指令的时序混淆容易产生死锁等性能问题。Java内置了多线程的操作维护管理的机制,这种机制使得程序员能够很简洁地编写多线程任务。Java的所有内置的类库,都有对应的多线程包装的类,利用多线程的机制线程对线程中创建、就绪、运行、阻塞以及死亡等状态之间进行方便的切换。Java有一定的动态性,可以利用反射机制来获取类似于动态语言的特性,Java的特殊情形的动态性让其编程的时候更加灵活。
平台无关是Java编程语言的一个优势,平台主要考虑软件平台和硬件平台,软件运行时的环境不会对程序的运行造成兼容性之类的影响,导致程序出现异常或者挂起的现象,系统软件如操作系统的变化不会影响程序的正常运行。硬件平台一般是处理器平台的架构,无论是Intel的复杂指令集还是Arm的精简指令集,在不同的处理器硬件平台间进行移植可以做到运行结果一致。主要的原理是JVM把Java的源代码编译成了以class后缀结尾的中间代码,JVM再将中间代码翻译成所在的具体的不同软硬件平台的机器码,并驱动平台执行该平台对应的机器码。
实际开发中Java语言在绝大部分的B/S情况下只是在处理M(Model)+C(Controller)的逻辑,而从概念上来看,M代表的就是数据模型、而C则仅仅是一种控制层逻辑,MVC的软件开发的架构,简单的描述了软件的View层,主要负责展示当观察者到模型M层的变化,便使用一定的策略来组合C层的业务逻辑,包含了观察者模式、组合模式和策略模式,MVC模式中的M不仅仅代表的是数据模型,而是包括了数据模型之内的所有业务逻辑相关的代码,而C则是比较轻量级的,它被赋予只有处理输入/输出参数以及对该请求进行逻辑流程控制的职能,如果Java代码中对C层有过重的逻辑代码侵入,这是不符合MVC架构规范的。构建复杂的软件系统只有遵循一定的设计原则并合适地运用相应的设计模式,这样的Java代码才不至于在复杂的逻辑中迷失方向。
基于Spring MVC框架[2]的开发中,C层作为服务的入口主要承担接收和转换由终端层或者其他服务发送的网络请求,并将其转化为Java数据对象,然后对数据对象进行参数合法性校验,之后通过在C依赖注入对应Service层服务接口,并进行业务逻辑层方法调用,如果业务逻辑并不复杂,那么可以直接操作数据库持久层完成业务逻辑;而如果Service层方法发现非常多的逻辑条件每个条件所需要处理的代码量超过一定的规模,那么此时通过Factory工厂模式拆分不同的业务处理逻辑,而对于公共的处理逻辑则可以通过抽象类定义抽象方法进行抽象。类通常一开始很小,但是随着程序的增长而逐渐膨胀。一个类应该只赋予它一个职责。如果它所承担的职责太多,就需要抽象公共的业务逻辑使得代码“减负”。复杂性[3]的含义一般是指任何在软件中难于理解和修改的逻辑。含义模糊的代码和互相依赖模块是最主要的复杂性来源。代码里面的重要信息不是显而易见的,如果不结合其他模块,就会无法理解代码的真实含义。在大多数情况下,分割过大的类可以避免代码和功能的重复。使用类似观察者模式、组合模式、策略模式以及工厂模式等的设计模式可以减少重复的代码,提高表达力,提早构建简单抽象的软件结构,使得代码变得整洁可理解,不再复杂。
综上所述,传统的面向过程的编程方法的复杂性随着系统的规模增加会呈几何倍数的增加,为了降低编程过程中系统的复杂性,Java的面向对象的特性可以减少开发软件过程中复杂性膨胀与蔓延的情况,此外使用诸如观察者模式、组合模式、策略模式以及工厂模式等的设计模式和MVC的架构可以减少重复的代码,找出易变化的部分,合理抽象,用抽象构建框架、用实现扩展细节。对扩展开放,对修改关闭。在软件需要进行拓展的时候,不去修改原有的代码,降低了软件开发过程中引入的复杂性。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!