Hỏi đáp công nghệ

OOP là gì? 4 tính chất của lập trình hướng đối tượng

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn

Table of Contents

Lập trình hướng đối tượng (OOP) là một mô hình lập trình cơ bản được hầu hết mọi nhà phát triển sử dụng tại một số giai đoạn nhất định trong sự nghiệp của họ. OOP là mô hình lập trình phổ biến nhất và được coi như cách viết code tiêu chuẩn cho hầu hết các nghề lập trình viên. Trong bài viết này, Hỏi đáp Công nghệ sẽ phân tích OOP là gì, những thành phần cơ bản tạo nên lập trình hướng đối tượng để bạn có thể bắt đầu sử dụng mô hình này trong các dự án và cuộc phỏng vấn của riêng mình.
OOP là gì
OOP là gì? Các tính chất của OOP

OOP là gì?

OOP là viết tắt của Object-oriented programming, dịch sang tiếng Việt là lập trình hướng đối tượng. Vậy lập trình hướng đối tượng là gì? Đây là một mô hình lập trình máy tính tổ chức thiết kế phần mềm dựa trên dữ liệu hoặc các đối tượng (object), chứ không phải là các chức năng và logic. Một đối tượng có thể được định nghĩa là một trường dữ liệu có các thuộc tính và hành vi duy nhất.

OOP tập trung vào các đối tượng mà các nhà phát triển muốn thao tác hơn là logic cần thiết để thao tác chúng. Cách tiếp cận lập trình này rất phù hợp cho các chương trình lớn, phức tạp và được cập nhật hoặc bảo trì liên tục. Các chương trình này bao gồm các chương trình sản xuất và thiết kế, cũng như các ứng dụng di động. Ví dụ, OOP có thể được sử dụng để sản xuất phần mềm giả lập hệ thống.

Việc tổ chức lập trình hướng đối tượng cũng làm cho phương pháp này có lợi cho sự phát triển hợp tác, trong đó các dự án được chia thành nhiều nhóm nhỏ hơn. Các lợi ích khác của OOP bao gồm khả năng tái sử dụng code, khả năng mở rộng và độ hiệu quả.

Bước đầu tiên trong OOP là thu thập tất cả các đối tượng mà một lập trình viên muốn thao tác và xác định cách chúng liên hệ với nhau – một hoạt động được gọi là mô hình hóa dữ liệu.

Ví dụ về một đối tượng có thể bao gồm từ các thực thể vật lý, chẳng hạn như một con người được mô tả bằng các thuộc tính như tên và địa chỉ, đến các chương trình máy tính nhỏ, chẳng hạn như các widget .

Khi một đối tượng được xác định, nó được gắn nhãn với một class (lớp) đối tượng xác định loại dữ liệu mà nó chứa và bất kỳ chuỗi logic nào có thể thao tác với nó. Mỗi chuỗi logic riêng biệt được gọi là một phương thức (medthod). Các đối tượng có thể giao tiếp với các giao diện được xác định rõ ràng được gọi là các thông điệp (message).

Cấu trúc của lập trình hướng đối tượng là gì?

Cấu trúc hoặc các khối xây dựng của lập trình hướng đối tượng bao gồm những yếu tố sau:

  • Lớp (class). Lớp là kiểu dữ liệu do người dùng xác định, hoạt động như bản thiết kế cho các đối tượng, thuộc tính và phương thức riêng lẻ.
  • Đối tượng (object). Mỗi một đối tượng sẽ có 2 thông tin là phương thức và thuộc tính. Các đối tượng có thể tương ứng với các đối tượng trong thế giới thực hoặc một thực thể trừu tượng.
  • Các phương thức (method). Phương thức là các hàm được định nghĩa bên trong một class mô tả các hành vi của một đối tượng. Mỗi phương thức có trong định nghĩa class bắt đầu bằng một tham chiếu đến một đối tượng thể hiện. Ngoài ra, các chương trình con chứa trong một đối tượng được gọi là các phương thức thể hiện. Các lập trình viên sử dụng các phương thức để tái sử dụng hoặc giữ chức năng được gói gọn bên trong một đối tượng tại một thời điểm.
  • Các thuộc tính (Attributes). Thuộc tính được định nghĩa trong mẫu class và đại diện cho trạng thái của một đối tượng. Các đối tượng sẽ có dữ liệu được lưu trữ trong trường thuộc tính. Các thuộc tính của class thuộc về chính class đó.

4 tính chất cơ bản của OOP 

4 tính chất của lập trình hướng đối tượng
OOP là gì? 4 tính chất của lập trình hướng đối tượng

4 tính chất của lập trình hướng đối tượng bao gồm:

Inheritance (tính kế thừa)

Theo thuật ngữ của người không chuyên, các thuộc tính mà bạn thừa hưởng từ cha mẹ của mình là một minh họa đơn giản cho tính kế thừa. Các lớp có thể kế thừa các đặc điểm từ các lớp khác nhờ tính kế thừa. Nói cách khác, các lớp cha (parent class) mở rộng các thuộc tính và hành vi cho các lớp con (child class). Khả năng tái sử dụng được hỗ trợ thông qua tính kế thừa. Prototyping là một tên gọi khác của tính kế thừa trong JavaScript. Một đối tượng nguyên mẫu đóng vai trò như một cơ sở mà từ đó một đối tượng khác có thể lấy được các tính năng và hành động của nó. Do đó, bạn có thể sử dụng nhiều mẫu đối tượng nguyên mẫu để tạo thành một chuỗi nguyên mẫu. Tính kế thừa được truyền từ thế hệ này sang thế hệ khác.

Hãy xem xét ví dụ về hình Đa giác, đại diện cho rất nhiều Hình. Chúng tôi ​​sẽ có thể tạo ra hai loại đa giác riêng biệt: Hình chữ nhật và Hình tam giác.

Encapsulation (tính đóng gói)

Tính đóng gói là quá trình đóng gói tất cả thông tin quan trọng bên trong một đối tượng và chỉ tiết lộ một tập hợp con của nó với thế giới bên ngoài. Ví dụ, code bên trong class template xác định các thuộc tính và hành vi.

Dữ liệu và phương thức sau đó được đóng gói trong đối tượng khi nó được tạo từ lớp. Bên trong một lớp, tính đóng gói che giấu việc triển khai code phần mềm bên dưới và dữ liệu bên trong của các đối tượng. Việc đóng gói bắt buộc phải chỉ định một số trường nhất định là riêng tư trong khi những trường khác được đặt ở chế độ công khai.

  • Các phương thức và thuộc tính chỉ có sẵn từ các phương thức khác trong cùng một lớp tạo nên giao diện riêng tư/nội bộ.
  • Các phương thức và thuộc tính có sẵn từ bên ngoài lớp được gọi là giao diện công khai/bên ngoài.

Trình diễn đóng gói trong thời gian thực

Một trong những ví dụ thực tế nhất của tính đóng gói là một chiếc cặp đi học. Sách, bút chì và các vật dụng khác có thể được cất trong cặp của chúng ta.

Sau đây là một số ưu điểm của tính năng đóng gói:

  • Ẩn dữ liệu: Trong trường hợp này, người dùng sẽ không biết về việc triển khai nội bộ của lớp. Thậm chí người dùng cũng không thể biết cách lớp lưu trữ dữ liệu trong các biến. Người đó sẽ chỉ biết rằng các giá trị được gửi đến một phương thức setter và các biến được khởi tạo với giá trị đó.
  • Tăng tính linh hoạt: Tùy thuộc vào nhu cầu của mình, chúng ta có thể làm cho các biến của lớp chỉ đọc hoặc chỉ ghi. Nếu bạn muốn đặt các biến ở chế độ chỉ đọc, hãy xóa các phương thức setter như setName (), setAge (), v.v. khỏi chương trình trên. Nếu bạn muốn đặt các biến ở chế độ chỉ ghi, hãy xóa các phương thức get như getName (), getAge (), v.v. khỏi chương trình.
  • Nó cũng thúc đẩy khả năng tái sử dụng và giúp bạn dễ dàng thay thế để đáp ứng nhu cầu mới.

Abstraction (Tính trừu tượng)

Tính trừu tượng trong OOP đề cập đến sự tương tác của người dùng với chỉ một tập hợp con các đặc tính và hoạt động của một đối tượng. Để truy cập một mục phức tạp, tính trừu tượng sử dụng các kỹ thuật đơn giản hơn nhưng ở level cao hơn.

  • Các item đơn giản được sử dụng để thể hiện sự phức tạp.
  • Giữ thông tin phức tạp ẩn với người dùng.

Các lớp đơn giản được sử dụng để chỉ ra sự phức tạp trong tính trừu tượng. Tính đóng gói là một phần mở rộng của trừu tượng.

Một ví dụ thực tế về tính trừu tượng

Tính trừu tượng chỉ tiết lộ những sự kiện quan trọng nhất cho người dùng trong khi ẩn những điều phức tạp tiềm ẩn. Ví dụ, khi chúng ta đi xe đạp, chúng ta chỉ biết cách đạp mà không biết nó hoạt động như thế nào. Chúng ta cũng không biết bên trong xe hoạt động như thế nào.

Ưu điểm của tính trừu tượng

  • Nó đơn giản hóa quá trình xem xét mọi thứ một cách toàn diện.
  • Tránh việc sao chép code và tăng khả năng tái sử dụng code.
  • Bởi vì chỉ những thông tin cần thiết nhất được hiển thị cho người dùng, nó sẽ giúp tăng cường tính bảo mật của một ứng dụng hoặc phần mềm.

Xem thêm >> SRS là gì? Cách viết tài liệu SRS cực hiệu quả

Polymorphism (Tính đa hình)

Tính đa hình đề cập đến việc tạo ra các item có hành vi tương tự. Ví dụ, các đối tượng có thể ghi đè các hành vi của parent thông thường với các hành vi con cụ thể thông qua tính kế thừa. Overriding (ghi đè phương thức) và overloading (nạp chồng phương thức) là hai cách mà tính đa hình cho phép cùng một phương thức thực hiện các hành động khác nhau.

Lấy ví dụ là điện thoại di động của bạn chẳng hạn. Nó có khả năng lưu trữ Danh bạ của bạn. Hãy cùng xem xét tình huống sau: bạn muốn lưu hai số điện thoại khác nhau cho cùng một cá nhân. Bạn có thể thực hiện việc này bằng cách lưu số điện thoại thứ hai với cùng tên như số đầu tiên.

Hãy cùng xem xét tình huống thứ hai: bạn muốn lưu hai số khác nhau cho cùng một cá nhân trong một ngôn ngữ hướng đối tượng như Java chẳng hạn. Tạo một hàm sẽ chấp nhận các đối số là hai số nguyên và tên của cá nhân đối với một số hàm void createContact sẽ được định nghĩa sau (string name, int number1, int number2).

Overriding và Overloading method
Overriding và Overloading method

Overriding (Ghi đè phương thức)

Overriding được sử dụng trong đa hình runtime. Khi một lớp con ghi đè phương thức của lớp cha, lớp con có thể cung cấp một cách triển khai thay thế và định nghĩa lại một phương thức đã có mặt ở lớp cha.

Hãy xem xét một gia đình ba người, bao gồm cha, mẹ và con trai. Người cha quyết định dạy con mình bắn súng. Kết quả là, anh ta đưa con đến trường bắn với khẩu súng trường yêu thích của mình và dạy anh ta cách nhắm và bắn vào mục tiêu. Tuy nhiên, người cha thuận tay phải, trong khi đứa con thuận tay trái. Vì vậy, mỗi người đều có cách xử lý khẩu súng của riêng mình! Vì định hướng khác nhau của họ, người cha lo ngại rằng ông không thể dạy con trai mình cách bắn súng.

Ngược lại, cậu con trai lại tỏ ra sắc sảo và chọn cách lật bàn tay của cha mình, đặt tay thuận của mình lên cò súng thay vì làm giống người cha, cụ thể là bàn tay phải. Bằng cách thay đổi đáng kể quá trình học tập, cậu con trai đã có thể nắm được kỹ năng bắn súng!

Ghi đè phương thức là thuật ngữ được sử dụng trong lập trình để mô tả ý tưởng này.

Overloading (Nạp chồng phương thức)

Nạp chồng phương thức (overloaing) được sử dụng trong Đa hình thời gian biên dịch (Compile Time Polymorphism). Mặc dù hai phương thức hoặc hàm có thể có cùng tên, nhưng số lượng đối số được đưa vào lệnh gọi phương thức có thể khác nhau. Do đó, tùy thuộc vào số lượng tham số được nhập, bạn có thể nhận được các kết quả khác nhau.

Bạn có thể hiểu nạp chồng phương thức đơn giản như thế này. Một class addition chứa hai phương thức add (), một phương thức có đối số int a và int b và phương thức kia có ba tham số nguyên, int a, int b và int c. Khi đó, hàm add () được coi là nạp chồng (overloaded).

Số lượng đối số được đưa ra trong câu lệnh gọi phương thức xác định phương thức nào được thực hiện. Ví dụ: add (20,30) gọi hàm add () hai tham số, trong khi add (10,20,30) gọi phương thức thêm ba tham số.

Các ngôn ngữ phổ biến trong OOP là gì?

Trong khi Simula được coi là ngôn ngữ lập trình hướng đối tượng đầu tiên, ngày càng nhiều ngôn ngữ lập trình khác được sử dụng với OOP. Nhưng một số ngôn ngữ lập trình hoạt động với OOP tốt hơn những ngôn ngữ khác. Ví dụ, các ngôn ngữ lập trình được coi là ngôn ngữ OOP thuần túy coi mọi thứ như các đối tượng. Các ngôn ngữ lập trình khác được thiết kế chủ yếu cho OOP, nhưng bao gồm một số quy trình thủ tục.

Ví dụ về các ngôn ngữ OOP thuần túy phổ biến bao gồm:

  • Ruby
  • Scala
  • JADE
  • Emerald

Các ngôn ngữ lập trình được thiết kế chủ yếu cho OOP bao gồm:

  • Java
  • Python
  • C ++

Các ngôn ngữ lập trình khác ghép nối với OOP bao gồm:

  • Visual Basic .NET
  • PHP
  • JavaScript

Ưu điểm của OOP

Lợi ích của OOP bao gồm:

  • Tính mô đun: OOP có tính bảo mật rất cao, có khả năng bảo vệ mọi loại thông tin thông qua việc đóng gói, giúp xử lý sự cố và phát triển cộng tác dễ dàng hơn.
  • Khả năng tái sử dụng: Code có thể được sử dụng lại thông qua tính kế thừa, có nghĩa là một nhóm không phải viết cùng một code nhiều lần.
  • Năng suất: Các deverloper có thể xây dựng các chương trình mới nhanh hơn thông qua việc sử dụng nhiều thư viện và code có thể tái sử dụng.
  • Dễ dàng nâng cấp và mở rộng: Lập trình viên có thể thực hiện các chức năng của hệ thống một cách độc lập.
  • Mô tả giao diện: Mô tả các hệ thống bên ngoài rất đơn giản, do các kỹ thuật truyền thông điệp được sử dụng để giao tiếp giữa các đối tượng.
  • Bảo mật:  Sử dụng tính đóng gói và tính trừu tượng, mã phức tạp được ẩn đi, bảo trì phần mềm dễ dàng hơn và địa chỉ IP được bảo mật.
  • Linh hoạt: Tính đa hình cho phép một hàm duy nhất thích ứng với lớp mà nó được đặt vào. Các đối tượng khác nhau cũng có thể đi qua cùng một giao diện.

Nhược điểm của OOP

Mô hình lập trình hướng đối tượng cũng bị các nhà phát triển chỉ trích vì rất nhiều lý do. Mối quan tâm lớn nhất là OOP tập trung quá mức vào thành phần dữ liệu của phát triển phần mềm và không tập trung đủ vào tính toán hoặc thuật toán. Ngoài ra, code OOP đôi khi viết khá phức tạp và mất nhiều thời gian hơn để compile.

Các phương pháp thay thế cho OOP bao gồm:

  • Lập trình chức năng (Functional programming – FP): bao gồm các ngôn ngữ như Erlang và Scala, được sử dụng cho viễn thông và các hệ thống chịu lỗi.
  • Lập trình có cấu trúc hoặc mô-đun: bao gồm các ngôn ngữ như PHP và C#.
  • Lập trình mệnh lệnh (Imperative programming): Lựa chọn thay thế này tập trung vào chức năng hơn là mô hình và bao gồm C ++ và Java.
  • Lập trình khai báo (Declarative programming): Phương pháp lập trình này liên quan đến các tuyên bố về nhiệm vụ hoặc kết quả mong muốn chứ không phải làm thế nào để đạt được nó. Các ngôn ngữ bao gồm Prolog và Lisp.
  • Lập trình logic: Phương pháp này, chủ yếu dựa trên logic hình thức và sử dụng các ngôn ngữ như Prolog, bao gồm một tập hợp các câu diễn đạt các fact hoặc quy tắc về một miền vấn đề. Nó tập trung vào các nhiệm vụ có thể được hưởng lợi từ các truy vấn logic dựa trên quy tắc.

Hầu hết các ngôn ngữ lập trình nâng cao cho phép các nhà phát triển kết hợp các mô hình lại với nhau, vì chúng có thể được sử dụng cho các phương pháp lập trình khác nhau. Ví dụ, JavaScript có thể được sử dụng cho OOP và lập trình chức năng.

Các nhà phát triển đang làm việc với OOP và microservices có thể giải quyết các vấn đề chung về microservices bằng cách áp dụng các nguyên tắc của OOP.

Xem thêm >> Lập trình nhúng là gì? Top các kĩ năng cần thiết cho một kỹ sư nhúng

Những câu hỏi thường gặp về OOP

Những tính chất tốt nhất của OOP là gì, và giải thích tại sao?

Tính đóng gói, tính kế thừa và tính đa hình là ba yếu tố cơ bản của lập trình hướng đối tượng giúp phân biệt nó với các ngôn ngữ không phải OOP. Encapsulation (tính đóng gói) là quá trình tạo ra các mô-đun độc lập kết nối các quá trình xử lý với dữ liệu. Các lớp được tổ chức thành các cấu trúc phân cấp và Inheritance (tính kế thừa) cho phép cấu trúc và các chức năng của một lớp được chuyển xuống cấu trúc phân cấp. Cuối cùng, lập trình hướng đối tượng cho phép tạo ra các quy trình liên quan đến các đối tượng có kiểu precise chưa được biết cho đến khi runtime được gọi là tính đa hình.

Đối tượng trong OOP là gì?

Một trường họp cụ thể của lớp (class instance) được gọi là một đối tượng. Đối tượng trong thế giới thực sẽ là một cái gì đó như bút, máy tính xách tay, điện thoại, túi xách, giường, bàn phím, chuột hoặc cây máy tính. Một thực thể vật lý được gọi là một đối tượng. Trong Java, có nhiều phương thức để tạo các đối tượng, bao gồm từ khóa mới, phương thức newInstance (), phương thức clone (), phương thức factory và deserialization. Một vài ví dụ thực tế của một đối tượng trong OOP là:

Class: Con người, Object: Nam, Nữ

Class: Trái cây, Object: Táo, Chuối, Cam, Xoài, Ổi, v.v.

Các nguyên tắc cơ bản của OOP là gì?

Trả lời: Tính trừu tượng, Tính đóng gói, Tính kế thừa và Tính đa hình là bốn ý tưởng cốt lõi của OOP. Ngoài ra còn có các lớp và đối tượng.

Lập trình hướng đối tượng đơn giản hóa quá trình lập trình cho chúng ta. Nó có nhiều giá trị như khả năng tái sử dụng, độ hiệu quả và duy trì code. Mặc dù ban đầu bạn có thể thấy khó hiểu các khái niệm về OOP, nhưng chúng tôi đảm bảo với bạn rằng thành quả sẽ xứng đáng với những nỗ lực bạn bỏ ra. Hy vọng bài viết này của Hỏi đáp Công nghệ đã giúp đơn giản hóa các khái niệm đó cho bạn, giúp bạn có một câu trả lời chính xác nhất cho câu hỏi OOP là gì.

Các bài viết liên quan

2 thoughts on “OOP là gì? 4 tính chất của lập trình hướng đối tượng”

  1. Pingback: Spring Framework là gì? Các tính năng cốt lõi của nó

  2. Pingback: Kotlin là gì? Giải pháp thay thế tuyệt vời cho Java

Leave a Comment

Email của bạn sẽ không được hiển thị công khai.

Bài viết liên quan