Các khái niệm OOP

Một đối tượng là gì?

Java được biết đến như một ngôn ngữ hướng đối tượng (OO – object-oriented), bạn có thể sử dụng ngôn ngữ này để lập trình hướng đối tượng. Điều này rất khác so với lập trình thủ tục, và có thể hơi lạ lùng đối với hầu hết các lập trình viên không hướng đối tượng. Bước đầu tiên bạn phải hiểu đối tượng là gì, vì đó là khái niệm cơ sở của OOP.

Một đối tượng là một bó mã lệnh tự thân trọn vẹn (self-contained), tự hiểu chính mình và có thể nói cho các đối tượng khác về chính mình nếu chúng đưa ra các yêu cầu mà nó hiểu được. Một đối tượng có các thành phần dữ liệu (các biến) và các phương thức, chính là những yêu cầu mà nó biết cách trả lời (dù chúng không được diễn đạt bằng lời như các câu hỏi). Tập các phương thức mà một đối tượng biết cách trả lời được gọi là giao diện của đối tượng. Một vài phương thức là mở công cộng, nghĩa là các đối tượng khác có thể gọi đến chúng. Tập các phương thức này được gọi là giao diện công cộng của đối tượng.

Khi một đối tượng gọi phương thức của một đối tượng khác, thì được gọi là gửi một thông điệp (sending a message hoặcmessage send). Cụm từ này là thuật ngữ của OO nhưng hầu hết trong giới Java mọi người hay nói, “gọi phương thức này” hơn là “gửi thông điệp này”. Trong phần tiếp theo, chúng ta sẽ xem xét một ví dụ minh họa khái niệm giúp bạn hiểu vấn đề này rõ ràng hơn.

Ví dụ minh họa khái niệm đối tượng

Giả sử chúng ta có đối tượng Person. Mỗi Person có tên, tuổi, chủng tộc và giới tính. Mỗi Person cũng biết nói và biết đi. Một Person có thể hỏi tuổi của một Person khác, hoặc yêu cầu một Person khác bắt đầu đi (hay dừng). Diễn đạt theo thuật ngữ lập trình, bạn có thể tạo một đối tượng Person và khai báo một số biến (như tên và tuổi). Nếu bạn tạo một đối tượng Person thứ hai, đối tượng này có thể hỏi tuổi của đối tượng thứ nhất hoặc yêu cầu đối tượng thứ nhất bắt đầu đi. Nó có thể thực hiện những điều ấy bằng cách gọi đến các phương thức của đối tượng Person đầu tiên. Khi chúng ta bắt đầu viết mã lệnh bằng ngôn ngữ Java, bạn sẽ hiểu ngôn ngữ này triển khai thực hiện khái niệm đối tượng ra sao.

Nói chung, khái niệm đối tượng là như nhau trong ngôn ngữ Java và các ngôn ngữ hướng đối tượng khác, mặc dù việc triển khai thực hiện là khác nhau giữa các ngôn ngữ. Các khái niệm là phổ quát. Vì sự thật này, lập trình viên hướng đối tượng, bất chấp họ lập trình bằng ngôn ngữ nào, có xu hướng phát biểu khác so với những lập trình viên thủ tục. Các lập trình viên thủ tục thường nói về các hàm và các mô đun. Lập trình viên hướng đối tượng lại nói về các đối tượng và họ thường nói về các đối tượng này bằng cách sử dụng các đại từ nhân xưng. Chẳng hề bất thường khi bạn nghe một lập trình viên hướng đối tượng nói với đồng nghiệp, “đối tượng Supervisor nói với đối tượng Employee, ‘cho tôi ID của cậu,’” vì anh ta cần những thứ này để gán nhiệm vụ cho Employee.

Lập trình viên hướng thủ tục có thể nghĩ cách nói chuyện này thật lạ lùng, nhưng nó lại hoàn toàn bình thường đối với lập trình viên hướng đối tượng. Trong thế giới lập trình của họ, mọi thứ đều là đối tượng (cũng có một vài ngoại lệ đáng chú ý trong ngôn ngữ Java) và các chương trình là chỉ là sự tương tác (hay nói chuyện) giữa các đối tượng với nhau.

Các nguyên tắc hướng đối tượng cơ bản

Khái niệm đối tượng là trọng yếu đối với lập trình hướng đối tượng, và dĩ nhiên, ý tưởng các đối tượng giao tiếp với nhau bằng các thông điệp cũng vậy. Nhưng có 3 nguyên tắc cơ bản mà bạn cần hiểu.

Bạn có thể nhớ 3 nguyên tắc hướng đối tượng cơ bản bằng cụm viết tắt PIE:

  • Đa hình ( Polymorphism)
  • Thừa kế ( Inheritance)
  • Bao gói ( Encapsulation)

Đó là những từ trừu tượng nhưng những khái niệm này thực sự không quá khó hiểu. Trong các phần tiếp theo, chúng ta sẽ bàn về từng khái niệm này ở mức độ chi tiết hơn, theo thứ tự ngược lại.

Đa hình

Baby có “nói” như Adult không? Dĩ nhiên là không rồi. Một Baby có thể ê a, nhưng không nhất thiết nói ra những lời hiểu được như Adult. Do đó, nếu tôi cá thể hóa một đối tượng Baby (hay là “cá thể hóa một Baby” cũng có cùng ý nghhĩa – từ “đối tượng” được ngầm hiểu) và cho nó nói, thì nó chỉ có nghĩa là những tiếng ê a. Ta hy vọng rằng Adult “nói” thì mạch lạc hơn.

Trong hệ thống phân bậc con người, chúng ta có Person nằm ở đỉnh với Baby và Adult nằm phía dưới nó, là các lớp con. Tất cả mọi người đều có thể nói, Baby và Adult cũng vậy, nhưng sẽ nói khác nhau. Baby chỉ ê a và phát những âm thanh đơn giản. Adult nói thành lời. Đó chính là sự đa hình: các đối tượng làm việc theo cách riêng của chúng.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s