Tư tưởng chính của lập trình hướng đối tượng là xây dựng một chương trình dựa trên sự phối hợp hoạt
động của các đối tượng. Một đối tượng bao gồm hai thành phần chính là thơng tin lưu trữ và các thao
tác xử lý. Trong thế giới thực, đối tượng là thực thể tồn tại như con người, xe, máy tính, v.v…Trong ngơn ngữ lập trình, đối tượng cĩ thể là màn hình, điều khiển v.v…
Lập trình hướng đối tượng là kiểu lập trình nhằm vào sự tương tác giữa các đối tượng. Mỗi đối tượng cĩ những thuộc tính (thơng tin lưu trữ), những phương thức xác định các chức năng của đối tượng.
Bên cạnh đĩ, đối tượng cũng cĩ khả năng phát sinh các sự kiện khi thay đổi thơng tin, thực hiện một chức năng hay khi đối tượng khác tác động vào. Tất cả những thuộc tính, phương thức và sự kiện tạo nên cấu trúc của đối tượng. Cĩ bốn ý niệm trong Lập trình hướng đối tượng:
Abstraction: Tính trừu tượng
Encapsulation: Tính bao bọc
Inheritance: Tính kế thừa
Polymorphism: Tính đa hình
Mỗi ý niệm đều cĩ vai trị quan trọng trong lập trình hướng đối tượng.
I.1. Tính trừu tượng
Chúng ta thường lẫn lộn giữa lớp (Class) và đối tượng (Object). Cần phân biệt lớp là một ý niệm trừu tượng, cịn đối tượng là một thể hiện của lớp.
Ví dụ:
Class ConNgười là một ý niệm trừu tượng, nhưng NguyễnVănA là một đối tượng cụ thể. Từ những đối tượng giống nhau, chúng ta cĩ thể trừu tượng hĩa thành một lớp đối tượng.
Tính trừu tượng cho phép chúng ta loại bỏ tính chất phức tạp của đối tượng bằng cách chỉ đưa ra các thuộc tính và phương thức cần thiết của đối tượng trong lập trình.
I.2. Tính bao bọc
Mỗi Class được xây dựng để thực hiện một nhĩm chức năng đặc trưng của riêng Class, trong trường
hợp một đối tượng thuộc Class cần thực hiện một chức năng khơng nằm trong khả năng vì chức năng
đĩ thuộc về một đối tượng thuộc Class khác, nĩ sẽ yêu cầu đối tượng đĩ đảm nhận thực hiện cơng
việc. Một điểm quan trọng trong cách giao tiếp giữa các đối tượng là một đối tượng sẽ khơng được truy xuất trực tiếp vào thành phần dữ liệu của đối tượng khác cũng như khơng đưa thành phần dữ liệu của mình cho đối tượng khác một cách trực tiếp. Tất cả mọi thao tác truy xuất vào thành phần dữ liệu từ
đối tượng này qua đối tượng khác phải được thực hiện bởi các phương thức (method) của chính đối
tượng chứa dữ liệu. Đây cũng chính là một tính chất quan trọng trong lập trình hướng đối tượng gọi là tính bao bọc (encapsulation) dữ liệu.
Tính bao bọc cho phép dấu thơng tin của đối tượng bằng cách kết hợp thơng tin vớiø các phương thức liên quan đến thơng tin trong đối tượng.
Ví dụ:
những gì cần thiết cho Tài xế khi tương tác với Xe hơi. Xe hơi cĩ thể cĩ một đối tượng Động cơ nhưng Tài xế khơng cần phải quan tâm. Tất cả những gì cần quan tâm là những chức năng để cĩ thể vận hành xe. Do đĩ, khi thay một Động cơ khác, Tài xế vẫn sử dụng các chức năng cũ để vận hành Xe hơi bao lâu các phương thức phơ diễn bên ngồi (Interface) khơng bị thay đổi.
I.3. Tính kế thừa
Tính kế thừa là khả năng cho phép ta xây dựng một lớp mới dựa trên các định nghĩa của một lớp đã cĩ. Lớp đã cĩ gọi là lớp Cha, lớp mới phát sinh gọi là lớp Con và đương nhiên kế thừa tất cả các thành phần của lớp Cha, cĩ thể mở rộng cơng năng các thành phần kế thừa cũng như bổ sung thêm các thành phần mới
Chúng ta phân biệt hai loại quan hệ:
I.3.1. Là-một
Biểu thị tính kế thừa. Trong quan hệ "là-một", một đối tượng của lớp Con được xem như là một đối
tượng của lớp Cha.
Ví dụ:
Từ lớp Xe ta tạo nên lớp Xe hơi mở rộng, lớp này mặc nhiên kế thừa tất cả các thành phần của lớp xe. Ta cĩ thể nĩi: một xe hơi là một chiếc xe.
I.3.2. Cĩ-một
Quan hệ này mang ý nghĩa gồm cĩ. Trong quan hệ "cĩ-một", một đối tượng cĩ thể cĩ một hoặc nhiều thành phần tham chiếu đến các đối tượng khác.
Ví dụ:
Khi lập mơ hình loại xe hơi, bạn muốn diễn tả ý tưởng chiếc xe "cĩ-một" tay lái. Chúng ta khơng thể phát sinh lớp Xe hơi từ một Tay lái hay ngược lại (một Xe hơi "là-một" Tay lái !!!). Thay vì vậy, chúng ta phải cĩ hai lớp độc lập làm việc với nhau trong đĩ, lớp phía ngồi (lớp Xe hơi) sẽ tạo và phơ diễn cơng năng của lớp phía trong (lớp Tay lái).
I.4. Tính đa hình
Tính đa hình là khả năng một ngơn ngữ xử lý các đối tượng hữu quan theo cùng một cách. Tính đa hình thể hiện dưới nhiều hình thức:
I.4.1. Kết nối trễ - Late Binding
Đây là khả năng cho phép người lập trình gọi trước một phương thức của đối tượng, tuy chưa xác định được đối tượng. Đến khi thực hiện, chương trình mới xác định được đối tượng và gọi phương thức
tương ứng của đối tượng đĩ. Kết nối trễ giúp chương trình được uyển chuyển chỉ yêu cầu đối tượng
cung cấp đúng phương thức cần thiết là đủ.
Ví dụ:
Xe
Chúng ta cĩ lớp Xe với phương thức Chạy và các lớp Xe đạp, Xe hơi, Xe đẩy cùng phát sinh từ lớp Xe. Chúng ta chưa biết sẽ sử dụng xe gì để di chuyển vì tùy thuộc tình hình cĩ sẵn xe nào nên gọi trước phương thức Chạy. Khi chương trình thực thi, tùy theo đối tượng của lớp nào được đưa ra mà phương thức Chạy của đối tượng đĩ được gọi.
I.4.2. Nạp chồng - Overloading
Khả năng cho phép một lớp cĩ nhiều thuộc tính, phương thức cùng tên nhưng với các tham số khác nhau về loại cũng như về số lượng. Khi được gọi, dựa vào tham số truyền vào, thuộc tính hay phương thức tương ứng sẽ được thực hiện.
I.4.3. Ghi chồng - Overriding
Hình thức này áp dụng cho lớp Con đối với lớp Cha. Lớp Con được phép cĩ một phương thức cùng tên, cùng số tham số cĩ kiểu dữ liệu như phương thức của lớp Cha hoặc những lớp trước đĩ nữa (lớp phát sinh ra lớp Cha …) với cài đặt khác đi. Lúc thực thi, nếu lớp Con khơng cĩ phương thức riêng, phương thức của lớp Cha sẽ được gọi, ngược lại nếu cĩ, phương thức của lớp Con được gọi.