Đề tài Trình bày điểm giống và khác nhau giữa C++, C# và Java ở vấ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ý và cấp phát bộ

Cả C++,C#sửdụng hai loạichú thích, riêng Javasửdụng ba loại:

- Chú thích dòng: dùng “//” ể đánhdấumột dòng là chú thích.

Khi đó, khi biêndịch thì trình biêndịchsẽbỏ qua những gì

viết ằng sau “//” cho ếnhết dòng. Loại chú thích này được

sửdụng giải thích cho những gì mà dònglệnh hiện hành hoặc

dònglệnhkế tiếpsẽ thực hiện (thường là những chú thích

ngắn).

- Chú thích đoạn (chỉ ởC++, Java): dùngcặp “/* */” ể đánh

dấumột đoạn là chú thích. Khi đó, trình biêndịchcũngsẽbỏ

qua những gì được viết giữa chúng (dùng cho những đoạn

chú thích).

-

pdf6 trang | Chuyên mục: Lập Trình Hướng Đối Tượng | Chia sẻ: dkS00TYs | Lượt xem: 1978 | Lượt tải: 1download
Tóm tắt nội dung Đề tài Trình bày điểm giống và khác nhau giữa C++, C# và Java ở vấ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ý và cấp phát bộ, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
BÀI THU HOẠCH SỐ 1 
v Đề bài: Trình bày điểm giống và khác nhau giữa C++, C# và Java ở các vấn 
đề sau: 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ý và cấp phát bộ nhớ, hàm trùng tên, nhập xuất. 
Sau đó có thể đưa ra nhận xét. 
Bài làm: 
1. Chú thích: 
Cả C++, C# sử dụng hai loại chú thích, riêng Java sử dụng ba loại: 
- Chú thích dòng: dùng “//” để đánh dấu một dòng là chú thích. 
Khi đó, khi biên dịch thì trình biên dịch sẽ bỏ qua những gì 
viết đằng sau “//” cho đến hết dòng. Loại chú thích này được 
sử dụng giải thích cho những gì mà dòng lệnh hiện hành hoặc 
dòng lệnh kế tiếp sẽ thực hiện (thường là những chú thích 
ngắn). 
- Chú thích đoạn (chỉ ở C++, Java): dùng cặp “/*…*/” để đánh 
dấu một đoạn là chú thích. Khi đó, trình biên dịch cũng sẽ bỏ 
qua những gì được viết giữa chúng (dùng cho những đoạn 
chú thích). 
- Chú thích XML (chỉ ở C#): dùng “///” cho từng dòng chú 
thích. Chú thích XML ghi chép tài liệu cho một lớp hoặc một 
phương thức bằng cách sử dụng một phần XML (thường 
dùng để ghi chép mục đích chung nhất của một lớp hoặc một 
phương thức). 
- Chú thích HTLM (chỉ ở Java): dùng cặp “/**…*/” để đặt các 
chú thích vào những chỗ thích hợp (trước phần định nghĩa 
các lớp, interface, phương thức và biến) để trình javadoc có 
thể đọc và sử dụng để tạo ra tư liệu HTML cho chương trình. 
2. Hằng: 
· Trong C++ biến hằng được định nghĩa bằng hai cách, có thể 
dùng từ khóa const hoặc dùng chỉ thị #define. 
-Với từ khóa const: biến hằng này sẽ được cấp phát một 
vùng nhớ trên vùng nhớ dữ liệu của chương trình, biến 
hằng phải được khởi gán khi khai báo, sẽ tồn tại trong 
suốt chương trình (vì thực chất biến hằng là một biến 
static) và không được phép thay đổi giá trị. 
-Với chỉ thị #define: khi biên dịch gặp chỉ thị này trình 
biên dịch sẽ thay tên hằng được định nghĩa thành giá trị 
của nó rồi mới biên dịch. 
· Trong C# biến hằng cũng được định nghĩa bằng hai cách 
với từ khóa const hoặc readonly. 
-Với từ khóa const: (tương tự như chỉ thị #define trong 
C++) khi gặp từ khóa này trình biên dịch sẽ thay biến 
hằng được định nghĩa thành giá trị rồi mới biên dịch. 
-Với từ khóa readonly: là một điều hoàn toàn mới, từ 
khóa này báo cho trình biên dịch biết đây là một biến 
chỉ đọc, không thể thay đổi giá trị nhưng có thể gán 
bằng giá trị của một biến khác khi khai báo (tức là mỗi 
lần thực thi giá trị của biến hằng có thể thay đổi nhưng 
trong quá trình thực thi ta không thể thay đổi giá trị). 
· Trong Java: chỉ sử dụng duy nhất từ khóa static final để 
định nghĩa biến hằng và trình biên dịch sẽ ngăn ngừa bất 
kỳ các đối tượng khác thay đổi giá trị của biến. 
3. Kiểu dữ liệu: 
Kiểu dữ liệu trong C++, C# và Java được chia làm hai tập 
hợp kiểu dữ liệu chính: kiểu xây dựng sẵn mà ngôn ngữ cung cấp 
cho lập trình viên và kiểu được người dùng định nghĩa do lập trình 
viên tạo ra. 
a. Các kiểu dữ liệu xây dựng sẵn: 
-C++: unsigned char, char, enum, unsigned int, short 
int, int, unsigned long, long, float, double, long double. 
-C#: byte, char, bool, sbyte, short, ushort, int, uint, 
float, double, demical, long, ulong. 
-Java: char, byte, short, int, long, float, double. 
*Trong C++ và Java các kiểu dữ liệu này là các kiểu cơ 
bản không phải là các lớp, còn C# thì ngược lại các 
kiểu này là các lớp được thừa kế từ các lớp tương ứng 
trong .NET nên chúng có phương thức. 
*Cả ba ngôn ngữ thì kiểu dữ liệu này đều là kiểu giá trị 
mặc dù các kiểu này trong C# là các lớp. 
b. Các kiểu dữ liệu được người dùng định nghĩa: 
-Struct: chỉ có ở C++ và C#. 
-Class: có ở cả C++, C# và Java. 
*Trong C# và Java, kiểu dữ liệu này là kiểu tham chiếu 
trừ struct trong C#, còn C++ vẫn là kiểu giá trị. 
4. Kiểm tra kiểu, đổi kiểu: 
a) Kiểm tra kiểu: 
-Trong C++ ta có thể lấy tên kiểu của một đối tượng hoặc 
một biến bằng phương thức: typeid(object).name() được định 
nghĩa trong file tiêu đề typeinfo.h (object là đối tượng hoặc 
biến muốn kiểm tra). 
Ví dụ: 
#include 
#include 
using namespace std; 
class A{}; 
int main() 
{ int a; 
 A b; 
 cout<<typeid(a).name()<<”\n”<<typeid(b).name(); 
 return 0; 
} 
Ø Kết quả : int 
class A 
 -Trong C# ta có thể dùng toán tử is để kiểm tra kiểu của một 
đối tượng : Object is TypeObject. Trong đó Object là đối tượng, còn 
TypeObject là tên kiểu dữ liệu, giá trị trả về là true nếu Object là đối 
tượng của TypeObject hoặc dẫn xuất từ TypeObject và trả về false nếu 
ngược lại. 
 -Trong Java ta dùng toán tử instanceof để kiểm tra kiểu của 
một đối tượng: Object instanceof TypeObject. Giá trị trả về là true nếu 
Object là đối tượng của TypeObject và trả về false nếu ngược lại. 
 b) Đổi kiểu: 
 Trong cả C++, C# và Java, các đối tượng thuộc một kiểu dữ 
liệu có thể chuyển đổi sang một kiểu dữ liệu khác qua cơ chế chuyển đổi 
tường minh hoặc chuyển đổi ngầm định. Việc chuyển đổi tường minh là 
do lập trình viên quyết định, còn việc chuyển đổi ngầm định được thực 
hiện tự động và phải đảm bảo không mất thông tin (tức là một kiểu có 
kích thước nhỏ có thể được chuyển kiểu ngầm định sang một kiểu có 
kích thước lớn còn ngược lại là không thể được). 
 *Chuyển đổi tường minh: 
 Cả C++, C# và Java đều sử dụng toán tử chuyển đổi 
kiểu để ép kiểu một đối tượng hoặc một biến, toán tử có dạng 
(typedata)object hoặc typedata(object), trong đó typedata là kiểu cần 
chuyển sang và object là đối tượng. 
 Ngoài ra, trong C# và Java còn có cách chuyển kiểu 
tường minh bằng phương thức (vì tất cả các kiểu dữ liệu của C# và Java 
đều là đối tượng, ngoại trừ các kiểu dữ liệu cơ bản của Java). Nhưng vì 
các kiểu dữ liệu cơ bản của Java cũng được ánh xạ (map) qua các lớp 
bọc nên chúng vẫn có phương thức. 
 *Chuyển đổi ngầm định: 
 Việc chuyển kiểu ngầm định được thực hiện tự động 
khi trong biểu thức không có sự tương ứng kiểu. Một kiểu thấp có thể 
chuyển sang một kiểu cao hơn nhưng ngược lại là không thể được. 
 -Trong C++: char->int->long->float->double 
 -Trong C# và Java: byte->short->int->long->float->double 
5. Không gian tên: 
 -Không gian tên trong C++ và C# giống hệt nhau. Để tạo 
namespace ta dùng: namespace 
 { // Các class 
 } 
 Để sử dụng một namespace ta dùng: 
 using namespace ; // trong C++ 
 using ; // trong C# 
 -Trong Java không có khái niệm không gian tên nhưng khái niệm 
tương tự nó là package, mọi class trong Java đều chứa trong một 
package. 
Để tạo một package ta dùng: package ; 
 Để sử dụng một package ta dùng: import ; 
6. Quản lý và cấp phát bộ nhớ: 
-Trong C++, lập trình viên toàn quyền quyết định việc quản lý và 
cấp phát bộ nhớ. Những đối tượng được cấp phát động trong vùng 
nhớ Heap qua toán tử new phải được hủy một cách tường minh bởi 
lập trình viên qua toán tử delete. Việc quản lý và cấp phát được 
thông qua bởi một con trỏ. 
-Còn đối với C# và Java, việc quản lý và cấp phát bộ nhớ có một 
cơ chế riêng, an toàn hơn. Đó là cơ chế thu gom rác garbage 
collection, khi máy rảnh hoặc khi có yêu cầu cấp phát bộ nhớ mà 
bộ nhớ “không còn đủ” tiến trình thu gom rác sẽ được gọi một 
cách tự động bởi hệ thống. Cơ chế này sẽ tìm trong vùng nhớ 
những đối tượng nào không còn được sử dụng và sẽ thu lại vùng 
nhớ mà đối tượng đó chiếm giữ để cấp phát cho đối tượng khác, 
thỉnh thoảng trình này còn di chuyển vị trí các đối tượng trong 
vùng nhớ để chống phân mảnh vùng nhớ (tối ưu bộ nhớ). Việc 
quản lý và cấp phát được thông qua một tham biến đến đối tượng. 
-Nhưng khác với Java, việc quản lý và cấp phát bộ nhớ trong C# 
có thể được quản lý bởi lập trình viên, được gọi một cách tường 
minh và được thông qua bởi một con trỏ trong C#. Muốn sử dụng 
được con trỏ, khối lệnh có con trỏ phải được đặt trong khối 
unsafe{ …} và phải có từ khóa fixed trước khai báo biến con trỏ 
để báo cho trình thu gom biết không được di chuyển vị trí của đối 
tượng do con trỏ này trỏ đến. 
=>quản lý và cấp phát bộ nhớ trong C# và Java an toàn và tiện 
lợi hơn C++. 
7. Hàm trùng tên: 
 Trong C++, C# và Java đều cho phép hàm trùng tên qua cơ chế 
nạp chồng. Cơ chế này cho phép nhiều hàm có cùng một tên gọi nhưng 
số lượng các tham số, kiểu của các tham số phải khác nhau (kiểu trả về 
có thể giống nhau). Và cách định nghĩa lại một hàm trùng tên của chúng 
đều giống nhau. 
 Ví dụ: Trong C++ ta có thể có định nghĩa các hàm: 
int SoSanh(int, int); 
 int SoSanh(long, long); 
 int SoSanh(char*, char*); 
 int SoSanh(int, int, int); 
 Khi ta gọi một hàm trong số các hàm trùng tên, trình biên dịch sẽ 
lựa chọn hàm nào tùy thuộc vào số lượng đối số, kiểu của các đối số mà 
ta truyền vào hàm. 
 Ngoài ra, trong C# và Java không có tham số mặc định như trong 
C++. 
7. Nhập xuất: 
-Trong C++, quá trình nhập xuất được xử lý bởi các dòng nhập 
(istream) và các dòng xuất (ostream) chuẩn thông qua bộ đệm. 
-Trong C# và Java, quá trình nhập xuất được xử lý bởi các luồng 
xuất, nhập hệ thống thông qua các đối tượng nhập xuất. 

File đính kèm:

  • pdfĐề tài Trình bày điểm giống và khác nhau giữa C++, C# và Java ở vấ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ý và cấp phát bộ .pdf