سؤال

ما هو الفرق بين التماسك والاقتران؟

كيف يمكن أن يؤدي الاقتران والتماسك إلى تصميم برامج جيد أو ضعيف؟

ما هي بعض الأمثلة التي تحدد الفرق بين الاثنين ، وتأثيرها على جودة الكود الكلي؟

هل كانت مفيدة؟

المحلول

تماسك يشير إلى ما يمكن أن يفعله الفصل (أو الوحدة). قد يعني الانخفاض التماسك أن الفصل يقوم بمجموعة كبيرة ومتنوعة من الإجراءات - إنه واسع ، غير مركّز على ما ينبغي أن تفعله. يعني التماسك العالي أن الفصل يركز على ما ينبغي أن يفعله ، أي فقط الطرق المتعلقة بقصد الفصل.

مثال على انخفاض التماسك:

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

مثال على التماسك العالي:

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

أما بالنسبة لل اقتران, ، يشير إلى مدى ارتباط فئتين/وحدات مرتبطة ببعضهما البعض. بالنسبة للفصول المنخفضة المزدوجة ، يجب ألا يؤثر تغيير شيء كبير في فصل واحد على الآخر. من شأن الاقتران العالي أن يجعل من الصعب تغيير الكود الخاص بك والحفاظ عليه ؛ نظرًا لأن الفصول الدراسية متماسكة بشكل وثيق ، فإن إجراء التغيير قد يتطلب تجديد نظام كامل.

تصميم البرمجيات الجيدة التماسك العالي و اقتران منخفض.

نصائح أخرى

التماسك العالي داخل الوحدات النمطية والاقتران المنخفض ما بين غالبًا ما تعتبر الوحدات النمطية ذات الصلة بجودة عالية بلغات البرمجة OO.

على سبيل المثال ، يجب أن يكون للرمز الموجود داخل كل فئة Java تماسك داخلي مرتفع ، ولكن يكون مقترنًا بشكل فضفاض قدر الإمكان للرمز في فئات Java الأخرى.

الفصل 3 من إنشاء برامج ماير الموجهة نحو الكائن (الطبعة الثانية) هو وصف كبير لهذه القضايا.

تماسك هو مؤشر العلاقة داخل وحدة.

اقتران هو مؤشر العلاقات ما بين الوحدات النمطية.

enter image description here

تماسك

  • التماسك هو مؤشر العلاقة داخل الوحدة النمطية.
  • يظهر التماسك القوة الوظيفية النسبية للوحدة.
  • التماسك هو درجة (الجودة) التي يركز عليها المكون / الوحدة النمطية على الشيء الوحيد.
  • أثناء التصميم ، يجب أن تسعى جاهدة من أجل التماسك العالي ، أي أن مكون/ وحدة متماسكة يركز على مهمة واحدة (أي ، التفكير الواحد) مع القليل من التفاعل مع وحدات أخرى من النظام.
  • التماسك هو نوع من الامتداد الطبيعي للاختباء البيانات على سبيل المثال ، فئة وجود جميع الأعضاء مرئيين مع حزمة لديهم رؤية افتراضية. التماسك هو مفهوم الوحدة النمطية.

اقتران

  • الاقتران هو مؤشر على العلاقات بين الوحدات النمطية.
  • يوضح الاقتران الاعتماد/الترابط النسبي بين الوحدات.
  • الاقتران هو درجة يتم توصيل المكون / الوحدة النمطية بالوحدات النمطية الأخرى.
  • أثناء التصميم ، يجب أن تسعى جاهدة للحصول على انخفاض في الاقتران ، أي أن التبعية بين الوحدات يجب أن تكون أقل
  • يوفر صنع الحقول الخاصة والأساليب الخاصة والطبقات غير العامة اقتران فضفاض.
  • الاقتران هو مفهوم الجهاز.

التحقق من هذه حلقة الوصل

تماسك هو مؤشر على مدى ارتباطه وتركيز مسؤوليات عنصر البرنامج.

اقتران يشير إلى مدى ارتباط عنصر البرنامج بالعناصر الأخرى.

يمكن أن يكون عنصر البرنامج فئة أو حزمة أو مكونًا أو نظامًا فرعيًا أو نظامًا. وعلى الرغم من تصميم الأنظمة ، يوصى بوجود عناصر برمجيات لديها التماسك العالي والدعم اقتران منخفض.

تماسك منخفض النتائج في فئات متجانسة يصعب الحفاظ عليها وفهمها وتقليل إعادة استخدام. بصورة مماثلة اقتران مرتفع النتائج في الفئات التي تقترن بإحكام والتغيرات لا تكون غير محلية ، ويصعب تغييرها وتقليل إعادة الاستخدام.

يمكننا أن نأخذ سيناريو افتراضي حيث نقوم بتصميم شاشة نموذجية ConnectionPool مع المتطلبات التالية. لاحظ أنه قد يبدو أكثر من اللازم لفئة بسيطة مثل ConnectionPool لكن النية الأساسية هي مجرد التظاهر اقتران منخفض و التماسك العالي مع بعض الأمثلة البسيطة وأعتقد أنه ينبغي أن يساعد.

  1. دعم الحصول على اتصال
  2. حرر الاتصال
  3. احصل على إحصائيات حول عدد الاستخدام مقابل عدد الاستخدام
  4. احصل على إحصائيات حول الاتصال مقابل الوقت
  5. قم بتخزين معلومات الاسترجاع وإصدار معلومات إلى قاعدة بيانات للإبلاغ لاحقًا.

مع تماسك منخفض يمكننا تصميم أ ConnectionPool الفصل عن طريق حشو كل هذه الوظائف/المسؤوليات بقوة في فئة واحدة على النحو التالي. يمكننا أن نرى أن هذه الفئة الفردية مسؤولة عن إدارة الاتصال ، والتفاعل مع قاعدة البيانات وكذلك الحفاظ على إحصائيات الاتصال.

Low Cohesion Connection Pool

مع التماسك العالي يمكننا تعيين هذه المسؤولية عبر الفصول وجعلها أكثر قابلية للصيانة وقابلة لإعادة الاستخدام.

High Cohesion Connection Pool

لتوضيح اقتران منخفض سوف نستمر في التماسك العالي ConnectionPool رسم تخطيطي أعلاه. إذا نظرنا إلى الرسم البياني أعلاه على الرغم من أنه يدعم التماسك العالي ، فإن ConnectionPool يقترن بإحكام مع ConnectionStatistics الطبقة و PersistentStore يتفاعل معهم مباشرة. بدلاً من ذلك لتقليل الاقتران ، يمكننا تقديم أ ConnectionListener الواجهة واترك هذين الفئتين تنفذ الواجهة واتركهما يسجلون ConnectionPool صف دراسي. و ال ConnectionPool سوف يتكرر من خلال هؤلاء المستمعين وإخطارهم بأحداث الحصول على الاتصال وإصدارها ويسمح بتقليل أقل.

Low Coupling ConnectionPool

ملاحظة/كلمة أو تحذير: بالنسبة لهذا السيناريو البسيط ، قد يبدو الأمر مبالغًا فيه ، لكن إذا تخيلنا سيناريو في الوقت الفعلي حيث يحتاج تطبيقنا إلى التفاعل مع خدمات طرف ثالث متعددة لإكمال معاملة: اقتران مباشرة من كودنا مع خدمات الطرف الثالث يعني أن أي تغييرات في يمكن أن تؤدي خدمة الطرف الثالث إلى تغييرات في رمزنا في أماكن متعددة ، بدلاً من ذلك يمكن أن يكون لدينا Facade تتفاعل مع هذه الخدمات المتعددة داخليًا وأي تغييرات على الخدمات تصبح محلية ل Facade وفرض اقتران منخفض مع خدمات الطرف الثالث.

زيادة التماسك وانخفاض الاقتران يؤدي إلى تصميم جيد للبرامج.

أقسام التماسك وظيفتك بحيث تكون موجزة والأقرب إلى البيانات ذات الصلة بها ، في حين أن الفصل يضمن عزل التنفيذ الوظيفي عن بقية النظام.

فصل يتيح لك تغيير التنفيذ دون التأثير على أجزاء أخرى من البرنامج.

تماسك يضمن أن التنفيذ أكثر تحديداً للوظائف وفي الوقت نفسه أسهل في الحفاظ عليه.

الطريقة الأكثر فعالية لتقليل الاقتران وزيادة التماسك تصميم عن طريق الواجهة.

هذه هي الكائنات الوظيفية الرئيسية يجب أن "تعرف" بعضها البعض فقط من خلال الواجهة (الواجهة) التي ينفذونها. يقدم تنفيذ واجهة التماسك كنتيجة طبيعية.

في حين أن ليس واقعيا في بعض senarios يجب أن يكون هدف التصميم للعمل من قبل.

مثال (سطحي جدا):

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 }
}

البعض في أي مكان آخر في قاعدة قاعدة الشفرة الخاصة بك ، يمكن أن يكون لديك وحدة نمطية تعالج أسئلة بغض النظر عن ما هي عليه:

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

أفضل تفسير تماسك يأتي من رمز العم بوب النظيف:

يجب أن تحتوي الفئات على عدد صغير من متغيرات المثيل. يجب على كل طريقة من طرق الفصل معالجة واحدة أو أكثر من تلك المتغيرات. بشكل عام ، كلما زادت المتغيرات التي تتلاعب بها الطريقة التي تتماسك أكثر هذه الطريقة في فئتها. الفئة التي يتم فيها استخدام كل متغير بواسطة كل طريقة متماسكة بشكل أقصى.

بشكل عام ، لا يُنصح ولا يمكن إنشاء مثل هذه الطبقات المتماسكة إلى أقصى حد ؛ من ناحية أخرى، نود أن يكون التماسك مرتفعًا. عندما يكون التماسك مرتفعًا ، فهذا يعني أن أساليب ومتغيرات الفصل تعتمد على المشاركة وتعلق معًا ككل منطقي.

يمكن أن تؤدي استراتيجية الحفاظ على الوظائف الصغيرة والحفاظ على قوائم المعلمات القصيرة في بعض الأحيان إلى انتشار متغيرات المثيل التي تستخدمها مجموعة فرعية من الأساليب. عندما يحدث هذا ، فهذا يعني دائمًا أن هناك فئة أخرى على الأقل تحاول الخروج من الفصل الأكبر. يجب أن تحاول فصل المتغيرات والأساليب إلى فئتين أو أكثر من أن الفئات الجديدة أكثر تماسكًا.

تماسك في هندسة البرمجيات هي الدرجة التي تنتمي إليها عناصر وحدة معينة. وبالتالي ، فهو مقياس لمدى ارتباط كل جزء من الوظائف التي يعبر عنها رمز المصدر لوحدة البرامج.

اقتران بعبارة بسيطة ، هو مقدار المكون (مرة أخرى ، تخيل فئة ، على الرغم من أنه ليس بالضرورة) يعرف عن الأعمال الداخلية أو العناصر الداخلية لآخر ، أي مقدار المعرفة التي لديها المكون الآخر.

كتبت منشور مدونة حول هذا, ، إذا كنت ترغب في القراءة في المزيد من التفاصيل مع أمثلة ورسومات. أعتقد أنه يجيب على معظم أسئلتك.

ببساطة، تماسك يمثل الدرجة التي يشكل بها جزء من قاعدة التعليمات البرمجية وحدة ذرية واحدة منطقية. اقتران, من ناحية أخرى ، تمثل الدرجة التي تكون فيها وحدة واحدة مستقلة عن الآخرين. بمعنى آخر ، هو عدد الاتصالات بين وحدتين أو أكثر. كلما قل عدد الرقم ، انخفض الاقتران.

في جوهرها ، يعني التماسك العالي الحفاظ على أجزاء من قاعدة التعليمات البرمجية المرتبطة ببعضها البعض في مكان واحد. إن اقتران منخفض ، في نفس الوقت ، يتعلق بفصل الأجزاء غير ذات الصلة بقاعدة الكود قدر الإمكان.

أنواع الكود من منظور التماسك والاقتران:

المثالي هو الرمز الذي يتبع المبدأ التوجيهي. إنه مقترن بشكل فضفاض ومتماسك للغاية. يمكننا توضيح مثل هذا الرمز مع هذه الصورة: enter image description here

كائن الله هو نتيجة لإدخال التماسك العالي والاقتران العالي. إنه معادٍ للانهيار ويقف بشكل أساسي على قطعة واحدة من الكود تقوم بكل العمل في وقت واحد:enter image description here سيئ اختيار يحدث عند اختيار الحدود بين الطبقات أو الوحدات النمطية المختلفة بشكل سيءenter image description here

فك التشفير المدمر هو الأكثر إثارة للاهتمام. يحدث في بعض الأحيان عندما يحاول المبرمج فصل قاعدة التعليمات البرمجية لدرجة أن الكود يفقد تركيزه تمامًا:enter image description here

اقرأ أكثر هنا

enter image description here

يشير التماسك كل شيء عن كيفية تصميم فئة واحدة. التماسك هو المبدأ الموجود نحو الكائن يرتبط ارتباطًا وثيقًا بالتأكد من أن الفصل مصمم بهدف واحد يركز جيدًا. كلما زاد تركيز الفصل ، فإن تماسك تلك الفئة أكثر. تتمثل مزايا التماسك العالي في أن هذه الفئات أسهل بكثير في الحفاظ عليها (وتغييرها بشكل أقل تواترا) من الفئات ذات التماسك المنخفض. فائدة أخرى من التماسك العالي هي أن الطبقات ذات الغرض الذي يركز جيدًا تميل إلى أن تكون أكثر قابلية للاستخدام من الفئات الأخرى.

في الصورة أعلاه ، يمكننا أن نرى أنه في تماسك منخفض ، فئة واحدة فقط هي المسؤولة عن تنفيذ الكثير من الوظائف التي لا تشترك في تقليل فرصة إعادة الاستخدام والصيانة. ولكن في التماسك العالي ، هناك فئة منفصلة لجميع الوظائف لتنفيذ وظيفة محددة ، مما يؤدي إلى قابلية الاستخدام والصيانة بشكل أفضل.

تماسك (تماسك) : شارك وهو ما يعني معاً, هيس وهو ما يعني يلتصق. نظام التمسك ببعض جزيئات المواد المختلفة.

للحصول على مثال على الحياة الواقعية:
enter image description here
IMG مجاملة

كله أكبر من مجموع الأجزاء -أاريستوتين.

  • تماسك هو نوع ترتيبي من القياس وعادة ما يوصف بأنه "تماسك عالي" أو "تماسك منخفض". تميل الوحدات النمطية ذات التماسك العالي إلى أن تكون مفضلة ، لأن التماسك العالي يرتبط بالعديد من السمات المرغوبة للبرامج بما في ذلك المتانة والموثوقية وإعادة الاستخدام والفهم. في المقابل ، يرتبط انخفاض التماسك بسمات غير مرغوب فيها مثل الصعوبة في الحفاظ على أو اختبار أو إعادة استخدام أو حتى فهم. ويكي

  • اقتران عادة ما يتناقض مع تماسك. يرتبط الاقتران المنخفض في كثير من الأحيان بالتماسك العالي ، والعكس صحيح. غالبًا ما يكون الاقتران المنخفض علامة على وجود نظام كمبيوتر جيد التنظيم وتصميم جيد ، وعندما يقترن بالتماسك العالي ، يدعم الأهداف العامة المتمثلة في قابلية القراءة العالية والقدرة على الصيانة. ويكي

أعتقد أن الاختلافات يمكن وضعها على النحو التالي:

  • يمثل التماسك الدرجة التي يشكل بها جزء من قاعدة التعليمات البرمجية وحدة ذرية واحدة منطقية.
  • يمثل الاقتران الدرجة التي تكون فيها وحدة واحدة مستقلة عن الآخرين.
  • من المستحيل أرشفة الفصل الكامل دون الإضرار بالتماسك ، والعكس صحيح.

في منشور المدونة هذا أنا أكتب عنها بمزيد من التفصيل.

تماسك هو مؤشر على القوة الوظيفية النسبية للوحدة.

  • تقوم الوحدة المتماسكة بمهمة واحدة ، والتي تتطلب تفاعلًا ضئيلًا مع مكونات أخرى في أجزاء أخرى من البرنامج. ذكر ببساطة ، يجب أن تفعل الوحدة المتماسكة (بشكل مثالي) شيئًا واحدًا فقط.
  •  الرؤية التقليدية:

    "التفكير الواحد" للوحدة النمطية

  • عرض:

     يشير التصور إلى أن المكون أو الفئة لا يتغلف إلا من السمات والعمليات المرتبطة ارتباطًا وثيقًا ببعضها البعض والفئة أو المكون نفسه

  •  مستويات التماسك

    functional

    layer

    commonicational

    sequential

     Procedural

     الزمالي

     Utility

اقتران هو مؤشر على الترابط النسبي بين الوحدات.

  • يعتمد الاقتران على تعقيد الواجهة بين الوحدات النمطية ، والنقطة التي يتم عندها الإدخال أو المرجع إلى وحدة نمطية ، وما هي البيانات التي تمر عبر الواجهة.

  • المنظر التقليدي: الدرجة التي يرتبط بها المكون بالمكونات الأخرى والعالم الخارجي

  • عرض OO: مقياس نوعي للدرجة التي ترتبط بها الطبقات ببعضها البعض

  • مستوى الاقتران

    Common

    concltrol

    stamp

    DATA

     مكالمة routine

     نوع الاستخدام

    conclusion أو الاستيراد

     الاختصار #

اقتران = التفاعل / العلاقة بين وحدتين ...تماسك = التفاعل بين عنصرين داخل الوحدة النمطية.

يتكون البرنامج من العديد من الوحدات النمطية. الوحدة النمطية تتكون من عناصر. النظر في الوحدة النمطية هي برنامج. وظيفة داخل البرنامج هي عنصر.

في وقت التشغيل ، يتم استخدام إخراج البرنامج كمدخل لبرنامج آخر. وهذا ما يسمى الوحدة النمطية لتفاعل الوحدة النمطية أو العملية لمعالجة الاتصالات. وهذا ما يسمى أيضا باسم الاقتران.

ضمن برنامج واحد ، يتم تمرير إخراج الوظيفة إلى وظيفة أخرى. وهذا ما يسمى تفاعل العناصر داخل الوحدة النمطية. وهذا ما يسمى أيضا باسم التماسك.

مثال:

اقتران = التواصل بين عائلة مختلفة ...تماسك = التواصل بين الأب والطفل داخل الأسرة.

ببساطة، تماسك يعني أن الفصل يجب أن يمثل مفهومًا واحدًا.

تكون الواجهة العامة للفئة متماسكة إذا كانت جميع ميزات الفصل مرتبطة بالمفهوم الذي يمثله الفصل. على سبيل المثال ، بدلاً من الحصول على فئة CashRegister ، فإن امتلاك تماسك CashRegister و Coin يجعله في فئتين - CashRegister و Coin Class.

في اقتران, ، يعتمد فئة واحدة على آخر لأنه يستخدم كائنات الفصل.

المشكلة في اقتران عالية هي أنه يمكن أن يخلق آثارًا جانبية. يمكن أن يتسبب تغيير واحد في فئة واحدة في حدوث خطأ غير متوقع في الفئة الأخرى ويمكن أن يكسر الرمز بأكمله.

بشكل عام ، يعتبر التماسك العالي والاقتران المنخفض OOP عالي الجودة.

المصطلح تماسك هو في الواقع عداد بديهي لما يعنيه في تصميم البرمجيات.

المعنى الشائع للتماسك هو أن شيئًا ما يلتزم جيدًا ، يتميز بربط قوي مثل الجاذبية الجزيئية. ومع ذلك ، في تصميم البرمجيات ، فهذا يعني السعي لفصلًا لا يفعل شيئًا واحدًا سوى شيء واحد ، لذلك لا تشارك الوحدات الفرعية المتعددة.

ربما يمكننا التفكير في الأمر بهذه الطريقة. الجزء لديه أكبر تماسك عندما يكون الجزء الوحيد (يفعل شيئًا واحدًا فقط ولا يمكن تقسيمه إلى أبعد من ذلك). هذا ما هو مطلوب في تصميم البرامج. التماسك ببساطة هو اسم آخر لـ "المسؤولية الفردية" أو "فصل المخاوف".

المصطلح اقتران على اليد بديهية للغاية مما يعني أنه عندما لا تعتمد الوحدة النمطية على العديد من الوحدات الأخرى ، يمكن استبدال تلك التي تتصل بها بسهولة على سبيل المثال مبدأ استبدال Liskov .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top