Lập trình hướng đối tượng là phương pháp lập trình phổ biến, sở hữu 4 tính chất khá hữu ích hỗ trợ cho công việc.
Lập trình hướng đối tượng hay còn gọi là OOP (Object Oriented Programming), đây là cách viết chương trình máy tính thông qua việc sử dụng các Object, để biểu diễn dữ liệu cũng như các phương thức hoạt động.
Nhờ có sự hỗ trợ của OOP mà việc quản lý source code trở nên tối ưu và dễ dàng hơn, từ đó nâng cao khả năng tái sử dụng của các đoạn mã và đồng thời tiết kiệm nguồn tài nguyên.
Chưa hết, OOP còn giúp người dùng dễ dàng tóm gọn các thủ tục đã biết trước tính chất.
Và đặc biệt, điều khiến OOP dần trở nên phổ biến và được nhiều người ưa chuộng chính là 4 tính chất của nó.
Abstraction - Tính trừu tượng
Trừu tượng hóa dữ liệu nghĩa là che giấu những thành phần không cần thiết, giúp người dùng dễ dàng triển khai những logic phức tạp dựa trên một lớp trừu tượng có sẵn, mà không cần phải quan tâm bên trong.
Nhờ đó, loại bỏ được những thứ phức tạp và không cần thiết trong các Object, để tập trung vào những thứ quan trọng và cốt lõi khiến công việc đạt được những hiệu quả cao nhất định.
Trong quá trình sử dụng, người dùng cần xác định rõ ràng các thuộc tính và phương thức của Object để thuận tiện hơn trong việc lập trình.
Đa phần các chương trình được xây dựng dựa trên hướng lập trình đối tượng, các Object sẽ được "lược tỉa" thành những đặc trưng chung, từ đó trừu tượng thành các Interface và thiết kế xem chúng sẽ tương tác với nhau ra sao.
Encapsulation - Tính đóng gói
Với tính chất này, các dữ liệu và phương thức có mối liên hệ với nhau sẽ được đóng gói thành các Class để tiện cho quá trình sử dụng, cũng như quản lý.
Mỗi Class sẽ được gom chung vào một khu vực, để có thể dễ dàng thực hiện được các chức năng đặc trưng của riêng nó.
Không những vậy, tính đòng gói còn hỗ trợ ẩn các thông tin của Object thông qua việc kết hợp thông tin, cùng các phương pháp liên quan đến thông tin cho Object đó.
Nhờ có tính đóng gói, nên khả năng bảo mật của Object được nâng cao, đồng thời tránh được tình trạng bị hỏng dữ liệu không mong muốn.
Tính đóng gói mang lại cho người dùng một số lợi ích như:
- Hỗ trợ trạng thái của các đối tượng luôn đúng.
- Ẩn đi những thông tin không cần thiết liên quan đến Object.
- Hạn chế được các truy xuất không hợp lệ tới các thuộc tính trong Object.
- Cho phép nhà lập trình thay đổi cấu trúc trong các Class mà không làm ảnh hưởng tới những Class khác trong hệ thống.
Inheritance - Tính kế thừa
Đây là nguyên lý cơ bản giúp các Class có thể thừa hưởng những đặc tính tốt của nhau.
Nói đơn giản, các Class con sẽ được kế thừa và bổ sung thêm những tính năng mới của riêng mình, phục vụ tốt hơn cho việc lập trình trong tương lai.
Tính kế thừa thường được thực hiện dựa trên ba cấp độ, cụ thể:
- Base Class Inheritance: Kế thừa toàn bộ từ lớp cơ sở.
- Abstract Class Inheritance: Kế thừa chủ yếu từ lớp Abstract hay còn gọi là kế thừa một phần, bởi phải định nghĩa lại những hàm Abstract.
- Interface Inheritance: Kế thừa khuôn mẫu, cần định nghĩa lại những gì mà Inheritance yêu cầu.
Nhưng để đảm bảo hiệu quả trong tính kế thừa, khi thực hiện cần chú ý đến những yếu tố:
- Kế thừa một cấp và nhiều cấp.
- Có thể đa kế thừa Interface.
- Lớp kế thừa có thể ép kiểu về Class cơ sở mà không làm mất tính đúng đắn trong chương trình.
- Kế thừa class gọi là Extends và kế thừa Interface gọi là Implements. Java sẽ sử dụng hai keyword đó để thực hiện kế thừa. Còn đối với C#, chỉ cần dùng dấu ":" cho cả Class lẫn Interface.
- Đa phần các ngôn ngữ không cho phép đa kế thừa Class, nhằm tránh trường hợp 2 Class kế thừa có chung những thuộc tính, nhưng có thể đã Implement khác nhau.
- Class kế thừa có thể sử dụng những thành phần được cho phép từ Claas cơ sở quy định bởi Access Modifier.
- Từ khóa this sẽ đại diện cho lớp chứa cụm code hiện tại.
- base class đại diện cho lớp cơ sở, lớp cha. Trong ngôn ngữ Java sử dụng phương thức super(), C# sử dụng base, còn C++ sẽ là Google.com.
Polymorphism - Tính đa hình
Với đặc tính này, cho phép các Object riêng biệt trong OOP tiến hành thực thi các chức năng giống nhau dựa trên nhiều phương pháp khác nhau.
Nhờ đó, giúp các Class kế thừa chung một Class cha và có thể được sử dụng thay thế cho nhau, mà không làm ảnh hưởng đến tính đúng đắn trong chương trình.
Tính đa hình sẽ được thực hiện dựa trên 3 hình thức chính, cụ thể:
- Nạp chồng phương thức: Nạp chồng hay còn được gọi là Compiletime Polymorphism, nó cho phép triển khai cùng một tính năng với nhiều loại tham số khác nhau.
- Ghi đè phương thức: Ghi đè được xem như Runtime Polymorphism, cho phép Class kế thừa tái định nghĩa một phương thức đã định nghĩa ở Class cha.
- Thông qua các đối tượng đa hình (Polymorphic Objects): Biến thuộc Class cha có thể tham chiếu tới Object của các Class con, khiến biến thuộc Class cha cũng có nhiều hình thái nên đây cũng được xem là đa hình.