Đề tài So sánh C++, C#, Java

Cách sửdụng chú thích trong C#

Có hai loại “chú thích” (comment)

sửdụng trong .NET framework:

loại chú thích dòng và chú thích

XML.

- Loại thông thường nhất là các

loại “chú thích dòng” (Bất cứkhi

nào bạn sửdụng // với C# hoặc

VB.NET ñể ñánh dấu một dòng là

chú thích.) Loại chú thích này

thường ñược sửdụng ñểgiải thích

những gì mà dòng lệnh hiện hành

hoặc dòng mã kếtiếp ñang thực

hiện.

pdf7 trang | Chuyên mục: Lập Trình Hướng Đối Tượng | Chia sẻ: dkS00TYs | Lượt xem: 2426 | Lượt tải: 0download
Tóm tắt nội dung Đề tài So sánh C++, C#, Java, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
chế chuyển ñổi 
tường minh hoặc chuyển 
ñổi ngầm ñịnh. 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. 
Nghĩa là kiểu ñược chuyển 
ñổi phải có kích thước lơn 
hơn. 
VD ta có thể gán ngầm ñịnh 
một số kiểu short vào một 
số kiểu int nhưng không thể 
làm ngược lại vì kích thước 
của kiểu int lớn hơn kích 
thước của kiểu short. 
IV. Kiểm tra kiểu, ñổi kiểu 
Java: dễ dàng chuyển kiểu giữa các kiểu primitive và khi ép kiểu lên cao hơn cho siêu 
lớp và thấp hơn cho các lớp con. 
C#: cho phép khả năng ñịnh nghĩa chuyển ñổi kiểu tự tạo cho hai ñối tượng bất kỳ. Hai 
kiểu chuyển ñổi phải như sau: 
* Chuyển ñổi tương ñối: kiểu chuyển này yêu cầu kiểu ñích phải ñược xác ñịnh trong 
phát biểu,cũng như việc chuyển ñổi này không chắc chắn làm việc hoặc nếu nó làm việc 
thì kết quả của nó có thể bị mất ñi thông tin. Các lập trình viên Java thường thân thuộc 
với việc chuyển ñổi tuyệt ñối khi ép một ñối tượng thành một một ñối tượng của các lớp 
con của nó. 
* Chuyển ñổi tuyệt ñối: việc chuyển ñổi này không yêu cầu kiểu cha, cũng như việc 
chuyển ñổi này chắc chắn làm việc. 
Dưới ñây, chúng ta chuyển một kiểu double thành một kiểu FlooredDouble và ngược lại. 
Chúng ta cần ñịnh nghĩa việc chuyển kiểu tương ñối từ double thành FlooredDouble, 
thông tin có thể bị mất ñi trong quá trình chuyển ñổi. Ở quá trình ngược lại, chúng ta sẽ 
ñịnh nghĩa việc chuyển kiểu tuyệt ñối, và sẽ không bị mất thông tin. 
public class FloorDouble : Object{ 
private double value; 
public FloorDouble( double value ) { 
this.value = Math.Floor( value ); 
} 
public double Value { 
get { 
return this.value; 
} 
} 
 public static explicit operator FloorDouble( double value ) { 
return new FloorDouble( value ); 
} 
public static implicit operator double( FloorDouble value ) { 
return value.Value; 
} 
} 
// this class can be used by 
FloorDouble fl = (FloorDouble)10.5 
double d = fl; 
IV. Không gian tên 
vùng tên (NameSpace ) 
Java 
Package harding.compsci.graphics; 
import 
harding.compsci.graphics.Rectangle;(nhập 
1 class ñơn) 
import harding.compsci.graphics.*; ( nhập 
tòan bộ class) 
class ñơn) 
import harding.compsci.graphics.*; ( nhập 
tòan bộ class) 
C# 
namespace Harding.Compsci.Graphics { 
 ... 
} hoặc 
namespace Harding { 
 namespace Compsci { 
 namespace Graphics { 
 ... 
 } 
 } 
} 
. 
using Harding.Compsci.Graphics; (chỉ nhập 
tòan bộ class, không nhập class ñơn) 
Namespaces là một khái niệm trong C++, nhưng trong C# dùng namespaces thường 
xuyên hơn. 
C# không ñặt bất kỳ yêu cầu nào trong việc tổ chức file – một lập trình viên có thể sắp 
xếp toàn bộ chương trình C# bên trong một file .cs (Java thường yêu cầu một file .java 
chứa một lớp). 
C# cũng cung cấp một cách ñể chia nhỏ các ñối tượng của chương trình tương tự như các 
khối trong Java. Sử dụng namespace, các kiểu có quan hệ có thể ñược nhóm vào trong 
một phân cấp. Nếu không có block “namespace” nó sẽ nằm trong một namespace mặc 
ñịnh. 
Trong thư viện .Net, System là namespace cấp cao nhất trong các namespace. Trong C#, 
bằng cách mặc ñịnh tồn tại một namespace toàn cục, một class ñịnh nghĩa bên ngoài một 
namespace ñược lưu trực tiếp trong namespace toàn cục này. 
V. Quản lý và cấp phát bộ nhớ 
Trong C++ có thể dung các hàm cấp phát bộ nhớ ñộng của C như: hàm malloc ñể cấp 
phát bộ nhớ, hàm free ñể giải phóng bộ nhớ ñược cấp phát. 
Ngoài ra trong C++ còn ñưa them toán tử new ñể cấp phát bộ nhớ và toán tử delete ñể 
giải phóng bộ nhớ ñược cấp phát bởi new. 
Stack là một cấu trúc dữ liệu lưu trữ thông tin dạng xếp chồng tức là vào 
sau ra trước (Last In First Out : LIFO), ñiều này giống như chúng ta có một 
chồng các ñĩa, ta cứ xếp các ñĩa vào chồng và khi lấy ra thì ñĩa nào nằm 
trên cùng sẽ ñược lập ra trước, tức là ñĩa vào sau sẽ ñược lấy ra trước. 
Trong C#, kiểu giá trị như kiểu số nguyên ñược cấp phát trên stack, ñây là 
vùng nhớ ñược thiết lập ñể lưu các giá trị, và vùng nhớ này ñược tham 
chiếu bởi tên của biến. 
Kiểu tham chiếu như các ñối tượng thì ñược cấp phát trên heap. Khi một 
ñối tượng ñược cấp phát trên heap thì ñịa chỉ của nó ñược trả về, và ñịa chỉ 
này ñược gán ñến một tham chiếu. 
Thỉnh thoảng cơ chế thu gom sẽ hũy ñối tượng trong stack sau khi một 
vùng trong stack ñược ñánh dấu là kết thúc. Thông thường một vùng trong 
stack ñược ñịnh nghĩa bởi một hàm. Do ñó, nếu chúng ta khai báo một 
biến cục bộ trong một hàm là một ñối tượng thì ñối tượng này sẽ ñánh dấu 
ñể hũy khi kết thúc hàm. 
Những ñối tượng trên heap sẽ ñược thu gom sau khi một tham chiếu cuối 
cùng ñến ñối tượng ñó ñược gọi. 
Java loại bỏ các ñặc trưng phức tạp của C và C++ như thao tác con trỏ, thao tác ñịnh 
nghĩa chồng toán tử (operator overloading),… Java không sử dụng lệnh “goto” cũng như 
file header (.h). Cấu trúc “struct” và “union” cũng ñược loại bỏ khỏi Java. 
ðối với các chương trình viết bằng C, C++ hoặc một ngôn ngữ nào khác, trình biên dịch 
sẽ chuyển tập lệnh thành mã máy (machine code),hay lệnh của bộ vi xử lý. Những lệnh 
này phụ thuộc vào CPU hiện tại trên máy bạn. Nên khi muốn chạy trên loại CPU khác, 
chúng ta phải biên dịch lại chương trình. 
Kiểu dữ liệu trong Java nhất quán cho tất cả các hệ ñiều hành và phần cứng khác nhau. 
Java có riêng một thư viện các lớp cơ sở. Vì vậy chương trình Java ñược viết trên một 
máy có thể dịch và chạy trơn tru trên các loại máy khác mà không cần viết lại.trình biên 
dịch của Java chuyển mã nguồn thành dạng bytecode ñộc lập với phần cứng mà có thể 
chạy trên bất kỳ CPU nào. 
Java không sử dụng con trỏ và các phép toán con trỏ vì vậy không cho phép truy xuất bộ 
nhớ trực tiếp 
Trong chương trình Java không phải bận tâm ñến việc cấp phát bộ nhớ. Qúa trình cấp 
phát, giải phóng ñược thực hiện tự ñộng, nhờ dịch vụ thu nhặt những ñối tượng không 
còn sử dụng nữa 
VI. Hàm trùng tên: 
Trong ngôn ngữ C#, các toán tử là các phương thức tĩnh, giá trị trả về của nó thể hiện kết 
quả của một toán tử và những tham số là các toán hạng. Khi chúng ta tạo một toán tử cho 
một 
Nạp Chồng Toán Tử 
153 
Ngôn Ngữ Lập Trình C# 
lớp là chúng ta ñã thực việc nạp chồng (overloaded) những toán tử ñó, cũng giống như là 
chúng ta có thể nạp chồng bất cứ phương thức thành viên nào. Do ñó, ñể nạp chồng toán 
tử 
cộng (+) chúng ta có thể viết như sau: 
public static Fraction operator + ( Fraction lhs, Fraction rhs) 
Trong toán tử trên ta có sự qui ước ñặt tên của tham số là lhs và rhs. Tham số tên lhs thay 
thế cho “left hand side” tức là toán hạng bên trái, tương tự tham số tên rhs thay thế cho 
“right hand side” tức là toán hạng bên phải. 
Cú pháp ngôn ngữ C# cho phép nạp chồng một toán tử bằng cách viết từ khóa operator 
và theo sau là toán tử ñược nạp chồng. Từ khóa operator là một bổ sung phương thức 
(method operator). Như vậy, ñể nạp chồng toán tử cộng (+) chúng ta có thể viết operator 
+. 
Khi chúng ta viết: 
Fraction theSum = firstFraction + secondFraction; 
Thì toán tử nạp chồng + ñược thực hiện, với firstFraction ñược truyền vào như là tham số 
ñầu tiên, và secondFraction ñược truyền vào như là tham số thứ hai. Khi trình biên dịch 
gặp 
biểu thức: 
firstFraction + secondFraction 
thì trình biên dịch sẽ chuyển biểu thức vào: 
Fraction.operator+(firstFraction, secondFraction) 
Kết quả sau khi thực hiện là một ñối tượng Fraction mới ñược trả về, trong trường hợp 
này phép gán sẽ ñược thực hiện ñể gán một ñối tượng Fraction cho theSum. 
*Ghi chú: ðối với người lập trình C++, trong ngôn ngữ C# không thể tạo ñược toán tử 
nonstatic, và do vậy nên toán tử nhị phân phải lấy hai toán hạng. 
VII. Nhập xuất: 
C++ C# Java 
Dòng cin là một ñối tượng 
kiểu istream ñã ñịnh nghĩa 
trong C++ . ðó là dòng vào 
(input) chuẩn gắn với bàn 
phím (tương tự như stdin 
của C). Các thao tác nhập 
trên dòng cin ñồng nghĩa 
với nhập dữ liệu từ bàn 
ðể ñọc một ký tự văn bản 
từ của sổ console, chúng ta 
dùng phương thức 
Console.Read(), giá trị trả 
về sẽ là kiểu int hoặc kiểu 
Dùng class ñể nhập xuất. 
Cũng giống như trong C++, 
thao tác in-out dữ liệu trong 
phím. 
Do cin là một ñối tượng 
của lớp istream nên với cin 
chung ta có thể sử dụng 
toán tử nhập >> và các 
phương thức nhập của các 
lớp ios và istream. 
Cách dùng toán tử nhập 
ñể ñọc dữ liệu từ dòng cin 
như sau: 
 cin >> Tham_số ; 
Trong ñó Tham_số có 
thể là: 
- Biến hoặc phần tử 
mảng nguyên ñể nhận một 
số nguyên 
- Biến hoặc phần tử 
mảng thực ñể nhận một số 
thực 
- Biến hoặc phần tử 
mảng ký tự ñể nhận một ký 
tự 
- Con trỏ ký tự ñể 
nhận một dẫy các ký tự 
khác trống 
string tuỳ ý . Và chúng ta 
cũng có hai phương thức 
dùng ñể viết ra chuổi ký tự 
như sau 
Console.Write() - Viết 
một giá trị ra của sổ 
window 
Console.WriteLine() - 
tương tự trên nhưng sẽ 
tự ñộng xuống hàng khi 
kết thúc lệnh 
java là một thao tác khá 
thường xuyên. 
+ in-out với (màn hình + 
bàn phím) 
+ in-out với file 
in-out với 4 loại dữ liệu cơ 
bản sau: 
+ text ( tức là in-out dưới 
dạng ñọc/ghi các ký tự ) 
+ byte ( ñọc theo từng byte 
) 
+ primitive data ( dữ liệu 
kiểu nguyên thủy như int 
float long double ) 
+ Object ( các loại ñối 
tượng ) 
VIII. Nhận xét: 
C# và Java khá giống nhau, ñều là ngôn ngữ hướng ñối tượng, chúng có cú pháp hầu như 
giống nhau. 
Trên nền Windows thì C# phù hợp hơn vì môi trường lập trình, thư viện lập trình của nó 
rất mạnh và thân thiện (do Microsoft viết), ngoài ra ứng dụng C# giao tiếp với các ứng 
dụng khác dễ dàng hơn nhiều so với ứng dụng viết bằng Java. Ứng dụng C# chạy hiệu 
quả hơn nhiều so với ứng dụng Java cùng chức năng (do cơ chế thực thi khác nhau). 
Với các ứng dụng web chạy trên nhiều platform khác nhau thì Java ưu thế hơn vì Java là 
ngôn ngữ ñộc lập với platform, còn C# thì chưa có tính chất này, nó chỉ chạy tốt trên nền 
Windows. 
Nhìn chung C# linh hoạt hơn java. 
về tốc ñộ Java nhanh nhất, sau ñó là C# và C++. 

File đính kèm:

  • pdfĐề tài So sánh C++, C#, Java.pdf
Tài liệu liên quan