جفتگری (دانش رایانه)
در دانش رایانه جفتگری (به انگلیسی: Coupling) یاوابستگی (به انگلیسی: Dependancy) به میزان اتکای یک ماژول از برنامه به سایر ماژولها گفته میشود.
جفتگری عموماً با چسبندگی در تقابل است. جفتگری ضعیف معمولاً با چسبندگی زیاد همراه میشود و بالعکس. این دو مشخصه به عنوان معیارهای اندازه گیری کیفیت نرمافزار، توسط لری کنستانتین، از توسعه دهندگان اصلی طراحی ساختاریافته[۱] ابداع شدند. غالباً جفتگری ضعیف نشانهٔ یک طراحی خوب و یک سیستم خوش ساختار است واگر با چسبندگی بالا همراه شود خوانایی و قابلیت نگهداری سیستم افزایش مییابد.
جفتگری را میتوان نقطه مقابل چسبندگی (Cohesion) دانست. جفتگری کم اغلب با چسبندگی زیاد متناظر است و بالعکس. چسبندگی و جفتگری به عنوان معیارهای اندازه گیری کیفیت نرم افزار توسط لری کنستانتین، یکی از توسعه دهنگان اصلی طراحی ساختاریافته،[۲] که از طرفداران اولیه این مفاهیم بود ابداع شد. جفتگری ضعیف غالبا نشانهٔ یک سیستم رایانهای خوش ساخت و یک طراحی خوب است و اگر با چسبندگی بالا نیز همراه شود، باعث افزایش خوانایی و قابلیت نگهداری میشود.
انواع جفتگری [ویرایش]
جفتگری ممکن است زیاد (جفتگری قوی یا سفت) و یا کم (جفتگری ضعیف یا شل) باشد. برخی از انواع جفتگری به ترتیب نزولی از بیشترین تا کمترین میزان جفتگری عبارتند از:
- جفتگری محتوا(Content Coupling)
- در این نوع جفتگری یک ماژول از برنامه به جزئیات داخلی یک ماژول دیگر وابسته است و یا آن را تغییر میدهد.(مثلاً دسترسی به دادههای محلی یک ماژول دیگر)
- جفتگری مشترک (Common Coupling)
- زمانی است که دو ماژول یک داده سراسری (مانند یک متغیر سراسری) را به اشتراک میگذارند.
- جفتگری بیرونی(External Coupling)
- زمانی رخ میدهد که دو ماژول به طور مشترک از یک پروتکل ارتباطی یا فرمت دادهای و مشابه آنها که از یک منبع بیرونی به سیستم تحمیل میشود استفاده میکنند.
- جفتگری کنترلی(Control Coupling)
- وقتی است که یک ماژول روند اجرای یک ماژول دیگر را از طریق ارسال اطلاعات مربوط به کاری که باید انجام شود کنترل میکند.
- جفتگری ساختار داده(Data Structured Coupling)
- وقتی که دو ماژول از یک ساختار دادهای مشترک استفاده میکنند اما هرکدام تنها به بخشی از آن نیاز دارند.
- جفتگری پیام(Message Coupling)
- ضعیفترین نوع جفتگری است که در آن ماژولها به یکدیگر وابسته نیستند بلکه تنها با استفاده از یک واسط عمومی به تبادل پیامهای بدون پارامتر میپردازند.
استاندارد مؤسسه مهندسان برق و الکترونیک [ویرایش]
این استاندارد توسط مؤسسه مهندسان برق و الکترونیک ارایه شده و مشتمل بر ۶ جفتگری است این استاندارد تا حد زیاد با آنچه گلنفورد مِیِرز در سال ۱۹۷۴ ارایه داده شباهت دارد ولی تفاوتهای نیز وجود دارد.
- جفتگیری عِلی (Pathlogical Coupling): دو ماژول از طریق دادهٔ مشترک با یکدیگر به ارتباط میپردازند.
- جفتگیری مشترک (Common couplin): یک ماژول محتوی ارجاعی به ماژول دیگر باشد. این رابطه میتواند در قالب رابطهٔ بخشی-از (part-of) و ارثبری رخ دهد.
- جفتگیری ترکیبی (Hybrid Coupling): پارامتری که همزمان به عنوان داده و نیز کنترل کنندهٔ جریان عمل مینماید. برای مثال ارسال عدد صفر به صورتی که داده است و اعلام مینماید که پیغام فرستاده شده قابل درک نیست.
- جفتگیری محیط مشترک (Common-Enviroment Coupling): از طریق دادهٔ مشترک با یکدیگر ارتباط برقرار مینمایند.
- جفتگیری دادهای (Data copling): از طریق یک دادهٔ ساده ماژولها ارتباط برقرار مینمایند.
- جفتگیری کنترلی (Control Coupling): ماژول تاثیری در کنترل ماژول دیگری از طریق ارسال داده به هر نحو داراست.[۳]
این استاندراد اگرچه از لحاظ لغوی به بررسی پرداخته، برخی از جنبهها را فراموش نموده که مهمترین آن، به دلیل قدیمی بودن و عدم روزآوری، درنظر نگرفتن برنامهنویسی شیذگراست. تد فیسون از جهت دیگری به مسالهٔ جفتگری نگاه نموده و آن را از دو جهت بررسی نموده: «ذات» و «گونه». از لطاظ ذات، جفتگری به دو بخش ایستا و پویا تقسیم میگردد. در بخش ایستا، تا زمانی که تمام ماژولها فراهم نباشد اصولاً برنامه قادر به کامپایل شدن نمیباشد. ذات پویا نیز خواستار کد اجرایی برنامه در حین اجراست.[۴]
از نظر گونه به سه زیر دستهٔ «جفتگری براساس گونه»، «جفتگری منطقی» و نیز «جفتگری براساس امضا» تقسیم میشوند.
| نوع جفتگری | زیر مجموعه | شرح | ذات | مثال |
|---|---|---|---|---|
| منطقی | الگوریتم | دو ماژول براساس یک الگوریتم و به صورت غیر مستقیم با یکدیگر در ارتباط هستند، در صورت تغییر یک از آنها دیگری نیز باید تغییر نماید | پویا | خواندن/نوشتن، رمزنگاری/رمزگشایی |
| لیترال | دو ماژول بر روی دادههایی کار مینمایند که مستقیماً بین آنها تبادل نمیشود اما ترتیب آنها از نظر مفهومی بسیار مهم است و هر گونه تغییر در یکی منجر به ساقط اعتبار شدن فهم ماژول دیگر در فهم داده میشود | پویا | ارسال یک آرایه شامل نام و سال | |
| گونه | غیرمبهم | ایجاد یک شی از کلاسی دیگر در همان ماژول یا ماژول متفاوت | پویا | ایجاد شی با استفاده از عملگر new در سی++ |
| مبهم | کلاسی محتوی یک ارجاع به شی دیگر بدون ایجاد مستقیم آن | پویا | دریافت ارجاع به شی از طریق پارمتری در یکی از متدها کلاس جاری | |
| K | کلاسی محتوی یک دادهٔ ثابت از کلاس دیگری باشد | ایستا/پویا | کامپایلر در نوع ایستا قادر به کشف و حذف آن است | |
| سکو | با فراخوانی هریک از کلاسهای پایهٔ سکوی اجرای برنامه، برنامه/ماژول/کلاس به سکوی اجرایش جفت میگردد که قابل حذف و تعدیل نمیباشد | پویا | مثل cout<<"hello!" در سی++ | |
| امضا | ندارد | در این نوع جفتگری، به جای کلاس یا ماژول، دو متد از اشیا به یکدیگر جفت میشوند. این دو شی اطلاعی از وجود یکدیگر ندارند و توسط توسعهگر ثالث و با استفاده از یکسان بودن امضای دو متد صورت میگیرد | پویا | استفاده از delegate در C# و mirror در جاوا |
منابع [ویرایش]
- ↑ W. Stevens, G. Myers, L. Constantine, "Structured Design", IBM Systems Journal, 13 (2), 115-139, 1974.
- ↑ W. Stevens, G. Myers, L. Constantine, "طراحی ساختار یافته"، مجله سیستمهای آی بی ام، ۱۳ (۲), ۱۱۵-۱۳۹, ۱۹۷۴.
- ↑ «استاندراد ۶۱۰-۱۲-۱۹۹۰: واژههنامه مهندسی نرمافزار» (پیدیاف). بازبینیشده در ۱۴ آوریل ۲۰۱۲.
- ↑ فیسون، تد. «Event-Based Programming: Taking Events to the Limit». [برنامهنویسی رویدادگرا: حدنهایی رویدادگرایی]. ایپرس APress، ۲۰۰۶. شابک ۲-۶۴۳-۵۹۰۵۹-۱-۹۷۸.