درس برًاهِسازی پیشرفتِ بِ زباى جاٍا هْدی عیٌعلی بِ ًام خدا (Refactoring)هقدهِای بر بازآرایی Any fool can write code that a computer can understand. Good programmers write code that humans can understand. Martin Fowler by: einali{at}[ ce.sharif.edu | gmail.com] هْدی عیٌعلی درس برًاهِسازی پیشرفتِ بِ زباى جاٍا فْرست هطالب ٔمذٔ2 ......................................................................................................................... ٝ داػتبٖ وذ وثیف 3 .............................................................................................................. سیـ ٝوذ وثیف 7 ............................................................................................................ ثبصآسایی چیؼت؟ 7 .............................................................................................................. آصٔٚ ٖٛاحذ8 ................................................................................................................ ٔضایبی ثبصآسایی 9 ............................................................................................................ وال ٜجذیذی ثشای ثبصآسایی 01 ................................................................................................. خـتٟبی خبْ00 ................................................................................................................ وذ تىشاسی 02 .............................................................................................................. ٔتذ ًٛال٘ی 03 ............................................................................................................. والع ثضسي 04 ............................................................................................................ فٟشػت ثّٙذ پبسأتشٞب 05 ................................................................................................... تغییش ٚاٌشا 06 ............................................................................................................... جشاحی ػبچٕٟٟب 06 ........................................................................................................ چـٓ داؿتٗ ث ٝأىب٘بت دیٍشاٖ 07 ........................................................................................ خٛؿٟٟبی داد08 .......................................................................................................... ٜ تٛكیٟٟبی ٔشثٛى ث ٝخٛا٘بیی وذ 08 ........................................................................................... وذ تٕیض 09 ..................................................................................................................... ٔٙبثغ 21 ........................................................................................................................ هقدهِ ]by: einali{at}[ ce.sharif.edu | gmail.com درس برًاهِسازی پیشرفتِ بِ زباى جاٍا هْدی عیٌعلی ثش٘بٔٛ٘ ٝؿت ٝؿذ ٜیب ٕٞبٖ وذ خشٚجی ثؼیبسی اص پشٚطٜٞبی ٘شْافضاسی اػت .ؿبیذ ثتٛاٖ ٌفت حتی ثب پیـشفت تِٛیذ ٘شْ- افضاسٞب ٚایجبد اثضاسٞبیی ثشای تِٛیذ ٘شْافضاس اص ػٌح تجشیذ ثبالتش ،دس آیٙذ٘ ٜیض ٕٞچٙبٖ وذی و ٝتٛػي ٔبؿیٗ خٛا٘ذٚ ٜ اجشا ؿٛد ث ٝػٛٙاٖ خشٚجی اكّی وبس ٟٔٙذػبٖ ٘شْافضاس ثبلی خٛاٞذ ٔب٘ذ .اص ایٗ سٚػت و ٝتٛج ٝث ٝویفیت ایٗ خشٚجی إٞیت صیبدی داسد. ٕ٘ٛداس صیش یه ساثٌ ٝثیٗ ثٟشٜٚسی تیٓ تِٛیذ ٚصٔبٖ ثشای یه وذ وثیف سا ٘ـبٖ ٔیدٞذٙٔ .ظٛس اص ثٟشٜٚسی ٔیضاٖ ٞضیٝٙ ٚصٔب٘ی اػت و ٝثبیذ ثشای افضٚدٖ ٚیظٌیٞبی جذیذ ث ٝثش٘بٔ ٝكشف ؿٛد. ٕٞبٌ٘ٛس ؤ ٝـبٞذٔ ٜیوٙذ ثب ٌزؿت صٔبٖ ثشای یه وذ وثیف 0ثٟشٜٚسی ث ٝؿذت پبییٗ ٔیآیذ .صیشا وذ وثیف ٔبٞیت ٔؼشی داسد.یؼٙی آ٘ىٍٙٞ ٝبْ افضٚدٖ وذ ث ٝوذ وثیف احتٕبَ ایٙى ٝوذ جذیذ ٘یض وثیف ٘ٛؿت ٝؿٛد خیّی ثیـتش اص آٖ اػت و ٝوذ تٕیض ٘ٛؿت ٝؿٛد .ث ٝػجبست دیٍش ٔیتٛاٖ ٌفت ؤ ٝیضاٖ وثیف ثٛدٖ یه وذ ث ٝؿىُ ٕ٘بیی افضایؾ پیذا ٔیوٙذٚ . اص ایٗ س ٚثٟشٜٚسی تیٓ ث ٝؿىُ ٕ٘بیی وبٞؾ پیذا ٔیوٙذ ٚثٔ ٝشٚس ث ٝكفش ٔیُ ٔیوٙذ. ایٗ ٔؼتٙذ تالؽ ٔیوٙذ یه ٔمذٔ ٝدس خلٛف ویفیت وذ ٚسٚؽٞبی ثٟجٛد آٖ اسای ٝدٞذ. داستاى کد کثیف 0 دس ایٗ ٔؼتٙذ اكٌالح وذ وثیف( )Messy Codeدس ٔمبثُ وذ تٕیض( )Clean Codeثشای خشٚجی ثش٘بٔٛ٘ٝیؼی ثذ دس ٔمبثُ ثش٘بٔٛ٘ٝیؼی خٛة اػتفبد ٜؿذ ٜاػت. ]by: einali{at}[ ce.sharif.edu | gmail.com درس برًاهِسازی پیشرفتِ بِ زباى جاٍا هْدی عیٌعلی لٌؼٗ وؼی دٚػت ٘ذاسد وذ وثیف ثٛٙیؼذِٚ .ی چشا ثؼیبسی اص پشٚطٜٞب ث ٝدِیُ وذ وثیف ؿىؼت ٔیخٛس٘ذ؟ چشا ثؼیبسی اص ٘شْافضاسٞب لجُ اص آ٘ى ٝث ٝا٘ذاص ٜػشٔبیٌٝزاسی ا٘جبْ ؿذ ٜثش سٚی آٖٞب اػتفبد ٜؿ٘ٛذ ،دٚس سیخت ٚ ٝدٚثبسٛ٘ ٜؿتٔ ٝیؿ٘ٛذ؟ چشا ثؼیبسی ػبصٔبٖٞبی لبدس ث ٝتغییشات حتی وٛچه ثش سٚی وذٞبی خٛد ٘یؼتٙذ ٚحبهش٘ذ ؤ ٝجبِغ ثؼیبسی اص هشس وٙٙذ ِٚی تٗ ث ٝتغییش وذٞبی ٔٛجٛد خٛد ٘ذٙٞذ؟ ٕ٘یتٛاٖ تٟٙب فشم وشد و ٝدا٘ؾ وٓ ثش٘بٔٛ٘ٝیؼبٖ ٘ؼجت ث ٝوذ ً ٚشاحی خٛة اػت و ٝچٙیٗ ٚهؼی سا پیؾآٚسد ٜاػت. (ٞشچٙذ و ٝایٗ دِیُ ػ ٟٓصیبدی دس ویفیت وٓ ٘شْافضاسٞب داسد!!) دس ادأ ٝداػتبٖ چشخ ٝحیبت یه پشٚط ٕٝ٘ٛ٘ ٜسا پیٔی- ٌیشیٓ تب وٕی دلیكتش ایٗ ٔـىالت سا ثشسػی وٙیٓ. سٚصی سٚصٌبسی دس یه ػبصٔبٖ تیٕی ث٘ ٝبْ (اِف) ثشای ا٘جبْ یه پشٚط٘ ٜشْافضاسی تـىیُ ؿذ .ایٗ تیٓ پغ اص اسای٘ ٝؼخٝ اِٚی ٝثب اػتمجبَ ثخؾٞبی ٔختّف ػبصٔبٖ (یب ٔـتشیبٖ) ٔٛاج ٝؿذ .حبال تیٓ دس فـبس ؿذیذ وبسثشاٖ ثشای افضٚدٖ ٚیظٌیٞب ٚأىب٘بت جذیذ ٚپـتیجب٘ی اص استجبًبت جذیذ لشاس داؿتٔ .ذیشاٖ تلٕیٓ ٌشفتٙذ و ٝثب ٚهغ صٔبٖثٙذیٞبی ػخت ٚ افضایؾ ٞضیٞٝٙبی دس وٕتشیٗ صٔبٖ ٕٔىٗ تغییشات صیبدی دس وذ داد ٜؿٛد. ؿبیذ ثتٛاٖ ایٗ داػتبٖ سا ثٌٝ٘ٛ ٝای دیٍش ثشای تیٓ (ة) تؼشیف وشد .پغ اص اسای٘ ٝؼخ ٝاِٚی ٝو ٝثب تبخیش ٕٞشا ٜثٛد ،تیٓ (ة) ٔتٛج ٝؿذ و ٝث ٝدِیُ تحّیُ ٘بدسػت ٚفشایٙذ اؿتجب ٜتِٛیذ ٘شْافضاس ٔحل َٛتِٛیذ ؿذٌٙٔ ٜجك ثب ٘یبصٔٙذیٞبی وبسثشاٖ ٘یؼت .پشٚص ٜث ٝدِیُ تبخیشٞبی ٔىشس وبٔال اص چٟبسچٛة ٞضی ٚ ٝٙصٔبٖ پیؾثیٙی ؿذ ٜخبسج ؿذ ٜاػت .حبال پشٚطٜ خٌش ؿىؼت وبُٔ سٚثشٚػت ٘ ٚیبص ث ٝیه الذاْ هشثتی ثشای خشٚج اص ثحشاٖ ؿذیذا احؼبع ٔیؿٛد. یه سٚایت دیٍش اص داػتبٖ ثشای تیٓ (ج) ٚجٛد داسد .ایٗ تیٓ ثشای ا٘جبْ یه پشٚط ٜتـىیُ ؿذ و ٝدس اثتذا دسن دسػتی اص اثؼبد ٚصٔبٖثٙذی پشٚطٚ ٜجٛد ٘ذاؿت .ثٕٞ ٝیٗ دِیُ صٔبٖثٙذی ثؼیبس وٕتشی ثشای پشٚط ٜدس ٘ظش ٌشفت ٝؿذ .حبال ٘ضدیه ػشسػیذ 0ا٘جبْ پشٚط ٜاػت ٚتیٓ ثب یه ٚهؼیت ثحشا٘ی سٚثشٚػت. Deadline 1 ]by: einali{at}[ ce.sharif.edu | gmail.com درس برًاهِسازی پیشرفتِ بِ زباى جاٍا هْدی عیٌعلی اص ایٙجب لل ٝتیٓ (اِف) ( ،ة) ( ٚج) ث ٝیه ؿىُ ادأ ٝپیذا ٔیوٙذ.یه جّؼ ٝثحشاٖ تـىیُ ٔیؿٛد ٕٝٞ ٚاػوبی تیٓ ٔتؼٟذ ٔیؿ٘ٛذ و ٝتٕبْ تالؽ خٛد سا ثشای دسػت ؿذٖ اٚهبع ثىٙٙذ .ثب تالؽ ؿجب٘ٝسٚصی تیٓ ػؼی ٔیوٙذ و ٝاص ٚهؼیت ثحشا٘ی خبسج ؿٛد ٕٝٞ ٚچیض سا ث ٝحبِت ػبدی ثشٌشدا٘ذ .ایٗ اتفبق ٔیافتذ ٚحبال تیٓ ث ٕٝٞ ٝػشسػیذٞبی خٛد سػیذٜ اػت ٔ ٚذیشاٖ ثؼیبس ساهی ٞؼتٙذ. ؿت ػشسػیذ ؤ ٝذیش تیٓ دیشٚلت خؼت ٝث ٝػٕت خب٘ ٝخٛد ٔیسٚد ٔتٛج ٝیه اتفبق ػجیت ٔیؿٛؿذ .ا ٚثب خٛد فىش ٔی- وٙذ و ٝثً ٝشص ػجیجی دس سٚصٞبی ٔٙتٟی ث ٝػشسػیذ ثٟشٜٚسی تیٓ ث ٝؿذت افضایؾ پیذا وشد ٜثٛد ٚاػوبی تیٓ وذٞبی ٔح َٛؿذ ٜث ٝخٛدؿبٖ سا ثؼیبس ػشیغتش اص چٙذ ٚلت پیؾ تحٛیُ ٔیداد٘ذٔ .ذیش تیٓ ثب خٛد فىش وشد و ٝحتٕب احؼبع ٔؼئِٛیت ثیـتش اػوبی تیٕؾ ثبػث افضایؾ ثٟشٜٚسی آٟ٘ب ؿذ ٜاػت. ثؼذ اص ٔذتی (ٔثال چٙذ ٔب ٜیب یه ػبَ) وٓوٓ ٕٝٞتٛج ٝثخؾٞبیی اص وذ ؿذ٘ذ و ٝثً ٝشص وثیفی ٘ٛؿتٝؿذ ٜثٛد .وٓوٓ ثٟشٜٚسی تیٓ دس حبَ وبٞؾ ثٛدٚ .لتی ثش٘بٔٛ٘ٝیؼبٖ ثشای دیشوشد ػشسػیذٞبی خٛد ٔٛسد ٔٛاخز ٜلشاس ٔیٌشفتٙذ ،صٔبٖ صیبد یىپبسچٝػبصی ثب وذ فؼّی یب اػتفبد ٜاص آٖ سا ث ٝػٛٙاٖ دِیُ اسایٔ ٝیوشد٘ذ. حبال ٔذیشاٖ ثشای وبٞؾ ثٟشٜٚسی افشاد سا ٔملش ٔیدا٘ٙذ ٚػؼی ٔیوٙٙذ ثب جبثجبیی افشاد یب اػتخذاْ ٘یشٞٚبی جذیذ ٚهؼیت سا ثٟتش وٙٙذ .افشاد جذیذی و ٝث ٝپشٚط ٜاهبفٔ ٝیؿ٘ٛذ ث ٝدِیُ وذ وثیفی ؤ ٝیثیٙٙذ ٕ٘یتٛا٘ٙذ دیذ دسػتی اص ًشاحی وذ ث ٝدػت آٚس٘ذ ٚثب وذٞبیی جذیذی و ٝثب چـٕبٖ ثؼتٔ ٝی٘ٛیؼٙذ ٔٛجت وثیفتش ؿذٖ وذ ٔیؿ٘ٛذ. ]by: einali{at}[ ce.sharif.edu | gmail.com درس برًاهِسازی پیشرفتِ بِ زباى جاٍا هْدی عیٌعلی ػشا٘جبْ یه ؿٛسؽ دس ػبصٔبٖ اتفبق ٔیافتذ .ثالخش ٜاػوبی تیٓ اص ایٗ ٚهؼیت ث ٝت ًٙآٔذٔ ٚ ٜذیشاٖ سا ٔجبة ٔیوٙٙذ و ٝثب تـىیُ یه تیٓ جذیذ ٚاػتفبد ٜاص فٙبٚسیٞبی جذیذ ٔیتٛاٖ ًشحی ٘ ٛدس ا٘ذاخت ٚتٕبٔی ایٗ ٔـىالت سا ث ٝساحتی دس صٔبٖ وٕی حُ وشد .ػبصٔبٖ ثالخش ٜساهی ٔیؿٛد و ٝیه تیٓ حشفٝای 0ثشای ایٗ وبس تـىیُ دٞذ. ٕٝٞدٚػت داس٘ذ و ٝدس ایٗ تیٓثبؿٙذ صیشا آ٘جب ٔیتٛا٘ٙذ ثب فٙبٚسیٞبی جذیذ وبس وٙٙذ ٚآصادی ػُٕ ثیـتشی داؿت ٝثبؿٙذ أب ػٕٔٛب ایٗ تیٓٞب ثب اػوبی جذیذ و ٝفٙبٚسیٞبی جذیذ سا ٔیؿٙبػٙذ ِٚ ٚی ثب ٌٔٙك وؼتٚوبس ػبصٔبٖ ثیٍب٘ٞ ٝؼتٙذ تـىیُ ٔیؿٛد .اػوبی پشٚط ٜلذیٕی وٙبس ٌزاؿتٔ ٝیؿ٘ٛذ ٚاص ایٗ س ٚحغ ثؼذی ٘ؼجت ث ٝاػوبی تیٓ جذیذ پیذا ٔی- وٙٙذ. حبال ٞش د ٚتیٓ دس حبَ سلبثت ٞؼتٙذ .تیٓ جذیذ ثبیذ ٘شْافضاسی ثؼبصد وٝ٘ ٝتٟٙب ٕٝٞوبسٞبی ٘شْافضاس لذیٕی سا ا٘جبْ ٔی- دٞذ ٚأىب٘بت جذیذتشی سا ٘یض خٛاٞذ داؿت ثّى ٕٝٞ ٝدسخٛاػتٞبی تغییش 2و ٝدس حبَ حبهش ثش سٚی ػیؼتٓ لذیٕی دس حبَ اجشا اػت ،ثبیذ دس ػیؼتٓ جذیذ حیٗ ػبختٝؿذٖ اػٕبَ ؿٛد. ٔذیشیت اػالْ وشد ٜاػت و ٝتٟٙب صٔب٘ی و ٝػیؼتٓ جذیذ وبُٔ ؿٛد ٚثتٛا٘ذ ٕٝٞوبسٞبی ٔشثٛى ث ٝػیؼتٓ لجّی سا ثٝ دسػتی ا٘جبْ دٞذ اجبص ٜثٝوبسا٘ذاصی 3آٖ سا خٛاٞذ داد. صٔبٖ تِٛیذ ٘شْافضاس جذیذ ثؼیبس ًٔ َٛیوـذ ٚوٓوٓ ٘شْافضاس جذیذ ث ٝیه ػیؼتٓ صیجب ِٚی ٘بوبسآٔذ دس ٔمبثُ ٘شْافضاس لذیٕی صؿت ِٚی وبسا دس ػبصٔبٖ ؿٙبختٔ ٝیؿٛد اججبس وبسثشاٖ ث ٝاػتفبد ٜاص آٖ ػخت ٚػختتش ٔیؿٛد .وٓوٓ اػٕبَ تغییشات سٚی ػیؼتٓ لذیٕی ث ٝأیذ آ٘ى ٝػیؼتٓ جذیذ ػٙمشیت ثب تٕبٔی ٚیظٌیٞبی جذیذ آٔبد ٜخٛاٞذ ؿذ ٔتٛلف ٔیؿٛد ٙٔ ٕٝٞ ٚتظش ػیؼتٓ جذیذ ٔیٔب٘ٙذ. أب ػیؼتٓ جذیذ ثب ٔـىالت صیبدی ثشای پیبد ٜػبصی سٚثشٚػت ٕ٘ ٚیتٛا٘ذ ػشسػیذٞبی تغییش ؿذ ٜسا ٔحمك وٙذ .ثالخشٜ ایٗ ثبس ٔذیشاٖ ؿٛسؽ ٔیوٙٙذ ٚتیٓ جذیذ سا ٔججٛس ٔیوٙٙذ و ٝتب ػشسػیذ ٔـخلی ٘شْافضاس جذیذ سا ث ٝوبسثیٙذاص٘ذ ٌٚش٘ٝ پشٚطٔ ٜتٛلف خٛاٞذ ؿذ. ثبس دیٍش جّؼ ٝثحشاٖ ایٗ ثبس دس تیٓ جذیذ تـىیُ ٔیؿٛد .ثشای ادأ ٝداػتبٖ ایٗ ثخؾ سا دٚثبس ٜاص ا َٚایٗ ثبس ثشای تیٓ- جذیذ ثخٛا٘یذ!! 1 Tiger Team 2 – Change Requestاكٌالحٗ ث ٝدسخٛاػتٞبیی تٛػي وبسثشاٖ ثشای تغییش ثش سٚی ػیؼتٓ ٘شْافضاسی دادٔ ٜیؿٛدٔ ،یٌٛیٙذ .دس فبص ٍٟ٘ذاسی ٘شْافضاس تغییشات اص ًشیك دسخٛاػتٞبی تغییش ٚپغ اص ًی یه فشایٙذ ٔذ ٖٚتبییذ ٚثش٘بٔٝسیضی ثش سٚی ػیؼتٓ اػٕبَ ٔیؿ٘ٛذ. 3 Deployment ]by: einali{at}[ ce.sharif.edu | gmail.com هْدی عیٌعلی درس برًاهِسازی پیشرفتِ بِ زباى جاٍا ریشِ کد کثیف ؿبیذ ثتٛاٖ ٟٔٓتشیٗ ػّت ایجبد وذ وثیف تٛػي ثش٘بٔٛ٘ٝیؼبٖ ثبػٛاد حشفٝای 0سا ثٛدٖ دس تحت فـبس ػشسػیذٞب دا٘ؼت. ٍٙٞبْ ٘ضدیه ؿذٖ ث ٝػشسػیذٞبی ثش٘بٔٛ٘ٝیؼبٖ ث ٝكٛست ٘بخٛداٌب ٜثخـی ای فیّتشٞبی رٙٞی خٛد دس خلٛف ویفیت ثش٘بٔٛ٘ٝیؼی سا خبٔٛؽ ٔیوٙٙذ تب ثتٛا٘ٙذ ثب آصادی ػُٕ ثیـتشی ث ٝػشسػیذ ٔٛسد ٘ظش ثشػٙذ. ایٗ جّٕ" ٝفؼّٗ ثٛٙیؼٕؾ ثؼذٖ دسػتؾ ٔیو٘ "ٓٙـب٘ ٝایٗ ٚهؼیت اػت .ثؼذ٘ی وٞ ٝیچٌب ٜفشإ٘یسػذٔ .ؼئّ ٝفمي فشأٛؿی یب ٘جٛد اساد ٜثشای ثبصٌـت ثٌ ٝزؿت ٚ ٝتغییش وذ ٘یؼت ثّى ٝاص ا٘جبیی و ٝیه ثش٘بٔٛ٘ٝیؼی یه وبس پیچیذ ٜرٙٞی اػت ،ثشٌـت ثٚ ٝهؼیت رٙٞی ٌزؿت ٝثشای فٕٟیذٖ دسػت یب غّي ثٛدٖ تلٕیٕبت ٘یض ثشخی اص اٚلبت ثؼیبس ػخت ٔی- ؿٛد. پزیشفتٗ فـبس ػشػیذ ث ٝػٛٙاٖ سیـ ٝوذ وثیف ٕ٘یتٛا٘ذ تٛجیٟی ثشای ػّت ٔؼئِٛیت ثش٘بٔٛ٘ٝیؼبٖ ثشای وبس دس ثش٘بٔٚ ٝ چٟبسچٛةٞبی صٔبٖ ٞ ٚضیٔ ٝٙـخق ثبؿذ .ثّى ٝلجٔ َٛذیشیتپزیشی ٚثش٘بٔٝسیضی ث ٝػٛٙاٖ یه اكُ ثشای پیؾثشد ٞش وبس ٟٔٙذػی یه فشم غیشلبثُ خذؿ ٝاػتِٚ ،ی ٔؼئٌّٔ ٝشح ؿذ ٜتٟٙب ػختی ایٗ وبس ٚدلت ٔٛسد ٘یبص ثشای آٖ سا دس خلٛف یه پشٚط٘ ٜشْافضاسی ٘ـبٖ ٔیدٞذ. بازآرایی چیست؟ ثبصآسایی یه سٚؽ ٔذ ٖٚثشای ثٟجٛد ویفیت وذ ٔٛجٛد ثذ ٖٚتغییش دس ٚاػيٞبی ثیش٘ٚی ٚتبثیش دس اػتفبدٜٞبی آٖ اػت .ثٝ ػجبست دیٍش ثبص٘ٛػی یه فشایٙذ تؼشیف ؿذ ٜثشای تجذیُ وذ وثیف 2ث ٝوذ تٕیض 3اػت. یه تؼشیف دیٍش اص ثبصآسایی ثٟجٛد ًشاحی ثؼذ اص ٘ٛؿتٝؿذٖ وذ اػت .ؿبیذ ایٗ تؼشیف وٕی ػجیت ث٘ ٝظش ثشػذ صیشا وٝ ػٕٔٛب وذ٘ٛیؼی ثؼذ اص ًشاحی ا٘جبْ ٔیؿٛدٔ .ؼئّ ٝایٗ اػت و ٝیه وذ٘ٛیؼی دسػت ثؼذ اص یه ًشاحی خٛة اتفبق ٔی- افتذ ٚپغ اص ٔذتی و ٝوذ تغیش ٔیوٙذ ،یىپبسچٍی 4ػیؼتٓ ٚػبختبس ًشاحیؿذ ٜثشای آٖ ،وٓوٓ وٕشً٘ ٚوٕشً٘تش ٔی- ؿذ ٚ ٜپغ اص ٔذتی ٔحٔ ٛیؿٛد .دس ایٗ ٍٙٞبْ افضٚدٖ وذ ث ٝچٙیٗ ثش٘بٔٝای ث ٝجبی یه فشایٙذ ٟٔٙذػی ثیـتش ث ٝیه وبس ٚكّٝپی ٝٙوشدٖ تجذیُ ٔیؿٛد. 0 ثشای ثش٘بٔٛ٘ٝیؼبٖ ٔجتذی ٚثیػٛاد ٕٞچٙبٖ ٘ذاؿتٗ دا٘ؾ دس خلٛف ویفیت وذ ً ٚشاحی ،دِیُ اكّی وذ ثذ اػت. 2 Messy Code Clean Code 4 Integrity 3 ]by: einali{at}[ ce.sharif.edu | gmail.com هْدی عیٌعلی درس برًاهِسازی پیشرفتِ بِ زباى جاٍا فشایٙذ ثبصآسایی ثشای ثٟجٛد ًشاحی ٚحبوٓوشدٖ دٚثبس ٜیه تفىش ٔٙؼجٓ ًشاحی ؿذ ٜث ٝآٖ اػت .ایٗ وبس اص ًشیك تغییشات ػٕٔٛب وٛچىی ثش سٚی ثخؾٞبی ٔختّف وذ اتفبق ٔیافتذ و ٝتبثیش جٕؼی ایٗ تغییشات وٛچه ث ٝایجبد وذی ثب ویفیتتش ٔٙجش ٔیؿٛد. ثخؾٞبیی اص وذ و ٝثٟتش اػت ٔٛسد ثبصآسایی لشاسٌیش٘ذ ،سا ٔیتٛاٖ اص ٘ـب٘ٝایی اص دیٍش وذٞب ثبصؿٙبخت .وتبة ثبصآسایی ٔبستیٗ فبِٚش ث ٝچٙیٗ ٘ـب٘ٞٝبیی ثٛی ثذٌ 0فتٔ ٝیؿٛد و ٝدس ایٗ ٔؼتٙذ ایٗ اكٌالح ثب اكٌالح خـت خبْ 2جبیٍضیٗ ؿذ ٜاػت. آزهَى ٍاحد ٌبْ ا َٚثشای ثبصآسایی وذ ٘ٛؿتٗ آصٖٔٞٛبی ٚاحذٙٔ 3بػت ثشای وذ اػت .ثبصآسایی وذ ٔب٘ٙذ ٞش تغییش دیٍشی دس آٖ ٔحتُٕ اػت ؤ ٝـىالت ٚخٌبٞبی جذیذی سا دس وذ ٔٛجت ؿٛدٛ٘ .ؿتٗ آصٔ ٖٛایٗ أىبٖ سا ٔیدٞذ و ٝپغ اص تغییشات اص ػذْ ایجبد خٌبٌٕٔ 4ئٗ ؿٛیٓ. ثبیذ تٛج ٝداؿت وٞ ٝذف ثبصآسایی تغییش ػبختبس ً ٚشاحی اجضای ثش٘بٔ ٝثذ ٖٚتغییش دس ٚاػيٞبی ثیش٘ٚی آٖٞبػت .آصٖٔٛ ٚاحذ دلیمب ٚظیف ٝإًیٙبٖ اص كحت سفتبس ثیش٘ٚی اجضا سا ثش ػٟذ ٜداسدٞ .ش چٙذ و ٝاٌش وذ ثب فشایٙذ دسػتی ٘ٛؿتٚ ٝ ٍٟ٘ذاسی ؿذ ٜثبؿذ لٌؼب ٔٛاسد آصٔ 5ٖٛوبُٔ ٚدلیمی داسد و ٝثبیؼتی ثب ٞش تغییش وذ دٚثبس ٜاسصیبثی ؿ٘ٛذ. 0 ٔ – Bad Smellجٙبی ایٗ اكٌالح ٌفتٔ ٝبدسثضسي وٙت ثه دس خلٛف و ٟٝٙثچ ٝاػتٚ :لتی ثٛی ثذ ؿٙیذی ثبیذ ثچ ٝسا ػٛم وٙیٙٔ .ظٛس ٘ـب٘ٝای اص یه اتفبق ثذ اػت. 2 خـتی و ٝخٛة پخت٘ ٝـذ ٜثبؿذٔ ،یتٛا٘ذ ثب یه ثبس٘ذٌی اص ثیٗ ثشٚد ٚچ ٝثؼب ػبختٕب٘ی سا فش ٚثشیضد .خـت خبْ ٔیتٛا٘ذ دس یه ثٙبی ثضسي ٔیتٛا٘ذ ث ٝػٛٙاٖ یه ٘مٌٝ هؼف ثبِم ٜٛثبلی ثٕب٘ذ ٚچ ٝثؼب صٔب٘ی ٔٛجت فشٚسیختٗ ثٙب ؿٛد .اص ایٗ س ٚؿبیذ ثتٛاٖ ٌفت و ٝخـت خبْ ٔؼٙبی دلیكتشی اص اكالحی و ٝفبِٚش دس وتبثؾ ث ٝوبس ثشدٜ اػت سا دس خٛد داسد .جبیٍضیٗ وشدٖ لٌؼٝوذٞبیی ثب ًشاحی ثذ دس یه ٘شْافضاس ثؼیبس ؿجی ٝجبیٍضیٗ وشدٖ خـتخبْ دس یه ػبختٕبٖ اػت. یه خـت خبْ دس یه ثٙبی ثضسي ٔیتٛا٘ذ صٔیٝٙػبص ایجبد آجش ػِِّٕٙبس ثبؿذ .ػِِّٕٙبس ٔؼٕبس ایشا٘ی صٔبٖ ػبػب٘یبٖ ثٛد و ٝللش ثؼیبس ثبؿىٞٛی ثشای ٘ؼٕبٖ ؿب ٜحیش ٜػبخت ٚچ ٖٛثٙب ث ٝاتٕبْ سػیذ ؿب ٜاص ٔؼٕبس پشػیذ آیب ٘مٌ ٝهؼفی دس ایٗ ثٙب ٔیؿٙبػی؟ ػِِّٕٙبس پبػخ داد و ٝآجشی دس ثٙب ٔیؿٙبػذ و ٝاٌش آٖ سا ثشداسد ،وُ للش فشٔ ٚیسیضد .پغ پبدؿب ٜدػتٛس داد ،و ٝا ٚسا اص ثبالی للش ث ٝصیش ثیب٘ذاص٘ذ .ثشخی سٚایتٞب ایٗ ٌ ٝ٘ٛاػت و ٝچ ٖٛثٙب ث ٝاتٕبْ سػیذ ٘ؼٕبٖ چٙبٖ دس ؿى ٜٛثٙبی ػِِّٕٙبس ٔتحیش ؿذ و ٝاص ثیٓ آ٘ىٝ ػِِّٕٙبس ثٙبی ؿجی ٝث ٝآٖ سا ثشای دیٍشی ثؼبصد ،دػتٛس لتُ ا ٚسا داد ٙٔ.ظٛس اص آجش ػٕٙبس ٘مٌ ٝهؼفی وٛچه دس ػبختٕب٘ی ثضسي اػت ؤ ٝیتٛا٘ذ ٚیشا٘یٞبی ثضسي ث ٝثبس آٚسد .ثٟشاْ ثیوبیی ٕ٘بیـٙبٔ ٝصیجبیی ث٘ ٝبْ "ٔجّغ لشثب٘ی ػِِّٕٙبس" دس خلٛف ایٗ ٟٔٙذع ٙٞشٔٙذ ٘ٛؿت ٝاػت. 3 Unit Test 4 Bug 5 TestCase ]by: einali{at}[ ce.sharif.edu | gmail.com درس برًاهِسازی پیشرفتِ بِ زباى جاٍا هْدی عیٌعلی آیٗ آصٖٔٞٛبی ثبیؼتی ًی فشایٙذ ثبصآسایی ث ٝكٛست ٔذا ٚ ْٚپغ اص ٞش تغییشی دٚثبس ٜاجشا ؿ٘ٛذ .یىی اص ٟٔٓتشیٗ ٔضایبی آصٔ ٖٛخٛدوبس ،تىشاسپزیشی آٖ اػت پغ اٌش آٖ سا یىجبس ٚپغ اص ا٘جبْ ٕٝٞتغییشات اجشا وٙیذ اص ٔضیت اكّی آٖ ثٟشٜ ٘جشدٜایذ. هسایای بازآرایی .0ثبصآسایی ًشاحی سا ثٟجٛد ٔیثخـذ. ویفیت ًشاحی یه ثش٘بٔ ٝثب افضٚد ٜؿذٖ أىب٘بت جذیذ ٚاػٕبَ تغییشات ٕٞیـ ٝس ٚث ٝاف َٛاػت ٚثبصآسایی تالؿی اػت دس جٟت ثبسٌشدا٘ذٖ تفىش ًشاحی ث ٝثش٘بٔٝ .2ثبصآسایی ثش٘بٔ ٝسا لبثُ فٟٓتش ٔیوٙذ. وبٔپیٛتشٞبیی و ٝثش٘بٔٞٝب سا اجشا ٔیوٙٙذ تٟٙب اػتفبدٜوٙٙذٌبٖ وذٞب ٘یؼتٙذ .ثّى ٝثش٘بٔٛ٘ٝیؼب٘ی و ٝدس آیٙذ٘ ٜیض ثبیذ سٚی وذ وبس وٙٙذ ٚثفٕٟٙذ٘ ،یض اػتفبدٜوٙٙذ ٜوذ ٔحؼٛة ٔیؿ٘ٛذ ٚثبیذ ٔذ ٘ظش لشاس ٌیش٘ذٞ .یچ ثش٘بٔ-ٝ ٘ٛیؼی جضئیبت وذی ؤ ٝذتی اص ٘ٛؿتٗ آٖ ٌزؿت ٝاػت سا ث ٝخبًش ٘ذاسدِ .زا خٛد ٘ٛیؼٙذ٘ ٜیض ثؼذ اص ٔذتی اص ایٗ دػت اػتفبدٜوٙٙذٌبٖ خٛد خٛاٞذ ثٛد .ثبصآسایی وٕه ٔیوٙٙذ تب وذ اص ؿىُ یه ٔؼٕبی غیشلبثُ ف ٟٓث ٝكٛست یه ٘ثش ؿیٛا ثشای تٛكیف ٞذف ٘ٛیؼٙذ ٜآٖ دس آیذ. .3ثبصآسایی ثشای وـف خٌبٞب وٕه ٔیوٙذ. خٛد فشایٙذ ثبصآسایی اص آٖ س ٚؤ ٝؼتّضْ ف ٟٓوبُٔ وذ ٔٛجٛد اػتٌٝ٘ٛ ،ای آصٔ ٖٛایؼتبی ٘شْافضاس 0یب ٕٞبٖ ثبصثیٙی وذ 2ث ٝؿٕبس ٔیآیذ. اص ًشف دیٍش ثبصآسایی ٔٛجت ٔیؿٛدٞ ،ذف ٘ٛیؼٙذ ٜوذ سا حذ ٕٔىٗ ث ٝؿىُ ؿفبفی دس وذ ثیبٖ ؿٛد ٚ .ایٗ ٔؼئّ ٝث ٝیبفتٗ خٌبٞب وٕه ٔیوٙذ .خٌبٞب ثؼیبسی اص اٚلبع جبیی اتفبق ٔیافتذ وٞ ٝذف ثش٘بٔٛ٘ٝیغ ث ٝسٚؿٙی ثیبٖ ٘ـذ ٜاػت ٚاثٟبْ صٔی ٝٙاػتفبد٘ ٜبثجب ٚیب تّمی اؿتجب ٜاص ثخؾٞبی ٔختّف وذ سا ایجبد ٔیوٙذ ٚایٗ دلیمب جبیی اػت و ٝثؼیبسی اص خٌبٞب اص آٖ ٘ـبت ٔیٌیش٘ذ. تٛكیف ثیبس٘ ٝاػتشٚػتشٚح اص وذ تٕیض سا ث ٝخٛثی ایٗ ٔف ْٟٛسا ثیبٖ ٔیوٙذ .أ ٚیٌٛیذ وذ تٕیض وذی اػت وٝ پٟٙبٖ ؿذٖ سا ثشای خٌبٞب ػخت وٙذ. .4ثبصآسایی ثش٘بٔٛ٘ٝیؼی سا ػشیغتش ٔیوٙذ. Software Static Test Code Review 1 2 ]by: einali{at}[ ce.sharif.edu | gmail.com درس برًاهِسازی پیشرفتِ بِ زباى جاٍا هْدی عیٌعلی ؿبیذ دس اثتٟب وٕی ػجیت ث٘ ٝظش ثشػذ ِٚی ثبصآسایی ،تٛػؼ ٝثش٘بٔ ٝسا ػشیغتش ٔیوٙذ .ؿبیذ تٛػؼ ٝوذ وثیف دس اثتذا ػشیغتش ث٘ ٝظش ثشػذ ِٚی اٌش دس ثبص ٜصٔب٘ی ًٛال٘ی ث ٝوذی و ٝثً ٝشص وثیفی تٛػؼ ٝپیذا وشدٍ٘ ٜب ٜوٙیٓ ٔیثیٙیٓ و ٝصٔب٘ی ث ٝدِیُ وثیف ثٛدٖ وذ ث ٝصٔبٖ تٛػؼ ٝافضٚد ٜؿذ ٜاػت ثؼیبس ثیـتش اص صٔب٘ی اػت ؤ ٝی- تٛا٘ؼت ثٔ ٝشٚس ثشای تٕیض ٍٟ٘ذاؿتٗ وذ كشف ؿٛد. صیشا ٔیتٛاٖ ٌفت و ٝصٔبٖ ٔٛسد ٘یبص ثشای ثبصآسایی ٕٞیـ٘ ٝؼجت تمشیجب خٌی خٛد سا ثب حجٓ وذ ٚتغییشات اػٕبَ ؿذ ٜثش سٚی آٖ حفظ ٔیوٙذ ِٚی صٔبٖ ٔٛسد ٘یبص ثشای تغییش وذ وثیف ث ٝكٛست ٕ٘بیی افضایؾ پیذا ٔیوٙذ. اص ایٗ س ٚتغییش یه وذ ثبصآساییؿذ ٜتٕیض ٚثب ًشاحی دسػت ٚؿفبف ٕٛٞاس ٜآػبٖتش ،ػشیغتش ٞٓٞ ٚضیٝٙتش اص تغییش دس یه وذ وثیف ثب ًشاحی ٔحٛؿذ ٜاػت. کالُ جدیدی برای بازآرایی وٙت ثه پیـٟٙبد ٔیدٞذ و ٝثش٘بٔٛ٘ٝیؼبٖ ثیٗ ٘مؾ ثبصآسایی ٘ ٚمؾ تٛػؼٌٝشی 0خٛد تٕبیض لبیُ ؿ٘ٛذ .یؼٙی ثخـی اص ٚلت خٛد سا تٟٙب ث ٝافضٚدٖ أىب٘بت جذیذ ٛ٘ ٚؿتٗ ٔٛسد آصٔ ٖٛث ٝآٖ أىب٘بت اختلبف دٙٞذ ٚدس ثخؾ دیٍشی اص ٚلت خٛد تٟٙب ث ٝثبصآسایی وذٞبی ٘ٛؿت ٝؿذٛٔ ٜجٛد ثپشداص٘ذ .ایٗ ٔف ْٟٛسا ثب ٌزاؿتٗ ٔذا ْٚوال ٜتٛػؼٌٝشی یب ثبصآسایی ثش ػش تٛكیف ٔیوٙذ. ایٗ ٔف ْٟٛدس ٚالغ اص وبسٞبی ادٚاسد دٚث ٛ٘ٛپضؿه ،سٚا٘ـٙبع ٛ٘ ٚیؼٙذ ٚ ٜوتبة ٔؼشٚف ا ٚث٘ ٝبْ ؿؾ وال ٜثشای تفىش اخز ؿذ ٜاػتٙٔ .ظٛس اص وال ٜدس ٘ٛؿتٞٝبی اٙٔ ٚظشٌبٜٞبی ٔختّفی ٞؼتٙذ ؤ ٝیتٛاٖ اص دسیچ ٝآٟ٘ب ث ٝیه ٔؼئٍّ٘ ٝبٜ وشد .ایٗ ٔف ْٟٛوٕه ٔیوٙذ دس حیٗ حُ ٔؼئّ ٝثتٛاٖ ثب وٕتشیٗ تبثیش چٟبسچٛةٞبی رٙٞی اص پیؾتؼییٗ ؿذ ٜث ٝكٛست خاللب٘ ٝیه ٔؼئّ ٝسا اص جٙجٞٝبی ٔختّف ٔٛسد ٘مبدی لشاس داد .دس ٚالغ والٜٞبی ٔختّف تفىش ساٞی اػت ثشای وٓتش وشدٖ تبثیش ٔٙفی چٟبسچٛةٞبی رٙٞی اص پیؾ تؼییٗ ؿذ ٜثشای ٔٛاج ٝثب یه ٔٛلؼیت ٘بآؿٙب و٘ ٝیبص ث ٝتفىش خاللیت داسد. دس ٔٛهٛع حبهش كحجت اص وال ٜجذیذ ثشای ثبصآسایی دس ٔمبثُ وال ٜتٛػؼٌٝشی تبویذ ثش جذاػبصی جٙجٞٝبی ٔشثٛى ثٝ ثبصآسایی اص فشایٙذ ٔؼٕ َٛثش٘بٔٛ٘ٝیؼی اػت .یؼٙی ٍٙٞبْ تٛػؼٌٝشی چٟبسچٛة رٙٞی ًٛسی تٙظیٓ ٕ٘ٛد و ٝث ٝا٘جبْ دسػت أىبٖ جذیذ تٕشوض وشد ٚدس ٚلت ثبصآسایی ویفیت ًشاحی ثش٘بٔ.ٝ Add features 1 ]by: einali{at}[ ce.sharif.edu | gmail.com هْدی عیٌعلی درس برًاهِسازی پیشرفتِ بِ زباى جاٍا ایٗ ٔؼئّ ٝث ٝایٗ ٔؼٙی ٘یؼت و ٝدس ٍٙٞبْ افضٚدٖ أىب٘بت جذیذ ثبیذ اص اك َٛحبوٓ ثش ویفیت وذ و ٝدس ثبصآسایی ٔذ ٘ظش اػت غبفُ ؿذ ،ثّى ٝثیـتش تبویذ ثش ایٗ ٘ىت ٝاػت وٌ ٝبٞی اص اٚلبت خلٛكٗ صٔب٘ی و٘ ٝـب٘ٞٝبیی اص خـتٞبی خبْ دس وذ لبثُ ٔـبٞذ ٜاػت ،وال ٜتٛػؼٌٝشی سا ث ٝوٙبسی ٌزاؿت ٚثب وال ٜثبصآسایی ثذ ٖٚدغذغ ٝایٙى ٝوبس ثبصآسایی اص ٘ظش وبسثش یب ٔذیش خشٚجی لبثُ ِٕؼی ٘ذاسد ث ٝتؼٛین خـتٞبی خبْ ثب خـتٞبی پخت ٝپشداخت. یه ثش٘بٔٛ٘ٝیغ حیٗ وبس خٛد ث ٝكٛست ٔذا ْٚوالٞبی ٔختّفی سا ثش ػش ٔیٌزاسد ٚاص ٔٙظشٌبٜٞبی ٔختّف ٘تیج ٝوبس خٛد سا اسصیبثی ٔیوٙذ .ثٌ ٝفت ٝوٙت ثه ٕٛٞاس ٜثش٘بٔٞٝب اص دٙٔ ٚظش اسصؽٌزاسی ٔیؿ٘ٛذ .اسصؿی و ٝثش٘بٔ ٝدس صٔبٖ حبَ داسد ٚاسصؿی و ٝثش٘بٔ ٝثشای آیٙذ ٜداسد .وال ٜتٛػؼٌٝشی ثشای افضایؾ اسصؽ فؼّی ثش٘بٔ ٝاػت ٚوال ٜثبصآسایی ثشای ثٟجٛد اسصؽ آتی ثش٘بٔ.ٝ ثش٘بٔٛ٘ٝیغ ٕٛٞاس ٜدس خلٛف وبسی و ٝثش٘بٔ ٝثبیذ ثىٙذ ٌٕٔئٗ اػت أب وبٔال ٕ٘یدا٘ذ و ٝفشدا ثبیذ ثش٘بٔ ٝچ ٝوبس جذیذی سا ثش ػٟذ ٜثٍیشدِٚ .ی اٌش تٟٙب ث ٝفىش تغییش أشٚص ثبؿذ ،لٌؼٗ ثشای تغییشات فشدا دچبس ٔـىُ خٛاٞذ ؿذ .ثبصآسایی اكالح تلٕیٕبت دسػت دیشٚص اػت و ٝأشٚص اؿتجب ٜث٘ ٝظش ٔیسػذ ،ثشای وٕه دس جٟت وبسٞبیی و ٝفشدا ثبیذ ا٘جبْ ؿٛد. والٜی تٛػؼٌٝشی ثشای اسصیبثی اسصؽ فؼّی ٚوال ٜثبصآسایی ثشای اسصیبثی اسصؽ آتی ثش٘بٔ ٝاػت. خشتّای خام تـخیق دسػت خـتٞبی خبْ ٘یبص ث ٝتجشث ٚ ٝدا٘ؾ داسد .دا٘ؾ اص آٖ س ٚو ٝچٙیٗ ٔـىالتی دس ثش٘بٔٞٝبی ٘شْافضاسی دس ٔٙبثغ ٔختّف ث ٝؿىُ ٔذ٘ٚی جٕغآٚسی ٚتحّیُ ؿذٜا٘ذ ٚدالیُ ٔـىالت ٔحتّٕی ؤٕ ٝىٗ اػت ایجبد وٙٙذ ثش اػبع اك ٚ َٛلٛاػذ ٔـخق ٟٔٙذػی ثٙب ؿذٜاػت. ثشای تـخیق خـتٞبی خبْ تجشث ٝاص آٖ س٘ ٚمؾ وّیذی داسد و ٝچٙیٗ تلٕیٕبتی ٔثُ تٕبٔی تلٕیٕبت ًشاحی ثؼیبس ٚاثؼت ٝث ٝفوبی ٔؼئّ ٚ ٝصٔیٝٙای 0اػت وً ٝشاحی دس آٖ ٌٔشح ؿذ ٜاػت .یؼٙی دسػت یب غّي ثٛدٖ یه ًشاحی دس ثؼیبسی اص ٔٛالغ ث ٝصٔی ٚ ٝٙفوبی ٔؼئّٝای وً ٝشاحی ثشای ساٜحُ آٖ اسای ٝؿذ ٜاػت استجبى داسد ٚاحىبْ وّی ثشای دسػتی یب ٘بدسػتی یه لٌؼ ٝوذ اوثش اٚلبت ٚجٛد ٘ذاسد. Context 1 ]by: einali{at}[ ce.sharif.edu | gmail.com درس برًاهِسازی پیشرفتِ بِ زباى جاٍا هْدی عیٌعلی ٔؼئّ ٟٓٔ ٝدیٍش استجبى ثیٗ اك َٛحبوٓ ثش ؿٙبػبیی خـتٞبی خبْ اػت .ثشخی اص اٚلبت فّؼف ٚ ٝاكِٛی یه خـت ثش اػبع آٖ خبْ اسصیبثی ٔیؿٛد ،ثب ثشخی دیٍش اص اك َٛدس تجبیُ ٌ ٚب ٜدس توبد اػت .ث ٝػٛٙاٖ ٔثبَ تالؽ ثشای ا٘ؼٌبف- پزیشی وذ ثشخی اص اٚلبت وبس پؼٙذیذٌ ٚ ٜبٞی وبسی ٘بپؼٙذ تّمی ؿذ ٜاػت ٚ .ثبص ٓٞایٗ صٔی ٚ ٝٙفوبی ٔؼئّ ٝاػت وٝ ٔـخق ٔیوٙذ وذاْ یه اص اك َٛثبیذ ثیـتش ٔٛسد تٛج ٝلشاس ٌیشد. کد تکراری 1 تىشاس سا ؿبیذ ثتٛاٖ اْاِخجبئث د٘یبی ٘شْافضاس دا٘ؼتٔ .2ـىّی و ٝسیـ ٝثؼیبسی اص ٔـىالت دیٍش اػت.ثؼیبسی اص ٔتذٞب ٚ سٚؽٞبی ٟٔٙذػی ٘شْافضاس ثشای اص ثیٗ ثشدٖ ایٗ ٔـىُ اثذاع ؿذٜا٘ذ .ث ٝػٛٙاٖ ٔثبَ ٔف ْٟٛثٟٙجبسی 3دس دادٌبٖٞب 4وٝ تٛػي ادٌبس وبد 5تٛػؼ ٝپیذا وشد ٜاػت ،حٔ َٛف ْٟٛافضٚدٍ٘ی یب تىشاس داد ٜاػت .یب سٚیىشد ؿیٌشایی ثب ٔحٛسیت ثبصثىبسٌیشی 6ثشای فشاس اص تىشاس تٛػؼ ٝپیذا وشد ٜاػت. اٌش دس ثش٘بٔ ٝػبختبس یب سفتبسی ٔـبٞذ ٜوشدیذ و ٝدس چٙذیٗ جبی ٔختّف تىشاس ؿذٜاػتٌٕٔ ،ئٗ ثبؿیذ و ٝاٌش ثتٛاٖ ساٞی ثشای یىی وشدٖ ایٗ تىشاسٞب پیذا وشد ،ویفیت ثش٘بٔ ٝثٟتش خٛاٞذ ؿذ. ثشخی ٘ٛیؼٙذٌبٖ ث ٝػٛٙاٖ یه حؼبة ػشاٍ٘ـتی لبػذٜای سا ثیبٖ ٔیوٙٙذ و ٝتىشاس تب دٚثبس ٔیتٛا٘ذ ًجیؼی ثبؿذ ِٚی ثبس ػ ْٛثبیؼتی فىشی ث ٝحبَ جبیٍضیٙی تىشاس ثب ثبصثٝوبسٌیشی وشد .اص آ٘جبیی وً ٝشاحی وبسی ؿذیذا ٚاثؼت ٝث ٝفوبی ٔؼئّٝ اػت ثٟتش اػت وٕٞ ٝیـ ٝصٔی ٚ ٝٙفوبی ٔؼئّٔ ٝذ ٘ظش لشاس ٌیشد .ؿبیذ ثشای یه ٔؼئّ ٝحتی تحُٕ دٚثبس تىشاس ٘یض ٌٔٙمی ٘جبؿذ ٚثشای ٔؼئّٝای دیٍش ثتٛاٖ پزیشفت و ٝثخـی اص وذ ثیؾ اص ػٝثبس تىشاس ؿٛد. ػبدٜتشیٗ ؿىُ تىشاس ،تىشاسی ثخـی اص وذ دس د ٚیب چٙذ ٔتذ یه والع اػت.ثشای حُ چٙیٗ ٔـىّی وبفیؼت و ٝثب اػتخشاج ٔتذ ،وذ تىشاسی دس لبِت یه ٔتذ جذیذ د ٚیب چٙذ ثبس فشاخٛا٘ی وٙیذ ٌٝ٘ٛ .دیٍش تىشاس ،تىشاس ثخـی اص وذ دس دٚ والع اػت و ٝدس یه ػّؼّٔ ٝشاتت پذس-فشص٘ذی دس یه ػٌح لشاس داس٘ذ .اػتخشاج ٔتذ ٚػپغ ثبالوـیذٖ ث ٝوالع پذس ٔیتٛا٘ذ ٌضیٙٔ ٝٙبػجی ثبؿذ. 1 Duplicate Codes “Duplication may be the root of all evil in software” Robert Cecil Martin 3 Normal Form 4 Database 5 Edgar Frank Codd 6 Reusability 2 ]by: einali{at}[ ce.sharif.edu | gmail.com درس برًاهِسازی پیشرفتِ بِ زباى جاٍا هْدی عیٌعلی دس كٛستی و ٝد ٚوالػی ؤ ٝتذٞبی تىشاسی داسد دس ساثٌ ٝپذس-فشص٘ذی ؿشیه ٘جبؿٙذٌ ،ضیٞ ٝٙبی صیش ٔیتٛا٘ذ ٌٔشح ثبؿذ: اػتخشاج والع جذیذ اص ٔتذٞب ٚوذٞبی تىشاسی ٚفشاخٛا٘ی دس ٞش د ٚوالع فشاخٛا٘ی یىی اص والعٞبی وذ ٔـتشن تٛػي والع دیٍش ثبصثیٙی ٔجذد جٙجٔ ٝـتشوی وٛٔ ٝجت ایجبد وذتىشاسی دس د ٚوالع ؿذ ٜاػت ٚایجبد پذس ٔـتشن ثشای دٚ والع دس كٛست ٘یبص هتد طَالًی 1 دس ٘شْافضاس اكُ وٛچه صیجبػتٕٞ ،2یـٌّٛٔ ٝة ثٛد ٜاػت .اجضای وٛچه ً ٚجؼٗ ػبدٜای و ٝث ٝخٛثی دس وٙبس ٓٞلشاس ٌشفتٝا٘ذ ٕٞیـ٘ ٝؼجت ث ٝاجضای ثضسٌی ٚپیچیذٜای و ٝوبسٞبی ٔتٛٙع ٚصیبدی سا ثش ػٟذ ٜداس٘ذٕٞ ،یـ ٝتشجیح داس٘ذ. دس حبَ حبهش تمشیجب ٕٝٞصثبٖٞبی ٔذسٖ ػشثبس٘ ٜبؿی اص تٛاِی فشاخٛا٘ی ٔتذٞبی ٔختّف ث ٝحذ لبثُ چـٓپٛؿی وٓ وشد-ٜ ا٘ذ .اص ایٗ س ٚیه ٔتذ ثّٙذ اص دیذٌب ٜاجشا ٞیچ ٔضیتی ٘ؼجت ث ٝچٙذیٗ ٔتذ وٛتب ٜوٓٞ ٝدیٍش سا فشاخٛا٘ی ٔیوٙٙذ٘ ،ذاسد. اص ایٗ س ٚخٛا٘بیی وذ تٟٙب ٔؼیبس ٔمبیؼ ٝثیٗ ٔتذٞبی ثّٙذ ٚوٛتب ٜاػت .ؿىؼتٗ یه ٔتذ ثّٙذ ثٔ ٝتذٞبی وٛتب ٚ ٜاػٓ ٌزاسی دلیك ٚخٛة ثشای آٖٞب دس ٚالغ سٔضٌـبیی اص ٔؼٕبی ف ٟٓػبختبس ٞ ٚذف ٔتذ ٚتجذیُ آٖ ث ٝیه ٔتٗ خٛا٘ب اص اجضایی ٚظیفٙٔٝذی ٔٛسد ٘یبص ثشای اجشای ثش٘بٔ ٝاػت. ٕٛٞاس ٜثبیذ داؿت ٝثبؿیذ و ٝثبیذ ٔتذٞبی ث ٝحتی وٛتب ٜثبؿٙذ ٚاػٓٞبی ٔٙبػت ثشای آٖٞب ا٘تخبة ؿذٜثبؿذ و ٝخٛا٘ٙذٜ ثذ٘ ٖٚیبص ث ٝخٛا٘ذٖ ثذ٘ٔ ٝتذ ثب خٛا٘ذٖ أوبی آٖٞ 3شچیضی و ٝالصْ اػت ساجغ ث ٝآٖ ثذا٘ذ سا ثب یه ٍ٘بٔ ٜتٛج ٝؿٛد. ثشخی اص اٚلبت ؿىؼتٗ ٔتذ ثٔ ٝتذٞبی وٛچهتش حتی ٔیتٛا٘ذ جبیٍضیٗ تٛهیحبتی 4ؿٛد و ٝدس خالَ وذ ٘ٛؿت ٝؿذٜ اػت .وبفیؼت ثخـی اص وذ و٘ ٝیبص ث ٝتٛهیح داسد دس لبِت یه ٔتذ وٛچه ثب ٘بٔی ثب ٔؼٕب و ٝتٛكیف دسػتی اص وبس ٔتذ اسایٔ ٝیدٞذ ،جبیٍضیٗ ؿٛد. 1 Long Method Small is beautiful 3 Method Signature 4 Comments 2 ]by: einali{at}[ ce.sharif.edu | gmail.com درس برًاهِسازی پیشرفتِ بِ زباى جاٍا هْدی عیٌعلی حتی اثبیی ٘ذاؿت ٝثبؿیذ ؤ ٝتذی سا اػتخشاج وٙیذ ٘بْ ٔفلُ آٖ اص وذی و ٝدس دس ٖٚثذ٘ ٝآٖ ٚجٛد داسد ًَٛ ،ثیؾتشی داؿت ٝثبؿذٔ .ؼئّ ٝاكّی ٔؼٙبیی اػت و٘ ٝبْ ٔتذ ثشای تٛكیف ٞذف آٖ ٔتذ دس خٛد داسد ٝ٘ ،كشفٗ وٛتبٞی وذ. ٚجٛد تٛهیحبت دس ثش٘بٔ٘ ٝـب٘ ٝخٛثی ثشای جبیی اػت ؤ ٝیتٛاٖ ثب ؿىؼتٗ وذ ث ٝاجضای وٛچهتش ٚاػتفبد ٜاص اػٕبٔی ثب ٔؼٕی وذ سا تٕیضتش وشد .دس ٚالغ تٛهیحبت دس ٖٚوذ فبكّٔ ٝؼٙبیی ثیٗ ٞذف ٘ٛیؼٙذ ٚ ٜخٛا٘بیی وذ سا پش ٔیوٙذ وبسی ٔتذٞبی وٛتبٞی و ٝثشای ا٘جبْ ٚظبیف وٛچه ِٚی ٚاهح ٘ٛؿت ٝؿذٜا٘ذ ثً ٝشص ثٟتشی ا٘جبْ ٔیدٙٞذ. لبػذ ٜػش اٍ٘ـتی ٚجٛد داسد و ٝثبیؼتی تالؽ وشد ثذ٘ٞ ٝش ٔتذ ثیـتش اص چٙذ خي ٘جبؿذ. ث ٝیبد داؿت ٝثبؿیذ ؤ ٝتذٞب ثبیذ ٕٛٞاس ٜیه وبس ا٘جبْ دٙٞذ ٚثبیذ آٖ وبس سا دسػت ا٘جبْ دٙٞذ ٚثبیذ تٟٙب ٕٞبٖ وبس سا ا٘جبْ دٙٞذ. کالس بسرگ 1 والعٞبی ثضسي ثب ٕٞبٖ ٔجٙبیی و ٝدس خلٛف ٔتذٞبی ًٛال٘ی ٌفت ٝؿذ ،ثبیؼتی ث ٝوالعٞبی وٛچهتش افضاس ؿ٘ٛذ. ٔؼٕٛال چٙیٗ والعٞبی ٔتغیشٞبی دادٜای 2صیبدی داس٘ذ. اٌش وٕی دلیكتش ثٔ ٝتغیشٞبی چٙیٗ والعٞبی ٘ظش ٔٛسد ثشسػی لشاسٌیش٘ذ ،ثؼیذ ٘یؼت و ٝاستجبى ٔؼٙبیی ثیٗ دػتٞٝبیی اص آٖٞب ٚجٛد داؿت ٝثبؿذ و٘ ٝـبٖدٙٞذ ٜآٖ اػت و ٝؿبیذ ثتٛاٖ ٞش دػتٝای سا دس لبِت یه والع جذیذ ػبصٔبٖ داد .دس ایٗ كٛست ث ٝتجغ جبیٕٙبیی ٔتغیشٞبی دادٜای دس والعٞبی جذیذٔ ،تذٞبی والع ثضسي ثیٗ والعٞبی وٛچىی اص ؿىؼتٗ آٖ ایجبد ؿذٜا٘ذ لبثُ تمؼیٓ ٞؼتٙذ. والع ٞبی ثضسي ث ٝجبیی صٔی ٝٙثذی ثشای تىشاس وشدٖ وذ ٞؼتٙذ .صیشا وذٞبیی و ٝثب ٔتغیشٞبی دادٜای آٖٞب وبس ٔیوٙٙذ ث ٝدِیُ آٖ و ٝدس ٔتذٞبی ٔختّف والع ثضسي پخؾؿذٜا٘ذ أىبٖ ثبصثىبسٌیشی 3صیبدی ٘ذاس٘ذ. ثشخی اص اٚلبت والعٞبی ثضسي ث ٝؿىُ والعٞبی لبدسٌّٔك 4دس ٔیآیٙذ وٚ ٝظبیف صیبد ٔ ٚتٛٙػی سا ثش ػٟذٔ ٜی- ٌیش٘ذ .والعٞبی لبدس ٌّٔك اص پبداٍِٞٛبیٔ 0ؼشٚف دس حٛص ٜؿیٌشایی اػت و ٝثبیذ اص آٖ اجتٙبة وشد. 1 Large Class )Instance Variable(Fields 3 Reusability 4 Omni potent 2 ]by: einali{at}[ ce.sharif.edu | gmail.com درس برًاهِسازی پیشرفتِ بِ زباى جاٍا هْدی عیٌعلی ٕٛٞاس ٜث ٝیبد داؿت ٝثبؿیذ ٞش چیضی و ٝدس یه داخُ والع (اِف) اػت ثبیذ ثٔ ٝفٟٔٛی و ٝوالع (اِف) ح َٛآٖ تؼشیف ؿذ ، ٜسثي ٔؼتمیٓ داؿت ٝثبؿذ ٞ ٚش چیضی و ٝدس فوبی حُ ٔؼئّ ٝث ٝایٗ ٔف ْٟٛسثي ٔؼتمیٓ داسد ،ثبیؼتی دس والع (اِف) ثبؿذ. فْرست بلٌد پاراهترّا 2 صثبٖٞبی ؿیٌشا ٔتغیشٞبی ػشاػشی 3و ٝدس ٘ؼُٞبی لذیٕیتش صثبٖٞبی ثش٘بٔٛ٘ٝیؼی سیـٔ ٝـىالت صیبدی ثٛد٘ذ، پـتیجب٘ی ٕ٘یوٙٙذ .دس ػٛم أىبٖ ثؼتٝثٙذی دادٜٞب دس لبِت اؿیب أىبٖ خٛثی ثشای اسػبَ داد ٜثشای فشاخٛا٘ی ٔتذٞب ایجبد وشد ٜاػت. فٟشػت ثّٙذ پبسأتشٞبی ٔٛسد ٘یبص یه ٔتذ ٔیتٛا٘ذ ثب اؿیبیی و ٝآٖ دادٜٞب سا ث ٝخٛثی ثؼتٝثٙذی وشدٜا٘ذ جبیٍضیٗ ؿٛد. ٔؼئّ ٝدیٍش دس فشاخٛا٘ی ٔتذٞب اجتٙبة اص فشاخٛا٘ی تٛدستٛی ٔتذٞبػت .ثشخی اص ثش٘بٔٛ٘ ٝیؼبٖ ػبدت داس٘ذ و ٝخشٚجی یه ٔتذ سا ثذ ٖٚآ٘ى ٝث ٝػٛٙاٖ یه ٔتغیش ٔـخق ٘بْ ٌزاسی وٙٙذ ثٔ ٝحن فشاخٛا٘ی ث ٝػٛٙاٖ اسٌٕبٖ یه ٔتذ دیٍش اسػبَ وٙٙذ. ثٔ ٝثبَ صیش تٛج ٝوٙیذٔ .تذ ٔحبػج ٝحمٛقٔ ،تذ ٔحبػج ٝػبػبت وبسی سا ث ٝث ٝؿىُ تٛدست ٛفشاخٛا٘ی وشد ٜاػت. ثب اػتفبد ٜاص أىبٖ اػتخشاج ٔتغیش ٔیتٛاٖ وذ ثؼیبس خٛا٘بتشی ٘ٛؿت: 1 Anti-Pattern Long Parameter List 3 Global Variables 2 ]by: einali{at}[ ce.sharif.edu | gmail.com هْدی عیٌعلی تغییر ٍاگرا درس برًاهِسازی پیشرفتِ بِ زباى جاٍا 1 ثشخی اص اٚلبت دس ثب والعٞبیی ٔٛاجٔ ٝیؿٛیذ و ٝث ٝدالیّی ٔتٛٙع ٕٔىٗ اػت و ٝتغییش وٙذٔ .ثال ٕٔىٗ اػت دس ثبصثیٙی یه والع ث ٝخٛد ثٍٛییذ و ٝاٌش لشاس ثبؿذ ٘ٛع رخیشٜػبصی جذیذ اػتفبد ٜو ٓٙثبیذ ایٗ ػٔ ٝتذ سا تغییش د ٚ ٓٞاٌش ٘حٜٛ ٕ٘بیؾ تغییش و ٓٙایٗ دٔ ٚتذ ایٗ والع ثبیذ تغییش وٙذ .دالیّی و ٝثشای تغییش ایٗ والع ٚجٛد داسد ،استجبى ٘ضدیىی ثب یىذیٍش ٘ذاس٘ذ ٚایٗ ؿبیذ ث ٝایٗ ٔؼٙی ثبؿذ و ٝثبیؼتی ایٗ والع ث ٝد ٚوالع ٔٙؼجٓتش 2ؿىؼت ٝؿٛد. ث ٝػٛٙاٖ یه لبػذ ٜوّی ثبیذ ٕٛٞاس ٜدالیّی ؤٕ ٝىٗ اػت یه والع ٘یبص ث ٝتغییش داؿت ٝثبؿذ ،ثؼیبس ث ٟٓؿجی ٝثبؿٙذ. ٔف ْٟٛایٗ خـت خبْ ثب اكُ یىتبیی ٚظیف 3ٝساث٘ ٝضدیىی داسد ٚث ٝػجبست دیٍش ٘من اكُ یىتبیی ٚظیف ٝوالع ٔٙجش ثٝ ایجبد خـت خبْ تغییش ٚاٌشا ٔیؿٛد. جراحی ساچوِّا 4 ثشای جشاحی وؼی وٛٔ ٝسد اكبثت تف ًٙػبچٕٝای لشاس ٌشفت ٝاػت ،جشاح ثبیذ تؼذاد صیبدی لٌؼبت وٛچه ػبچٕ ٝسا اص ٘ٛاحی ٔختّف ثذٖ ا ٚخبسج وٙذ .ایٗ دلیمب ؿجی ٝوبسی اػت و ٝیه ثش٘بٔٛ٘ٝیغ ٕٔىٗ اػت ثشای اػٕبَ یه تغییش تغییشات وٛچىی دس جبٞبی ٔختّف وٙذ ث ٝتؼذاد صیبد ا٘جبْ دٞذ. ث ٝػٛٙاٖ ٔثبَ تلٛس وٙیذ و ٝلٌؼ ٝوذ صیش ثشای سٚیذادٍ٘بسی 5اػتثٙبٞب دس ثخؾٞبی ٔختّف وذ اػتفبد ٜؿذ ٜاػت: حبَ اٌش تلٕیٓ ثٍیشیذ و ٝاص ایٗ پغ اًالػبت دیٍشی ٘ظیش ٘بْوبسثشی وبسثش جبسی ٚیب صٔبٖ ٚلٛع خٌب سا ث ٝخشٚجی وٝ چبح ٔیؿٛد اهبفٕ٘ ٝبییذٔ ،ججٛس خٛاٞی ثٛد و ٝدس والعٞبی صیبدی(ٞش جب و ٝسٚیذادٍ٘بی ا٘جبْ ٔیؿذ) تغییشات وٛچىی سا تىشاس ٕ٘بییذ. 1 Diverge Change Coherent 3 )Single Responsibility Principle(SRP 4 Shotgun Surgery 5 Logging 2 ]by: einali{at}[ ce.sharif.edu | gmail.com درس برًاهِسازی پیشرفتِ بِ زباى جاٍا هْدی عیٌعلی جشاحی ػبچٕٞٝبی دس ٚالغ ٔف ْٟٛسٚثشٔ ٚمبثُ تغییش ٚاٌشا اػت .دس تغییش ٚاٌشا دِیُ ٔتٛٙع ثشای تغییش یه والع ٚاحذ ٘ىٞٛؾ ؿذ ٜاػت ،دس جشاحی ػبچٕٞٝب ثش تغییشٞبی ٔتؼذد دس والعٞبی ٌ٘ٛبٌ ٖٛثشای یه دِیُ ٚاحذ تبویذ ؿذ ٜاػت. حبِت ایذٜآَ آٖ اػت وٕٞ ٝیـ ٝثیٗ دالیُ تغییش ٚتغییش دس یه والع ساثٌ ٝیهثٝیه ٚجٛد داؿت ٝثبؿذ. سا ٜحُ ثشًشف وشدٖ ایٗ خـت خبْ ،جبیٍضیٙی وذتىشاسی دس والعٞبی ٔختّف ثب یه والع یب ٔتذ ٚاحذ اػت وٝ جبٞبی ٔختّف فشاخٛا٘ی ؿذ ٜاػت .سٚیىشد ثش٘بٔٛ٘ٝیؼی جٙجٌٝشا 0ثب تبویذ ثش حُ ایٗ ٔـىُ اثذاع ؿذ ٜاػت .دس ایٗ سٚیىشد جٙجٞٝبیی تىشاسی اص ٘شْافضاس و ٝدس وُ ٘شْافضاس پشاوٙذ ٜؿذٜا٘ذ ،ث ٝكٛستی سٚؿٕٙذ ٔذیشیت ٔیؿ٘ٛذ. چشن داشتي بِ اهکاًات دیگراى 2 اٌش ثخـی اص یه والع ثشای ا٘جبْ وبسٞبی خٛد ٘یبص ث ٝاًالػبتی اص دیٍش والعٞب داؿت ٝثبؿذ ،ث٘ ٝظش ٔیسػذ و ٝیه جبی وبس ایشاد داسدٔ .تذ صیش سا دس والػی دس غیش اص والع Employeeدس ٘ظش ثٍیشیذ: ایٗ ٔتذ ٚظیفٔ ٝحبػج ٝحمٛق یه وبسٔٙذ سا داسد ٚدس دس ٖٚثذ٘ ٝخٛد ث ٝاًالػبتی و ٝدس والع وبسٔٙذ اػت ،احتیبج داسد. چٙیٗ ٔتذی ٌٔٙمٗ ٘جبیذ جبیی جض خٛد والع وبسٔٙذ ثبؿذ .اوثش اٚلبت ایٗ خـت خبْ ث ٝكٛست چـٓ داؿتٗ ث ٝداد ٜدیٍش والعٞب دیذٔ ٜیؿٛدٔ .تذی و ٝثشای ا٘جبْ ٚظیف ٝخٛد ٘یبصٔٙذ ث ٝدادٜٞبی صیبدی اص والع دیٍشی داسد ،ثبیذ ٘ضدیه ثٝ ٕٞبٖ دادٜٞب ٚدس والع ٔشثٛى ث ٝآٖٞب ثبؿذ. ٌبٞی اص اٚلبت ثخؾٞبیی اص یه ٔتذ اػت و ٝچـٓ ث ٝدیٍش والعٞب داسد.دس ایٗ كٛست چٙیٗ ثخـی ثبیذ دس اثتذا ثٝ كٛست یه ٔتذ جذیذ اػتخشاج ؿٛد ٚػپغ ث ٝوالػی و ٝث ٝآٖ استجبى ثیـتشی داسدٙٔ ،تمُ ؿٛد. دس ؿیٌشایی ٔف ْٟٛؿی ثب دس وٙبس ٓٞدیٍش ٚدس یىجب ثٛدٖ داد ٚ ٜسفتبس ٔؼٙب پیذا ٔیوٙذ ٚایٗ د ٚثبیذ دس وٙبس یىذیٍش تغییش وٙذ .دس كٛستی و ٝتغییش سفتبس دس جبیی غیش اص تغییش دادٔ ٜشثٛى ث ٝآٖ اتفبق ثیفتذ ،ثبیؼتی سفتبس ث ٝجبیی ٘ضدیه ثٝ دادٙٔ ٜتمُ ؿٛد .ایٗ خـت خبْ ثب خـت تغییش ٚاٌشا استجبى ٔؼٙبیی ٘ضدیىی داسد. Aspect Oriented Programming Feature Envy 1 2 ]by: einali{at}[ ce.sharif.edu | gmail.com هْدی عیٌعلی خَشِّای دادُ درس برًاهِسازی پیشرفتِ بِ زباى جاٍا 1 دس یه ثش٘بٔٔ ٝؼٕٛال دادٜٞبی ٓٞجٙغ دس وٙبس ٓٞظبٞش ٔیؿ٘ٛذ .اص ایٗ س ٚاػت ؤ ٝیتٛاٖ ٌفت دادٜٞبی تٕبیُ ثٝ خٛؿٝثؼتٗ دس وٙبس دادٜٞبیی ٔشتجي ثب خٛد داس٘ذ .آسٌٔٛبٖٞبی ٚسٚدی یه ٔتذ یب لٌؼ ٝوذی و ٝثخـی اص دادٜٞب وٙبس یىذیٍش تغییش ٔیوٙٙذ ٚیب دادٜٞبیی وٕٞ ٝیـٕٞ ٝضٔبٖ تغییش ٔیوٙٙذ٘ ،ـبٖ دٙٞذ ٜخٛؿٞٝبیی اص داد ٜاػت. چٙیٗ خٛؿٞٝبیی ثبیذ دس لبِت والعٞبی جذیذ ػبٔبٖدٞی ؿ٘ٛذ .اػتخشاج والع ،جبیٍضیٙی اسٌٕبٖٞبی ٔتؼذد یه ٔتذ ثب یه والع ٔحتٛی ٕٞبٖ دادٜٞب ساٜٞبیی ثشای ٔذسیت خٛؿٞٝبی داد ٜاػت. حبِتٞبیی اص خـت خبْ فٟشػت ثّٙذ پبسأتشٞب ٌٝ٘ٛای خبف اص ایٗ خـت خبْ خٛؿٞٝبی داد ٜاػت. تَصیِّای هربَط بِ خَاًایی کد اػبٔی ثب ٔؼٙب د٘یبی ٘شْافضاس ،د٘یبی وبسوشدٖ ثب ٔفبٞیٓٔ ،ذَٞب ،ػٛطٞ ٜبی رٙٞی ٚتجشیذٞب 2اػت .دس ایٗ د٘یب صثبٖ ٚاستجبى اص إٞیت فٛقاِؼبدٜای ثشخٛداس٘ذ .چ ٝصثبٖ ٚاستجبى ٔیبٖ ٟٔٙذػبٖ ٚوبسثشاٖ ٘شْافضاس ٚچ ٝصثبٖٞبی ثش٘بٔٛ٘ٝیؼی ٚ سػٕی ثشای استجبى ثب ٔبؿیٗٞبیی و٘ ٝشْافضاسٞب سا اجشا ٔیوٙٙذ. اص ایٗ سٚػت وٟٙٔ ٝذػبٖ ٘شْافضاس ٔب٘ٙذ ٔتشجٕبٖ چیشٜدػت یب ؿبػشاٖ ثٚ ٝاطٜٞب ث ٝػٛٙاٖ أب٘تداساٖ ٌٙجیٝٙ اسصؿٕٙذ ٔؼٙب احتشاْ ثٍزاس٘ذ ٚدس ث ٝوبس ثشدٖ ٚا٘تخبة آٖٞب ثشای اػٌٓزاسی ٚثشلشاسی استجبى دس لبِت ٔؼتٙذاتٚ ،ػٛاع ٚدلت صیبدی ٘ـبٖ دٙٞذ. اػتفبد ٜاص اػبٔی و ٝدس سا ٜسا ثشای ػٛءتؼجیش ،اثٟبْ ،خّي ٔؼٙب ٚیب اؿتشان ٔؼٙب ثبص ٔیٌزاس٘ذ ،خٛا٘بیی وذ سا ثؼیبس وٓ ٔیوٙذ .اػبٔی ثّٙذ و ٝث ٝؿىُ دلیك ،وبُٔ ٚیىتبیی ٔؼٕی خٛد سا تٛكیف ٔیوٙٙذ ٕٞیـ ٝتٛكی ٝؿذٜ اػتًٛ .ال٘ی ؿذٖ اػٓ ٞیچٌب٘ ٜجبیذ ثش٘بٔٛ٘ٝیغ اص ٌٙجبدٖ ٔؼٙی وبُٔ ٔٙظٛس خٛد دس آٖ ٔٙلشف وٙذ. Data Clumps Abstraction 1 2 ]by: einali{at}[ ce.sharif.edu | gmail.com درس برًاهِسازی پیشرفتِ بِ زباى جاٍا هْدی عیٌعلی اػتفبد ٜاص اوٛالد ٞش چٙذ و ٝدس جبٚا اػتفبد ٜاص اوٛالد ثشای ثالنٞبی یه خٌی اختیبسی اػتٕٛٞ ،اس ٜػبدت وٙیذ و ٝثشای چٙیٗ دػتٛساتی ٘یض اص اوٛالد اػتفبد ٜوٙیذ .چٙیٗ وبسی ث IDE ٝوٕه ٔیوٙذ و ٝد٘ذاٌ٘ٝزاسیٚ 0اهحتشی اص وذ ؿٕب ا٘جبْ دٞذٕٛٞ .اس ٜپغ اص چٙذ خي وذ ٘ٛؿتٗ ٌضیٔ Reformat ٝٙشثٛى ث IDE ٝسا فؼبَ وٙیذ 2تب ثش٘بٔ ٝؿٕب سا ٔشتت ٕ٘بیذ. ثؼتٝثٙذی دسػت ا٘ٛاع ٚحبِتٞب دس ؿٕشد٘یٞب 3 دس خلٛف ا٘ٛاع ٚحبِتٞبی ثبثت ثش٘بٔ ٝث ٝجبی ایٙى ٝفشمٞبی خٛد سا دس لبِت تٛهیحبت خالَ وذ ثٛٙیؼیذ دػتٝثٙذیٞبی ثش سٚی ا٘ٛاع وٛچه ٚحبِتٞبی ٔختّف سا دس لبِت ؿٕشد٘یٞبی ٔذَػبصی وٙیذ .جبٚا أىب٘بت ثؼیبس خٛثی ثشای پـتیجب٘ی اص ؿٕشد٘یٞبی دس اختیبس لشاس ٔیدٞذ و ٝاص پخؾؿذٖ ٌٔٙك ٔشثٛى ث ٝحبِتٞبی ٔختّف دس جبٞبی ٔختّف ثش٘بٔٛ٘ ٚ ٝؿتٗ وذ تىشاسی جٌّٛیشی ٔیوٙذ. کد تویس وذ تٕیض دس ٚالغ فبكّ ٝوذی اػت و ٝوبس ٔیوٙذ ثب وذ ایذٜآَ .یؼٙی وبسوشدٖ وذ الصْ ثشای وذ تٕیض اػت ٘ ٝؿشى وبفی. اص ایٗ س ٚایٗ اػتذالَ وٚ ٝلتی ایٗ وذ وبس ٔیوٙذ چشا ثبیذ آٖ سا تغییش د ،4ٓٞلبثُ لج٘ َٛیؼت .ویفیت وذ ؿبُٔ ثؼیبس اص ٚیظٌیٞبیی اػت و ٝدس تٕبٔی آٖٞبی وبس وشدٖ وشد ثذیٟی فشم ؿذ ٜاػت. ٔیتٛاٖ ٌفت ؤ ٝثُ ٔؼشٚف ٟٔٙذػی "چیضی و ٝخشاة ٘ـذٜاػت سا تؼٕیش ٕ٘یوٙٙذ" ،0دس ٟٔٙذػی ٘شْافضاس چٙذاٖ وبسثشد ٘ذاسدٞ( .ش چٙذ دلیكتش آٖ اػت و ٝثٍٛییٓ تؼشیف خشاثی دس ٟٔٙذػی ٘شْافضاس پیچیذٜتش اص دیٍش سؿتٞٝبی ٟٔٙذػی ٚفشاتش اص ٔؼئّ ٝوبس ٘ىشدٖ اػت). Indenting 2 ثشای InteliJ IDEAاص وّیذ ٔیب٘جش ٚ Alt+Ctrl+Lثشای Eclipseاص Ctrl+Shift+Fاػتفبد ٜوٙیذ. 1 3 Enumeration 4 ایٗ اػتذالَ ثیـتش تٛػي ثش٘بٔٛ٘ٝیؼبٖ تجشثی ٌٔشح ٔیؿٛد .اص دیذ ثش٘بٔٛ٘ ٝیؼبٖ تجشثی خٛد ٘ٛؿت ٝؿذٖ ثش٘بٔٞ ٝذف اػت ٚثب ا٘جبْ آٖ یه پشٚط٘ ٜشْافضاسی ث٘ ٝتیجٝ سػیذ ٜاػت .ایٗ سٚیىشد دس ٚالغ فشٚوبػتٗ دا٘ؾ ٔشثٛى ثٟٙٔ ٝذػی ٘شْافضاس ثٟٔ ٝبست ثش٘بٔٛ٘ٝیؼی اػت. ]by: einali{at}[ ce.sharif.edu | gmail.com درس برًاهِسازی پیشرفتِ بِ زباى جاٍا هْدی عیٌعلی .یغ اػتٛ٘ٝٔ تـخیق وذ تٕیض ثب ثش٘بٚ ذ ثب وبسثشٙ وبس ٔیوٝ تـخیق وذی و،ٖ خٌب ثب وبٔپبیّشٚتـخیق وذ ثذ هٌابع 1. Refactoring: Improving the Design of Existing Code, Martin Fowler , Kent Beck and others, Addison-Wesley Professional,1999 2. Clean code,A handbook of agile software craftmanship, Robert C Martin,2008, Prentice Hall 3. The Essence of Object Oriented Programming with Java and UML, Antonio Maña Gómez, University of Malaga, http://www.lcc.uma.es/~amg/ISE/OOP-Java-UML/Chapter8.html 1 If it ain't broke, don't fix it by: einali{at}[ ce.sharif.edu | gmail.com]
© Copyright 2025 Paperzz