SOLID là gì? 5 nguyên tắc của SOLID

Để công việc lập trình trở nên hiệu quả hơn, một nguyên tắc riêng được thiết lập cho việc lập trình hướng đối tượng – SOLID. Vậy, SOLID là gì? SOLID có những nguyên tắc gì? Vì sao SOLID lại giúp việc lập trình hướng đối tượng trở nên dễ dàng, hiệu quả hơn? Tino Group sẽ giải đáp giúp bạn.

SOLID là gì?

Trong khi kiến thiết xây dựng một ứng dụng ứng dụng, bạn sẽ luôn phải chuẩn bị sẵn sàng đương đầu với việc biến hóa code hoặc kiến thiết xây dựng thêm một vài tính năng mới và cả việc bảo dưỡng ứng dụng theo một cách định kỳ .Để bảo vệ được điều này, code của bạn cần phải ngăn nắp – ngăn nắp, khi bạn sửa chữa thay thế hoặc tăng cấp ứng dụng, bạn sẽ không phải “ đau khổ ” nhớ lại mình đã làm gì, hay loay hoay kiểm tra class nào là của class nào …

Nếu bạn thiết kế code của bạn xấu, bạn sẽ nhận lấy “khổ đau” về sau, vì vậy bộ 5 nguyên tắc SOLID ra đời nhằm giúp bạn có thể thiết kế được một phần mềm có cấu trúc tốt hơn.

solid-la-giNguồn: SuccessiveTech

5 nguyên tắc của SOLID

SOLID là viết tắt của 5 thành phần như sau :

  • S – Single-responsibility Principle – Nguyên tắc trách nhiệm đơn lẻ
  • O – Open-closed Principle – Nguyên tắc đóng mở
  • L – Liskov Substitution Principle – Nguyên tắc phân vùng Liskov
  • I – Interface Segregation Principle – Nguyên tắc phân tách giao diện
  • D – Dependency Inversion Principle – Nguyên tắc đảo ngược phụ thuộc

Được Robert C Martin ( hay còn gọi với cái tên thân thương là “ Uncle Bob ” ) yêu cầu vào năm 2000, SOLID trở nên phổ cập khi phát hành quyển sách Agile Software Development, Principles, Patterns, and Practices vào năm 2003 .solid-la-gi

Vì sao SOLID giúp lập trình trở nên hiệu quả?

Ngay khi bạn đọc 5 nguyên tắc trên, bạn đã hoàn toàn có thể hiểu được mình nên làm gì rồi đúng không ? Và đây là những nguyên do tại sao SOLID giúp bạn lập trình trở nên hiệu suất cao hơn .

Sự rõ ràng và dễ hiểu

Tất nhiên, một ứng dụng rất hiếm khi được tăng trưởng độc lập bởi một cá thể duy nhất, mà đó là tác dụng thao tác của cả một nhóm nhiều người. Vì vậy, vận dụng SOLID để khiến code của bạn trở nên ngăn nắp, ngăn nắp sẽ tạo được tình cảm với đồng nghiệp, cũng như khiến teamwork trở nên hiệu suất cao hơn .

Dễ dàng sửa đổi và nâng cấp

Khi nhìn vào code và nhân ra ngay vai trò của từng class hoặc vị trí của từng hàm, bạn sẽ thuận tiện sửa đổi hoặc tăng cấp chương trình ứng dụng mình đã viết. Bạn cũng sẽ đỡ tốn thời hạn để khám phá lại chính code của mình và giúp những người khác có được bổ trợ để chữa cháy, họ cũng hoàn toàn có thể hiểu code của bạn có ý nghĩa như thế nào và giúp bạn .

Khả năng tái sử dụng

Nếu chọn đi theo con đường lập trình, chắc như đinh trong suốt cuộc sống bạn sẽ tham gia không biết bao nhiêu dự án Bất Động Sản. Vì thế, bạn làm code của bạn trở nên ngăn nắp và có ghi chú rõ ràng thành từng module tách biệt, bạn hoàn toàn có thể mở dự án Bất Động Sản cũ lên copy và sử dụng lại lần nữa. Điều này sẽ khiến thời hạn của bạn được tiết kiệm ngân sách và chi phí rất nhiều đấy !
SOLID là gì? 5 nguyên tắc của SOLID 3
QUẢNG CÁO

Giải thích chi tiết 5 nguyên tắc SOLID

S – Single-responsibility Principle – Nguyên tắc trách nhiệm đơn lẻ

Giải thích một cách đơn thuần hơn, Single-responsibility Principle là “ mỗi người 1 việc ” .Khi phong cách thiết kế ứng dụng, bạn chỉ nên để mỗi lớp – class chỉ có một nghĩa vụ và trách nhiệm / một tính năng nhằm mục đích để :

  • Khả năng kiểm thử: trong trường hợp bạn kiểm thử, bạn sẽ phải suy nghĩ ít hơn để test class, vì class đó chỉ có 1 chức năng xác định duy nhất.
  • Tạo ít mối quan hệ phụ thuộc: chỉ một chức năng cho một class sẽ giảm thiểu các phụ thuộc qua lại lẫn nhau giữa các chức năng.
  • Tính lớp lang: bạn làm một lớp nhỏ, sau đó bạn có thể tìm đến lớp lớn hơn. Việc này sẽ giúp bạn sắp xếp phần mềm của mình hiệu quả hơn.

solid-la-giVí dụ : Bạn tạo ra một nơi để tàng trữ sách và những thuộc tính gồm có : tên, sách, tên tác giả, nội dung và tính năng in sách ra như sau :

public class Book {
 private String name;
 private String author;
 private String text;
 public String replaceWordInText(String word){
 return text.replaceAll(word, text);
 }
 public boolean isWordInText(String word){
 return text.contains(word);
 }
public class Book {
 void printTextToConsole(){
 }
}

Điều này vi phạm nguyên tắc nghĩa vụ và trách nhiệm đơn lẻ. Vì thế, bạn sẽ phải tách công dụng tàng trữ và công dụng in sách ra thành 2 class khác nhau .Lớp giải quyết và xử lý sách bạn hoàn toàn có thể tạo ra class mới như sau :

public class BookPrinter {
 void printTextToConsole(String text){
 }
 void printTextToAnotherMedium(String text){
 }
}

Để tránh việc sau này bạn sẽ phải “ mệt ” với việc kiểm thử và sắp xếp sửa đổi tính năng .

O – Open-closed Principle – Nguyên tắc đóng mở

Thay vì bạn sửa đổi trực tiếp những dòng code hiện có và tạo ra rủi ro tiềm ẩn tiềm ẩn cho lỗi hỏng cả ứng dụng. Bạn chỉ cần sử dụng phương pháp lan rộng ra và thừa kế class trước đó là ổn .solid-la-giVí dụ bạn code ra một cây đàn Guitar có luôn 1 nút vặn âm lượng như sau :

public class Guitar {
 private String make;
 private String model;
 private int volume;
}

Giờ đây, bạn thấy cây đàn Guitar của mình hơi bình thường quá, bạn muốn đốt cháy cây đàn để khán giả của bạn phấn khích hơn. Nếu bạn thêm thẳng thuộc tính: private String flameColor; vào bên trong class Guitar, khả năng cao cây đàn của bạn sẽ bị hỏng thật sự.

Thay vì như thế, bạn chỉ cần mở rộng thêm một class GuitarCoolNgauBungLua kế thừa từ Guitar như sau để cây đàn của bạn không bị hỏng:

public class GuitarCoolNgauBungLua extends Guitar {

 private String flameColor;

}

L – Liskov Substitution Principle – Nguyên tắc phân vùng Liskov

Một trong những nguyên tắc khá phức tạp và khó để hiểu … Nguyên tắc phân vùng Liskov : nếu class A là con / class dẫn xuất của class B, class A phải hoàn toàn có thể thay thế sửa chữa vị trí của class B mà không làm chương trình bị lỗi .solid-la-giTino Group sẽ lý giải dễ hiểu nhất như sau :Một con vịt giả có hình thức bề ngoài giống hệt con vịt thật. Tuy nhiên, con vịt giả cần pin để kêu “ cạp cạp ” => bạn không có một con vịt thật .Hoặc một ví dụ khác như sau :Ta sẽ đặt điều kiện kèm theo như sau : nhân viên cấp dưới chính thức sẽ được điểm danh vào buổi sáng, bạn thêm class checkAttendance ( ). Tuy nhiên, nhân viên cấp dưới lao công tạp vụ trong thời điểm tạm thời không được điểm danh nhưng lại trỏ vào class Employee trở nên sai nguyên tắc phân vùng Liskov .solid-la-giCách xử lý : bạn hoàn toàn có thể tách checkAttendance ( ) ra một lớp khác và trỏ những nhân viên cấp dưới ở những bộ phận khác nằm dưới lớp checkAttendance ( ) và trỏ ngược lên lớp Employee .

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

Nguyên tắc phân tách giao diện dễ hiểu hơn nguyên tắc phân vùng Liskov rất nhiều. Với nguyên tắc phân tách giao diện, bạn chỉ cần phân nhỏ giao diện lớn thành nhiều giao diện nhỏ hơn phù hợp hơn.

solid-la-giVí dụ :Bạn là một người một người nuôi gấu trong sở thú. Bạn sẽ được lập trình với trách nhiệm như sau :

public interface NguoinuoiGau{
 void washTheBear();
 void feedTheBear();
 void petTheBear();
}

Tuy nhiên, việc chăm nom 1 con gấu cho chúng ăn và vuốt ve chúng là 2 việc làm tách biệt nhau, chưa kể, việc vuốt ve gấu là rất nguy khốn. Vì thế, bạn sẽ cần phải tách việc nuôi gấu thành 3 thành phần tách biệt như sau để giao đúng người hơn .

public interface BearCleaner {
 void washTheBear();
}
public interface BearFeeder {
 void feedTheBear();
}
public interface BearPetter {
 void petTheBear();
}

Đối với nhân viên cấp dưới thường thì, bạn hoàn toàn có thể giao trách nhiệm tắm rửa và cho gấu ăn. Bằng dòng code sau :

public class BearCarer implements BearCleaner, BearFeeder {
 public void washTheBear() {
 }
 public void feedTheBear() {
 }
}

Còn việc làm nguy khốn hơn, “ điên hơn ” bạn hoàn toàn có thể gửi gắm cho một người có bản lĩnh hơn như sau :

public class NguoiBanLinh implements BearPetter {
 public void petTheBear() {
 }
}

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

Bạn có thể hiểu nguyên tắc này như sau: 1 thành phần trong một chương trình chỉ nên phụ thuộc vào một giá trị trừu tượng – abstraction chứ không nên phụ thuộc vào một giá trị nào cụ thể cả.

Ví dụ : Khi mua một máy tính đời mới, nhà phát hành bo mạch chủ không nhất thiết phải biết bạn muốn gắn ổ cứng SSD hay HDD, họ chỉ cần tăng trưởng ra một bo mạch chủ hoàn toàn có thể gắn cả 2 loại ổ dựa trên của tiếp xúc SATA để bạn hoàn toàn có thể gắn vào .solid-la-giQua bài viết, Tino Group hy vọng bạn đã hiểu hơn về SOLID là gì cũng như 5 nguyên tắc SOLID. Chúc bạn vận dụng nguyên tắc SOLID vào việc làm lập trình của mình một cách hiệu suất cao nhất !

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

Nên đặt tên biến, class như thế nào?

Bạn chỉ cần bảo vệ rằng những tên biến, tên class … Không bị trùng nhau, không bị trùng với những tên hàm, thư viện và function khác .Đặt tên có tính gợi nhớ về việc chúng có hiệu quả như thế nàoNếu bạn đặt tên theo kiểu a, b, c, d … Điều này chỉ thích hợp khi bạn còn học và làm những bài tập mẫu trong trường học .

Làm sao để áp dụng SOLID hiệu quả?

Như trong bài đã đề cập và chính bản thân nguyên tắc SOLID cũng hướng đến đó chính là rõ ràng. Vì vậy, bạn nên mở màn bằng việc giữ cho code của mình trở nên sạch sẽ và đẹp mắt ngăn nắp, bạn hiểu trước sau đó là ai nhìn cũng hoàn toàn có thể hiểu là bạn đã trở thành bậc thầy vận dụng SOLID rồi đấy !

Tải phần mềm lập trình nào để code hiển thị sinh động hơn?

Hiện tại, hầu hết những ứng dụng lập trình, IDE đều đã tương hỗ sử dụng sắc tố để phân biệt những class, hàm một cách rõ ràng và trực quan. Bạn hoàn toàn có thể mở màn với Notepad + + cũng là một ý hay đấy !Nếu bạn đang tìm một IDE trọn vẹn không lấy phí, bạn hoàn toàn có thể tải và sử dụng Visual Studio không tính tiền phiên bản dành cho lập trình viên độc lập / sinh viên .

Nên học lập trình ở đâu?

Nếu bạn muốn học lập trình web, bạn hoàn toàn có thể học tại W3School trọn vẹn không lấy phí, Openplanning sẽ giúp bạn học nhiều ngôn từ khác hơn nữa. Đối với những ngôn từ mới tăng trưởng gần đây, bạn hoàn toàn có thể học tại ngay chính những website của nhà tăng trưởng ngôn từ lập trình đó .

CÔNG TY CỔ PHẦN TẬP ĐOÀN TINO

  • Trụ sở chính: L17-11, Tầng 17, Tòa nhà Vincom Center, Số 72 Lê Thánh Tôn, Phường Bến Nghé, Quận 1, Thành phố Hồ Chí Minh
    Văn phòng đại diện: 42 Trần Phú, Phường 4, Quận 5, Thành phố Hồ Chí Minh
  • Điện thoại: 0364 333 333
    Tổng đài miễn phí: 1800 6734
  • Email: [email protected]
  • Website: www.tino.org

5/5 – ( 2 bầu chọn )