45 lượt xem

SOLID là gì? 5 nguyên tắc của SOLID | Acb-win.com

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

SOLID là gì?

Khi xây dựng một ứng dụng phần mềm, bạn sẽ luôn cần phải chuẩn bị để đối phó với những thay đổi mã hoặc tạo ra các tính năng mới và cũng để bảo trì phần mềm một cách thường xuyên.

Để đảm bảo được điều này, code của bạn phải sạch – gọn gàng, khi sửa chữa, cập nhật phần mềm, bạn sẽ không phải “khổ sở” nhớ lại mình đã làm gì, hay vất vả kiểm soát lớp nào của lớp nào …

Nếu bạn thiết kế mã của bạn không tốt, bạn sẽ “gánh chịu” sau này, vì vậy 5 nguyên tắc RẮN ra đời để giúp bạn thiết kế phần mềm có cấu trúc tốt hơn.

rắn-la-gi
Nguồn: SuccessiveTech

5 nguyên tắc của SOLIDO

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

  • S – Nguyên tắc trách nhiệm đơn lẻ – Nguyên tắc trách nhiệm đơn lẻ
  • O – Nguyên tắc đóng mở – Nguyên tắc đóng mở
  • L – Nguyên tắc thay thế Liskov – Nguyên tắc phân vùng Liskov
  • I – Nguyên tắc phân tách giao diện – Nguyên tắc phân tách các giao diện
  • D – Nguyên tắc nghịch đảo các phụ thuộc – Nguyên tắc nghịch đảo các phụ thuộc

Được Robert C Martin (hay còn gọi là “Uncle Bob”) đề xuất vào năm 2000, SOLID trở nên nổi tiếng với việc phát hành cuốn sách Phát triển phần mềm Agile, Nguyên tắc, Mẫu và Thực hành vào năm 2003.

rắn-la-gi

Tại sao SOLID giúp lập trình hiệu quả?

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

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

Tất nhiên, phần mềm hiếm khi được phát triển độc lập bởi một cá nhân, mà là kết quả của công việc của một nhóm lớn người. Vì vậy, việc áp dụng SOLID để code sạch sẽ, ngăn nắp sẽ tạo được thiện cảm với đồng nghiệp, cũng như làm việc nhóm hiệu quả hơn.

Dễ dàng chỉnh sửa và cập nhật

Khi bạn nhìn vào mã và nhận ra ngay vai trò của từng lớp hoặc vị trí của từng chức năng, bạn sẽ dễ dàng hơn trong việc sửa đổi hoặc cập nhật chương trình phần mềm mà bạn đã viết. Bạn cũng sẽ tiết kiệm thời gian học lại mã của mình và giúp những người khác chữa cháy thêm, họ cũng có thể hiểu ý nghĩa của mã và giúp bạn.

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

Nếu bạn chọn con đường lập trình, bạn chắc chắn sẽ tham gia vào nhiều dự án trong suốt cuộc đời của mình. Sau đó, làm cho mã của bạn gọn gàng và được chú thích rõ ràng trong các mô-đun riêng biệt, bạn có thể mở dự án cũ để sao chép và sử dụng lại. Điều này sẽ giúp bạn tiết kiệm rất nhiều thời gian!

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

QUẢNG CÁO

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

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

Nói một cách đơn giản hơn, Nguyên tắc Trách nhiệm Đơn lẻ là “mỗi người một việc”.

Khi thiết kế phần mềm, người ta nên để mỗi lớp – lớp chỉ có một trách nhiệm / chức năng cho:

  • Khả năng kiểm tra: trường hợp bạn test thì bạn sẽ ít phải suy nghĩ để test lớp đó, vì lớp đó chỉ có 1 hàm xác định.
  • Tạo ít phụ thuộc hơn: Chỉ một hàm cho mỗi lớp sẽ giảm thiểu sự phụ thuộc lẫn nhau giữa các hàm.
  • Tính toán của lớp: học một bài nhỏ, sau đó bạn có thể chuyển sang lớp lớn hơn. Điều này sẽ giúp bạn tổ chức phần mềm của mình hiệu quả hơn.
rắn-la-gi

Ví dụ: bạn tạo nơi lưu trữ sách và các thuộc tính bao gồm: tên, sách, tên tác giả, nội dung và chức năng in của sách 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 trách nhiệm đơn lẻ. Do đó, bạn sẽ cần tách chức năng lưu trữ và chức năng in sách thành 2 lớp khác nhau.

Lớp quản lý sách, bạn có thể tạo một lớp mới như sau:

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

Để tránh sau này, bạn sẽ phải “mệt mỏi” với các bài kiểm tra và sắp xếp thay đổi chức năng.

O – Nguyên tắc đóng mở – Nguyên tắc đóng mở

Thay vào đó, bạn sửa đổi trực tiếp các dòng mã hiện có và tạo ra khả năng lỗi phần mềm. Bạn chỉ cần sử dụng phương thức mở rộng và kế thừa lớp trước đó.

rắn-la-gi

Ví dụ: bạn viết mã một cây đàn guitar có núm chỉnh âm lượng như sau:

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

Bây giờ bạn thấy cây đàn của mình hơi quá bình thường, bạn muốn đốt nó để khiến khán giả hào hứng. Nếu bạn thêm thuộc tính trực tiếp: String flameColor riêng; phía trong Lớp học guitar, Khả năng cao là cây đàn của bạn sẽ bị hư hỏng nặng.

Thay vào đó, bạn chỉ cần mở rộng một lớp học GuitarCoolNgauBungLua kế thừa từ Guitar như thế này để cây đàn của bạn không bị gãy:

public class GuitarCoolNgauBungLua extends Guitar {

 private String flameColor;

}

L – Nguyên tắc thay thế Liskov – 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 lớp A là lớp con / lớp dẫn xuất của lớp B thì lớp A phải có thể thay thế lớp B mà không gây ra sự cố của kế hoạch. .

rắn-la-gi

Tino Group sẽ giải thích dễ hiểu nhất như sau:

Một con vịt giả giống hệt vịt thật. Tuy nhiên, vịt giả cần có pin để “vặt” => bạn không có vịt thật.

Hoặc một ví dụ khác như thế này:

Chúng tôi sẽ đặt ra các điều kiện sau: buổi sáng nhân viên chính thức được tính điểm, lớp checkAttendance () sẽ được thêm vào. Tuy nhiên, người dọn dẹp tạm thời không đăng ký tham dự nhưng chỉ ra Thư ký lớp trở thành nguyên tắc phân vùng Liskov sai.

rắn-la-gi

Cách giải quyết: Bạn có thể tách checkAttendance () trong một lớp khác và chỉ đạo nhân viên ở các phòng ban khác trong lớp checkAttendance () và tham chiếu đến lớp Nhân viên.

I – Nguyên tắc phân tách giao diện – 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 nhiều so với nguyên tắc phân vùng Liskov. Với nguyên tắc phân tách giao diện, bạn chỉ cần chia nhỏ giao diện lớn thành nhiều giao diện nhỏ phù hợp hơn.

rắn-la-gi

Ví dụ:

Bạn là một người nuôi gấu trong vườn thú. Bạn sẽ được lên lịch với các hoạt động sau:

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

Tuy nhiên, chăm sóc gấu, cho ăn và vuốt ve nó là hai công việc riêng biệt, chưa kể việc vuốt ve gấu rất nguy hiểm. Do đó, bạn sẽ cần phải tách trại gấu thành 3 thành phần riêng biệt như sau để phân công người phù hợp.

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

Đối với nhân viên thường xuyên, bạn có thể giao nhiệm vụ tắm rửa và cho gấu ăn. Với dòng mã sau:

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

Còn đối với một công việc nguy hiểm và “điên rồ” hơn, bạn có thể giao phó cho một người có thêm dũng khí như sau:

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

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

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

Ví dụ, khi mua một máy tính xách tay 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 lắp SSD hay HDD, họ chỉ cần phát triển một bo mạch chủ có thể gắn cả hai loại ổ đĩa dựa trên giao diện SATA để cho phép bạn kết nối.

rắn-la-gi

Qua bài viết Tino Group hi vọng các bạn đã hiểu rõ hơn về SOLID là gì và 5 nguyên lý hoạt động của SOLID. Chúc các bạn áp dụng nguyên lý SOLID vào công việc lập trình của mình một cách hiệu quả nhất!

Câu hỏi thường gặp trên SOLID

Các biến và lớp được đặt tên như thế nào?

Bạn chỉ cần đảm bảo rằng tên biến, tên lớp, v.v. không trùng lặp, không trùng lặp với các chức năng, thư viện và tên chức năng khác.

Những cái tên nhắc nhở bạn về cách chúng hoạt động

Nếu đặt tên là a, b, c, d… Điều này chỉ phù hợp khi bạn còn đang học và làm bài tập mẫu trong trường.

Làm thế nào để áp dụng SOLID một cách hiệu quả?

Như đã đề cập trong bài báo và trong nguyên tắc SOLID, nó cũng rõ ràng. Vì vậy, bạn nên bắt đầu bằng cách giữ cho mã của mình sạch sẽ và gọn gàng, trước tiên hãy hiểu và sau đó bất kỳ ai cũng có thể thấy rằng bạn đã trở thành một bậc thầy trong việc áp dụng SOLID!

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

Hiện nay, hầu hết các phần mềm lập trình và IDE đều hỗ trợ việc sử dụng màu sắc để phân biệt các lớp và chức năng một cách rõ ràng và trực quan. Bạn có thể bắt đầu với Notepad ++ cũng là một ý kiến ​​hay!

Nếu bạn đang tìm kiếm một IDE hoàn toàn miễn phí, bạn có thể tải xuống và sử dụng phiên bản Visual Studio dành cho sinh viên / nhà phát triển độc lập miễn phí.

Tôi nên học viết mã ở đâu?

Nếu bạn muốn học lập trình web, bạn có thể học miễn phí tại W3School, Openplanning sẽ giúp bạn học thêm nhiều ngôn ngữ khác. Đối với các ngôn ngữ mới được phát triển, bạn có thể học chúng trên trang web của nhà phát triển.

CÔNG TY TNHH TẬP ĐOÀN TINO

  • Trụ sở chính: L17-11, Lầu 17, Tòa nhà Vincom Center, Số 72 Lê Thánh Tôn, P. Bến Nghé, Q.1, TP.
    VPĐD: 42 Trần Phú, P.4, Q.5, TP.HCM
  • Điện thoại: 0364 333 333
    Tổng đài miễn phí: 1800 6734
  • Email: sales@tino.org
  • Trang web: www.tino.org

READ  Win32 Malware-gen là gì? Cách phòng tránh và tiêu diệt | Acb-win.com