Helpex - Trao đổi & giúp đỡ Đăng nhập
401

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ì?

401 hữu ích 4 bình luận 252k xem chia sẻ
14 trả lời 14
594

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, 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 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 kia. 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 .

594 hữu ích 5 bình luận chia sẻ
68

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ó độ gắn kết bên trong cao, nhưng phải được ghép 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.

68 hữu ích 1 bình luận chia sẻ
47

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.

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 ít 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ự độc lập tương đối 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 nên í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

47 hữu ích 0 bình luận chia sẻ
45

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ĩ nên giúp đỡ.

  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.

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.

Để 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, 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.

Lưu ý / Lời nói hoặc Thận trọng: Đố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ụ.

45 hữu ích 3 bình luận chia sẻ
31

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.

Trong khi 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ế để làm việc.

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.
    }
}
31 hữu ích 0 bình luận chia sẻ
24

lời 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ữ các danh sách tham số ngắn đôi khi có thể dẫn đến sự phổ biến 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.

24 hữu ích 0 bình luận chia sẻ
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 thành phần (một lần nữa, 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.

11 hữu ích 0 bình luận chia sẻ
2

Sự gắn kết (gắn kết): Co có nghĩa là cùng nhau , hesion có nghĩa là gắn bó . 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

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 của Hồi giáo 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 độ 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

2 hữu ích 0 bình luận chia sẻ
2

đơ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:

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ém

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:

đọc thêm ở đây

2 hữu ích 0 bình luận chia sẻ
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 hữu ích 0 bình luận chia sẻ
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 độc đáo:

    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

    EmTemporal

    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 hữu ích 0 bình luận chia sẻ
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. Mô-đun 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 hữu ích 2 bình luận chia sẻ
1

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, 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 (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 tái sử dụng 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.

1 hữu ích 0 bình luận chia sẻ
0

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 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ oop ooad , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading