Đề 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

