Đề tài Sự khác nhau giữa C++ và Java - Nguyễn Trung Kiên

C++ được sắp đặt chính cho chương trình hệ thống. C++ được this

hợp khả năng hỗ trợ cho statically-typed object-oriented

programming, exception handling, scoped resource management . Nó

cũng được tích hợp một thư viện chuẩn.

Java được xây dựng ban đầu để hỗ trợ mạng máy tính. Đi kèm

với nó là một thư viện rộng được thiết kế để cung cấp một nền tảng

hoàn toàn trừu tương. Java cũng hỗ trợ cho lập trình hướng đối tượng.

Nó được thiết kế từ đầu để với mục tiêu là dễ sử dụng và truy cập vào

một đối tượng rộng hơn

pdf8 trang | Chuyên mục: Lập Trình Hướng Đối Tượng | Chia sẻ: dkS00TYs | Lượt xem: 5543 | Lượt tải: 1download
Tóm tắt nội dung Đề tài Sự khác nhau giữa C++ và Java - Nguyễn Trung Kiên, để 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 :
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG LỚP K3C4
Sự khác nhau giữa C++ 
và Java
C++ được sắp đặt chính cho chương trình hệ thống. C++ được this 
hợp khả năng hỗ trợ cho statically-typed object-oriented 
programming, exception handling, scoped resource management . Nó 
cũng được tích hợp một thư viện chuẩn. 
Java được xây dựng ban đầu để hỗ trợ mạng máy tính. Đi kèm 
với nó là một thư viện rộng được thiết kế để cung cấp một nền tảng 
hoàn toàn trừu tương. Java cũng hỗ trợ cho lập trình hướng đối tượng. 
Nó được thiết kế từ đầu để với mục tiêu là dễ sử dụng và truy cập vào 
một đối tượng rộng hơn
Sự phát triển của C++ và java có sự khác nhau về mục tiêu như sau:
C++ Java
Tương thích với mã nguồn C Không tương thích với bất kì ngôn ngữ nào 
trước đó.
Cho phép truy cập trực tiếp vào các 
thư viện hệ thống
Truy cập xuyên qua Java Native Inferface
Tùy chọn tự động việc kiểm tra giới 
hạn(bounds checking)
Luôn luôn thực hiện việc kiểm tra giới hạn
Hỗ trợ hệ thống số học không dấu Không hỗ trợ số học không dấu
Không có giới hạn tiêu chuẩn cho bất 
kì loại số nào. Chỉ quyết định kích 
thước tương đối
Chuẩn hóa các giới hạn và kích cỡ các loại 
tiêu chuẩn
Họ tên : Nguyễn Trung Kiên
Lớp : K3C4
Tham số được thông qua bởi giá trị, 
con trỏ, tham chiếu
Tham số được thông qua bởi giá trị
Quán lí bộ nhớ rõ ràng, mặc dù bên 
thứ 3 tồn tại và cung cấp các bộ sưu 
tập rác
Tự động thu gom rác, dù có thể điều chỉnh 
bằng tay
Thư viện chuẩn của C++ có 1 phạm 
vi hạn chê hơn các thư viện của Java
Các thư viện chuẩn có phạm vi rộng hơn 
và phát triển qua mỗi phiên bản
Điều hành quá tải Ý nghĩa của việc điều hành là không thay 
đổi
Đầy đủ, đa kế thừa Đầy đủ đơn,đa kế thừa
Sự khác nhau về cú pháp:
C++ Java
class Foo // khai báo 
lớp Foo
{
public:
 int x; 
 Foo(): x(0) // xây dựng 
cho Foo,
 { // khởi tạo x
 }
 int bar(int i) 
 {
 return 3*i + x;
 }
};
 class Foo 
{
 public int x = 0; // khởi 
tạo 1 biến x;
 public Foo() // xây dựng 
cho Foo
 {
 }
 public int bar(int i)
 {
 return 3*i + x;
 }
};
Foo a; // khai báo một giá trị 
của lớp Foo,
 // khởi tạo bằng cách sử 
dụng contructor mặc định
 Foo a; // khai báo một tham 
chiêu? Mọt con trỏ tới giá trị 
của Foo
 Foo b = a; // bản sao nội dung của a 
đến một đối tượng Foo mới b
// hoắc sử dụng Foo b(a)
 Foo b = a.clone(); // bản sao 
giá trị của tất cả các thành 
viên trong lớp Foo
 // clone() 
trả về 1 bản sao của Foo
 a.x = 5; // sửa đổi a a.x = 5;//sửa đổi con trỏ đến 
đối tượng ah
cout << b.x << endl; / System.out.println(b.x);
 Foo *d = c; // gán d để tham 
chiếu đến 1 giá trị giống như c
 Foo d = c; // gán d để tham 
chiếu đến 1 giá trị giống như c
 c->x = 5; // sửa đổi các đối 
tượng tham chiếu của C
c.x = 5; // sửa đổi các đối 
tượng tham chiếu của C
 a.bar(5); // gọi Foo::bar() cho 
a
c->bar(5); // gọi Foo::bar() cho 
*c
a.bar(5); // gọi Foo.bar() cho 
a
 c.bar(5); // gọi Foo.bar( ) cho c
a.bar(5); // gọi Foo::bar() cho 
a
c->bar(5); // gọi Foo::bar() cho 
*c
 System.out.println(d.x); // 
xuất ra 5, bởi vì d tham chiếu
C + +, nó có thể tuyên bố một con trỏ tới một kiểu const, 
có nghĩa là, bạn không thể sửa đổi các đối tượng được trỏ đến 
bởi con trỏ bằng cách sử dụng con trỏ đó. Chức năng và 
phương pháp cũng có thể đảm bảo rằng chúng sẽ không sửa 
đổi các đối tượng được trỏ đến bởi con trỏ bằng cách sử dụng 
từ khóa ” const ". Điều này là không thể trong Java. Bạn có thể 
tuyên bố một tài liệu tham khảo "cuối cùng" trong Java (như 
tuyên bố một con trỏ "const" trong C + +), nhưng điều này chỉ 
ngăn bạn tái ràng buộc rằng tài liệu tham khảo, bạn vẫn có thể 
sửa đổi các đối tượng tham chiếu bởi tham chiếu này.
C++ Java
const Foo *a; // bạn 
không thể sửa đổi các 
đối tượng
private final Foo a
public Foo getA(){
 return a.clone()
}
a = new Foo(); a=new Foo();//chỉ trong construct
a->x = 5; // trái phép getA().x=5;
Foo *const b = new 
Foo(); // bạn có thể 
khai báo 1 hằng con trỏ
final Foo b = new Foo(); // 
bạn có thể khai báo 1 tham 
chiếu cuối cùng
b = new Foo(); //trái 
phép, bạn không thể tái 
ràng buộc nó
b = new Foo(); // trái phép, 
bạn không thể tái ràng buộc 
nó
b->x = 5; // được phép, 
bạn có thể sửa đổi các 
đối tượng
b.x = 5; // được phép, bạn có 
thể sửa đổi các đối tượng
Sự khác nhau giữa C++ và C#
C++ C#
Trong C++, class và struct hầu 
như giống nhau
Lớp C# có thể hiện thực/thừa kế 
(implement) nhiều interface, 
nhưng chỉ được thừa kế từ chỉ 1 
lớp cơ sở. Hơn nữa, struct C# 
không hỗ trợ thừa kế, và không hỗ 
trợ constructor mặc định
Trong C++ mảng chính là 1 con 
trỏ (pointer).
Trong C#, mảng là đối tượng 
(object),có thuộc tính và phương 
thức
Trong C++, kiểu bool thực ra là 
số integer
Trong C#, không có sự tự chuyển 
đổi qua lại giữa bool và các kiểu 
khác
Trong C++, kiểu long có độ dài 
32 bit
Trong C#, kiểu long có độ dài 64 
bit
Trong C++, mọi biến được truyền 
bằng trị, nếu không phải là con 
trỏ hoặc biến tham khảo
Trong C#, đối tượng (một thực 
thể của class) được truyền tham 
khảo (truyền tham biến), struct 
được truyền tham trị, nếu không 
khai báo "ref" hoặc "out"
Trong C++ phương thức trong 
lớp con chắc chắn che khuất 
phương thức trong lớp cha nếu 
chúng cùng prototype
Trong C#, bạn phải dùng từ khóa 
"new" trước phương thức hay 
thuộc tính bạn muốn che phủ
 trong C++, string chỉ đơn giản là 
mảng ký tự
Trong C# string là 1 đối tượng 
(object) có hỗ trợ các phương 
thức tìm kiếm
C++ phải được giải phóng bộ nhớ C# có cơ chế tự động
SỰ KHÁC NHAU GIỮA C# VÀ 
JAVA
JAVA C#
1.
C
ác
 k
iể
u 
ng
uy
ên
(p
rim
iti
ve
) Java có một vài kiểu primitive 
mà mọi người rất thân thuộc: byte, 
char, int, long, float, double. Những 
kiểu primitive là những khối được 
xây dựng cơ bản của Java, chúng là 
những “đơn vị” nhỏ nhất. Những gì 
thường gây khó chịu đối với hầu 
hết lập trình viên là kiểu primitive 
thường tách rời khỏi mô hình đối 
tượng của Java; trong khi tất cả 
các đối tượng trong Java đều kế 
thừa từ java.lang.Object, các kiểu 
primitive không kế thừa từ bất kỳ 
gì cả. Điều này có nghĩa là bất kỳ 
một lớp nào khi tính toán trên các 
đối tượng (ví dụ như các đối tượng 
trong Tập hợp API) sẽ không làm 
việc với các kiểu primitive. Các kiểu 
primitive sẽ phải được ánh xạ 
(map) thành mô hình đối tượng 
theo quy định để có thể sử dụng 
chúng
 C# sử dụng hệ thống 
kiểu/đối tượng trong .NET 
mà ở đó, các chương trình 
C# có thể giao tiếp với 
nhiều ngôn ngữ khác trong 
.NET mà không gặp rắc rối 
nào về kiểu. Ví dụ, kiểu int 
là một bí danh của 
System.Int32 được kế 
thừa cuối cùng từ 
System.Object. Điều này 
có nghĩa là các kiểu 
primitive, hay kiểu simple 
trong hàm C# cũng giống 
như bất kỳ các đối tượng 
khác. Ví dụ, điều này là 
đúng khi gọi phương thức 
toString hoặc GetType 
trong bất kỳ một kiểu 
primitive nào.
 Mặc dù các kiểu simple 
trong C# là những đối 
tượng, tuy nhiên chúng 
vẫn được truyền theo tham 
trị (pass-by-value) tương 
tự như trong Java. Đây là 
trường hợp khác, bởi vì 
ngoài việc là những đối 
tượng, tất cả các kiểu 
simple trong C# đều là các 
đối tượng – cấu trúc 
(struct) khi được truyền 
theo tham trị sẽ được 
truyền theo tham biến một 
lần nữa (chúng ta sẽ đề 
cập đến phần này sau).
2.
 K
ha
i b
áo
(d
ec
la
ra
ti
on
s)
Java sử dụng các từ khóa “static 
final” để tạo nên các biến hằng; 
trong Java một biến “static final” là 
một biến lớp thay vì là một biến đối 
tượ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.
 Trong C# có 2 cách để 
biết một biến hằng:
Đánh dấu một biến bằng 
từ khóa const sẽ làm cho 
giá trị được chuyển đổi 
trước khi biên dịch. Với 
định nghĩa sau:
const int two = 2;
phát biểu
2 * two
được chuyển thành
2 * 2 xử lý trước khi biên 
dịch,điều này làm cho nó 
chạy nhanh hơn không 
phải tìm những giá trị 
hằng trong suốt quá trình 

File đính kèm:

  • pdfĐề tài Sự khác nhau giữa C++ và Java - Nguyễn Trung Kiên.pdf