From Wikipedia, the free encyclopedia
در دانش رایانه جفتگری (به انگلیسی: Coupling) یا وابستگی (به انگلیسی: Dependancy) به میزان اتکای یک ماژول از برنامه به سایر ماژولها گفته میشود.
جفتگری عموماً با چسبندگی در تقابل است. جفتگری ضعیف معمولاً با چسبندگی زیاد همراه میشود و بالعکس. این دو مشخصه به عنوان معیارهای اندازهگیری کیفیت نرمافزار، توسط لری کنستانتین، از توسعه دهندگان اصلی طراحی ساختاریافته[1] ابداع شدند. غالباً جفتگری ضعیف نشانهٔ یک طراحی خوب و یک سیستم خوش ساختار است واگر با چسبندگی بالا همراه شود خوانایی و قابلیت نگهداری سیستم افزایش مییابد.
جفتگری را میتوان نقطه مقابل چسبندگی (Cohesion) دانست. جفتگری کم اغلب با چسبندگی زیاد متناظر است و بالعکس. چسبندگی و جفتگری به عنوان معیارهای اندازهگیری کیفیت نرمافزار توسط لری کنستانتین، یکی از توسعه دهندگان اصلی طراحی ساختاریافته،[2] که از طرفداران اولیه این مفاهیم بود ابداع شد. جفتگری ضعیف غالباً نشانهٔ یک سیستم رایانهای خوش ساخت و یک طراحی خوب است و اگر با چسبندگی بالا نیز همراه شود، باعث افزایش خوانایی و قابلیت نگهداری میشود.
جفتگری ممکن است زیاد (جفتگری قوی یا سفت) یا کم (جفتگری ضعیف یا شل) باشد. برخی از انواع جفتگری به ترتیب نزولی از بیشترین تا کمترین میزان جفتگری عبارتند از:
این استاندارد توسط مؤسسه مهندسان برق و الکترونیک ارائه شده و مشتمل بر ۶ جفتگری است این استاندارد تا حد زیاد با آنچه گلنفورد مِیِرز در سال ۱۹۷۴ ارائه داده شباهت دارد ولی تفاوتهای نیز وجود دارد.
این استاندارد اگرچه از لحاظ لغوی به بررسی پرداخته، برخی از جنبهها را فراموش نموده که مهمترین آن، به دلیل قدیمی بودن و عدم روزآوری، در نظر نگرفتن برنامهنویسی شیءگراست.
نورمن فنتون در کتاب «متریکهای نرمافزاری: رویکردی سختگیرانه و عملی»[4] متریک نرمافزاری را به صورتِ: «در حقیقت متریک نرمافزاری عبارتی بنیادی برای توصیف دامنهٔ وسیعی از فعالیتهای اندازهگیری است. این فعالیتها از استخراج مشخصههایی است که ویژگیهای کدِ نرمافزار (تعریف کلاسیک «متریک» در نرمافزار) تا مدلهایی برای پیشبینی منابعِ لازم برای نرمافزار و کیفیت آن را در بر میگیرند. این موضوع همچنین شامل جنبههایی از کنترل کیفیت و ضمانت است که پوشش دهندهٔ فعالیتهایی از قبیل یافتن نقایص در طول توسعه و آزمایش است».[5] همچنین وی دربارهٔ این موضوع که نباید به سرعت به دنبال انتزاعی کردن تعریف پیش رفت نیز گفتهاست: «... برای ایجاد نگاشت (ریاضی) تعجیل کرده و سپس اعداد را دستکاری مینماییم…».[6]
با ارائه زبانهای شیءگرا و ارائه ویژگیهای آن از سوی «گریدی بوش»[7] ویژگیهای زبانهای شیءگرا برشمرد. کلاس و شیء دو گونهٔ جدید بود که دربرابر ساختارهای قدیمی قرار میگرفت. «شیام چیدامبر» و «کریس کمرر» چارچوبی را برای اندازهگیری کیفیت ارائه نمودند. این چارچوب شامل چندین متریک بود که هر یک یکی از وجوه نرمافزار را اندازهگیری میکرد.[8] این چارچوبی یکی از اولین تلاشهای در این زمینه بود.
نام متریک | مخفف | توصیف |
---|---|---|
کاپلینگ بین اشیاء | CBO | شیء از کلاس استفاده کند یا مورد استفاده قرار گیرد |
ارسال پیام | RFC | تعداد متدهایی که به صورت مستقیم فراخوان شدهاست. |
عمق درخت ارثبری | DIT | تعداد کلاسهایی که از کلاس مورد نظر به نحوی ارثبری کردهاند |
متدهای وزندار | WMPC | تعداد متدهای موجود در کلاس (شمارش براساس وزندهی) |
این متریک مورد انتقادهای زیادی قرار گرفت. «مارتین هیتز» و «بهزاد منتظری» نسبت به روش شمارش آن نقد داشتند.[9] همچنین «تریسی هال» و «توبیاس میر» متریکهای ارائه شده توسط چیدامبر را بدون منطق و کارایی خطاب کردند.[10] «هیتز» و «منتظری» چارچوبی جدید را ارائه کردند. ویژگی چارچوب آنها پوشش دو موضوع ارائه شده توسط زبانهای شیگرا بود. آنها میان «شیء» و «کلاس» تفاوت قایل شدند و برای هریک متریکی جداگانه را پوشش دادند. هر دو متریک چدامبر-کمرر و هیتز-منتظری از نوع اعداد ترتیبی بودند. اما روش چیدامبر-کمرر به هیچ وجه اصول اعداد ترتیبی را رعایت نمیکرد که منجر به عدم عملیاتی شدن آن میگردد.[11] تد فیسون از جهت دیگری به مسئلهٔ جفتگری نگاه نموده و آن را از دو جهت بررسی نموده: «ذات» و «گونه». از لحاظ ذات، جفتگری به دو بخش ایستا و پویا تقسیم میگردد. در بخش ایستا، تا زمانی که تمام ماژولها فراهم نباشد اصولاً برنامه قادر به کامپایل شدن نمیباشد. ذات پویا نیز خواستار کد اجرایی برنامه در حین اجراست.[12]
از نظر گونه به سه زیر دستهٔ «جفتگری براساس گونه»، «جفتگری منطقی» و نیز «جفتگری براساس امضا» تقسیم میشوند.
نوع جفتگری | زیر مجموعه | شرح | ذات | مثال |
---|---|---|---|---|
منطقی | الگوریتم | دو ماژول براساس یک الگوریتم و به صورت غیرمستقیم با یکدیگر در ارتباط هستند، در صورت تغییر یک از آنها دیگری نیز باید تغییر نماید | پویا | خواندن/نوشتن، رمزنگاری/رمزگشایی |
لیترال | دو ماژول بر روی دادههایی کار مینمایند که مستقیماً بین آنها تبادل نمیشود اما ترتیب آنها از نظر مفهومی بسیار مهم است و هر گونه تغییر در یکی منجر به ساقط اعتبار شدن فهم ماژول دیگر در فهم داده میشود | پویا | ارسال یک آرایه شامل نام و سال | |
گونه | غیرمبهم | ایجاد یک شی از کلاسی دیگر در همان ماژول یا ماژول متفاوت | پویا | ایجاد شی با استفاده از عملگر new در سی++ |
مبهم | کلاسی محتوی یک ارجاع به شی دیگر بدون ایجاد مستقیم آن | پویا | دریافت ارجاع به شی از طریق پارمتری در یکی از متدها کلاس جاری | |
K | کلاسی محتوی یک دادهٔ ثابت از کلاس دیگری باشد | ایستا/پویا | کامپایلر در نوع ایستا قادر به کشف و حذف آن است. | |
سکو | با فراخوانی هریک از کلاسهای پایهٔ سکوی اجرای برنامه، برنامه/ماژول/کلاس به سکوی اجرایش جفت میگردد که قابل حذف و تعدیل نمیباشد | پویا | مثل cout<<"hello!" در سی++ | |
امضا | ندارد | در این نوع جفتگری، به جای کلاس یا ماژول، دو متد از اشیا به یکدیگر جفت میشوند. این دو شی اطلاعی از وجود یکدیگر ندارند و توسط توسعهگر ثالث و با استفاده از یکسان بودن امضای دو متد صورت میگیرد | پویا | استفاده از delegate در C# و mirror در جاوا |
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.