Đề 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
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:
Đề tài Sự khác nhau giữa C++ và Java - Nguyễn Trung Kiên.pdf

