Coupling vs Cohesion
Coupling و cohesion دو مفهومی هستند که در جاوا (و همه زبان های شی گرا دیگر) یافت می شوند. کوپلینگ اندازه گیری می کند که هر یک از ماژول های برنامه چقدر به ماژول های برنامه دیگر وابسته هستند. انسجام میزان ارتباط قوی هر یک از توابع در یک ماژول را اندازه گیری می کند. در واقع، هر زبان شی گرا (از جمله جاوا) دو هدف اصلی افزایش انسجام و کاهش کوپلینگ را به طور همزمان دارد تا کارآمدترین برنامه ها را توسعه دهد. این دو معیار مهندسی نرم افزار توسط لری کنستانتین برای کاهش هزینه های اصلاح و نگهداری نرم افزار توسعه داده شد.
انسجام چیست؟
Cohesion میزان ارتباط قوی هر یک از توابع در یک ماژول برنامه را اندازه گیری می کند. کلاس های به خوبی ساختار یافته منجر به برنامه های بسیار منسجم می شود. اگر کلاس خاصی مجموعه ای از توابع بسیار مرتبط را انجام دهد، آن کلاس به عنوان منسجم شناخته می شود. از طرف دیگر، اگر یک کلاس مجموعه ای از عملکردهای کاملاً نامرتبط را انجام دهد، به این معنی است که کلاس اصلاً منسجم نیست. درک این نکته مهم است که نداشتن یکپارچگی به این معنی نیست که برنامه کلی کارایی لازم را ندارد. فقط بدون انسجام، مدیریت عملکرد بسیار دشوار خواهد بود زیرا با افزایش پیچیدگی برنامه در طول زمان، آنها در بسیاری از مکانهای اشتباه پراکنده خواهند شد. حفظ، اصلاح و گسترش رفتارهای پراکنده در سراسر کد حتی برای برنامه نویسان با تجربه بسیار خسته کننده است.
کوپلینگ چیست؟
Coupling اندازه گیری می کند که هر یک از ماژول های برنامه چقدر به ماژول های برنامه دیگر وابسته هستند.فعل و انفعالات بین دو شی اتفاق می افتد زیرا جفت وجود دارد. برنامههای با اتصال آزاد از انعطافپذیری و گسترش بالایی برخوردار هستند. جفت شدن قوی هرگز خوب نیست زیرا یک شی می تواند به شدت به شی دیگری وابسته باشد. این یک کابوس است وقتی کد اصلاح شود، زیرا جفت شدن زیاد به این معنی است که برنامه نویسان باید حتی برای یک تغییر رفتاری روی چندین مکان کد کار کنند. کوپلینگ قوی همیشه به برنامه هایی با انعطاف پذیری کم و مقیاس پذیری/بسط پذیری کمتر منجر می شود. با این حال، در زبان های برنامه نویسی مانند جاوا، اجتناب کامل از جفت شدن غیرممکن است. اما توصیه می شود برنامه نویسان نهایت تلاش خود را برای کاهش کوپلینگ تا حد امکان به کار گیرند. همچنین میتوان برای کمک به اشیاء در تعامل با یکدیگر بدون اینکه مقیاسپذیری و انعطافپذیری آن را مختل کند، مقداری جفت وجود داشته باشد.
تفاوت بین Coupling و Cohesion چیست؟
حتی اگر کوپلینگ و انسجام با کیفیت یک ماژول در مهندسی نرم افزار سروکار دارند، مفاهیم کاملاً متفاوتی هستند. Cohesion در مورد میزان ارتباط عملکردها با یکدیگر در ماژول صحبت می کند، در حالی که کوپلینگ به میزان وابسته بودن یک ماژول به ماژول های برنامه دیگر در کل برنامه می پردازد. برای داشتن نرم افزار با بهترین کیفیت، cohesion و coupling باید به دو انتهای مخالف طیف خود برسد. به عبارت دیگر، اتصال شل و انسجام قوی بهترین نرم افزار را فراهم می کند. داشتن فیلدهای خصوصی، کلاسهای غیر عمومی و روشهای خصوصی، اتصال آزاد را فراهم میکنند، در حالی که همه اعضا را در کلاس قابل مشاهده میکنند و داشتن بسته بهعنوان نمای پیشفرض، انسجام بالایی را ایجاد میکند.