Lập trình hướng đối tượng (Object Oriented Programming hay OOP) là kỹ thuật lập trình cho phép các lập trình viên tạo ra các đối tượng trong code. Các đối tượng được trừu tượng hóa từ đối tượng thực tế trong đời sống.
Đối tượng là những sự vật, sự việc có tính chất, đặc tính và hành động giống nhau, đó có thể là con người, điện thoại, máy tính,…
Đặc điểm chung gồm 2 thành phần chính:
Thuộc tính (Attribute): Là các thông tin, đặc điểm của đối tượng.
Ví dụ thuộc tính của máy tính là màu sắc, kích thước, bộ nhớ,…; Hay con người có các đặc điểm như mắt, mũi, tóc, tai, tuổi, sở thích,…
Phương thức (Method): Là các hành động mà đối tượng có thể thực hiện.
Ví dụ: Phương thức của máy tính hoạt động như tắt máy, bật máy, quét virus,…; Phương thức của con người như hành động ăn, nói, đi lại,…
Các đối tượng có những đặc tính tương tự nhau sẽ được gom lại thành một lớp đối tượng (class).
Lớp đối tượng được hiểu là một kiểu dữ liệu, cũng bao gồm 2 thành phần thuộc tính và phương thức.
Sự khác biệt của đối tượng và lớp
Lớp là một khuôn mẫu, còn đối tượng là thể hiện cụ thể trạng thái & hành vi dựa trên khuôn mẫu đó.
Ví dụ:
Với các đặc điểm chung của con người là 2 chân, 2 tay, mắt, mũi, miệng, tóc,… Có hành động như đi, đứng, ngồi, nằm, cười,…
Vậy nếu là con người đều sẽ có các đặc điểm trên. Khi nói đến con người, lớp chính khuôn mẫu của con người sẽ có các đặc điểm chung đó và có thiết kế tương tự như khuôn mẫu. Đối tượng chính là cụ thể về cô gái A, cô gái B, cô gái C,…
Sự xuất hiện 2 khái niệm đối tượng và lớp chính là đặc trưng của phương pháp lập trình hướng đối tượng. Hình thức lập trình này giải quyết các khuyết điểm của phương pháp lập trình trước (lập trình hướng cấu trúc) để lại. Hai khái niệm này cũng giúp biểu diễn tốt hơn về thế giới thực trên máy tính.
Để lập trình và thiết kế chương trình theo phương pháp lập trình hướng đối tượng, bạn cần hiểu rõ về 4 tính chất: tính đóng gói, tính trừu tượng, tính kế thừa và tính đa hình.
Tính trừu tượng lược giản đi những thông tin trong đối tượng. Nó cho phép ta giao tiếp với các thành phần của đối tượng mà không cần biết cách mà các thành phần đó được xây dựng lên.
Ví dụ: Bạn đi xe tay ga thì hành động tăng ga giúp xe tăng tốc. Khi đó, chức năng tăng ga là trừu tượng. Người dùng chỉ cần biết vặn thì tăng ga chứ không cần biết nguyên lý tăng ga của xe như thế nào.
Khi viết chương trình theo hướng đối tượng, việc thiết kế đối tượng sẽ được rút tỉa ra những đặc trưng chung. Sau đó, các đặc trưng đó sẽ được trừu tượng thành các interface và thiết kế xem chúng sẽ tương tác với nhau như thế nào.
Các dữ liệu và phương thức có liên quan đến nhau sẽ được đóng gói thành các lớp để tiện sử dụng và quản lý. Tức là, mỗi lớp sẽ được xây dựng nhằm thực hiện nhóm chức năng đặc trưng của riêng lớp đó.
Bên cạnh đó, tính đóng gói cho phép dấu đi thông tin của đối tượng bằng việc kết hợp thông tin và các phương pháp liên quan đến thông tin cho đối tượng.
Tính chất này cũng giống như trong thực tế, bạn không thể biết được thuộc tính thực của họ trừ khi họ thể hiện ra (ví dụ như tính cách, sở thích, thông tin riêng tư khác,…). Người đó có thể nói với bạn rằng họ thích hoa hồng, thích ăn cá, 20 tuổi,… nhưng chưa chắc đó là thuộc tính thật. Giống như các getter không trả về giá trị thực của thuộc tính mà đưa ra một giá trị khác.
Ưu điểm của tính đóng gói:
Khi lập trình, bạn sẽ thấy có nhiều trường hợp nhiều đối tượng có chung một số thuộc tính và phương thức nhất định.
Ví dụ: Bạn viết chương trình lưu thông tin cho học sinh & giáo viên. Học sinh cần lưu tên, tuổi, địa chỉ, điểm thi; giáo viên lưu tên, tuổi, địa chỉ, số buổi dạy, tiền lương,… Vậy sẽ có các dòng code trùng lặp ở những thuộc tính giống nhau (cụ thể như tên, tuổi, địa chỉ hay cả setter, getter,…). Điều này cũng gây vi phạm một trong những nguyên tắc cơ bản nhất khi lập trình là DRY – Don’t Repeat Yourself (đừng bao giờ lặp lại code).
Nhờ có tính kế thừa thì vấn đề này sẽ được giải quyết. Kế thừa trong lập trình hướng đối tượng sẽ thừa hưởng lại những thuộc tính và phương thức của một lập. Tức là, nếu lớp A kế thừa lớp B thì sẽ có những thuộc tính và phương thức của lớp B.
Đa hình được hiểu là từng hoàn cảnh, từng trường hợp các đối tượng sẽ đóng vai trò khác nhau.
Ví dụ: Một người khi ở công ty có vai trò là nhân viên, đi mua hàng là khách hàng, đi học là học viên,… Cùng 1 người nhưng ở từng hoàn cảnh sẽ có vai trò khác nhau. Đây chính là ví dụ đa hình trong thực tế.
Trong lập trình, một đối tượng hay phương thức sẽ có nhiều hơn một hình thái hay là có đa hình. Tính đa hình sẽ hiển thị ở 3 hình thức:
Thông qua đối tượng đa hình: Bạn có thể hình dung các biến của lớp cha là đa hình, khi tham chiếu tới đối tượng lớp con cũng sẽ là đa hình.
Từ phân tích đặc điểm bên trên, bạn cũng sẽ thấy được lập trình hướng đối tượng có nhiều ưu điểm như: