c++背景下看java

1 篇文章 0 订阅

笔者不是做java的,但是作为当前最主流的软件技术,最近做了一点学习。

笔者之前是学c++的,用的mfc,现试图以比较的方式解开java面纱。

一、java相对c++做出的改变(仅语言层面)

1 单根继承结构,即所有类都继承自一个单一的类,这是区别于c++的,事实证明这种结构带来了很多好处。

2 不允许向编译器建议寄存器分配方式,而在c++中是允许的,这在某些情况下可以提高程序运行效率。

3 所有对象均在堆中开辟,而c++可以在栈中开辟对象,栈中开辟和清理空间比堆更快。

4 基本类型中的char,在java中全部为16位,这不同于c++中的8位,这是两者诞生之际字符编码的时代造成的。

5 java中数组不能越界,以确保安全性,但这是在每个数组上少量的内存开销及运行时的下标检查为代价的。

6 垃圾回收机制,程序员不用关心何时销毁对象,从根本上解决了内存泄露的问题,当然,是以额外的资源消耗监视执行的。

7 c++中变量重名时,小作用域中的变量屏蔽大作用域中的变量,这在java中是不允许的。

8 代码注释中,java引入了文档注释,可使用javadoc提取出注释代码生成一个html文件,这种设计的好处是文档与代码的统一存储,但也有评论认为这增加了程序员的工作量。

9 主函数的入口,在c++中,仍然是以独立的main函数为入口,而java是完全的面向对象的语言,没有全局变量,函数也全部在类中,那么程序入口在哪呢?这正是static方法对java的主程序至关重要的体现。

10 java中使用import引入库,类似c++中的#include,但二者原理不同,#include是代码嵌入,而java中库文件已经全部植入,import其实只是一种代码代写,如java.util.Date ,以后写Date别人就知道是是java.util.Date了。

11 java中没有sizeof运算符,在c++中有此运算符是为了移植的需要,因为一样的数据类型在不同计算机上大小不一,例如同样是整数,在一台机器上可能是32位,另一台上则可能是16位,而java则不存在这个问题,所有数据类型在所有机器中大小是一致的。

12 goto最初起源于汇编中的跳转语句,但在高级语言中,由于被滥用而导致程序结构的不明晰,一次goto是java的保留字,却不被使用。

综上,java和c++的比较代表了IT界技术范围的两个方向,c++代表的是对程序高效性、功能底层化的追求,而较少顾及对开发人员的考虑,对程序员的素质要求更高,因此没有设置垃圾回收机制,可以控制使用寄存器,保留全局变量、goto语句等;而java代表的则是开发的高效率、尽量在技术层面减少开发人员的负担,而代价往往是效率的降低和资源的耗费。

二、mvc模式的优劣

mvc(model、view、controller)即模型、视图、控制器开发模式,使用mvc的目的是使m和v相分离,这样一个数据文件可以有多个视图显示,c的存在则是为了确保m和多个v的同步,即一处修改,全面更新。

优点:

1 降低系统间的耦合性。

2 提升重用性,控制层和模型层保持不变的情况下改变视图层即可达到目的。

3 有利于软件工程化管理,开发人员可集中精力在各自专注的模块,缩短了开发周期,提升了可维护性。

缺点:

1 整个mvc框架有一定规模,并不适合中小系统开发。

2 视图与数据相剥离,降低了访问效率。

三、mvc在vc和在j2ee两大平台中的体现

1 vc中的mfc,document和view类分别代表数据层和视图层,控制代码嵌入谁好像都行,这样 c 的层面就耦合性有点高了,所以mfc不是个成熟的mfc作品。

2 java平台上,jsp代表视图层,控制前台显示,javabean(每个javabean对应一张数据表,私有项包含数据,公有set和get接口,面对复杂数据操作时,起个解耦合的作用)代表数据层,servlet代表控制层。基本上是目前最成熟的mvc作品了。

另附:与mvc类似的有个叫mvp的模式,其改进的一点事,m与v彻底分离,在mvc中,v可以直接在m中提取数据,而mvp中必须通过p(presenter主持人)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值