Sự khác biệt giữa C# và Java

Một phần của tài liệu Nghiên cứu & thực hành với phần mềm LabView tại trung tâm nghiên cứu MICA (Trang 71 - 73)

C# và Java đều là những ngôn ngữ hoàn toàn hớng đối tợng nên chắc chắn chúng phải có nhiều điểm giống nhau, tuy nhiên cũng có tớng ứng những điểm khác nhau. Khác nhau rõ nhất là khác biệt về nền. C# chạy trên nền .NET. còn Java chạy trên nền máy ảo Java.

II.1. Về kiểu dữ liệu

C# có nhiều kiểu dữ liệu nguyên thuỷ hơn Java. Bảng sau đây sẽ tổng kết các kiểu trong Java và các kiểu tơng ứng trong C#. Trong Java, các kiểu nguyên thuỷ đợc phân tách theo các lớp lốt ( wrapper class) của nó, ví dụ : kiểu integer thuộc về lớp Int. Tuy nhiên trong C#, những kiểu nguyên thuỷ cũng đều đợc kế thừa từ lớp object, có nghĩa là kiểu int cũng tơng đơng với lớp Int. Do vậy mà trong C# có thể viết nh sau :

Console.WriteLine(5.ToString());

5 ở đây là một hằng số nguyên nhng cũng đợc coi là một đối tợng Int. Nếu viết nh vậy trong Java sẽ có lỗi, trong Java phải viết nh sau:

Console.WriteLine(Integer.toString(5));

Bảng so sánh các kiểu dữ liệu giữa Java và C#:

Java và C# đều gồm 2 loại kiểu dữ liệu tham trị và tham biến. Tuy nhiên trong C# hỗ trợ kiểu struct thuộc loại tham trị còn Java thì không. Do đó, trong C# chúng ta có thể định nghĩa thêm các kiểu tham trị, còn Java thì chỉ có các kiểu tham trị sẵn có, các kiểu dữ liệu ngời dùng định nghĩa ra đều là kiểu tham biến hay đối tợng thông qua định nghĩa lớp.

II.2. Về truy cập thành phần

Ngoài các thuộc tính truy cập nh public, private, protected, C# còn thêm vào thuộc tính internal. Những thành phần có thuộc tính Internal sẽ đợc truy cập từ những lớp khác trong cùng một project hay chính xác hơn là trong cùng một assembly.

II.3. Các tham số ref và out

Trong Java, các kiểu dữ liệu tham trị thì luôn đợc truyền theo kiểu tham trị trong lời gọi hàm. Tuy nhiên, trong C# vẫn cho phép các kiểu tham trị truyền theo kiểu tham

biến trong lời gọi hàm bằng khai báo từ khoá ref đứng trớc tham số. Từ khoá out cũng có chức năng nh từ khoá ref, tuy nhiên tham số dùng với từ khoá out không cần phải khởi tạo giá trị trớc khi gọi.

II.4. Giao diện (Interfaces)

Interface trong Java có thể có hằng số còn trong C# thì không. Khi thực thi một Interface, C# cũng cấp lời gọi tờng minh thực thi Interface. Điều này cho phép một class thực thi 2 Interface từ 2 nguồn khác nhau có cùng tên các thành phần ( vấn đề này đã từng đợc coi nh góc tối tăm nhất của C++ trong thực hiện thừa kế , dẫn theo sách “Lập trình C++” của Ngô Trung Việt).

II.5. Về 2 từ khoá khai báo import và using

Trong Java khai báo import dùng để định vị một gói th viện vào chơng trình nh kiểu th viện.Trong C#, từ khoá using dùng để báo hiệu cho chơng trình dịch có sử dụng th viện đó và ghi vào trong assembly, còn th viện đó ở dạng th viện động, sẽ đợc load vào chơng trình bởi CLR sau khi đọc metadata lúc thực hiện chơng trình.

Tuy nhiên, trong C# có một thiếu sót mà đây lại là điểm mạnh của Java đó là các applet. Applet thực sự là một ứng dụng trên Web, nó đợc viết từ một nơi nào đó nh- ng lại có thể chạy trên một máy khách bất kì, làm giảm thời gian truyền trên mạng nh- ng lại thực hiện đợc nhiều công việc phức tạp nh xử lí âm thanh, hình ảnh, đa luồng ngay trên một trang Web. Tuy nhiên nó lại không an toàn. Applet đó có thể lấy cắp các thông tin trên máy khách rồi truyền đi. Do đó, C# đã không hỗ trợ Applet, thay vào vào đó là ứng dụng Web kiểu mới dựa trên công nghệ ASP, tất cả các ứng dụng đều đợc chạy trên server, các trang Web chỉ đóng voi trò giao tiếp với ngời dùng mà thôi.

Ngoài ra trong Java, tất cả các công việc không chắc không có lỗi nh vào ra, độc file thì phải dùng cặp try – catch để bắt lỗi. Trong C# không bắt buộc lập trình viên…

phải thực hiện try – catch ở bất kì tình huống nào. Điều này có nghĩa là, ngời lập trình C# phải cẩn thận hơn trong lập trình.

Một phần của tài liệu Nghiên cứu & thực hành với phần mềm LabView tại trung tâm nghiên cứu MICA (Trang 71 - 73)