Hướng đối tượng trong java nghĩa là gì?

23-09-2015 11:59

Hướng đối tượng trong java nghĩa là gì?

Ngôn ngữ lập trình Java, và nền tảng Java luôn phát triển như một cuộc cách mạng trong lập trình. Mục tiêu của bài này là chỉ rõ cho bạn cho bạn Hướng đối tượng trong java nghĩa là gì? và cho bạn thấy những thành tố đặc thù (idioms) của nó giúp bạn tránh khỏi những rắc rối. 

Các khóa học tại ITPLus Academy

Khóa học lập trình web với ASPNET

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 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ác phươ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 message 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.

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 từ viết tắt PIE, trong đó:

  1. Đa hình ( Polymorphism)
  2. Thừa kế ( Inheritance)
  3. Bao đóng ( 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.

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ột phương thức của đối tượng khác để nó trả lại kết quả là tuổi.

Thừa kế (Inheritance)
Khi bạn được sinh ra, nói về khía cạnh sinh học, bạn là tổ hợp DNA của cha mẹ mình. Bạn không hoàn toàn giống ai trong số họ, mà bạn giống cả hai người. OO cũng có nguyên tắc tương tự đối với các đối tượng. Quay lại với đối tượng Person. Ta nhớ lại rằng mỗi người có một chủng tộc. Không phải tất cả các Person đều cùng chủng tộc, nhưng dù sao thì họ cũng có điểm tương đồng như nhau đúng không? Chắc chắn vậy! Họ chẳng phải ngựa, tinh tinh hay cá voi mà là người. Mọi con người đều có những điểm chung nhất định và điều này giúp phân biệt con người với các loài động vật khác. Nhưng giữa mọi người cũng có khác biệt với nhau. Một đứa trẻ có giống hệt một người trưởng thành không? Không. Đi lại và nói là khác nhau rồi. Nhưng một đứa trẻ thì vẫn chắc chắn là một con người.

Đa hình (Polymorphism)
Baby có “nói” được 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.

Ngôn ngữ Java là hướng đối tượng và không hướng đối tượng như thế nào?
Như chúng ta thấy, ngôn ngữ lập trình Java cho phép bạn tạo các đối tượng hạng nhất (first-class), nhưng không phải bất cứ cái gì trong ngôn ngữ này đều là đối tượng. Một số ngôn ngữ OO như Smalltalk lại hoàn toàn khác. Smalltalk hoàn toàn là hướng đối tượng, có nghĩa là mọi thứ trong ngôn ngữ này đều là đối tượng. Java là ngôn ngữ lai tạp giữa đối tượng và phi đối tượng. Nó cho phép một đối tượng biết rõ các đối tượng khác, nếu với tư cách là một lập trình viên bạn cho phép điều đó xảy ra. Điều này vi phạm nguyên lý bao đóng.

Tuy nhiên, ngôn ngữ Java cũng cung cấp cho tất cả các lập trình viên OO những công cụ cần thiết để tuân theo mọi quy tắc hướng đối tượng và viết mã lệnh OO rất chuẩn. Nhưng làm được như vậy cần phải tự có kỷ luật. Ngôn ngữ không ép bạn làm việc đúng đắn được.

Trong khi những người thuần túy chủ nghĩa hướng đối tượng tranh luận xem liệu Java là hướng đối tượng hay không, thực sự điều này cũng không mang lại lợi ích gì cả. Nền tảng Java sẽ giữ vững vị trí của nó. Hãy học cách lập trình hướng đối tượng tốt nhất có thể làm việc với mã lệnh Java và cứ để những lý lẽ thuần túy chủ nghĩa cho những người khác. Ngôn ngữ Java giúp bạn viết chương trình rõ ràng, khá ngắn gọn, dễ bảo trì, điều này là khá đủ trong cuốn sách của tôi đối với hầu hết các tình huống nghề nghiệp.

Nguồn: Sưu tầm

Bài viết cùng chủ đề