اهمیت مفهوم چسبندگی و یا Cohesion در طراحی و توسعه نرم افزار

در این قسمت از سری آموزش مهمترین اصول طراحی و توسعه نرم افزار از وب سایت پرووید در رابطه با اصل Cohesion و یا چسپندگی صحبت خواهیم کرد. کلمه Cohesion در زبان انگلیسی به معنی چسپندگی است و مفهوم آن در رابطه با ارتباط نزدیک و یا غیر نزدیک تکه کدهای مختلف برنامه به یکدیگر است. در صحبت کردن از قابلیت Cohesion اغلب از کلمه های بالا و پایین استفاده می شود. به عبارت دیگر نرم افزار و کد آن می تواند چسپندگی بالا و یا چسپندگی پایینی داشته باشد.در سطح متد چسپندگی بالا به این معنی است که خطوط مختلف کد که در یک متد نوشته شده است برای انجام یک وظیفه تک و کوچک بر روی تعدادی Object و داده های کوچک و مرتبط با یکدیگر ایفای نقش می کند. مفهوم Cohesion را می توانیم در سطح کلاس داشته باشیم. در سطح یک کلاس چسپندگی و یا Cohesion به این معنی است که اعضای عضو کلاس و یا همان Member ها که شامل Method ها، Property ها و Event ها و غیره می باشند کاملاً به یکدیگر مرتبط هستند و برای انجام یک هدف تک که هدف اصلی آن کلاس می باشند دور یکدیگر جمع شده اند. اصل چسپندگی و یا Cohesion در سطوح مختلف دیگر از قبیل Namespace و اسمبلی نیز تعریف می شود. علاوه بر کلمه های بالا و پایین و تعریف کردن چسپندگی بالا و چسپندگی پایین از کلمات نسبی دیگری برای تعیین سطح چسپندگی نیز استفاده می شود.بدترین نوع چسپندگی و یا Cohesion را اصطلاحاً Coincidental Cohesion به معنی چسپندگی تصادفی می نامیم که در آن کدهای مختلف بدون هیچ گونه ارتباطی و به طور کاملاً تصادفی و هیچ گونه برنامه ریزی خاصی در کنار یکدیگر قرار گرفته اند. برای مثال فرض کنید که یک کلاس را به برنامه اضافه می کنید و هر متدی که نمی دانید جایگاه مناسب آن کجاست را به این کلاس اضافه می کنید. علاوه بر این بهترین و زیباترین مفهوم Cohesion را اصطلاحاً Functional Cohesion و یا چسپندگی عملکردی می نامیم. که در آن قسمت های مختلف کد کاملاً با یکدیگر در ارتباط هستند و به منظور انجام یک وظیفه تک در کنار یکدیگر قرار گرفته اند.لیست کامل انواع چسپندگی ها و یا Cohesion ها را از بهترین آنها تا بدترین آنها در قسمت زیر مشاهده می کنید.چسپندگی عملکردی و یا Functional Cohesion که در آن وظایف و قابلیت ها بر اساس عملکردشان به یکدیگر مرتبط شده است.چسپندگی ترتیبی و یا Sequential Cohesion که در آن کد بر اساس جریان داده های ورودی و خروجی با یکدگیر مرتبط شده است.چسپندگی ارتباطی و یا Communicational Cohesion که در آن بر اساس عملیاتی که بر روی مجموعه یکسانی از داده ها انجام می شود چسپندگی را پیاده سازی می کنیم.چیپندگی رویه ای و یا Procedural Cohesion که بر اساس دنباله اجرا و یا اصطلاخاً Sequence of Execution یکسانی که در برنامه وجود دارد چسپندگی را پیاده سازی می کنیم.چسپندگی زمانی و یا Temporal Cohesion که بر اساس زمان استفاده کردن از کدها چسپندگی را پیاده سازی می کنیمچسپندگی منطقی و یا Logical Cohesion که بر اساس یک دسته بندی منتطقی چسپندگی را پیاده سازی می کنیم.چسپندگی تصادفی و یا Coincidental Cohesion که در آن هیچ گونه ارتباطی بین قسمت های مختلف وجود ندارد.پیاده سازی و در نظر گرفتن چسپندگی در سطوح بسیار بالا شرایط یک نرم افزار را از جنبه های مختلف بهبود می بخشد که مهمترین آنها عبارتند از:نرم افزار و کد نوشته شده قابل فهم تر خواهد بود.ایجاد تغییر در قسمت های مختلف نرم افزار به ندرت رخ می دهد.قابلیت هایی از قبیل Reusability و یا استفاده مجدد و قابلیت ترکیب شدن کد که اصطلاحا به آن Composable بودن کد می گویم افزایش خواهد یافت.نوشتن Unit Test ها یا تست های واحد ساده تر خواهد شد. نام گذاری مناسب برای قسمت های مختلف برنامه به درستی انجام خواهد شد. ضمناً در رابطه با نام گذاری مناسب نیز این موضوع را بگوییم که یکی از مهمترین روش های رسیدن به یک کد قابل خواندن و یا اصطلاحاً Readable نوشتن نام ها مناسب برای قسمت های مختلف کد است.منبع: وبسایت پرووید