Đề tài Nhận xét điểm giống và khác giữa C++ và C#, Java

- C++ làngôn ngữlập trình đượcphát triển trên nền tảngcủa C, ngôn ngữvốn đãrất

thuyếtphục nhàlập trình vàonhữngnăm70của thếkỉ 19.Năm 1980nhà khoahọc

ngườiMỹ B. Stroustrup đã cho ra đờingôn ngữ C có tên là “C cólớp”, đến năm

1983 đượcgọi là C++. Đây là ngôn ngữlập trìnhhướng đốitượng đầu tiên. C++ là

sữphát triểnmạnh mẽcủa C, khôngnhững được đưa vào những côngcụlập trình

hướng đốitượng chuyên nghiệp mà còn cónhững khảnăngmạnhmẽcủa hàm. C++

trở thành ngôn ngữlập trìnhhướng đốitượngnổibật trong nhữngnăm 90.

- Java làngôn ngữlập trình do Sun Microsystem giới thiệunăm 1995.Từ đó nó trở

thành côngcụlập hữu ích cho cácnhàlập trình chuyên nghiệp. Java đượcphát

triển trênnềncủa C và C++.Nó sửdụngcấu trúccủa C vàphương thứchướng đối

tượngcủa C++.

- C# thì được phát triểnvớisựkếthợp củacả haingôn ngữ trên. C# mangnhững đặc

điểmvềcấu trúccủa C++nhưng có phong cáchlập trình của Java (gói, garbage,

collection ).

pdf8 trang | Chuyên mục: Lập Trình Hướng Đối Tượng | Chia sẻ: dkS00TYs | Lượt xem: 1982 | Lượt tải: 1download
Tóm tắt nội dung Đề tài Nhận xét điểm giống và khác giữa C++ và C#, Java, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
, float -> 4 byte… 
Cũng như trong C#, java cũng có các kiểu dữ liệu tham chiếu gồm: Array, Class và Interface 
4. Kiểu kiểm tra, đổi kiểu: 
- Nhìn chung kiểu dữ liệu rất quan trọng trong cả ba ngôn ngữ lập trình này. Các biến cần 
được khai báo một cách rõ rang. Ví dụ khi nhập xuất chúng ta không cần phải định nghĩa 
kiểu nhập xuất, chương trình sẽ tự hiểu theo kiểu dữ liệu đã được khai báo trước. 
Ví dụ: cin<<”a=”<<a; 
 cout>>a>>b; 
- Trong C# và Java khi khai báo một biến cần chỉ rõ kiểu dữ liệu, Nó liên quan đến việc truy 
xuất cũng như cấp phát cùng nhớ. 
 Đổi kiểu dữ liệu: gồm chuyển đổi tường minh và chuyển đổi ngầm. 
 Có 3 cách để đổi kiểu dữ liệu tường minh: 
+ (kiểu dữ liệu mới) 
+kiểu dữ liệu mới(Biểu thức) 
+sizeof(kiểu dữ liệu/biến)->Kích thước của kiểu dữ liệu hoặc biến. 
PDF created with pdfFactory Pro trial version www.pdffactory.com
Chuyển đổi ngầm: chương trình tự chuyển đổi dữ liệu lên kiểu cao hơn trong các phép gán, 
giá trị trả về… 
5. Không gian tên-Namespace: 
- Cách đặt tên biến nói chung tùy thuộc vào người dùng, không đặt trùng tên các từ 
khóa, tên hàm và tên class. 
- Trong các ngôn ngữ lập trình thường có rất nhiêu tên hàm, đây là một khó khăn cho 
người lập trình khi phải nhớ quá nhiều tên hàm. Ví dụ trong C, hay C++ ta có rất 
nhiều hàm: hàm nhập xuất, hàm định nghĩa lớp, cấu trúc, định nghĩa hằng…. 
- Vấn đề đặt ra là phải giúp người lập trình không phải nhớ nhiều và phải tra cứu 
nhanh. Điều này đã được khắc phục trong C#. Trong C# các tên hàm có liên hệ với 
nhau về chức năng được nhóm thành một vùng tên chung. 
Ví dụ: Stack,Queue,Hashtable -> thành một vùng 
 Writeline, readline -> thành một vùng. 
Vì thế người lập trình chỉ cần nhớ các tên vùng chung. Việc truy xuất đến các hàm 
trong vùng theo cấu trúc: 
 B.A.Ten_lop_trong_vung_ten_A // Trong đó A là tên vùng con trong B. 
 Ví dụ: System.console.writeline(“Hello world!”); 
- Trong C#, các Namespace được cung cấp bởi thư viện MS.NET và hãng thứ ba cung 
cấp. Ngoài ra ta cũng có thể tự tạo ra các namespace. 
Để dùng một namespace : 
 Using 
Để tạo một namespace : 
 Namespace 
 { 
 ; 
 ; 
 ………… 
} 
 Ví dụ: Tạo một namespace ChuoiSo: 
 Namespace ChuoiSo 
{ 
using System; 
public class Tester 
{ 
public static int Main() 
{ 
PDF created with pdfFactory Pro trial version www.pdffactory.com
for (int i =0; i < 10; i++) 
{ 
Console.WriteLine( “i: {0}”, i); 
} 
return 0; 
} 
} 
} 
Chú ý thêm : + Trong C# tên vùng System chứa hầu hết các tên vùng hữu ít cho 
ngượi lập trình như Console, Math,Exception… 
 + Khi cân dùng nhiều lần các hàm trong cùng một tên vùng, ta có thể 
khai báo tên vùng đó trước với từ khóa Using (để không cần phải nhắc lại nhiều 
lần). Ví dụ: using system; using system.console;….. 
 + Các namespace có thể được tạo lồng nhau. 
- Trong java thì các Namespace cũng được tổ chức tương tự như trong C#. 
6. Quản lí, cấp phát vùng nhớ: 
- Trong C++: 
+ Biến cố định đươc cấp phát vùng nhớ ngay khi khai báo với kích thước 
theo đúng với kiểu dữ liệu được khai báo. 
+ Biến con trỏ: được cấp phát vùng nhớ với từ khóa new và sau đó phải 
được giải phóng bởi hàm delete. 
- Trong C#: 
+ Nhìn chung các dữ liệu có kích thước lớn được lưu trữ trong vùng nhớ 
stack(kiểu dữ liệu tham chiếu…), có kiểu dữ liệu và kích thước lớn được lưu 
trữ trong vùng nhớ head. 
+ Các biến trong C# được cáp phát vùng nhớ bằng từ khóa new, nhưng 
không cần giải phóng. Chương trình tự động hủy khi không dùng đến bằng 
bộ công cụ garbage collector ->không bao giờ quên giải phóng vùng nhớ. 
- Trong Java: 
+ Cũng giống như trong C#, trong Java các biến được cấp phát vùng nhớ 
bằng từ khóa new (trong vùng nhớ head) và cũng không cần phải giải phóng. 
Java cung cấp cơ chế Garbage collection(GC) tự giải phóng đối tượng (không 
phải với mọi đối tượng) khi không cần thiết. 
+ Cơ chế hoạt động của GC: 
 Sử dụng cơ chế đếm? 
 Mỗi đối tượng có một số đếm các tham chiếu 
PDF created with pdfFactory Pro trial version www.pdffactory.com
trỏ tới và giải phóng đối tượng khi số đếm = 0. 
Giải phóng các đối tượng chết 
 Kiểm tra tất cả các tham chiếu, đánh dấu các đối tượng còn được 
tham chiếu, giải phóng các đối tượng không được tham chiếu. 
7. Hàm trùng tên: 
- Đây là điểm đặc biệt của C++.C++ cho phép chúng ta khai báo hai hàm trung tên, chúng chỉ 
cần khác nhau về số lượng các tham số,hay kiểu dữ liệu các tham số (thẩm chí là giá trị trả 
về). 
 Ví dụ: 
 #include 
 Int add(int a, int b) 
 { return (a+b); } 
 Float add(float a, float b) 
 { return (a+b); } 
Void main() 
 { 
 Int x=3,y=5,t; 
 Float m=8.25,n=3.5,r; 
 t=add(x,y); r=add(m,n);//hoàn toàn hợp lệ 
 } 
=>Đây là một cải tiến đặc biệt trong C++ giúp người lập trình không cần phải tạo quá nhiều 
hàm khác nhau với những mục đích tương tự nhau. Điều này cũng giúp người lập trình 
cũng như người sử dụng dễ dàng gọi hàm khi dùng (không cần nhớ quá nhiều tên hàm). 
Ví dụ : 
+ Hàm printf (….); scanf(…);//trong C ta có thể truyền bao nhiêu tham số cũng 
được. 
+ Hàm cin>…; //trong C++. 
- Trong C# thi không có định nghĩa hàm trùng tên, Trong C# chỉ có định nghĩa nạp 
chồng.Chúng ta sẽ tìm hiểu sơ lượt về nạp chồng trong C#: 
+ Ngôn ngữ C# có hướng thiết kế là các lớp do người lập trình tạo ra cũng có những 
tính năng như các lớp được định nghĩa sẵn. Khi chúng ta định nghĩa một lớp thi lớp 
đó phải có đầy đủ các chức năng như một lớp đã đuộc định nghĩa ,phải có đầy đủ 
các hoạt động và phải mang tính trực quan. 
Ví dụ: Để cộng hai phân số: 
 + Trong C++: PhanSo Sum=Ps1.Add(Ps2);//Không mang tính trực quan 
 + Trong C#: PhanSo Sum=Ps1+Ps2;//Trực quan, dể hiểu 
+ Để làm được điều đó C# cung cấp từ khóa operator. 
 Cú pháp: [phạm vi] operator (danh sách tham số); 
 Trong dó phạm vi có thể là: private,public,static…. 
 Trong ví dụ trên: public static PhanSo operator + (Ps1,Ps2); 
Khi đó trong chương trình khi gặp lệnh Ps1+Ps2 trình biên dịch tự động chuyển biểu 
thưc vào : PhanSo.operator+(Ps1,ps2). 
PDF created with pdfFactory Pro trial version www.pdffactory.com
 Kết quả: Sum=Ps1.Add(Ps2); -> Sum=Ps1+Ps2; 
- Trong Java cúng không có khái niêm hàm trùng tên.Trái lại Java cho phép ta xây 
dựng nhiều phương thức trùng tên nhau, trong cùng một lớp, hiện tượng các 
phương thức trong một lớp có tên giống nhau được gọi là bội tải phương thức. 
Để có thể dùng bội tải phương thức thì các phương thức trùng tên phải có đối số, 
hoăc kiểu dữ liệu khác nhau-> để chương trình biết gọi phương thức nào ->nếu 
không sẽ báo lỗi. 
Ví dụ: 
public class Overloading 
 { 
static void print(String s, int i) 
 { 
System.out.println( "String: " + s + ", int: " + i); 
} 
static void print(int i, String s) 
{ 
System.out.println( "int: " + i + ", String: " + s); 
} 
public static void main(String[] args) 
 { 
print("String first", 11); 
print(99, "Int first"); 
} 
} 
8. Nhập xuất: 
- Toán tử “.” Trong C++ dùng để truy xuất tới các thành phần trong một class, struct. 
 Trong C# và Java dùng để truy xuất tới các tên vùng con, thành phần 
trong vùng con…. 
- Trong C++: 
 Hàm nhập xuất:trong C++ dùng hai hàm điển hình la cin và cout. 
 Cú pháp: 
 Hàm nhập: cin<<ten_bien ; 
 Hàm xuất: cout>>ten_bien/chuoi/gia_tri… 
 Khi muốn nhập hoặc xuất nhiều biến,chuỗi, gía trị… ta dùng lien tục các dấu “>” 
PDF created with pdfFactory Pro trial version www.pdffactory.com
 Ví dụ: cout>>”a=”>>a>>”\n”; 
 cin<<a<<b; 
=> trong C++ khi xuất với hàm cout ta không cần định dạng kiểu dữ liệu xuất. Hàm cout tự xác đình 
kiểu dữ liệu xuất theo kiểu đã được định nghĩa cho biến trước đó. Đây là một trong những điều chứng tỏ 
kiểu dữ liệu rất quan trọng trong C++. Ngoài ra hàm cin còn cho phép người dùng nhập một chuỗi kí tự từ 
bàn phím. 
 - Trong C#, hàm truy xuất gồm hai hàm cơ bản là Write/WriteLine và Read/ReadLine. Các hàm trên 
nằm trong thư viện Console. Như đã nói ở trên, để có thể sử dụng một hàm cần phải khai báo các Vung 
chứa hàm(namespace) hoặc là dùng lời gọi với các vùng chứa hàm. 
 Ví dụ: Chương trình xuất dòng chữ “Hello world!” 
 Using System 
 Namespace Xuat() 
{ 
 Public static int Main() 
 { 
 Console.WriteLine(“Hello World!”); 
} 
Return 1; 
} 
Hoặc: 
Namespace Xuat() 
{ 
 Public static int Main() 
 { 
 System.Console.WriteLine(“Hello World!”); 
} 
Return 1; 
} 
PDF created with pdfFactory Pro trial version www.pdffactory.com
- Trong Java: cũng tương tự như trong C#, khi muốn truy xuất thì ta phải khai báo các Vùng 
chứa hàm. Chỉ khác về tên vùng và tên hàm. Trong java dùng Vùng System.out và System.in 
thay cho System.Console trong C#. 
Trong Java cũng có định nghĩa Luồng dữ liệu để trừu tượng hóa hướng nhập xuất dữ liệu. 
Luồng là sự trừu tượng hoá ở mức cao, do vậy bất kể dữ liệu được đọc vào từ đâu hoặc ghi 
ra đâu, thì thuật toán đọc/ghi tuần tự đều tựa như sau: 
Đọc vào 
 open a stream 
while more information 
read information 
close the stream 
Ghi ra 
 open a stream 
while more information 
write information 
close the stream 
· Lớp Luồng: 
Java đưa ra nhiều lớp luồng, để xử lý mọi loại dữ liệu, java chia luồng 
ra thanh 2 loại: luồng byte ( byte stream) và luồng kí tự (character stream), 
lớp InputStream và OutputStream là hai lớp cơ sở cho mọi luồng nhập xuất 
hướng byte, và lớp Reader/ Writer là hai lớp cơ sở cho việc đọc ghi hướng kí 
tự. 
Lớp RandomAccessFile kế thừa từ lớp Object và triển khai giao diện, 
InputStream và OutputStreafm, đây là lớp duy nhất hỗ trợ cả đọc lẫn ghi. 
Nhìn chung trong mõi ngôn ngữ lập trình đều có những thế mạnh của nó. Ngôn ngữ ra sau kế thừa và phát 
triển những ưu điểm vốn có của ngôn ngữ trươc. Điểm chung của chúng là luôn hướng đến phương thức 
lập trình hướng đối tượng vá giúp công việc lập trình ngày càng dễ dàng hơn. 
PDF created with pdfFactory Pro trial version www.pdffactory.com

File đính kèm:

  • pdfĐề tài Nhận xét điểm giống và khác giữa C++ và C#, Java.pdf