使用C,C ++或Java的示例应用程序和优点

时间:2010-05-15 18:54:32

标签: java c++ c

好的,我正在为即将到来的CS课程的2年考试进行修改,很可能会出现这样的事情。我的问题是什么是一个理想的应用程序,将特别受益于三种语言中的每一种的程序功能?我有一个模糊的想法,但获得第二意见可能会有所帮助。

  • Java

    便携性,易用 - 适用于图形用户界面。

  • C ++

    快速但可能需要进行重大更改才能从系统移动到系统,有利于图像处理。

  • C

    我在这里不确定小型嵌入式应用程序?

非常感谢对此的一些澄清,再次感谢StackOverflow

6 个答案:

答案 0 :(得分:7)

Java真正的优势在于Web应用程序。由于JIT编译器的发展,现在它的速度通常可以与C ++相媲美。

我相信标准C ++在各个平台上都非常便携,当您想要使用从未标准化过的东西时会遇到麻烦。我想到的最重要的是线程。

此外,要制作高效,快速和优雅的C / C ++程序,您需要大量的技能和经验。缺乏这些,您可以轻松制作低效,错误和丑陋的C / C ++程序。这并不是说你不能用Java(或任何编程语言)来做到这一点,但是在C和C ++中犯下基本错误比在Java中更加致命。

C用于靠近金属的地方,和/或最高要求性能和效率的地方,包括操作系统内核和设备驱动程序。

答案 1 :(得分:4)

至少在我的经验中,将C ++与Java进行比较是非常困难的,因为它们遵循相当不同的模式。几乎是以有意义的方式比较它们的唯一方法是绘制代码复杂度与两者的程序“大小”:

alt text 黑线= C ++,红线= Java。

特别是如果你主要看一些非常小的项目,C ++看起来几乎是不可能的 - 甚至添加一些功能也会带来很多工作并且会给代码带来很大的复杂性。这是(特别)在一个阶段,你几乎所做的一切都意味着寻找,建立,学习等,另一个通常独立于其他的图书馆。

对于这种规模的项目,Java通常更具吸引力 - 它带有一个更大的标准库(大多数)遵循大致相似的样式,因此您对一个部件的了解相当于其他部分。你也会得到像垃圾收集这样的东西,所以你的内存管理往往相对微不足道。

对于较大的项目,情况发生逆转 - 操作员超载使得一些库难以学习也使得它们更容易使用,一旦你知道如何。同样,的模板确实难以包裹,让您在不使用新代码的情况下解决更广泛的问题。您可以学习应用RAII来轻松管理虚拟所有资源,而不是通过垃圾收集来简化内存管理。

不幸的是,通常很难估计任何特定项目在水平轴上的位置。更糟糕的是,除非它真的接近交叉点,否则两者之间的差异通常不会达到10%或15% - 它更可能是2:1的顺序或者3:1。在许多情况下,选择是巨大的成功与可怕的失败之间的区别。

那就是说,我认为你的大多数评估都是错误的。

便携性:即使是全面的。使用C或C ++并不像大多数人所认为的那么难,而且(不幸的是)Java也不像他们所认为的那么容易。

GUI:Java使GUI变得简单 - 丑陋且无响应。 Qt(例如)具有大致相同的可移植性,只有更多的工作,但结果更好。

速度:很少有理由选择一个而不是另一个。是的,C ++通常会获胜,但对大多数应用程序来说都不会有任何真正的区别。

就C而言,是的,它对较小的嵌入式系统很有用。它的主要优点是最大限度地减少了获得工作系统所需的环境框架。 C ++需要更多,而Java则更多(尽管如果已经保证存在该环境,例如许多移动电话上的Java),这可能无关紧要。

答案 2 :(得分:4)

  • C:设备驱动程序和其他低级别的东西
  • C ++:您没有的应用程序 想要惹恼用户 安装运行时环境
  • C / C ++:实时应用;或者在 程序运行时的情况 极短(C / C ++程序 在jvm启动之前终止 完成);在记忆的情况下 足迹必须小
  • Java:在几乎所有其他情况下 (没有提供更适合的域名 存在特定语言);移动 应用;网络(特别是在网上) 服务器)
java的性能是恕我直言不再是一个问题。它至少可以与C ++相媲美,并且在很多情况下它甚至优于C ++ - 我们在java中重新实现了大量的运算应用程序,它比在C ++中实现的旧程序运行速度快一个数量级。奇怪?好吧,我认为主要原因是更好的工具支持,更快的周转周期以及将现有库插在一起所花费的时间更少:使用Java,我们有更多时间专注于算法。另外,一些可以减慢C ++应用程序速度的事情对jave来说不是问题(就像临时对象创建一样)。

关于GUI开发,我认为swing已经走了很长的路,SWT是原生的,所以这里java也是一个选项。

标准C ++理论上应该在源代码级别可移植,但实际上并非如此。不仅仅是线程,还有网络,文件系统访问(即没有告诉文件大小的标准功能)等。

即使在一个平台上不兼容也是一个问题 - 我们有std :: string,但是仍有多少个库使用自己的字符串类?如果我用一个库构建我的GUI并希望将数据存储在数据库中,我肯定必须先转换。

另一个例子:如果我想使用正则表达式,我应该使用boost :: regex还是GNU库?

答案 3 :(得分:2)

好吧,我不太确定Java的优势,因为现在C ++有Qt。但除此之外,Java在可移植性方面非常出色。目前使用JavaFX Java也是RIA和专有系统的一个很好的选择。恕我直言,Java确实比C ++容易得多。

我也认为C主要用于嵌入式系统和一般需要处理硬件的地方。

答案 4 :(得分:2)

  • Java - 适合移植性。内置垃圾收集
  • C ++ - 适用于CPU密集型应用程序,这将大大受益于OOP。
  • C - 适用于低级别的工作,包括内核,驱动程序和嵌入式工作(尽管C ++也在那里看到更多的操作)

答案 5 :(得分:1)

就像C比asssembler更容易,Java作为更高级别的语言为开发人员提供了许多好处。

  • 内存管理简化
  • 类型安全
  • 更丰富的图书馆可用性 - 为什么要重新发明轮子。
  • 更丰富的工具支持。

这就是为什么Java已经占领了全世界的原因,因为开发人员可以在很短的时间内用Java做更多的事情。甚至微软也承认这一点,并且正在努力鼓励开发者使用dot net来开发商业应用程序而不是比c / c ++。有一天,Office本身可能是托管应用程序(在VM下)而不是非托管(c / c ++)。

今天的大多数大型网站都使用java而不是c / c ++。

  • 的Gmail
  • Google地图
  • 易趣