Trang chủ > OOP - JAVA > Nhập môn lập trình hướng đối tượng

Nhập môn lập trình hướng đối tượng

Ngôn ngữ hướng đối tượng là ngôn ngữ dựa trên khái niệm về đối tượng và lớp.

Những định nghĩa chính xác về các thuật ngữ này sẽ được trình bày sau này trong các phần sau. Hiện tại thay vì tập trung vào các công thức trừu tượng, chúng ta sẽ sử dụng trí tượng tượng và nhớ rằng những khái niệm đó sẽ được giải thích đầy đủ ở những bài sau.

Vậy một “đối tượng” là gì? Bằng trực giác chúng ta có thể thấy rằng đối tượng là một vật mà có thể tách riêng, được gọi tên và phân biệt bằng các thuộc tính của nó.
Ví dụ chúng ta có thể xem những thứ sau là đối tượng: một chiếc xe đạp, một chiếc ô tô, một con chó hay một người đàn ông.

Mỗi đối tượng trên có những thuộc tính khác nhau. Một người đàn ông có tên và tuổi. Một chiệc xe hơi có màu sắc và có thể được đặc trưng bởi động cơ hay số cửa.

Hai chiếc xe hơi khác nhau có cùng một miền các thuộc tính: nhãn hiệu, màu của động cơ. Kể cả khi nhãn hiệu, màu sắc và động cơ có khác nhau thì hai chiếc xe vẫn giống nhau theo một nghĩa nào đó (bởi vì chúng được đặc trưng bằng một miền thuộc tính giống nhau). Chúng ta nói rằng những chiếc xe hơi là đối tượng của một lớp.

Lớp là sự mô tả các thuộc tính không đổi của một nhóm các thực thể giống nhau.

Ngoài ra, một điều nữa cần chú ý đó là một đối tượng có thể thực hiện một số thao tác. Vì thế những đối tượng khác có thể đưa ra các yêu cầu đồi với đối tượng đó, đòi hỏi nó phải thực hiện một thao tao nào đó. Ví dụ như đối tượng lái xe có thể yêu cầu đối tượng xe chuyển bánh hay dừng lại.
Chúng ta nói rằng một thông điệp được gửi đến một đối tượng yêu cầu đối tượng thực hiện một thao tác nào đó.

Các đối tượng không thể chấp nhận các thông điệp tùy ý: đối tượng xe hơi có thể khởi động hoặc dừng lại nhưng không thể hát.
Miền các thông điệp được vật thể hiểu (chấp nhận) cũng là đặc trưng của nó.
Do vậy một lớp không chỉ miêu tả những thuộc tính chung của một nhóm các đối tượng giống nhau như màu sắc, tuổi tác hay cân nặng mà còn miêu tả miền các thông điệp được chấp nhận (được hiểu) bởi các đối tượng của lớp này.

Những khái niệm trên là cách nhìn trừu tượng về một thế giới thực.
Kết hợp được những khả năng đó vào ngôn ngữ lập trình, chúng ta có thể dễ dàng chuyển những vấn đề của thế giới thực vào trong các chương trình.
Điều này đã được thực hiện bởi ngôn ngữ hướng đối tượng. Đây là một đặc tính vô cùng quan trong đã làm đơn giản hóa việc lập trình.
Chúng ta hãy xem xét một lớp các thiết bị điện tử với những đặc tính sau: chiều rộng, chiều cao, trạng thái (bật, tắt) và thoả mãn những yêu cầu bật lên và tắt đi.
Chúng ta cố gắng mô tả tình huống này trong một ngôn ngữ lập trình. Các thông điệp được chấp nhận bởi một đối tượng của lớp được thực hiện như là các phương pháp (một phương pháp là một loại hàm).

class ElDev {
  width, height; <-- attributes: width, height, state
  isOn;
================= messages
  method on()
    isOn = true; <--- the request on (switch the device on)
  
  method off()
    isOn = false; <--- the request off (switch the device off)
}

Chú ý: Mã trên chỉ là tượng trưng, không có liên quan gì đến định nghĩa lớp trong Java hay trong bất cứ môn ngôn ngữ nào khác.

Giả sử chúng ta có hai đối tượng thuộc lớp các thiết bị điện được quy ước là a và b. Chúng ta có thể tạo ra một chuỗi các hành động: bật thiết bị a, bật thiết bị b, tắt thiết bị a, tắt thiết bị b với sự trợ giúp của các thông điệp đuợc gửi tới những đối tượng này (nói cách khác: bằng cách gọi các phương pháp cho những đối tượng này). Ví dụ: sử dụng cú pháp ngôn ngữ Java (hay C++) chúng ta có thể viết chuỗi các yêu cầu trên như sau:

a.on();  // thông điệp chuyển tới đối tượng, yêu cầu nó bật lên
b.on();  // để b bật lên
a.off(); // để a tắt đi

Bên cạnh việc phản ánh các vấn đề trong ngôn ngữ lập trình, hướng đối tượng còn có thêm một tiện ích khác.
Thông thường các thuộc tính của đối tượng không phải lúc nào cũng sẵn có. Trong một chương trình các đối tượng liên lạc với nhau thông qua các thông điệp điều khiển những thuộc tính của chúng.
Dữ liệu của đối tượng cần được ẩn đi và được truy cập bằng các thông điệp được chuyển đến đối tượng.

Dữ liệu (thuộc tính) có thể được giấu đi và được truy cập bằng các thông điệp chuyển đến đối tượng.


Cách tiếp cận đó gọi là encapsulation (sự tóm gọn) và cho phép tạo ra các chương trình đáng tin cậy hơn.

Ngôn ngữ hướng đối tượng cho phép tái sử dụng các lớp cũ khi tạo ra các lớp mới. Nó đơn giản hóa việc lập trình và tránh mắc lỗi.
Nó cũng phản ánh các tình huống trong thế giới thực.

Ví dụ, một máy vi tính là một ứng dụng điện tử. Vì thế  nó là một đối tượng của lớp ElDev. Nhưng máy vi tính có các đặc điểm cụ thể ngoài các đặc điểm được nêu trong định nghĩa của lớp ElDev (chiểu rộng, chiều cao, trạng thái).
Do đó chúng tạo nên một lớp phụ của lớp thể hiện các thiết bị điện tử.
Trong ngôn ngữ lập trình chúng ta phản ánh lớp phu này thông qua sự kế thừa. Một lớp có thể kế thừa các thuộc tính và phương pháp từ các lớp khác và thêm vào một số các thuộc tính đặc biệt.
Chúng ta sẽ tạo ra một lớp có tên Computer kế thừa từ lớp ElDev làm ví dụ. Chúng ta không cần viết tất cả các thuộc tính và thông điệp của thiết bị điện tử (chúng ta không cần thực hiện các phương pháp on() và off()). Nhưng chúng ta phải thêm vào các thuộc tính đặc trung cho máy vi tính như yêu cầu thực hiện một chương trình nào đó.
Các chương trình là các đối tượng của lớp Program. Một thông điệp chuyển vào máy vi tính yêu cầu thực hiện một chương trình phải đưa vào ở dạng đối số.
Sự kế thừa được thể hiện bằng cách sử dụng từ khóa extends (mở rộng). Vì thế lớp Computer mới của chúng ta mà kế thừa từ lớp ElDev và thêm vào phương pháp run mới có thể đuợc viết như sau:

class Computer extends ElDev {
    method run(Program p)
       if (isOn()) execution_of_the_program_p;
}

Nó có thể được sử dụng trong một chương trình như sau:

Computer a, b, c;
Program x, y, z;
...
a.on(); a.run(x); ... a.off();

Viet Matrix Revolutions
  1. Chưa có phản hồi.
  1. No trackbacks yet.

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: