Các khái niệm OOP
Một đối tượng là gì?
Java được biết đến như một ngônngữ 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áclậ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 gói mã lệnh độc lập (self-contained), có khả năng tự hiểu và có thể nói cho các đối tượng khác về chính nó 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 data members (thành phần dữ liệu) (các biến) và methos (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ácphương thức mà một đối tượng biết cách trả lời được gọi là interface (giao diện) của đối tượng. Một vài phương thức là public, có 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à public interface (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ặc messagesend ). 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 Personcũ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 trong mỗi ngôn ngữ có thể khác nhau. Các khái niệm là chung. Vì vậy, lập trình viên hướng đối tượng, bất chấp họ lậptrình bằng ngôn ngữ nào đều 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óivới đối tượng Employee, ‘cho tôi ID của cậu,’ vì anh ta cần những thông tin này để gán nhiệm vụ cho Employee.”
Lập-trình-viên-hướng-thủ-tục có thể nghĩ rằng 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ượngcơ 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 từ viết tắt PIE, trong đó:
*. Đa hình ( P olymorphism)
*. Thừa kế ( I nheritance)
*. Bao đóng ( E ncapsulation)
Đó là những từ trừu tượng nhưngnhữ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 chi tiết hơn về từng khái niệm này, theo thứ tự ngược lại.
Bao đóng (Encapsulation)
Hãy nhớ rằng, một đối tượng là độc lập, chứa đựng các thành phần dữ liệu và các hành động mà nó có thể thực hiện trên các thành phần dữ liệu ấy. Đây là việc triển khai thực hiện nguyên lý gọi là ẩn giấu thông tin . Ý tưởng là một đối tượng có thể tự hiểu chính nó. Nếu một đối tượng khác muốn điều gì từ đối tượng này thì nó phải 'hỏi'. Theo thuật ngữ lập trình hướng đối tượng, phải gửi một thông điệp đến một đối tượng khác để hỏi về tuổi. Theo thuật ngữ Java, phải gọi mộtphương thức của đối tượng khác để nó trả lại kết quả là tuổi.
Sự bao đóng đảm bảo rằng mỗi đối tượng là khác nhau và chương trình là một cuộc giao tiếp giữa các đối tượng. Ngôn ngữ Java cho phép các lập trình viên vi phạm nguyên lý này nhưnghầu như luôn là một ý tưởng tồi nếu làm như thế.