Đề tài So sánh sự giống và khác nhau của C++, C# và Java
Một tiêu bài thu hoạch: so sánh sự giống và khác nhau củ C++, C# và
JAVA ở cá điểm sau:
- Phần chú thích
- Hằng
- Kiểu dữ liệu
- Kiểm tra kiểu,đổi kiểu
- Không gian tên.
- Quản lý cấp phát bộ nhớ.
- Hàm trùng tên.
- Nhập xuất.
ng nhau ở C++,Java, C# 1,7e-308 đến 1,7e+308 decimal Chỉ có trong C#, với độ chính xác lên đến 28 số và giá trị thập phân, kích thước 80 bit long double 80 Chỉ có trong C++ 1,2e-4932 đến 1,2e+4932 *Chú ý: Kiểu dữ liểu boolean trong Java và C# khác với C++. Trong C++ ta có thể đổi từ kiểu int (long,char, …) sang kiểu boolean va ngược lại. b. Sự khác nhau: Dựa trên các kiểu dữ liệu căn bản, mỗi ngôn ngữ lập trình cung cấp cho người lập trình những cách khác nhau để tạo ra kiểu dữ liệu mới. Trong C++,chúng ta được hỗ trỡ kiểu dữ liệu cấu trúc có 4 dạng như sau : Kiểu struct :định nghĩ kiểu dữ liệu mới dựa vào kiểu dữ liểu cơ bản. Ví dụ: struct So_Yeu_Ly_Lich { char a[20] ;//ten int b; //tuoi }; /*ta đã định nghĩa kiểu dữ liệu mới có tên la: So_Yeu_Ly_Lich */ Kiểu typedef: định nghĩa lại kiểu dữ liệu đã có sẵn để có kiểu dữ liệu mới. Ví dụ: typedef int so_nguyen; /*ta đã tạo ra kiểu so_nguyên từ kiểu int. kiểu so_nguyen có độ lớn và miền giá trị giống kiểu int*/ Kiểu enum : tạo ra kiểu dữ liệu liệt cơ. Cấu trúc: enum kieu_du_lieu { Gia_tri_1, Gia_tri_2, … } Kiểu unions : tạo ra một kiểu dữ liệu mới từ kiểu dữ liệu cơ sở. Nhưng các kiểu dữ liệu này sẽ nằm trong cùng một ô nhớ, có kích thước bằng kích thước của kiểu dữ liệu lớn nhất. Ví dụ: unions vi_du { int x; foat y; char x; }; /* kiểu dữ liệu vi_du sẽ có kích thước 32bit, băng kích thước của kiểu foat */ o Trong Java ,bên cạnh kiểu dữ liệu căn bản. Java còn cung cấp kiểu dữ liệu tham chiểu. Có 3 dạng như sau: Mảng : tập hợp các dữ liệu cùng kiểu Lớp : tập hợp các biến và các phương thức. Ví dụ Lớp “SinhVien” chứa toàn bộ các chi tiết của một sinh viên và các phương thức của sinh viên đó. Giao diện: là một lớp trưu tượng được tạo ra ,cho phép cài đặt đa kế thừa trong Java. Trong C#, ta cũng có kiểu dữ liệu tham chiếu như :array, enum, class. Ngoài ra C# còn cho phép người dùng định nghĩa một kiểu dữ liệu giá trị có chức năng sử dụng và khai báo gấn giống class. Đó là kiểu struct. Tuy nhiên kiểu struct không hỗ trợ việc kế thừa. 4. Kiểm tra kiểu,đổi kiểu a. Kiểm tra kiểu: b. Đổi kiểu: Cả ba ngôn ngữ cung cấp phương thức để đổi kiểu dữ liệu. ta có thể khai báo tường minh hay để trình biên dịch thực hiện ngầm định.Cách khai báo: ; ; = ; Hay = Ví dụ: int a; int a; int b; foat b; a= b// ngầm định a = int(b); //chuyển kiểu tường minh Có hai loại đổi kiểu là: Đổi từ kiểu dữ liệu có kích thước lớn sang kiểu dữ liệu có kích thước nhỏ. Đổi theo cách này ta có thể để trình biên dịch thực hiện ngầm,sai số nhỏ như: o double -> foat o long -> int o int -> short o short -> char o … Đỗi kiểu dữ liệu có kích thước nhỏ sang sang kiểu dữ liệu có kích thước lớn hơn. o char -> short o short -> int o int -> long o long -> foat o foat -> double … Trong trình biên dịch trong Java, C# sẽ báo lỗi nếu gặp tình huống đổi kiểu dữ liệu(lớn sang nhỏ) mà không khai báo tương minh. Vì một số trường hợp dữ liệu từ kiểu cũ có giá trị lớn hơn phạm vi giá trị của kiểu dữ liệu mới nên việc chuyển đổi cũng không thành công. o Ví dụ: /*truong hop bao loi*/ //vuot gia trị chuyen doi int a; int a = 355; foat b; char b; a = b;// bị báo lỗi b = a; //vuot gia tri Bên cạnh việc đổi kiểu biến ,ta cũng có thể đổi kiểu biểu thức với công thức được nêu ở trên. 5. Không gian tên. a. Giống nhau: Không gian tên được sử dụng nhằm tránh sự xung đột giữa việc sử dụng các thư viện khác nhau từ các nhà cung cấp. Không gian tên còn được xem như là tập hợp các lớp đối tượng, và cung cấp các định danh cho các kiểu dữ liệu và được đặt trong một cấu trúc phân cấp. Ví dụ: tạo một namespace có tên là MyLib trong C# namespace MyLib { using System; public class Tester { public static int Main() { for (int i =0; i < 10; i++) { Console.WriteLine( “i: {0}”, i); } return 0; } } } 6. Quảng lý và cấp phát bộ nhớ a. Quảng lý bộ nhớ a. Giống nhau: C++, Java, C# đều được cấp phát vùng nhớ stack và vùng nhớ heap để chạy chương trình. Vùng nhớ stack được dùng để cấp phát cho cho mỗi chương trình là như nhau. Do đó, vùng nhớ này thường được dùng để lưa giá trị các biến tĩnh(biến giá trị). Có một chương trình chuyên để hủy các biến thuộc vùng nhớ stack, khi hàm sử dụng các biến kết thúc thì các biến cục bộ sẽ bị hủy. Ngoài ra còn có vùng nhớ heap dùng để cấp phát cho con trỏ, biến động(trong Java, C# là biến thuộc kiểu dữ liệu tham chiếu). C++, Java, C# quản lý các biến thông qua tên biến b. Khác nhau: Trong Java sử dụng hai vùng nhớ heap riêng biệt để cấp phát vùng nhớ tĩnh và vùng nhớ động : Một heap tĩnh dùng để quản lý các định nghĩa về lớp, các hằng và các phương pháp. Heap động được chia hai phần được cấp phát theo hai chiều ngược nhau. o Một bên chứa đôi tượng. o Một bên chứa con trỏ chỉ đến đối tượng. Trong khi C#, vùng nhớ heap dùng để chứa các biến thuộc loại tham chiếu và được quản lý qua một con trỏ chỉ tới đầu vùng nhớ heap. Khi một đối tượng đươc khai báo ở vùng nhớ heap thì nó sẽ trả về la giá trị của vùng nhớ, giá trị này được gán tới tham chiếu. b. Cấp phát bộ nhớ a. Giống nhau: các biến tĩnh được cấp phát tự động tại một địa chỉ trong vùng nhớ stack. b. Khác nhau: Trong C++, các biến trong vùng nhớ heap không được cấp phát tự động mà lập trình viên phải tự cấp phát thông qua hai toán tử: new (cấp phát) và delete(thu hồi). Trong Java, C#có cơ chế thu gom rác, dùng để hủy các biến một cách tự động. sau đó sẽ gom các biến còn lại vào cuối vùng nhớ, như vậy sẽ tạo ra vùng nhớ heap trống lớn hơn. 7. Hàm trùng tên: a. Giông nhau: o Hiện tượng hai hay nhiều hàm có tên giống nhau trong một class được gọi là hàm trùng tên. o Hàm trùng tên trong C++, Java ,C# có những đặc điểm sau: Khác nhau về số lượng đối số hay kiểu dữ liệu của đối số. Những hàm trùng tên thường thực hiện một công việc nhưng có đối số là các kiểu dữ liệu khác nhau. Những hàm trùng tên, trùng đối số, chỉ khác nhau kiểu dữ liệu trả về sẽ dẫn đến lỗi biên dịch o Trong C++, Java, C# hàm trùng tên chia làm hai loại: RHNạp chồng: các hàm(phương thức) ở cung một class. Ghi đè : các hàm trùng tên nằm trong những class khác nhau. Hàm trùng tên(hàm ghi đè) nằm trong class con hay class kế thừa. o Các hàm có tên giống nhau nhưng nằm trong các class khác nhau, thì không được xem là hàm trùng tên. b. Khác nhau: o Vì C++ là ngôn ngữ lai giữa lập trình cấu trúc và lập trình hướng đối tượng, do đó nó vẫn có thể tồn tại hàm trùng tên trong môt chương trình(tính chất của ngôn ngữ lập tình cấu trúc). Trong C# và Java không tồn tại điều này. Ví dụ: #include void ham_trung_ten (int a) { Cout << “gia tri cua a la:” << a <<endl ; } void ham_trung_ten ( char *ht) { Cout << “ho ten sinh vien la”<< endl; Cout << ht <<endl ; } void main() { int a; char *hoten = “huynh ngoc khue”; cin >> a; ham_trung_ten(a); ham_trung_ten(hoten); } 8. Nhập xuất : Nhập xuất là phương thức cơ bản mà ngôn ngữ lập trình nào cũng cung cấp cho người lập trình. Có hai loại nhập xuất căn bản là: - Nhập xuất file. - Nhập xuất từ thiết bị nhập chuẩn. a. C++ Ngôn ngữ lập trình C++ cung cấp cho ta một thư viện để xuât nhập: iostream.h . Trong thư viện này có nhiều đôi tượng nhập xuất, nhưng có 2 đối tượng mà ta thường sử dụng là: cin>> :dùng để nhập dữ liệu từ bàn phím vào chương trình . cout<<: dùng dể xuất ra màn hình. Còn những đối tượng khác có chức năng phục vụ cho việc nhập xuất như kiểm tra lỗi ,…,nhập – tập tin(cerr, clog) Ví dụ: #include Void main() { int a; cin >> a ;// nhap gia tri cho bien a cout << a <<endl ;// in ra man hinh gia tri cua a } b. Java Java có một thư viện xuất nhập chuẩn là: Java.io. Trong đó có hai loại nhập xuât cơ bản là : o Nhập xuất từ file và các thao tác trên file (liên quan đến một khái niệm mới là luồng ). o Nhập xuất từ bàn phím(thiết bị nhập chuẩn): Java không hỗ trợ hàm nhập chuẩn mà lập trình viên phải tự viết lấy: import Java.util.Scanner; public class test { int x; Scanner scan = new Scanner(System.in); x=scan.nextInt(); } Java có hỗ trợ đối tượng của class System.out là: System.out.print() và System.out.printf. c. C# Ngôn ngữ này hỗ trợ một thư viện trong việc xuất nhập dữ liệu từ bàn phím là: consolie Để xuất ra màn hình ta dùng lệnh Console.Write() viết một giá trị ra cử sổ nhưng không xuống dòng. Console.WriteLine() viết một thông báo ra màn hình và xuống dòng. Ví dụ: int I = 10; Console.Write(“gia tri cua I la” , I) Console.WriteLine(“gia tri cua I la” , I); Console.Write(“end” ); Kết quả là: 10 10 end Để nhập một giá trị ta dùng hàm : Console.Read(). NHẬN XÉT CHUNG: 1. Giống nhau: - Cả C#, Java, C# là các ngôn ngữ lập trình bậc cao có tính hướng đối tượng. - Ngươi lập trình được ngôn ngữ lập trình hỗ trợ đắc lực . nhưng không mang tính gò bó. - Cả ba ngôn ngữ có chung nền tảng là C. Nhưng chúng phát triển theo các chiều hướng khác nhau. 2. Khác nhau: - C++ là ngôn ngữ lai. Nó vừa là ngôn ngữ lập trình cấu trúc(thừa hưởng từ C) vừa là ngôn ngữ lập trình hướng đối tượng(cải tiến mới của C++) - Java là ngôn ngữ kế thừa các câu lệnh của C, tính hướng đối tượng của C++. Nhưng java đã loại bỏ thao tác con trỏ . Java là ngôn ngữ lập trình hoàn toàn hướng đối tượng. java là ngôn ngữ vừa biên dịch, vừa thông dịch. Do đó các ứng dụng của java(chương trình) có tính độc lập với phần cứng. - C# là ngôn ngữ hoàn toàn hướng đối tượng. Nó được phát triển từ C++. Ngôn ngữ C# chủ yếu là dùng để lập trình net.
File đính kèm:
- Đề tài So sánh sự giống và khác nhau của C++, C# và Java.pdf