Article:
C++ và Java!
4736
nguyenduchoa.myopenid.com 7Over 4 years ago |

Rất nhiều người đã từng làm việc với ngôn ngữ hướng đối tượng như C++ chẳng hạn, và khí chuyển lên sử dụng Java, chúng ta sẽ thấy rất nhiều sự khác biệt, cho dù cũng có không ít những điểm tương đồng. Trong một đoạn trong cuốn "Thinking in Java", Bruce Eckel đã đưa ra những điểm khác biệt quan trọng giữa Java và C++ mà những người lập trình nên biết.
Khi lập trình với C++, bạn đã có những kiến thức cơ bản về ngôn ngữ hướng đối tượng, và cấu trúc của Java hẳn cũng sẽ không quá khác lạ với bạn. Điều này là do Java có nguồn gốc từ C++, tuy nhiên cũng có một số các điểm khác biệt rất thú vị giữa C++ và Java. Những điều khác biệt này nhằm tạo ra những cải tiến trong lập trình, và nếu bạn hiểu sự khác biệt đó, bạn sẽ thấy tại sao Java lại có nhiều lợi ích đến thế. Trong bài này chúng ta sẽ cũng tìm hiểu những đặc điểm khác biệt quan trọng giữa Java và C++.
1. Điểm đầu tiên là về tốc độ: biên dịch Java chậm hơn C++ đến gần 20 lần. Không có gì ngăn cản việc biên dịch Java và có các trình biên dịch ngay tức thì trong quá trình viết để giúp tăng tốc độ. Cũng không có gì lạ khi các trình biên dịch đều phục vụ cho các platform phổ biến nhưng nếu không có những thứ đó, thì sẽ có nhiều vấn đề không giải quyết được trong Java bởi vấn đề tốc độ.
2.Trong Java có thể comment bằng cả 2 cách như trong C++.
3. Trong Java, mọi thứ đều phải thuộc vào 1 lớp. Không có các chức năng hay dữ liệu toàn thể. Nếu bạn muốn có một cái tương đương như là toàn thể, hãy thêm phương thức static vào trong một class. Không có các struct, enumeration hay union, tất cả đều là các class.
4.Tất cả các định nghĩa về phương thức đều phải được định nghĩa trong thân của một lớp. Vì thế, trong C++ tất cả các phương thức đều được sắp xếp theo hàng nhưng không phải như vậy.
5.Các định nghĩa về lớp trong Java nói chung là khá giống C++, nhưng trong C++ không có dấu chấm phảy khi kết thúc dòng lệnh.
class aType {
void aMethod( ) { /* thân method */ }
}
6. Trong java không có toán tử phân giải phạm vi ::, Java sử dụng dấu chấm cho mọi thứ, nhưng có thể bỏ nó đi vì bạn có thể định nghĩa các thành phần bên trong một lớp. Thậm chí các định nghĩa method cũng luôn phải làm trong một lớp, vì thế không cần các toán tử phân giải ở đó. Một điều cần chú ý nữa là các gọi phương thức static: bạn nói ClassName.methodName();. Thêm vào đó, tên package được sử dụng bằng cách sử dụng dấu chấm, và để sử dụng một package nào đó, trong C++ bạn dùng từ khóa #include còn trong Java bạn lại dùng từ khóa import. Chẳng hạn, import java.awt.*;.
7. Java, cũng như C++, có các kiểu dữ liệu cơ bản. Trong Java, có các kiểu: boolean, char, byte, short, int, long, float, và double. Tất cả các kiểu này đều có độ lớn mặc định, điều này có tác động vào cách thực thi. Việc kiểm tra cũng như các đòi hỏi về kiểu dữ liệu trong Java chặt chẽ hơn trong C++, chẳng hạn:
a. Biểu thức điều kiện chỉ có thể là boolean, không thể là toán học được.
b. Kết quả của biểu thức chẳng hạn X+Y phải được dùng, bạn không thể chỉ nói "X+Y" một vế được, bắt buộc phải là: X+Y= Z;
8. Kiểu char sử dụng kiểu ký tự 16 bit, vì thế có thể tự động dùng cho hầu hết các ký tự quốc tế nào.
9. Các ký tự trích dẫn tĩnh được tự động chuyển sang đối tượng String. Không có các mảng ký tự tĩnh giống như trong C, C++.
10. Java thêm vào dấu dịch phải >>> cho phép dịch phải logic bằng cách thêm vào các số 0 và đầu cuối; dấu >> thêm vào bít dấu (dịch số học).
11. Mặc dù trông có vẻ giống nhau, nhưng các mảng trong Java và C++ lại có cấu trúc và cách dùng rất khác nhau.Có một phương thức chỉ đọc là length để xác định chiều dài của mảng là bao nhiêu, và nó sẽ bắt lỗi trong quá trình chạy nếu ngoài giới hạn. Tất cả các mảng đều được tạo ra với nhiều thành phần, ta có thể chỉ định một mảng cho một mảng khác (kiểu như copy). Định dạng mảng là một đối tượng first-class, với tất cả các method phổ biến có thể dùng cho tất cả các đối tượng khác.
12. Tất cả các đối tượng của các kiểu không cơ bản được tạo ra thông qua từ khóa new, không có đối tượng không cơ bản tương đương "on the stack" như trong C++. Tất cả các thành phần cơ bản chỉ có thể được tạo ra trên stack, mà không dùng từ khóa new. Có các lớp bao bọc cho tất cả các class cơ sở để giúp bạn có thể tạo ra các đối tượng tương đương qua từ khóa new.
Nguồn: Java Coffee
C++, java
7