1. 程式人生 > >Java和C++在圖形使用者介面設計上的對比

Java和C++在圖形使用者介面設計上的對比

C/C++在編寫有圖形使用者介面(GUI)的應用程式可謂是風光無限,Windows和Linux本來就是用C寫的,這也使得C/C++成為在這平臺上開發應用的首選語言,畢竟,不需要安裝額外的軟體,只要按照各自系統的規範來編寫原始碼,編譯連線成一個應用即可。Windows下面的應用時所有作業系統中最多的,而其中絕大部分是用C++來編寫的。其他一些語言,如C#和Python也能寫桌面應用程式,這裡討論C/C++與Java,就略過其他。Java語言從釋出開始就支援編寫圖形使用者介面,但卻因為一些原因,一直不見起色,出名一點的就寥寥幾個。Java最著名的應用程式應該是Eclipse了,一個Java的開源整合開發環境。

Oracle官方的整合開發環境NetBeans也是Java寫的。
C++編寫GUI
C++這門語言本身就相當複雜,難以上手,開發GUI應用當然也很複雜,說好聽些就是技術含量高。C++對底層沒怎麼封裝,因此,基本上能想到能用到的東西都可以自己控制和調整。網路程式設計、執行緒,勾子程式,還能直接操縱WINDOWS API函式,雖然開發速度慢些,但能實現很多功能複雜的程式。另外,由於C++從底層做起,就留下了足夠的空間給開發者優化程式,可以使得應用資源佔用很少,體積很小,效率很高,介面很美。對熟悉C++的人來說,結合MFC(微軟基礎類庫,編寫windows程式時使用)編寫桌面程式應是首選。
除了強大這個優點,C++寫GUI的一個無法迴避的問題是可移植性。雖然Windows和Linux都是C寫的,但兩者的應用程式不能通用。一個應用只有在原始碼級別在各自系統下編譯連線後才可用,其中還要改許多東西,反正跨平臺挺麻煩的。
Java編寫GUI

Java從釋出開始就支援GUI程式設計,其AWT專注於此道。AWT 是Abstract Window ToolKit (抽象視窗工具包)的縮寫,這個工具包提供了一套與本地圖形介面進行互動的介面。但AWT作為Java最弱的元件受到不小的批評。最根本的缺點是AWT在原生的使用者介面之上僅提供了一個非常薄的抽象層。例如,生成一個AWT的複選框會導致AWT直接呼叫下層原生例程來生成一個複選框。不幸的是,一個Windows平臺上的複選框同MacOS平臺或者各種UNIX風格平臺上的複選框並不是那麼相同。
這種糟糕的設計選擇使得那些擁護Java“一次編寫,到處執行(write once, run anywhere)”信條的程式設計師們過得並不舒暢,因為AWT並不能保證他們的應用在各種平臺上表現得有多相似。一個AWT應用可能在Windows上表現很好可是到了Macintosh上幾乎不能使用,或者正好相反。在90年代,程式設計師中流傳著一個笑話:Java的真正信條是“一次編寫,到處測試(write once, test everywhere)”。導致這種糟糕局面的一個可能原因據說是AWT從概念產生到完成實現只用了一個月。
在第二版的Java開發包中,AWT的器件很大程度上被Swing工具包替代。Swing通過自己繪製器件而避免了AWT的種種弊端:Swing呼叫本地圖形子系統中的底層例程,而不是依賴作業系統的高層使用者介面模組。作業系統的高層使用者介面模組。
優點:純Java編寫的程式天生具有跨平臺能力,開發起來簡單,易上手。以前寫GUI沒有優秀的視覺化開發環境,完全靠敲程式碼來實現,但如今NetBeans和JBuilder兩個整合開發環境的實現了視覺化開發,和在VS上開發C++應用程式一樣方便。
Java編寫的程式都有一個不算是缺點的缺點:執行效率不高。當然這是相較於C/C++這種較底層的語言來說的。高階抽象可以使開發時更簡單,專注於功能實現,代價就是效率損失。實際上由於現今硬體快速發展,運算速度提高,記憶體空間擴充套件,使用Java帶來的效能損失在很多情況下可以忽略不計。

JavaC/C++GUI程式設計上的對比

易用性

可移植性

執行效率

資源消耗(記憶體、CPU

視覺化開發環境

美觀度

額外需求

C/C++

容易

較差

有,VSVC++

美觀

Java

容易

天生跨平臺

較低

較高

有,NetBeansJBuilder

美觀

JVM


結論
Java和C/C++在GUI程式設計上各有優劣,特別強調效能,需要深度優化,則選C/C++ 較好,而如果需要跨平臺使用,那最好使用Java。沒有最好的,只有合適的。

相關推薦

JavaC++在圖形使用者介面設計對比

C/C++在編寫有圖形使用者介面(GUI)的應用程式可謂是風光無限,Windows和Linux本來就是用C寫的,這也使得C/C++成為在這平臺上開發應用的首選語言,畢竟,不需要安裝額外的軟體,只要按照各自系統的規範來編寫原始碼,編譯連線成一個應用即可。Windows下面的應用時所有作業系統中最多的,而其中絕

javac++觀察模式實現

觀察者模式是一種比較常用的設計模式,,採用介面,封裝類中動態變化的方法,定義物件間的依賴關係,一邊但一個物件狀態發生改變時,所有以來他的物件都發生改變。 簡單的說,就是一管多,即關鍵就是觀察者和被觀察者,學習這一部分看其他部落格這樣解釋,就是多個屌絲追一個白富美的模式,多個屌絲就是所謂的觀察

JAVA程式設計題解與上機指導 第四版 第8章 Java圖形使用者介面設計 8.2 建立“My JFrame”

一、簡介:程式設計實現建立並顯示一個標題為“My Frame”,Frame背景為黑色,Panel背景為白色,其中,Panel中加入“開啟”“關閉”“返回”三個按鈕,並一行排開。 二、程式碼如下: import java.awt.*; import javax.swing.*; import ja

Helper 類在JavaC 中的設計

                Java有三個選擇1)採用普通的類有公有建構函式,沒有成員變數,提供了很多成員函式作為方法,呼叫程式碼如下:Helper helper = new Helper();helper.f1();這種方法的缺點是建立物件的開銷是不必要的,我們知道建立物件意味著,首先要分配記憶體,然後

Java圖形介面設計——佈局管理器之null佈局(空佈局)

    一般容器都有預設佈局方式,但是有時候需要精確指定各個組建的大小和位置,就需要用到空佈局。          操作方法: 1)       首先利用setLayout(null)語句將容器的佈局設定為null佈局(空佈局)。 2)       再呼叫元件的setB

Java圖形介面設計——佈局管理器之CardLayout(卡片佈局)

卡片佈局能夠讓多個元件共享同一個顯示空間,共享空間的元件之間的關係就像一疊牌,元件疊在一起,初始時顯示該空間中第一個新增的元件,通過CardLayout類提供的方法可以切換該空間中顯示的元件。 1、  CardLayout類的常用建構函式及方法 2、  使用C

Java圖形介面設計——佈局管理器

學習參考博文:https://blog.csdn.net/liujun13579/article/details/7771191 java雖然可以支援以畫素為單位對元件進行精確定位,但是其在不同的系統中顯示有差異,為此java提供了佈局管理器,使得編寫的圖形介

Java 圖形介面設計(GUI)實戰練習(程式碼)

關於Java圖形化介面設計,基礎知識網上可搜,下面簡單介紹一下重點概念,然後就由淺入深程式碼例項。 程式是為了方便使用者使用的,Java引入圖形化介面程式設計。 1.JFrame 是容器類 2.AWT 是抽象視窗元件工具包,是 Java 最早的用於編寫圖形節目應用程

JNI介面實現JavaC的互動

        當面對帶有原生代碼的 Java 的應用程式時,程式設計師問的最通常的問之一,是在 Java 程式語言中的資料型別怎樣對映到本地程式語言C和C++中的資料型別。實際上,大多數程式將需要傳遞引數給本地方法,和也從本地方法接受結果。 1、基本型別的對映      

Java圖形介面設計——容器(JFrame)

表1-1 Swing UI元件   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   元件類         描述   ─────────────────────────────────   JApplet Java.applet.Applet類的擴充套件,它含有JRootPane的一個

二十九、Java圖形介面設計——佈局管理器之FlowLayout(流式佈局)

         前文講解了JFrame、JPanel,其中已經涉及到了空佈局的使用。Java雖然可以以畫素為單位對元件進行精確的定位,但是其在不同的系統中將會有一定的顯示差異,使得顯示效果不盡相同,為此java提供了佈局管理器,以使編寫的圖形介面具有良好的平臺無關性。

Java圖形介面設計——佈局管理器之GridLayout(網格佈局) 之計算器

程式碼如下: import java.awt.*; import javax.swing.*; public class GridFrame extends JFrame { // 定義

java 圖形使用者介面設計 之 改變主題 示例程式碼

(()-> { JFrame frame=new Platframe(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("

跟我學JAVA(5)圖形介面設計——佈局管理器之FlowLayout(流式佈局)

一、佈局管理器所屬類包 所屬類包 佈局管理器名稱 說明 Java.awt FlowLayout(流式佈局) 元件按照加入的先後順序按照設定的對齊方式從左向右排列,一

Helper 類在JavaC++中的設計

vat 類繼承 font 規範 per 公有 函數 解決 ava Java 有三個選擇 1)采用普通的類 有公有構造函數,沒有成員變量,提供了很多成員函數作為方法,調用代碼如下: Helper helper = new Helper(); helper.f1(

關於Eclipse使用視覺化設計介面Java EE 使用視覺化介面設計

原來Eclipse上有一個VisualEditor,不過Eclipse放出話來,這個已經被淘汰了,改有WindowBuilder代替。 因此,如果還在為Eclipse上安裝不了Visual Editor而煩惱的同學,別再苦苦的去尋找解決辦法了,要換成WindowBuil

Java系列】(一)Java圖形介面設計——中間容器(Jpanel)

Swing 程式用JFrame 物件實現了它們的視窗。JFrame 類是AWT Frame 類的一個子類。它還加入了一些Swing 所獨有的特性。與 Frame 的使用十分相似。唯一的區別在於,你不能將元件加入到JFrame中。你可以或者將元件加入到JFrame 的co

javac#介面定義區別--學習筆記

.net  介面的宣告不能包含:資料成員,靜態變數;只能包含如下型別的靜態成員函式的宣告:方法,屬性,事件,索引器。宣告中不     能包含任何實現的程式碼,而在每個成員成名的主體後,必須使用分號。  介面宣告可以有任何的修飾符public、protect、internl

MD5加密(javac#)

service int print cnblogs return pan Coding pro pre java代碼 public static String md5(String str) { try { MessageDiges

JNI打通javac

div sys brush led and ftw orm doc ive 1、JNI簡介 The Java Native Interface (JNI) is a programming framework that enables Java code running i