An introduction to Refactoring.pdf

‫درس برًاهِسازی پیشرفتِ بِ زباى جاٍا‬
‫هْدی عیٌعلی‬
‫بِ ًام خدا‬
(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]