Lập trình hướng đối tượng - Sự giống và khác nhau giữa C++, C# và Java

Giống nhau:

_Cả 3 ngôn ngữ lập trình đều dùng 2 kí hiệu để chú thích :

+ // dùng để chú thích theo dòng.

+ /* dùng để chú thích theo khối */.

_Chú thích theo dòng bắt đầu từ cặp dấu sổ (//) cho đến dòng cuối cùng.Chú

thích theo khối bắt đầu bằng /* và kết thúc bằng */ và có thể bao gồm nhiều

dòng.

pdf12 trang | Chuyên mục: Lập Trình Hướng Đối Tượng | Chia sẻ: dkS00TYs | Lượt xem: 4518 | Lượt tải: 2download
Tóm tắt nội dung Lập trình hướng đối tượng - Sự giống và khác nhau giữa C++, C# và Java, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 
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. 
+Giao diện (interface) là một lớp thuần trừu tượng được tạo ra cho phép cài 
đặt đa thừa kế Java. Việc truy xất vào vùng nhớ heap chậm hơn truy xất vào 
vùng nhớ stack tuy nhiên java có cơ chế cho phép truy cập vào vùng nhớ 
heap với tốc độ xấp xỉ bằng tốc độ truy cập vào vùng nhớ stack. 
_Trong C++ : các class và struct hầu như đều giống nhau. Mảng chính trong 
C++ là con trỏ (pointer). Kiểu boolean trong C++ thực chất là một kiểu 
integer. Trong C++ kiểu int là 16bit và kiểu long là 32 bit. 
IV)Đổi kiểu : 
1)Giống nhau : những đối tượng có kiểu dữ liệu này có thể chuyển đổi thành 
thông qua một cơ chế chuyển đổi tường minh hay ngầm định. Chuyển đổi 
ngầm định được hệ thống thực hiện một cách tự động, trình biên dịch sẽ thực 
hiện công việc này. Còn chuyển đổi tường minh diễn ra khi chúng ta gán ép 
một giá trị dữ liệu cho kiểu dữ liệu khác. 
_Chuyển đổi ngầm định : VD 
{ 
 short x=10 ; 
 int y=x ; //chuyển đổi ngầm định. 
 } 
 { 
 short a=10 ; 
 int y=100 ; 
 a=y ;//báo lỗi 
 } 
_Ngoài ra ta còn có thể sử dụng các toán tử để chuyển kiểu : 
2)Khác nhau : 
_Trong C++ : việc đổi kiểu được thực hiện 1 cách ngầm định.Khi ta định 
nghĩa kiểu dữ liệu và khi xuất ra thì chương trình sẽ tự động nhận dạng kiễu 
dữ liệu ta vừa nhập rồi xuất ra.Cách xuất ra hoàn toàn khác C và C#.VD : 
 { 
 int a ; 
 char b ; 
 cin>>a ; 
 cin>>b ; 
 cout<<a<<b ;//In ra 2 giá trị a,b vừa nhập. 
} 
_Trong 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 là: chuyển đổi tương đối và chuyển 
đổi tuyệt đối. 
_Trong Java : thường chỉ thân thuộc với việc 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. 
V)Không gian tên: 
_Trong C# nhằm tránh xung đột giữa việc sử dụng các thư viện khác nhau 
từ các nhà cung cấp .Ngoài ra không gian tên được xem như là tập hợp các 
đối tượng và cung cấp duy nhất các định danh cho các kiểu dữ liệu và được 
đặt trong một cấu trúc phân cấp.Công thức : using .VD: 
 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; 
} 
} 
} 
_Trong Java và C++ không hỗ trợ không gian tên như C#. 
VI)Quản lý và cấp phát vùng nhớ: 
1)Giống nhau: Phần lớn các bộ nhớ đều sử dụng cho các biến mảng và các 
đối tượng khác mà chúng ta khai báo. Kích cỡ của chúng là cố định và 
không thay đổi trong thời gian chạy chương trình.Nhưng trong trường hợp 
cần bộ nhớ lớn thì ta vẫn phải thực hiện các thao tác khai báo. 
2)Khác nhau: 
_Trong C++ : sử dụng bộ nhớ động. C++ đã tích hợp 2 toán tử new và delete 
để thực hiện việc này. 
+Toán tử new : dùng để cấp phát vùng nhớ.VD: 
{ 
 int* i; 
 i=new int [5]; 
}//Cấp phát một vùng nhớ cho mảng. 
{ 
 int* i; 
i=new int; 
}//Cấp phát một vùng nhớ cho con trỏ. 
+Toán tử delete : bộ nhớ động chỉ cần thiết trong 1 khoảng thời gian 
nên sau khi sử dụng ta phải giải phóng vùng nhớ đã cấp phát.Trong 
C++ không tự động giải phóng mà ta phải tự sử dụng toán tử.VD: 
delete i; 
_Trong Java : Do Java không sử dụng con trỏ và các phép toán con trỏ.Java 
chỉ kiểm tra thông tin tất cả các truy nhập đến mảng, chuổi khi thực thi để 
đảm bảo.Các lập trình viên không phải bận tâm đến việc cấp phát bộ nhớ . 
Quá 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 sử dụng nữa ( garbage collector). 
_Trong C# : quản lý và cấp phát bộ nhớ hoàn toàn giống trong Java đều sử 
dụng bộ gom rác ( garbage collector). 
VII)Hàm trùng tên : 
1)Giống nhau : đây là trường hợp có 2 hàm hoặc nhiều hơn trùng tên với 
nhau nhưng lại khác nhau về kiểu dữ liệu hay số khai báo. 
_Trong C++ : hàm trùng tên còn gọi là chồng hàm (quá tải).Nghĩa là hai 
hàm có thể cùng tên nếu số khai báo của chúng khác nhau.Vì vậy ta có thể 
đặt cùng một tên cho nhiều hàm nếu chúng có tham số khác nhau hay kiểu 
dữ liệu của các tham số khác nhau.VD : 
// overloaded function 
#include 
int divide (int a, int b) 
{ 
return (a/b); 
} 
float divide (float a, float b) 
{ 
return (a/b); 
} 
int main () 
{ 
int x=5,y=2; 
float n=5.0,m=2.0; 
cout << divide (x,y); 
cout << "\n"; 
cout << divide (n,m); 
return 0; 
} 
_Trong Java : do sử dụng chung cái tên cho nhiều phương thức nên ta phải 
cho Java biết cần phải gọi phương thức nào để thực hiện, Java dựa vào sự 
khác nhau về số lượng đối cũng như kiểu dữ liệu của các đối này để phân 
biệt các phương thức trùng tên.VD : 
 public class OverloadingOrder 
{ 
static void print(String s, int i) 
{ 
System.out.println("String: " + s +", int: " 
+ i); 
} 
static void print(int i, String s) 
{ 
System.out.println("int: " + i +", String: " + 
s); 
} 
public static void main(String[] args) 
{ 
print("String first", 11); 
print(99, "Int first"); 
} 
} 
2)Khác nhau : 
_Trong Java : sẽ thông báo lỗi nếu không tìm thấy hàm tải thích hợp, không 
thể trả về của hàm để phân biệt sự khác nhau giữa 2 phương thức bội tải. 
Mất một khoảng thời gian để tìm ra hàm thích hợp, nhiều lúc có thể dẩn đến 
sai sót. Do không thể định nghĩa toán tử được như trong C++ và đây cũng là 
một khuyết điểm của Java nhưng nhiều người xem điều này là không cần 
thiết. 
_Trong C# : không có chồng hàm mà chỉ có chồng toán tử. Nạp chồng 
toán tử có thể làm cho mã nguồn trực quan và những hành động của lớp 
khi xây dựng giống như các lớp được xây dựng sẵn. Tuy nhiên, việc 
nạp chồng toán tử cũng có thể làm cho mã nguồn phức tạp một cách khó 
quản lý nếu phá vỡ cách thể hiện thông thường để sử dụng những toán tử. 
Hạn chế việc sử dụng tùy tiện các nạp chồng toán tử bằng những cách sử 
dụng mới và những cách đặc trưng. 
VIII)Nhập xuất : 
1)Giống nhau : 
_Chỉ có cách nhập xuất bằng Console của Java và C# rất giống nhau đều là 
sử dụng các luồng Stream để nhập xuất (I/O với file). 
_Về cách nhập xuất thông thường thì Java và C++ tương đối giống nhau 
(I/O bằng màn phím và màn hình). 
2)Khác nhau : 
_Trong Java : đưa ra mọi lớp luồng để xử lý mọi kiểu dữ liệu. Java chia 
luồng thành 2 loại : luồng Byte ( By Stream) và luồng ký tự ( Character 
Stream ). Lớp InputStream và OutputStream là cơ sở cho mọi hướng nhập 
xuất hướng byte, lớp reader/writer là cơ sở cho việc đọc ghi hướng kí 
tự.Lớp RandomAccessFile kế thừa từ lớp Object và triển khai giao diện, 
Inputstream và Outputstream, đây là lớp duy nhất hỗ trợ đọc và ghi.Có thể 
nhập xuất 4 loại dữ liệu cơ bản sau : text ( tức là I/O dưới dạng đọc ghi các 
ký tự), byte ( đọc theo từng byte), primitive data ( kiểu dữ liệu nguyên thủy 
như int,long,float), Object ( các loại đối tượng ). 
+ VD kiểu I/O dạng text : 
package Basic; 
import java.io.*; 
public class passSample 
{ 
 public static void main(String args[]) throws IOExcepti
on 
 { 
 InputStreamReader isReader = new InputStreamReader(
System.in); 
 BufferedReader br = new BufferedReader(isReader); 
 FileWriter myFile = new FileWriter("E:/test.txt"); 
 BufferedWriter bw = new BufferedWriter(myFile); 
 System.out.println("Nhap vao, go~ 010 de ket thuc."
); 
 String str = new String(); 
 while( !(str = br.readLine()).equalsIgnoreCase("010
") ) 
 { bw.write(str); bw.newLine(); } 
 bw.flush(); 
 myFile.close(); 
 } 
} 
+VD kiểu I/O dùng InputStreamReader : 
import java.io.*; 
public class thidu 
{ 
 public static void main(String args[]) throws Exception 
 { 
 BufferedReader in = new BufferedReader(new InputStr
eamReader(System.in)); 
 System.out.println("Nhập chuỗi :") ; 
 String VD; 
 VD = in.readLine(); 
 System.out.println("Chuỗi vừa nhập là : " +VD); 
 } 
} 
_Trong C# : sử dụng Console, ứng dụng này giao tiếp với người dùng thông 
qua bàn phím và không có giao diện người dùng ( UI ). Trong hai ứng dụng 
đơn giản trên ta đã dùng phương thức WriteLine() của lớp Console.Ngoài ra 
còn sử dụng các luồng để nhập xuất.Có nhiều lớp thừa kế từ lớp Stream như 
FileSteam, MemoryStream, và NetworkStream.Có thể nhập xuất các dạng 
tập tin như text, binary, file.Lớp Stream có nhiều phương thức nhưng quan 
trọng nhất là 5 phương thức Read(), Write(), BeginRead(), BeginWrite(), 
Flush().Ngoài ra trong C# còn có nhập xuất đồng bộ và nhập xuất không 
đồng bộ. 
+VD cài đặt việc đọc và ghi tập tin nhị phân : 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
namespace StreamReadWrite 
{ 
 class Program 
 { 
 static void Main(string[] args) 
 { 
 // Get the directories currently on the C 
drive. 
 DirectoryInfo[] cDirs = new 
DirectoryInfo(@"c:\").GetDirectories(); 
 // Write each directory name to a file. 
 using (StreamWriter sw = new 
StreamWriter("CDriveDirs.txt")) 
 { 
 foreach (DirectoryInfo dir in cDirs) 
 { 
 sw.WriteLine(dir.Name); 
 } 
 } 
 // Read and show each line from the file. 
 string line = ""; 
 using (StreamReader sr = new 
StreamReader("CDriveDirs.txt")) 
 { 
 while ((line = sr.ReadLine()) != null) 
 { 
 Console.WriteLine(line); 
 } 
 } 
 } 
 } 
} 
+VD ứng dụng Console : 
 using System; 
class ChaoMung 
{ 
static void Main() 
{ 
//Xuat ra man hinh chuoi thong bao 
Console.WriteLine(“Chao Mung”); 
} 
} 
_Trong C++ : sử dụng 2 toán tử cin/cout để thao tác nhập/xuất. Cin chỉ bắt 
đầu xử lý dữ liệu từ bàn phím sau khi phím Enter được gõ.Vì vậy dù chỉ 
nhập một ký tự thì Cin vẫn chờ cho đến khi gõ phím Enter để kết thúc.Trong 
Cout toán tử << được gọi là toán tử chèn vì nó chèn dữ liệu đi vào sau nó 
vào dòng dữ liệu đứng trước . 
+VD : 
{int a;cin >>a;cout <<a;} 

File đính kèm:

  • pdfLập trình hướng đối tượng - Sự giống và khác nhau giữa C++, C# và Java.pdf