IT - Lập trình

Nguyên lý SOLID là gì? Cách giải trình SOLID đơn giản nhất

5/5 - (6 bình chọn)

Nếu bạn là một nhà lập trình viên hoặc bạn đang công tác trong ngành lập trình thì hẳn sẽ có ít nhất một lần nghe đến cụm từ nguyên lý SOLID. Lập trình cũng như bất kỳ công việc nào khác, cũng sẽ có các nguyên tắc thực hiện để tối ưu hóa hiệu hiệu suất và giảm thiểu rủi ro ở mức cao nhất. Và SOLID chính là nguyên lý được nhiều nhà lập trình viên áp dụng vào trong công việc của mình. Vậy SOLID đại diện cho điều gì? Hãy cùng Teky khám phá trong bài viết sau đây.

Nguồn gốc của nguyên lý SOLID là gì?

Lập trình hướng đối tượng còn được gọi là Object Oriented Programming (OOP). OOP là phương thức lập trình cho phép lập trình viên sử dụng các code để trừu tượng hóa một đối tượng bất kỳ. Quá trình này sẽ giúp tạo ra các đối tượng nhất định. Đây là một trong những phương thức lập trình được sử dụng phổ biến nhất hiện nay. Nó phù hợp với hầu hết các loại ngôn ngữ lập trình khác nhau.

Nguyên lý SOLID có nguồn gốc như thế nào?
Nguyên lý SOLID có nguồn gốc như thế nào?

Hiệu năng của OOP được quyết định dựa trên 4 yếu tố khác nhau:

  • Tính trừu tượng (abstraction): Bằng việc sử dụng các lớp trừu tượng, người dùng sẽ tạo nên mô hình của các đối tượng trong thế giới thực.
  • Tính đóng gói (Encapsulation): Yếu tố này là để chỉ trường hợp các thực thể của lớp trừu tượng sở hữu những giá trị thuộc tính độc lập.
  • Tính kế thừa (Inheritance): Yếu tố này cho phép các đối tượng được phép kế thừa và mở rộng lẫn nhau.
  • Tính đa hình (Polymorphism): Tùy theo từng loại đối tượng khác nhau, ta có thể thực hiện một quy trình bằng nhiều cách riêng biệt.

Vậy là ta đã nắm được 4 yếu tố cần thiết để một lập trình OOP có thể phát huy hết tác dụng vốn có của nó. Vậy SOLID thì liên quan gì đến OOP? Nguyên tắc SOLID được hiểu như một cẩm nang hướng dẫn bạn sử dụng OOP thật hiệu quả. Tuân thủ theo các nguyên tắc SOLID giúp người dùng phối hợp được 4 tính năng của OOP với nhau thật nhuần nguyễn.

dang-ky-lap-trinh

>>> Xem thêm : Heroku là gì? Phân tích các tính năng và ưu nhược điểm

Khái niệm của nguyên lý SOLID

Nguyên lý SOLID nghĩa là gì? SOLID trong lập trình vốn là bộ 5 nguyên tắc được phát triển bởi 2 tác giả Bob Martin và Michael Feathers. Những hướng dẫn này sẽ giúp lập trình viên tạo ra được những đoạn code dễ đọc, dễ hiểu, dễ maintain. SOLID là viết tắt của 5 cụm từ sau:

  • Single Responsibility Principle (SRP)
  • Open/Closed Principle (OCP)
  • Liskov Substitution Principle (LSP)
  • Interface Segregation Principle (ISP)
  • Dependency Inversion Principle (DIP)

Nguyên tắc trách nhiệm đơn lẻ (Single Responsibility Principle)

Nguyên lý SOLID này cho rằng, mỗi class chỉ nên thực hiện một trách nhiệm duy nhất. Người dùng không nên cho một class kiêm nhiệm nhiều hoạt động cùng lúc. Thứ nhất, việc phải chia thời gian và công sức cho nhiều công việc sẽ làm giảm hiệu suất hoạt động. Hơn nữa nó còn mất thời gian khi phải chuyển dịch từ công việc này sang công việc khác. Ngoài ra, việc chạy đồng thời nhiều quy trình một lúc cũng rất dễ xảy ra lỗi.

Nguyên tắc trách nhiệm đơn lẻ
Nguyên tắc trách nhiệm đơn lẻ

Ví dụ, bạn có một lớp A. Bạn cho lớp A chạy cả công việc X và công việc Y. Có thể thời gian đầu bạn sẽ thấy cách làm này tiết kiệm thời gian tạo các lớp và gán đối tượng hơn. Tuy nhiên, khi số lượng công việc tăng lên, liệu rằng bạn có tiếp tục cho lớp A chạy thêm công việc Z, W, J… xuất hiện phía sau hay không? Mỗi lần có thêm một công việc, lập trình viên sẽ phải vào lại lớp A và chỉnh sửa toàn bộ hệ thống. Như vậy rất mất thời gian và còn dễ xảy ra sai sót trong quá trình sửa chữa. Chưa kể đến việc khi một trong các công việc cần tạm dừng, người dùng cũng phải lật lại toàn bộ hệ thống của A để làm lại.

>>> Xem thêm : Con trỏ trong C là gì? Giới thiệu khái niệm và nội dung cơ bản

Vậy nên, các tốt nhất để hạn chế toàn bộ những rủi ro như vậy là cho mỗi lớp một chức năng riêng biệt. Không nên gộp nhiều hoạt động vào cùng một lớp.

Nguyên tắc đóng mở (The Open-Closed Principle)

Nguyên tắc đóng mở được dùng để mô tả hoạt động kế thừa của các lớp. Ví dụ, với một nhân viên công tác tại công ty, anh ta đang làm việc rất tốt, vì thế ngoài lương cứng anh ta sẽ có thêm một khoản tiền thưởng. Với trường hợp như vậy, lựa chọn của bạn là lập thêm một lớp mới cho khoản thưởng (dựa trên nguyên tắc đơn lẻ phía trên) đúng hay không? Điều này khả thi nhưng không hiệu quả. Nếu như anh ta có thêm một khoản thưởng nữa thì sao, khi ấy chúng ta lại phải quay lại và sửa lớp đại diện cho tiền thưởng ư? Chắc chắn là không nên làm như vậy. Lập trình hạn chế nhất là chỉnh sửa bởi nó đem lại rủi ro về sai phạm là rất cao.

Vậy nên trong trường hợp này, bạn nên sử dụng một lớp kế thừa. Nguyên lý SOLID này cho phép đóng lớp tiền lương và mở lớp tiền thường. Tức là lớp chính tiền lương cố định sẽ không bị chịu bất kỳ ảnh hưởng nào cả. Còn lớp thưởng sẽ nhận được sự kế thừa của lớp lương để bổ sung các thông tin cần thiết. Quy trình này kéo dài đến vô hạn các lớp sau. Đây là phương án rất an toàn và thiện thiện, vừa giúp phát triển code mới mà lại không lo làm hỏng code cũ.

SOLID Principles là gì?
SOLID Principles là gì?

Nguyên tắc phân vùng Liskov (The Liskov Substitution Principle)

Phân vùng Liskov là một trong những phần quan trọng của nguyên lý SOLID. Nguyên tắc này giúp giải quyết các lỗi thường xảy ra trong lập trình.

Ví dụ: Có một đoạn mã mô tả những loài chim biết bay. Khi gặp một loài chim không biết bay như chim cánh cụt, nó sẽ được gắn với NoFlyException. Tuy nhiên, nếu chim cánh cụt lại tiếp tục xuất hiện ở vòng lặp main, chương trình sẽ tự động quăng Exception. Đó chính là bản chất của nguyên tắc phân vùng.

Để giải quyết điều này, ta cần phải tách lớp chim cánh cụt ra một interface riêng. Nguyên tắc này xuất hiện là để nhắc nhở lập trình viên chú ý đến tính sai phạm của nội dung các đoạn mã lập trình. Nếu không khi để đến lúc hoàn thành mới phát hiện ra lỗi thì sửa lại rất khó khăn và mất thời gian.

dang-ky-lap-trinh-teky1

>>> Xem thêm : Webhook là gì? Những lưu ý khi sử dụng Webhook cho người mới

Nguyên tắc phân tách giao diện (Interface Segregation Principle)

Trường hợp thực tế của nguyên tắc này như sau: Bạn sở hữu một trung tâm cung cấp các gói du lịch bao gồm những sản phẩm như: gói 1, gói 2, gói 3… Các khách hàng cùng sử dụng một gói sẽ được cho vào một interface chung. Thời gian ban đầu, bạn thấy cách quản lý này rất hợp lý rồi. Tuy nhiên, bỗng có những khách hàng muốn sử dụng một gói bao gồm một vài dịch vụ trong gói 1 cùng một số dịch vụ khác trong gói 2. Thế là bỗng dưng có những gói mới được phát sinh. Càng ngày có càng nhiều khách hàng yêu cầu gói riêng như vậy. Nếu ta cứ viết chung vào trong interface gói du lịch như vậy thì sẽ phải implement nhiều hàm không cần thiết.

Ta sẽ giải quyết trường hợp này bằng nguyên tắc phân tách giao diện. Hãy tách các dịch vụ thành các interface cụ thể khác nhau. Khi đó, khách hàng yêu cầu dịch vụ nào, ta gộp dịch vụ đó thành một gói mới cho khách. Nguyên lý SOLID này giúp bạn dễ dàng mở rộng quy mô một cách đơn giản.

Áp dụng SOLID để lập trình hiệu quả
Áp dụng SOLID để lập trình hiệu quả

Nguyên tắc đảo ngược phụ thuộc (Dependency Inversion Principle)

Nội dung của nguyên lý SOLID này nói về việc các thành phần cụ thể nên phụ thuộc vào các thành phần trừu tượng. Lý do là vì những thành phần trừu tượng thường ít bị thay đổi. Ngược lại, các thành phần cụ thể tuy khác nhau nhưng luôn mang một đặc tính chung để cấu thành thành phần trừu tượng. Việc giữ tính phụ thuộc này giúp chương trình thích ứng tốt với các biến đổi liên tục.

Kết luận về nguyên lý SOLID

Với bài giải thích vừa rồi của Teky, hẳn bạn đọc đã hiểu rõ 5 nguyên lý SOLID dành cho OOP. Tuy nhiên hiểu là một chuyện mà vận dụng nhuần nhuyễn được lại là chuyện khác. Lời khuyên của chúng tôi là hãy ghi nhớ thật rõ ràng và thường xuyên áp dụng các nguyên tắc này vào trong công việc của bạn. Chúc bạn sớm ngày chinh phục được những nguyên lý SOLID!

Học viện công nghệ Teky là nơi học lập trình hàng đầu Việt Nam

TEKY là Học viện sáng tạo công nghệ với chương trình giảng dạy STEAM (Science – Technology – Engineering – Art – Mathematics) theo chuẩn Mỹ đầu tiên tại Việt Nam dành cho trẻ em từ 4 đến 18 tuổi.

Được thành lập vào tháng 6 năm 2016, TEKY quyết tâm thực hiện sứ mệnh mang đến cho thế hệ trẻ Việt Nam kiến thức toàn diện về STEAM, đặc biệt là các tư duy công nghệ, khoa học máy tính và kỹ năng thế kỷ 21 – 4Cs (Critical Thinking: Tư duy phản biện – Communication: Giao tiếp – Creativity: Sáng tạo – Collaboration: Làm việc nhóm).

Trải nghiệm học lập trình miễn phí
Trải nghiệm học lập trình miễn phí

Đây là chương trình không chỉ trang bị kiến thức lập trình mà còn rèn luyện nhóm kỹ năng 4Cs. Trẻ sẽ được:

  •  Học tư duy phản biện thông qua việc phân tích các vấn đề.
  •  Học tính sáng tạo tư duy Logic thông qua việc lắp đặt và lập trình robot th ông qua các mô hình Lego Mindstorm, app trò chơi. Giúp con học giỏi môn Toán trên lớp
  •  Kỹ năng hợp tác thông qua các trò chơi team-building, các dự án nhóm trên lớp.
  •  Phát huy khả năng giao tiếp hiệu quả bằng nhiều bài tập và hoạt động hấp dẫn.

Các bộ môn giảng dạy tại Teky gồm: Lập trình và phát triển ứng dụng, lập trình game, lập trình web với python  Lập trình Scratch Robotics Engineering, Công nghệ 3D và MultiMedia. Chúng tôi tin rằng trẻ em Việt Nam có cơ hội phát triển mạnh mẽ trong một nền kinh tế số và cần được trang bị sẵn sàng để trở thành những doanh nhân công nghệ trong tương lai.

Liên hệ ngay học viện công nghệ sáng tạo TEKY để được tư vấn khóa học:

  • Cam kêt 7 tuổi có thể lập trình
  • Top 10 dự án giáo dục có tầm ảnh hưởng nhất Đông Nam Á 2017 & 2018
  • Top 3 Dự án xuất sắc nhất, NextGen – Thụy Sĩ
  •  Hotline Hà Nội: 024-7109-6668 | 0975-241-015
  •  Hotline Hồ Chí Minh: 028-7109 9948 | 097-900-8642

Website https://teky.edu.vn | Email: support@teky.edu.vn |

Những bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Back to top button
Nội dung

 

TRẢI NGHIỆM CÔNG NGHỆ

 

Your message has been successfully sent

Unable to send.