Tổng quan lập trình hướng đối tượng OOP: Những kiến thức cơ bản và ví dụ thực tế

Thanh Nam

Guest
Lập trình hướng đối tượng là gì?
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. Hầu hết các ngôn ngữ lập trình hiện nay như Java, PHP, .NET, Ruby, Python… đều hỗ trợ OOP. Hôm nay, CodeGym sẽ chia sẻ đến các bạn đọc bộ tài tài liệu lập trình hướng đối tượng OOP căn bản cho người mới.



Một số khái niệm cơ bản trong lập trình hướng đối tượng
Đối tượng (Object)
Đố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,…

Lớp (Class)
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 hướng đối tượng có những đặc điểm này?
Để 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 (Abstraction)
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.

Tính đóng gói (Encapsulation)
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:

  • Hạn chế được cách truy xuất không hợp lệ tới các thuộc tính của đối tượng.
  • Giúp cho trạng thái của đối tượng luôn đúng.
  • Giúp ẩn đi những thông tin không cần thiết của đối tượng.
  • Cho phép thay đổi cấu trúc bên trong lớp mà không gây ảnh hưởng tới các lớp khác.
Tính kế thừa (Inheritance)
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.

Tính đa hình (Polymorphism)
Đ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:

  • Nạp chồng phương thức: Chẳng hạn như cộng 2 số nguyên (1+2), cộng 2 số thực (2.1+ 2.2) và cộng 3 số nguyên (1+2+3). Đều là cộng số nguyên hoặc cộng 2 số nhưng 3 kết quả lại có sự khác nhau, cụ thể là 3, 4.3 và 6.
  • Ghi đè phương thức: Hình thức này thường dùng để tính lương cho các đối tượng. Mỗi đối tượng sẽ có cách tính khác nhau và kết quả khác nhau.
  • 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.
Ưu điểm của lập trình hướng đối tượng là gì?
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ư:

  • Tính kế thừa giúp quá trình mô tả loại bỏ những chương trình bị lặp, bị dư. Nó giúp mở rộng khả năng sử dụng các lớp mà không cần thực hiện lại, tối ưu và tái sử dụng code hiệu quả.
  • Rút ngắn thời gian xây dựng hệ thống, tăng năng suất thực hiện.
  • Đối tượng và lớp xuất hiện giúp giải quyết các khuyết điểm của phương pháp lập trình hướng cấu trúc, đồng thời giúp biểu diễn rốt hơn thế giới thực trên máy tính.
Những ngôn ngữ lập trình hướng đối tượng phổ biến
Phần lớn các ngôn ngữ lập trình hiện nay đều hỗ trợ lập trình hướng đối tượng. Trong đó, bạn có thể bắt gặp nhiều ngôn ngữ lập trình quen thuộc như:

  • Java: Ngôn ngữ lập trình bậc cao được ưa chuộng. Đây là ngôn ngữ lập trình hướng đối tượng quen thuộc trong phát triển ứng dụng web và phần mềm cho các đơn vị.
  • Python: Ngôn ngữ này lập trình hướng đối tượng nhờ sự kết hợp giữa khả năng đọc và sự linh hoạt trong kiến tạo các hoạt động khoa học dữ liệu phức tạp.
  • C++: Là ngôn ngữ lập trình bậc cao hỗ trợ viết code hướng đối tượng. Con trỏ C++ cho phép thực hiện các tác vụ linh hoạt và dễ dàng. Khái niệm OOP trong C++ cung cấp thêm các tính năng trong thế giới thực cũng như ứng dụng bạn xây dựng.
  • Ruby: Toàn bộ giá trị trong Ruby đều được coi là các đối tượng. Code của Ruby thân thiện với lập trình viên. Nhờ có các framework như Ruby mà lập trình viên có thể phát triển ra các ứng dụng web thông qua code có sẵn hiệu quả.
Trên đây là một số chia sẻ về lập trình hướng đối tượng là gì, giúp bạn hiểu khái niệm lập trình hướng đối tượng là gì, các đặc điểm, ưu điểm và ngôn ngữ lập trình hướng đối tượng phổ biến.
 
Bên trên