# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > مباحث و مقالات فراگیر مهندسی نرم افزار >  Coupling و Separation of concerns و Design by contract

## قله بلند

با عرض سلام خدمت دوستان و اساتید محترم

من در مورد سه واژه Coupling و Separation of concerns و Design by contract که در نرم افزار مطرح هستند راهنمایی می خواهم.

در این مورد سه متن را نیز ترجمه کرده ام ولی هنوز مفهوم آنها را درک نکرده ام. مقاله و یا کتاب آموزشی الکترونیکی نیز در مورد آنها به فارسی پیدا نکرده ام. از دوستان تقاضای راهنمایی دارم.

----------


## JaguarXF

کانترکت رو در حالت ساده شده میتونی همون سیگنچر متد ها بدونی.
توی design by contract ، کانترکت رو برای همه اعضای مهم کلاس مینویسید حتی اگه پابلیک هم نباشند.
همچنین یک بخش invariants داره که چیزهایی رو تعریف میکنه که state اونها نباید قبل و بعد از یک متد تغییر کنه.

این کتاب رو مراجعه کن. کسی هست که کلا این موضوع رو مطرح کرده:
http://www.amazon.com/Object-Oriente.../dp/0136291554
اون دوتای دیگه که نوشتی هم همه شون به هم ربط دارند همراه با coherence . 

این ها رو صبر کنید توی درس شی گرایی لیسانس بهتون یاد میدند.

----------


## قله بلند

با سلام خدمت شما جناب JaguarXF گرامی</p>
اگر یادتان باشد شما این سه واژه را در بحثی تحت عنوان "راهنمایی در مورد آینده شغلی" و در یکی از پست هایتان به صورت لینک مطرح کردید.

من این سه لینک را که از ویکیپدیای انگلیسی بود استخراج کردم و شروع به ترجمه آنها نمودم ولی هنوز درک درستی از آنها پیدا نکرده ام. مقاله یا کتاب الکترونیکی فارسی هم در این زمینه پیدا نکردم.

می خواستم به خودتان پیام خصوصی بدهم که در این سه زمینه من را راهنمایی بفرمایید ولی تصمیم گرفتم که به صورت یک پست مستقل مطرح کنم.

من لیسانس نرم افزار هستم ولی تا به حال این سه واژه را نه درون کتاب هایم خوانده ام و نه از دهان اساتیدم شنیده ام. تنها چیزهایی که از شیء گرایی آموخته ام همان کپسوله سازی، چند ریختی و ارث بری است.

شما در آن پست من را با این سه واژه آشنا کردید. حالا نمی دانم اینها با سه مبحث کپسوله سازی، چند ریختی و ارث بری چقدر ارتباط دارند.

ماشاء الله اینقدر شما در این زمینه ها مطلب می دانید که وقتی من آن پست را خواندم کمی ترسیدم که بی سوادی من کجا و سواد شما کجا.

به همین خاطر درخواستی از شما دارم و آن اینکه سطح خود را تا علم من پایین بیاورید تا من هم منظورتان را متوجه شوم.  

آن کتابی را که شما لینک ان را در پست قبلی دادید که پولی است. آیا راهی برای دانلود مجانی آن وجود دارد؟


با تشکر فراوان

----------


## JaguarXF

آقا قربون دستت اون پستت رو ویرایش کن ! یه چیزی در حد "میشه بیشتر توضیح بدی"  کفایت میکنه! 
من با معدل 14-15 به زور یه لیسانس گرفتم!
/
کتاب رو pdf ندارم . خودشو داشتم برای درس .  بعدش هم طبق معمول دست دوم فروختمش!
/
این هم برای DBC توی گوگل دیدم . خوب بود . نگاهی بنداز : راحت مثال زده قدم به قدم.
http://www.javaworld.com/javaworld/j...ls.html?page=1
/
قبل از همه اینها ، پیشنیاز " "آشنایِ" با UML . 

موفق باشی.د

----------


## قله بلند

با سلام. دستتون درد نکنه. می بخشید که اذیت شدید ولی من یک بار دیگر متن را خواندم اما اشکال تایپی پیدا نکردم تا ویرایش کنم

----------


## cups_of_java

> Coupling


به معنای میزان ارتباط بین اجزای (ماژول ها، کلاس ها، کامپوننت هاو ...) نرم افزار هستش. یعنی اینکه اجزا چقدر به هم وابسته هستند و با هم درگیر هستند تا کارشون رو انجام بدن. هرچی این وابستگی (Coupling) بیشتر باشه سیستم درهم تر و پیچیده تر میشه و نگهداری و اعمال تغییر و گسترشش هم سخت تر میشه.




> Separation of concerns


این یک دید و یا فلسفه فکری هست. یک الگو که به شما میگه سعی کن در حل مسله (طرح راه حل) اون موضوع هایی که به هم ربط ندارن رو جدا ببینی! یعنی اینکه بتونی مواردی که به هم وابستگی ندارند رو جدا طرح و حل کنی. نه اینکه موضوع های مختلف رو باهم قاطی کنی. این کار موضوعیت (Cohesion) رو بالا میبره.
این لغت خیلی جا ها تو علم نرم افزار به کار میره و هر جا به طور خاص به موضوع خاصی اشاره می کنه. به طور کلی می تونی ویکی رو ببینی.





> Design by contract


این مفهوم رو آقای B. Meyer ابداع کرد و به طور ساده می خواد بگه که برای هر چیزی که طرح می کنید به طور مشخص و دقیق بگید که چیکار می کنه (چه انتظاری ازش میره)، چه ورودی ای میگیره و شرایط اجراش چیه؟ (Precondition) و اینکه بعد از اجراش وضعیت سیستم (خروجیش) چیه؟ (Postcondition)
اجراش چه تاثیری تو سیستم میزاره؟ (Side effects) و...
دقیقش رو اینجا می تونی بخونی.
این مقاله هم قشنگه.

----------


## piroozman

ضمن تقدیر و تشکر از دوستان، توصیه میکنم مقاله زیر را در خصوص Design by contract مطالعه کنند:
http://www.se-topics.ir/topicview?id=40

----------

