Sự khác biệt giữa sự gắn kết và khớp nối


486

Sự khác biệt giữa sự gắn kết và khớp nối là gì?

Làm thế nào có thể ghép và gắn kết dẫn đến thiết kế phần mềm tốt hay kém?

Một số ví dụ phác thảo sự khác biệt giữa hai và tác động của chúng đến chất lượng mã tổng thể là gì?



3
Tôi muốn chỉ ra bài viết này: Phát triển phần mềm RẮN, từng bước một . Grz, Kris.
Kris van der Mast

4
Đây là bài viết mới nhất về chủ đề này
janisz

Câu trả lời:


703

Sự gắn kết đề cập đến những gì lớp (hoặc mô-đun) có thể làm. Sự gắn kết thấp sẽ có nghĩa là lớp học thực hiện rất nhiều hành động - nó rộng lớn, không tập trung vào những gì nó nên làm. Sự gắn kết cao có nghĩa là lớp tập trung vào những gì nó nên làm, tức là chỉ các phương thức liên quan đến ý định của lớp.

Ví dụ về độ kết dính thấp:

-------------------
| Staff           |
-------------------
| checkEmail()    |
| sendEmail()     |
| emailValidate() |
| PrintLetter()   |
-------------------

Ví dụ về độ kết dính cao:

----------------------------
| Staff                   |
----------------------------
| -salary                 |
| -emailAddr              |
----------------------------
| setSalary(newSalary)    |
| getSalary()             |
| setEmailAddr(newEmail)  |
| getEmailAddr()          |
----------------------------

Đối với khớp nối , nó đề cập đến mức độ liên quan hoặc phụ thuộc của hai lớp / mô-đun đối với nhau. Đối với các lớp kết hợp thấp, việc thay đổi thứ gì đó chính trong một lớp sẽ không ảnh hưởng đến lớp khác. Khớp nối cao sẽ gây khó khăn cho việc thay đổi và duy trì mã của bạn; vì các lớp được liên kết chặt chẽ với nhau, nên việc thay đổi có thể yêu cầu cải tạo toàn bộ hệ thống.

Thiết kế phần mềm tốt có độ gắn kết caokhớp nối thấp .


12
Tôi không thấy cách loại bỏ một vài phương thức và thêm một vài phương pháp khác làm tăng sự gắn kết. Ai đó có thể giúp đỡ ở đây không?
Saket Jain

3
@SaketJain không chỉ xóa một số phương thức và thêm một số phương thức khác. đó là cách các phương thức liên quan đến mục đích của lớp (nếu lời giải thích đó rõ ràng hơn).
mauris

4
ví dụ về sự gắn kết thấp ở phía trên trông khá tốt, tôi nghĩ bạn vô tình có ý nói "cohession cao"
tái hiện

37
@SaketJain Lớp nhân viên không phải là nơi chúng tôi kiểm tra, gửi hoặc xác thực email. Các chức năng đó nên đi vào bên trong một lớp Email giả định, đó là lý do đó là sự gắn kết thấp. Trong ví dụ thứ hai, lớp Nhân viên chỉ chứa thông tin thích hợp để cài đặt và nhận dữ liệu liên quan đến Nhân viên. Họ không thực hiện các hành động nên được quản lý bởi một lớp khác.
Antonio Pantano

3
@JonathanC các ví dụ không cần phải chứng minh sự khác biệt (như trong một bằng chứng toán học) vẫn là một ví dụ. Hãy trả lời hoặc bình luận bất kỳ ví dụ nào bạn cảm thấy hữu ích hơn. Các hàm set& getminh họa chức năng cụ thể hơn cho bối cảnh "Nhân viên" - độ đặc hiệu cao hơn cho ví dụ đó về độ gắn kết cao hơn.
cellepo

81

Sự gắn kết là dấu hiệu của mối quan hệ trong một mô-đun.

Khớp nối là dấu hiệu của mối quan hệ giữa các mô-đun.

nhập mô tả hình ảnh ở đây

Sự gắn kết

  • Sự gắn kết là dấu hiệu của mối quan hệ trong mô-đun.
  • Sự gắn kết cho thấy sức mạnh chức năng tương đối của mô-đun.
  • Sự gắn kết là một mức độ (chất lượng) mà một thành phần / mô-đun tập trung vào điều duy nhất.
  • Trong khi thiết kế, bạn nên cố gắng đạt được sự gắn kết cao, tức là một thành phần / mô đun gắn kết tập trung vào một nhiệm vụ duy nhất (nghĩa là một người có đầu óc) với rất ít sự tương tác với các mô-đun khác của hệ thống.
  • Ví dụ, sự gắn kết là loại mở rộng tự nhiên của ẩn dữ liệu, lớp có tất cả các thành viên hiển thị với một gói có khả năng hiển thị mặc định. Sự gắn kết là Intra - Khái niệm mô-đun.

Khớp nối

  • Khớp nối là dấu hiệu của mối quan hệ giữa các mô-đun.
  • Khớp nối cho thấy sự phụ thuộc tương đối / phụ thuộc lẫn nhau giữa các mô-đun.
  • Khớp nối là một mức độ mà một thành phần / mô-đun được kết nối với các mô-đun khác.
  • Trong khi thiết kế, bạn nên cố gắng cho khớp nối thấp, tức là sự phụ thuộc giữa các mô-đun sẽ ít hơn
  • Tạo các trường riêng, phương thức riêng và các lớp không công khai cung cấp khớp nối lỏng lẻo.
  • Khớp nối là khái niệm Inter -Module.

kiểm tra liên kết này


77

Sự gắn kết cao trong các mô-đun và khớp nối thấp giữa các mô-đun thường được coi là có liên quan đến chất lượng cao trong các ngôn ngữ lập trình OO.

Ví dụ, mã bên trong mỗi lớp Java phải có sự gắn kết bên trong cao, nhưng phải được ghép một cách lỏng lẻo nhất có thể với mã trong các lớp Java khác.

Chương 3 của Xây dựng phần mềm hướng đối tượng của Meyer (ấn bản 2) là một mô tả tuyệt vời về những vấn đề này.


3
Các khái niệm không thực sự giới hạn trong lập trình OO. Nếu có bất cứ điều gì, tôi sẽ đề nghị rằng một mục tiêu của các ngôn ngữ OO là hướng dẫn lập trình viên hướng tới các mục tiêu của sự gắn kết cao / khớp nối thấp.
Hutch

57

Sự gắn kết là một chỉ dẫn về mức độ liên quan và tập trung vào trách nhiệm của một yếu tố phần mềm.

Khớp nối đề cập đến mức độ mạnh mẽ của một yếu tố phần mềm được kết nối với các yếu tố khác.

Phần tử phần mềm có thể là lớp, gói, thành phần, hệ thống con hoặc hệ thống. Và trong khi thiết kế các hệ thống, nên có các yếu tố phần mềm có độ gắn kết cao và hỗ trợ khớp nối Thấp .

Sự gắn kết thấp dẫn đến các lớp nguyên khối khó duy trì, hiểu và làm giảm khả năng sử dụng lại. Tương tự Kết quả khớp nối cao trong các lớp được liên kết chặt chẽ và các thay đổi có xu hướng không cục bộ, khó thay đổi và giảm việc sử dụng lại.

Chúng ta có thể lấy một kịch bản giả thuyết trong đó chúng ta đang thiết kế một màn hình điển hình có thể ConnectionPoolvới các yêu cầu sau. Lưu ý rằng, nó có thể trông quá nhiều đối với một lớp đơn giản như thế ConnectionPoolnhưng mục đích cơ bản chỉ là thể hiện tính liên kết thấpđộ gắn kết cao với một số ví dụ đơn giản và tôi nghĩ sẽ giúp ích.

  1. hỗ trợ nhận kết nối
  2. phát hành một kết nối
  3. lấy số liệu thống kê về kết nối và số lượng sử dụng
  4. lấy số liệu thống kê về kết nối và thời gian
  5. Lưu trữ thông tin truy xuất kết nối và phát hành thông tin vào cơ sở dữ liệu để báo cáo sau.

Với sự gắn kết thấp, chúng tôi có thể thiết kế một ConnectionPoollớp bằng cách nhồi mạnh tất cả các chức năng / trách nhiệm này vào một lớp như dưới đây. Chúng ta có thể thấy rằng lớp đơn này chịu trách nhiệm quản lý kết nối, tương tác với cơ sở dữ liệu cũng như duy trì số liệu thống kê kết nối.

Hồ bơi kết nối thấp

Với sự gắn kết cao, chúng tôi có thể phân công các trách nhiệm này trên các lớp và làm cho nó dễ bảo trì và tái sử dụng hơn.

Hồ bơi kết nối cao

Để chứng minh khớp nối Thấp, chúng tôi sẽ tiếp tục với ConnectionPoolsơ đồ gắn kết cao ở trên. Nếu chúng ta nhìn vào sơ đồ trên mặc dù nó hỗ trợ sự gắn kết cao, thì ConnectionPoolnó được kết hợp chặt chẽ với ConnectionStatisticslớp và PersistentStorenó tương tác trực tiếp với chúng. Thay vào đó để giảm sự ghép nối, chúng tôi có thể giới thiệu một ConnectionListenergiao diện và để hai lớp này thực hiện giao diện và để chúng đăng ký với ConnectionPoollớp. Và ý ConnectionPoolchí sẽ lặp lại thông qua những người nghe này và thông báo cho họ về các sự kiện kết nối và phát hành và cho phép ít kết nối hơn.

Kết nối khớp nối thấpPoolPool

Lưu ý / Lời hoặc Chú ý: Đối với kịch bản đơn giản này, nó có thể trông giống như quá mức nhưng nếu chúng ta tưởng tượng ra một kịch bản thời gian thực, nơi ứng dụng của chúng ta cần tương tác với nhiều dịch vụ của bên thứ ba để hoàn tất giao dịch: Ghép trực tiếp mã của chúng tôi với các dịch vụ của bên thứ ba sẽ có nghĩa là bất kỳ thay đổi nào trong dịch vụ của bên thứ ba có thể dẫn đến thay đổi mã của chúng tôi ở nhiều nơi, thay vào đó chúng tôi có thể Facadetương tác với nhiều dịch vụ này trong nội bộ và mọi thay đổi đối với dịch vụ trở thành cục bộ đối với Facadevà thực thi khớp nối thấp với bên thứ ba dịch vụ.


3
Câu trả lời tuyệt vời! Nếu có thể, bạn có thể sử dụng một số ví dụ khác? Kết nối Pooling có thể không rõ ràng với mọi người. Bất kể, nó thực sự giúp tôi. Vì vậy, cảm ơn!
Saket Jain

Làm thế nào để sử dụng Giao diện ConnectionListener giúp giảm khớp nối? Bạn có thể cung cấp một ví dụ dễ hiểu hơn không.
abhishek gupta

1
@abhishekgupta Trong ví dụ này, bạn có thể nhận thấy rằng chúng tôi đã sử dụng mô hình quan sát để đạt được khớp nối thấp / lỏng. Vượt qua điều này sẽ giúp làm thế nào để Observer tạo ra thiết kế ghép lỏng lẻo?
Madhusudana Reddy Sunnapu

33

Tăng sự gắn kết và giảm khớp nối dẫn đến thiết kế phần mềm tốt.

Sự gắn kết phân vùng chức năng của bạn sao cho ngắn gọn và gần nhất với dữ liệu liên quan đến nó, trong khi tách riêng đảm bảo rằng việc thực hiện chức năng được tách biệt với phần còn lại của hệ thống.

Decoupling cho phép bạn thay đổi việc thực hiện mà không ảnh hưởng đến các phần khác của phần mềm.

Sự gắn kết đảm bảo rằng việc thực hiện cụ thể hơn đối với chức năng và đồng thời dễ bảo trì hơn.

Phương pháp hiệu quả nhất để giảm khớp nối và tăng sự gắn kết là thiết kế theo giao diện .

Đó là các đối tượng chức năng chính chỉ nên 'biết' nhau thông qua (các) giao diện mà chúng thực hiện. Việc thực hiện một giao diện giới thiệu sự gắn kết là kết quả tự nhiên.

Mặc dù không thực tế trong một số kịch bản, nó nên là một mục tiêu thiết kế để thực hiện.

Ví dụ (rất sơ sài):

public interface IStackoverFlowQuestion
      void SetAnswered(IUserProfile user);
      void VoteUp(IUserProfile user);
      void VoteDown(IUserProfile user);
}

public class NormalQuestion implements IStackoverflowQuestion {
      protected Integer vote_ = new Integer(0);
      protected IUserProfile user_ = null;
      protected IUserProfile answered_ = null;

      public void VoteUp(IUserProfile user) {
           vote_++;
           // code to ... add to user profile
      }

      public void VoteDown(IUserProfile user) {
          decrement and update profile
      }

      public SetAnswered(IUserProfile answer) {
           answered_ = answer
           // update u
      }
}

public class CommunityWikiQuestion implements IStackoverflowQuestion {
     public void VoteUp(IUserProfile user) { // do not update profile }
     public void VoteDown(IUserProfile user) { // do not update profile }
     public void SetAnswered(IUserProfile user) { // do not update profile }
}

Một số nơi khác trong cơ sở mã của bạn, bạn có thể có một mô-đun xử lý các câu hỏi bất kể chúng là gì:

public class OtherModuleProcessor {
    public void Process(List<IStackoverflowQuestion> questions) {
       ... process each question.
    }
}

28

giải thích tốt nhất về sự gắn kết đến từ Bộ luật sạch của chú Bob:

Các lớp nên có một số lượng nhỏ các biến thể hiện. Mỗi phương thức của một lớp nên thao tác một hoặc nhiều biến đó. Nói chung, càng nhiều biến một phương thức thao tác thì phương thức đó càng gắn kết với lớp của nó . Một lớp trong đó mỗi biến được sử dụng bởi mỗi phương thức được gắn kết tối đa.

Nói chung, không thể tạo ra các lớp gắn kết tối đa như vậy; mặt khác, chúng tôi muốn sự gắn kết cao . Khi độ gắn kết cao, điều đó có nghĩa là các phương thức và biến của lớp là đồng phụ thuộc và liên kết với nhau như một tổng thể logic.

Chiến lược giữ các hàm nhỏ và giữ danh sách tham số ngắn đôi khi có thể dẫn đến sự tăng sinh của các biến thể hiện được sử dụng bởi một tập hợp con các phương thức. Khi điều này xảy ra, điều đó hầu như luôn có nghĩa là có ít nhất một lớp khác đang cố gắng thoát khỏi lớp lớn hơn. Bạn nên cố gắng tách các biến và phương thức thành hai hoặc nhiều lớp sao cho các lớp mới gắn kết hơn.


Tôi đồng ý đây có lẽ là lời giải thích tốt nhất, đây là điều tôi thích ở chú Bob, rằng chú có thể giải thích ý nghĩa thực tế trong một vài cụm từ. Biết định nghĩa này, bạn có thể thấy ngay những gì nên làm với lớp đã cho để tăng sự gắn kết của nó.
Pawel Dubiel

13

đơn giản, Sự gắn kết đại diện cho mức độ mà một phần của cơ sở mã tạo thành một đơn vị nguyên tử, đơn lẻ. Mặt khác, khớp nối thể hiện mức độ mà một đơn vị độc lập với các đơn vị khác. Nói cách khác, đó là số lượng kết nối giữa hai hoặc nhiều đơn vị. Số càng ít, khớp nối càng thấp.

Về bản chất, sự gắn kết cao có nghĩa là giữ các bộ phận của một cơ sở mã có liên quan với nhau ở một nơi duy nhất. Khớp nối thấp, đồng thời, là về việc tách các phần không liên quan của cơ sở mã càng nhiều càng tốt.

Các loại mã từ quan điểm gắn kết và khớp nối:

Lý tưởng là mã theo hướng dẫn. Nó được liên kết lỏng lẻo và gắn kết cao. Chúng ta có thể minh họa mã như vậy với hình ảnh này:nhập mô tả hình ảnh ở đây

God Object là kết quả của việc giới thiệu sự gắn kết cao và khớp nối cao. Nó là một mô hình chống và về cơ bản là viết tắt của một đoạn mã duy nhất thực hiện tất cả công việc cùng một lúc: lựa chọn kém diễn ra khi ranh giới giữa các lớp hoặc mô-đun khác nhau được chọn kémnhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Phá hủy phá hủy là một trong những thú vị nhất. Đôi khi nó xảy ra khi một lập trình viên cố gắng tách rời một cơ sở mã nhiều đến mức mã hoàn toàn mất trọng tâm:nhập mô tả hình ảnh ở đây

đọc thêm ở đây


1
Bài viết tuyệt vời và các minh họa! Nếu tôi có thể đề xuất một cải tiến cho chỉ một suy nghĩ, tôi thích cách 'người được chọn kém' giữ các nhóm thành phần với ngữ nghĩa không liên quan trong các bầy nhỏ, nhưng tôi nghĩ rằng chúng nên có nhiều mũi tên rõ ràng hơn giữa chúng. Xét cho cùng, ngay cả trên các biểu đồ 4 hình vuông của bạn, đây là biểu đồ rơi vào phạm vi phía trên của trục 'Khớp nối'.
Slawomir Brzezinski

1
Tôi cũng sẽ nói rằng 'được chọn kém' nên có ít mũi tên bên trong mỗi bầy. Sử dụng ví dụ 'cấu trúc thư mục' từ bài viết của bạn, mà bạn phân loại là kho lưu trữ hoặc nhà máy 'được chọn kém' chắc chắn sẽ không nói chuyện với nhau.
Slawomir Brzezinski

CẬP NHẬT: Tôi nêu ra những gợi ý này cho tác giả ban đầu của hình ảnh và tác giả đã đồng ý với họ .
Slawomir Brzezinski

11

Sự gắn kết trong công nghệ phần mềm là mức độ mà các yếu tố của một mô-đun nhất định thuộc về nhau. Do đó, đây là thước đo mức độ liên quan mạnh mẽ của từng phần chức năng được biểu thị bằng mã nguồn của mô-đun phần mềm.

Ghép nối trong các từ đơn giản, là bao nhiêu một thành phần (một lần nữa, hãy tưởng tượng một lớp, mặc dù không nhất thiết) biết về hoạt động bên trong hoặc các yếu tố bên trong của một thành phần khác, tức là nó có bao nhiêu kiến ​​thức về thành phần kia.

Tôi đã viết một bài đăng trên blog về điều này , nếu bạn muốn đọc chi tiết hơn một chút với các ví dụ và bản vẽ. Tôi nghĩ rằng nó trả lời hầu hết các câu hỏi của bạn.


4

nhập mô tả hình ảnh ở đây

sự gắn kết đề cập đến tất cả về cách một lớp duy nhất được thiết kế. Sự gắn kết là nguyên tắc Hướng đối tượng liên quan chặt chẽ nhất với việc đảm bảo rằng một lớp được thiết kế với một mục đích duy nhất, tập trung tốt. Một lớp càng tập trung thì sự gắn kết của lớp đó càng nhiều. Ưu điểm của sự gắn kết cao là các lớp như vậy dễ duy trì hơn nhiều (và ít thay đổi thường xuyên hơn) so với các lớp có độ gắn kết thấp. Một lợi ích khác của sự gắn kết cao là các lớp có mục đích tập trung tốt có xu hướng tái sử dụng nhiều hơn các lớp khác.

Trong hình ảnh trên, chúng ta có thể thấy rằng trong sự gắn kết thấp, chỉ có một lớp chịu trách nhiệm thực hiện nhiều công việc không phổ biến làm giảm cơ hội sử dụng lại và bảo trì. Nhưng trong sự gắn kết cao, có một lớp riêng cho tất cả các công việc để thực hiện một công việc cụ thể, dẫn đến khả năng sử dụng và bảo trì tốt hơn.


2

Sự gắn kết (gắn kết): Co có nghĩa là cùng nhau , hesion mà phương tiện để thanh . Hệ thống dính các hạt của các chất khác nhau.

Ví dụ thực tế: img Courtesy
nhập mô tả hình ảnh ở đây

Toàn bộ là lớn hơn Tổng của các bộ phận -Aristotle.

  • Sự gắn kết là một kiểu đo lường thông thường và thường được mô tả là sự gắn kết cao, hay sự gắn kết thấp. Các mô-đun có độ gắn kết cao có xu hướng thích hợp hơn, bởi vì độ gắn kết cao có liên quan đến một số đặc điểm mong muốn của phần mềm bao gồm độ bền, độ tin cậy, khả năng sử dụng lại và dễ hiểu. Ngược lại, sự gắn kết thấp có liên quan đến các đặc điểm không mong muốn như khó duy trì, kiểm tra, tái sử dụng hoặc thậm chí hiểu. wiki

  • Khớp nối thường tương phản với sự gắn kết . Khớp nối thấp thường tương quan với sự gắn kết cao, và ngược lại. Khớp nối thấp thường là dấu hiệu của một hệ thống máy tính có cấu trúc tốt và thiết kế tốt, và khi kết hợp với sự gắn kết cao, hỗ trợ các mục tiêu chung về khả năng đọc và bảo trì cao. wiki


1

Tôi nghĩ rằng sự khác biệt có thể được đặt ra như sau:

  • Sự gắn kết đại diện cho mức độ mà một phần của cơ sở mã tạo thành một đơn vị nguyên tử, đơn lẻ.
  • Khớp nối thể hiện mức độ mà một đơn vị độc lập với các đơn vị khác.
  • Không thể lưu trữ tách rời hoàn toàn mà không làm hỏng sự gắn kết và ngược lại.

Trong bài viết trên blog này tôi viết về nó chi tiết hơn.


1

Sự gắn kết là một dấu hiệu cho thấy sức mạnh chức năng tương đối của một mô-đun.

  • Một mô-đun gắn kết thực hiện một nhiệm vụ duy nhất, yêu cầu ít tương tác với các thành phần khác trong các phần khác của chương trình. Nói một cách đơn giản, một mô-đun gắn kết nên (lý tưởng) chỉ làm một việc.
  • View Quan điểm thông thường:

    tinh thần duy nhất của người Viking

  • ViewOO xem:

    Cohesion ngụ ý rằng một thành phần hoặc lớp chỉ gói gọn các thuộc tính và hoạt động có liên quan chặt chẽ với nhau và với chính lớp hoặc thành phần đó

  • Những sự gắn kết

    Chức năng

    Layer

    Truyền thông

    Số lượng

    Đặc điểm

    Temporal

    Tính linh hoạt

Khớp nối là một dấu hiệu của sự phụ thuộc lẫn nhau tương đối giữa các mô-đun.

  • Khớp nối phụ thuộc vào độ phức tạp của giao diện giữa các mô-đun, điểm mà tại đó mục nhập hoặc tham chiếu được thực hiện cho mô-đun và dữ liệu nào đi qua giao diện.

  • Chế độ xem thông thường: Mức độ mà một thành phần được kết nối với các thành phần khác và với thế giới bên ngoài

  • Chế độ xem OO: thước đo định tính mức độ mà các lớp được kết nối với nhau

  • Mức độ khớp nối

    Nội dung

    Common

    Kiểm soát

    Stamp

    AtData

    Call Gọi điện thoại

    Sử dụng loại

    Loại trừ hoặc nhập khẩu

    # Vĩnh cửu


1

Khớp nối = tương tác / mối quan hệ giữa hai mô-đun ... Sự gắn kết = tương tác giữa hai yếu tố trong một mô-đun.

Một phần mềm bao gồm nhiều mô-đun. Module bao gồm các yếu tố. Coi một mô-đun là một chương trình. Một chức năng trong một chương trình là một yếu tố.

Trong thời gian chạy, đầu ra của một chương trình được sử dụng làm đầu vào cho một chương trình khác. Điều này được gọi là mô-đun để tương tác mô-đun hoặc quá trình để xử lý giao tiếp. Điều này cũng được gọi là Khớp nối.

Trong một chương trình duy nhất, đầu ra của một chức năng được truyền cho một chức năng khác. Điều này được gọi là tương tác của các yếu tố trong một mô-đun. Điều này cũng được gọi là sự gắn kết.

Thí dụ:

Khớp nối = giao tiếp giữa 2 gia đình khác nhau ... Sự gắn kết = giao tiếp giữa cha và mẹ trong một gia đình.


1
Vậy làm thế nào để bạn giải thích chúng trong bối cảnh ảnh hưởng của chúng đối với một phần mềm?
Itban Saeed

Một phần mềm bao gồm nhiều mô-đun. Module bao gồm các yếu tố. Coi một mô-đun là một chương trình. Một chức năng trong một chương trình là một yếu tố.
Dipankar Nalui

1

Nói một cách đơn giản, sự gắn kết có nghĩa là một lớp nên đại diện cho một khái niệm duy nhất.

Giao diện chung của một lớp được gắn kết nếu tất cả các tính năng của lớp có liên quan đến khái niệm mà lớp đại diện. Ví dụ, thay vì có lớp CashRegister, việc có sự gắn kết của CashRegister và Coin làm cho nó thành 2 lớp - lớp CashRegister và Coin.

Trong khớp nối , một lớp phụ thuộc vào lớp khác vì nó sử dụng các đối tượng của lớp.

Vấn đề với khớp nối cao là nó có thể tạo ra tác dụng phụ. Một thay đổi trong một lớp có thể gây ra lỗi không mong muốn ở lớp kia và có thể phá vỡ toàn bộ mã.

Nói chung, độ kết dính cao và khớp nối thấp được coi là OOP chất lượng cao.


0

Thuật ngữ gắn kết thực sự là một chút phản biện trực quan cho những gì nó có nghĩa trong thiết kế phần mềm.

Sự gắn kết có nghĩa phổ biến là một cái gì đó kết hợp tốt với nhau, được hợp nhất, được đặc trưng bởi liên kết mạnh như sức hút phân tử. Tuy nhiên, trong thiết kế phần mềm, điều đó có nghĩa là phấn đấu cho một lớp lý tưởng chỉ làm một việc, vì vậy nhiều mô-đun phụ thậm chí không tham gia.

Có lẽ chúng ta có thể nghĩ về nó theo cách này. Một phần có sự gắn kết nhất khi nó là phần duy nhất (chỉ thực hiện một điều và không thể bị phá vỡ thêm nữa). Đây là những gì được mong muốn trong thiết kế phần mềm. Sự gắn kết đơn giản là một tên gọi khác của "trách nhiệm đơn lẻ" hoặc "phân tách mối quan tâm".

Thuật ngữ ghép trên tay khá trực quan, có nghĩa là khi một mô-đun không phụ thuộc vào quá nhiều mô-đun khác và những mô-đun mà nó kết nối có thể dễ dàng thay thế, ví dụ tuân theo nguyên tắc thay thế liskov .


Tại sao mọi người cứ sử dụng mô-đun từ thay vì lớp?
miền Bắc

1
@northerner nó chỉ là thuật ngữ chung chung hơn.
zar

0

Sự khác biệt về lý thuyết

Sự gắn kết

  • Sự gắn kết là một dấu hiệu cho thấy sức mạnh chức năng tương đối của mô-đun.
  • Một mô-đun gắn kết thực hiện một nhiệm vụ duy nhất, yêu cầu ít tương tác với các thành phần khác trong các phần khác của chương trình.
  • Một mô-đun có độ gắn kết cao và khớp nối thấp được cho là độc lập về chức năng với các mô-đun khác.

Phân loại sự gắn kết

1.Cincincidental 2.Logical 3.Temporal 4.Procedural 5.C Truyền thông 6.Sequential 7.Feftal

Khớp nối

  • Khớp nối là dấu hiệu của sự phụ thuộc lẫn nhau tương đối giữa các mô-đun.
  • Mức độ khớp nối giữa hai mô-đun phụ thuộc vào độ phức tạp giao diện của chúng.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.