مفهوم coupling و cohesion در برنامه نویسی
تعریف cohesion و coupling
در توسعه نرمافزار برخی قواعد و دستورالعملها وجود دارند که به ما کمک میکنند تا نرمافزار قابل نگهداری و قابل توسعه تولید کنیم. یکی از این موارد دو مفهوم مهم به نام coupling و cohesion است. coupling و cohesion دو معیار کیفی هستند. cohesion به این معناست که عناصر درون یک ماژول باید یک هدف واحد و از پیش تعریف شده را دنبال کنند و coupling به میزان وابستگی بین ماژولهای نرمافزار اشاره دارد.
مفهوم high cohesion و low coupling
دو اصطلاح high cohesion و low coupling که در توسعه نرمافزار زیاد استفاده میشود به این معناست که همواره باید در تلاش بود تا cohesion در بالاترین حد خود و coupling در پایینترین حد خود باشد. به عنوان مثال در کلاس RegisterUser فقط باید متدهای مربوط به عضویت کاربر نوشته شود. طبیعتا این کلاس نباید ورود کاربران و رفتارهای دیگری را پیادهسازی کند.
همانطور که میبینید مفهوم cohesion ارتباط نزدیکی به اصل SRP دارد که بیان میکند یک کلاس باید یک مسئولیت واحد و یک دلیل برای تغییر داشته باشد.
مزایای high cohesion
ماژولهایی با یک هدف مشخص به راحتی قابل درک هستند و خوانایی بالایی دارند. نام چنین ماژولهایی به وضوح کد آنها را اعلام میکند و آنها دقیقا همان کار را که باید انجام میدهند. این به توسعهدهندگان دیگر هم کمک میکند تا بدون خواندن هر خط کد، متوجه وظیفه کلی آن بشوند. همچنین هنگام خواندن چنین ماژولهایی هیچ شگفتی وجود ندارد. به عنوان مثال اگر همان کلاس RegisterUser حاوی کد ارسال ایمیل باشد، خواننده را چیزی مواجه میکند که انتظار آن را ندارد.
از آنجایی که تمام کدهای مربوطه در ماژول هستند، ایجاد تغییرات در کد آسانتر میشود. به عنوان مثال اگر توسعهدهندهای قرار باشد فیلد جدیدی در ثبت نام کاربران لحاظ کند، میتواند به یک کلاس خاص برود و تغییر را اعمال کند. به نحوی که مطمئن است تغییر در ساختار کلاس مورد نظر روی رفتار کلاسهای دیگر اثری ندارد.
تست کد سادهتر میشود. از آنجایی که این کدها وابستگی به ماژولها و کلاسهای دیگر ندارد، unit test ساده خواهد بود. تغییرات در چنین ماژولهایی کمتر با اشکال مواجه میشوند. در نهایت این ماژولها قابلیت استفاده مجدد دارند. از آنجایی که چنین ماژولهایی مسئولیت واحدی را اجرا میکنند، میتوان از آنها در هر جایی که چنین نیازی وجود داشته باشد استفاده کرد.
به طور کلی ماژولهای high cohesion نشاندهنده کیفیت بهتر طراحی نرمافزار است. از این رو اگر در توسعه یک ماژول با عناصری روبرو شدید که مستقیما با هدف اصلی ماژول در تضاد هستند، آنها را به ماژول دیگری منتقل کنید یا یک ماژول جدید برای آنها ایجاد کنید.
مزایای low coupling
مقیاسپذیری کد را آسانتر میکند. وابستگی کم، اضافه کردن ماژولهای جدید یا حذف ماژولهای موجود را ساده میکند و مقیاس پذیری در سیستم را بالا میبرد.
توسعه و نگهداری آنها راحتتر است. از آنجا که آنها مستقل از هم هستند، میتوان به صورت موازی آنها را توسعه داد و تست کرد. همچنین بدون تاثیر روی یکدیگر میتوان آنها را اصلاح و به روز کرد.
انجام تغییرات جدید در ماژولهای دارای وابستگی زیاد یا high coupling دشوار است. توسعهدهنده باید چندین ماژول و نحوه ارتباط آنها را درک کند. آنها باید در ایجاد تغییرات مداوم در همه ماژولها مراقب باشند. این باعث میشود که کدهای ما بیشتر در معرض اشکال قرار گیرند و زحمت تیم توسعه را بیشتر میکند. به طور کلی low coupling نشاندهنده کیفیت بالای طراحی نرمافزار است. همچنین وابستگی زیاد موجب کاهش انعطافپذیری و کاهش قابلیت ماژولار بودن میشود.
نتیجهگیری
ماژولهای مختلف یک سیستم نرمافزاری باید دارای انسجام بالا یا high cohesion باشند. به این معنی که هر ماژول هدف از پیش تعریف شده خود را پیادهسازی کند. همچنین وابستگی بین ماژولها در پایینترین حالت ممکن باشد. به نحوی که با تغییر در ساختار یک ماژول، رفتار ماژولهای دیگر تحت تاثیر قرار نگیرد.
دیدگاهها
مرتضی گودرزی (1 سال پیش)
asdasd
reza (1 سال پیش)
عالی بود