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