Đồ án Phân biệt sự khác nhau cơ bản của các ngôn ngữ - Trần Đức Huy

Mục Lục

1> Chú Thích .2

2> Hằng .2

3> Kiểu Dữ Liệu .3

4> Kiểm Tra Kiểu,Đổi Kiểu 5

5> Không Gian Tên .6

6> Quản Lý và Cấp Phát Bộ Nhớ .6

7> Hàm Trùng Tên .7

8> Nhập Xuất 8

9> Những Điểm Đặc Biệt Khác .9

10> Nhận Xét

pdf17 trang | Chuyên mục: Lập Trình Hướng Đối Tượng | Chia sẻ: dkS00TYs | Lượt xem: 1807 | Lượt tải: 2download
Tóm tắt nội dung Đồ án Phân biệt sự khác nhau cơ bản của các ngôn ngữ - Trần Đức Huy, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
(kết hợp sử dung clr ) 
 +Trong C#: là null. 
 +Trong Java: là undefined. 
3>Kiểu dữ liệu: 
 *Khai báo ban đầu: (Initializing Value Type) 
 +Trong C++: 
 Ví dụ: 
System::DateTime dt = System::DateTime(2001,4,5); 
+Trong C#: 
 Ví dụ: 
System.DateTime dt = new System.DateTime(2001,4,12); 
 +Trong Java: 
 Ví dụ: 
var dt : System.DateTime = new System.DateTime(2001,4); 
 *Kiểu ký tự đặc biệt: (cả 3 đều có) 
 \‟ Dấu nháy đơn 
\” Dấu nháy kép 
\\ Dấu chéo 
\0 Ký tự null 
\a Alert 
\b Backspace 
\f Sang trang form feed 
\n Dòng mới 
\r Đầu dòng 
\t Tab ngang 
\v Tab dọc 
 *Bảng thống kê: 
Content 
and size 
C++ C# JScript 
 Unknown 
data 
VARIANT n/a Object 
Decimal DECIMAL decimal decimal 
Date DATE DateTime DateTime 
Date 
object 
SBCS 
character 
(1 byte) 
signed char 
__int8 
n/a sbyte 
Unicode 
character 
(2 bytes) 
wchar_t char char 
Unicode 
character 
sequence 
wchar_t* string String 
Boolean 
(platform 
dependent) 
VARIANT_BOOL bool boolean 
1 byte signed char sbyte n/a 
2 bytes signed short int 
__int16 
short short 
4 bytes long, (long int, 
signed long int) 
int int 
8 bytes __int64 long long 
1 byte 
unsigned 
BYTE 
bool 
byte byte 
 2 bytes 
unsigned 
unsigned short ushort n/a 
4 bytes 
unsigned 
unsigned int 
and unsigned 
long 
uint n/a 
8 bytes 
unsigned 
unsigned 
__int64 
ulong n/a 
4 bytes 
floating 
point 
float float float 
8 bytes 
floating 
point 
double double Double 
4>Kiểm tra kiểu,đổi kiểu. 
 +Kiểu trả về (return) :Cả 3 ngôn ngữ đều có cách sử dụng giống nhau. 
(Cùng trả về tham số) 
Ví dụ: int abs (int i) { return i;} 
 +Đổi kiểu: Cả 3 ngôn ngữ đều có chung 2 cơ chế đổi kiểu,đó là chuyển 
đổi tường minh và chuyển đổi ngầm định. 
 Ví dụ: 
 //Đổi kiểu ngầm định: 
 short x = 10; 
int y = x; // chuyển đổi ngầm định 
 //Đổi kiểu tường minh: 
short x; 
int y = 100; 
x = y; // Không biên dịch, lỗi !!! 
 //Để kô bị lỗi ta cần viết lại như sau. 
short x; 
 int y = 100; 
 x = (short) y; //Ép kiểu tường minh,kô gây lổi 
5>Không gian tên: 
 +C#: Hàm “ Main() “ (Viết Hoa ở ký tự đầu). 
 +Java và C++:Hàm “ main() “ (Viết Thường ở ký tự đầu). 
 Một điều quan trọng là C# và Java kô sử dụng không gian tập tin 
(header) như C++.Tất cả mã nguồn được viết trong khai báo lớp. 
6>Quản lý và cấp phát bộ nhớ. 
+Trong C++:Cấp phát bộ nhớ sử dụng hàm new kết hợp với hàm giải 
phóng bộ nhớ delete. 
 Ví dụ: int x; x = new int; 
 Và delete x; 
 +Trong Java và C#: (Trong Stack và Heap) (Thu gom bộ nhớ tự động) 
Tự cấp phát bộ nhớ : 
 *Kiểu giá trị như kiểu số nguyên cấp phát ở vùng Stack. 
 *Kiểu tham chiếu như các đối tượng cấp ở vùng Heap. 
 Thu gom bộ nhớ: 
 *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ộtbiế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. 
7>Hàm trùng tên: 
+Trong C++: Cho phép trùng tên hàm (miễn khác tham số khai báo 
trong hàm là được). (nên gọi là chồng hàm) 
 Ví dụ: Ta có 2 hàm int Gan() và int Gan (int x) 
Lưu ý: Hai hàm int Gan() và float Gan (int x) sẽ bị lỗi vì kô 
phù hợp qui luật chồng hàm. 
+Trong Java và C#: Sử dụng namespace để tránh sự xung đột giữa việc 
sử dụng các thư viện khác nhau từ các nhà cung cấp. 
 Ví dụ: 
 namespace MyLib 
{ 
using System; 
public class Tester 
{ 
public static int Main() 
{ 
for (int i =0; i < 10; i++) 
{ 
Console.WriteLine( “i: {0}”, i); 
} 
return 0; 
} 
} 
} 
8>Nhập xuất: 
 *Nhập: 
+Trong C++ :có thể gán trong trình biên dịch hoặc lúc thông 
dịch. 
 Ví dụ: int n; int n=1; 
hoặc cin>>n; 
+Trong C# và Java : có tính phức tạp hơn (vì kô sử dụng thư 
viện)(phải gán giá trị ban đầu). 
 *Xuất: 
 +Trong C++: Kô sử dụng. 
 Ví dụ: int n; cout<<n; 
 +Trong Java và C#:Phức tạp. 
 Ví dụ: 
 System.Console.WriteLine("Hello"); 
9>Những điểm đặc biệt khác: 
-Kiểu cấu trúc Struct : 
+C++: là kiểu dữ liệu,thường xuyên dùng.(nhưng trong LTHDT thì 
khác) 
+C# :Là 1 kiểu dữ liệu,ít dùng. 
+Java: Kô có. 
-Khác nhau về Kiểu liệt kê (Enumerator): 
 +C++ và C#: (giá trị mặc định ban đầu là 0) 
 Ví dụ: public enum Color 
 { 
 Green, //defaults to 0 
 Orange, //defaults to 1 
 Red, //defaults to 2 
 Blue //defaults to 3 
 } 
 +Java:Kô hỗ trợ. 
-Khai báo Mảng: 
 +C# :Có thể khai báo trực tiếp. 
 Ví dụ: int[] x; 
 hoặc int[] x= {1,2,3,4,5}; 
 +Java và C++: Tích hợp thêm cách khai báo. 
 Ví dụ: Char ch[]; 
 hoặc Char ch[]=new char[10]; 
 hoặc Char ch[]={„A‟,‟B‟}; 
-Trong biên dịch ra Mã trung gian: (Tên gọi khác nhau) 
 +C# biên dich ra MSIL.(Microsoft Intermediate Language). 
 +Java biên dịch ra Bytecode. 
-Về Biến con trỏ: 
 +C++ vẫn sử dụng thường xuyên. 
 +C#: Vẫn dùng biến con trỏ nhưng đã loại bỏ những phức tạp và rắc rối 
phát sinh từ con trỏ bằng cách sử dụng bộ thu gom bộ nhớ tự động và kiểu dữ 
liệu an toàn được tích hợp vào ngôn ngữ. (những đoạn sử dụng con trỏ trong 
C# sẽ được đánh dấu là kô an toàn (unsafe code)) 
 +Java:Loại bỏ hẳn. 
-Về cấu trúc câu sử dụng từ khóa switch: 
+C++: Cho phép kô cần sử dụng lệnh break ở sau default. 
 Ví dụ: switch(n) { 
 case 0: 
 printf_s("Zero\n"); 
 break; 
 default: 
 printf_s("?\n");} 
+C#: Bắt buộc phải dùng từ khóa break hoặc goto trong câu lệnh case. 
 Nếu kô sử dụng trình biên dịch báo lỗi: 
 Control cannot fall through from one case label („case 3:‟) to 
another. 
 Ví dụ: const int mauDo = 0; 
 const int mauLuc = 1; 
 int chonMau = mauLuc; 
 switch ( chonMau ) 
 { 
 case mauDo: 
 Console.WriteLine( "Ban cho mau do" ); break; 
 default: 
 Console.WriteLine( "Ban khong chon mau nao het"); 
 break; 
 } 
 +Java: Cho phép kô cần sử dụng break. 
Ví dụ: int switching = 3; 
switch(switching) 
 { 
case 3: 
System.out.println(“here”); 
default: 
System.out.println(“and here”); 
} 
-Về mặt tổng quan, 
+C# đã loại bỏ sự phức tạp,rối rắm của những ngôn ngữ như Java và 
C++,bao gồm việc loại bỏ những macro,những template,đa kế thừa,và lớp cơ 
sở ảo (virtual base class).Chúng là những nguyên nhân gây ra sự nhầm lẫn 
hay những vấn đề cho người phát triển C++. 
+C# đã từ bỏ ý tưởng đa kế thừa của C++. 
-Vòng lặp: Cả 3 đều sử dụng vòng lặp như while,do-while và for. 
 +C++: Có thể sử dụng những ký tự ngầm định. (như “ %d …”) 
 Ví dụ: for(int n=1; n<11; n++) 
 { printf_s("%d\n",n); } 
+C#: Kô hỗ trợ ký tự ngầm định,có thêm vòng lặp foreach. 
 Ví dụ: 
 foreach (int i in testArr) 
 { 
 Console.WriteLine(i); 
 } 
 +Java: Kô hỗ trợ ký tự ngầm định và vòng lặp foreach. 
 Ví dụ: 
 for (var prop in obj) 
obj[prop] = 42 
-Bảng thống kê về tính so sánh: 
 C++ C# JScript 
Additive 
 Addition + + + 
 Subtraction - - - 
Multiplicative 
 Multiplication * * * 
 Division / / / 
 Integer division /1 /1 
 Modulus 
division 
(returning only 
the remainder) 
% % % (also works with 
floating point) 
 Exponentiation n/a n/a n/a 
Assignment 
 Assignment = = = 
 Addition += += += 
 Subtraction -= -= -= 
 Multiplication *= *= *= 
 Division /= /= /= 
 Integer division n/a /=1 n/a 
 String 
concatenation 
+= += += 
 Modulus 
division 
%= %= %= 
 Left shift <<= <<= <<= 
 Right shift >>= >>= >>= 
 Bitwise AND &= &= &= 
 Bitwise 
exclusive OR 
^= ^= ^= 
 Bitwise 
inclusive OR 
|= |= |= 
Null coalescing n/a ?? n/a 
Relational and 
equality 
 Less than < < < 
 Less than or 
equal to 
<= <= <= 
 Greater than > > > 
 Greater than or 
equal to 
>= >= >= 
 Equal == == == 
 Not equal != != != 
 Reference 
variable 
comparison 
n/a == == 
 Reference type 
comparison 
n/a x is Class1 (also 
see as and 
typeof) 
instanceof 
 String 
comparison 
(There are 
functions to 
compare and 
concatenate 
strings) 
== 
Equals 
== 
 CString 
concatenation 
 + + 
 Short circuited 
Boolean AND 
&& && && 
 Short circuited 
Boolean OR 
|| || || 
Bit shift 
 Left shift << << << 
 Right shift >> >> >> 
>>> 
Scope 
resolution 
 Scope 
resolution 
:: . 
base 
n/a 
Postfix2 
 Array element [ ] [ ] [ ] 
 Function call ( ) ( ) ( ) 
 Type cast or (type) (type) type( ) 
 conversion 
 Member 
selection 
. 
-> 
. . 
 Postfix 
increment 
++ ++ ++ 
 Postfix 
decrement 
-- -- -- 
Unary3 
 Indirection * * (unsafe mode 
only) 
n/a 
 Address of & & (unsafe mode 
only; also see 
fixed) 
n/a 
 Logical NOT ! ! ! 
 One's 
complement 
~ ~ ~ 
 Prefix 
increment 
++ ++ ++ 
 Prefix 
decrement 
-- -- -- 
 Size of type sizeof sizeof n/a 
 Comma , n/a , 
Bitwise 
 Bitwise AND & & & 
 Bitwise 
exclusive OR 
^ ^ ^ 
 Bitwise 
inclusive OR 
| | | 
Logical 
 Logical AND & & && 
 Logical OR | | || 
Conditional 
 Ternary 
conditional 
?: ?: ?: 
Pointer to 
member 
 Pointer to 
member 
.* -> . (Unsafe mode 
only) 
n/a 
Reference 
 Reference & n/a (use 
reference types) 
n/a 
9>Lời Nhận Xét: 
*Về mặt tổng quan: 
 -Cả 3 ngôn ngữ đều là ngôn ngữ lập trình hướng đối tượng. 
 -C# và Java là những ngôn ngữ hoàn thiện hơn C++ (tránh được những 
lỗi mà ta thường gặp ở ngôn ngữ C++) vì được phát triển (thừa kế) từ ngôn 
ngữ C/C++. 
+C# là ngôn ngữ đơn giản,hiện đại,mạnh mẽ,ít từ khóa,module 
hóa và là ngôn ngữ phổ biến,tuy còn phụ thuộc vào CPU (giống như 
C++) 
+Java cũng từ bỏ ý tưởng đa kế thừa giống như C#,là ngôn ngữ 
có đặc trưng kô phụ thuộc vào thiết bị và Hệ điều hành,biểu hiện của 
khả năng 1 chương trình được viết tại 1 máy nhưng có thể chạy bất cứ 
đâu,vì vậy, nó đã trở thành ngôn ngữ lập trình cho Internet (với sự hỗ 
trợ của Máy ảo Java). 
 ---Hết--- 

File đính kèm:

  • pdfĐồ án Phân biệt sự khác nhau cơ bản của các ngôn ngữ - Trần Đức Huy.pdf