پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (6)

قابلیت refactoring را زمانیکه می خواهید کد موجود را دستکاری کنید وتغییر دهید استفاده می کنید. پس از اعمال تغییر کدهای جدید حاوی error نباشند (سینتکس و کامپایل) و همچنین functionality نرم افزار تغییر نکرده باشد.
يکشنبه، 24 آذر 1392
تخمین زمان مطالعه:
موارد بیشتر برای شما
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (6)

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)

 





 

Refactoring (باز سازی)

refactoring (بازسازی) یعنی تغییر واصلاح کدهای برنامه به طوری که خروجی برنامه تغییر نکند.
قابلیت refactoring را زمانیکه می خواهید کد موجود را دستکاری کنید وتغییر دهید استفاده می کنید. پس از اعمال تغییر کدهای جدید حاوی error نباشند (سینتکس و کامپایل) و همچنین functionality نرم افزار تغییر نکرده باشد. برخی از این تغییرات عبارتند از: تغییر نام متغییرها، تغییر نام متدها و توابع، عوض کردن محل قرارگیری یک متد (یا کل کلاس) و شکستن یک متد یا تابع بزرگ به متدها یا توابع کوچک‌تر یا یک کلاس را در بین پکیج ها انتقال دهید. با این تکنیک قابلیت نگهداری بیشتری را به برنامه می دهد و به کدهایی دست خواهید یافت که قابلیت آزمون پذیری بهتری داشته و همچنین امکان به اشتراک گذاری قسمت‌هایی از آن‌ها در پروژه‌های دیگر نیز میسر می‌شود.
معمولا refactoring بدلایل زیر باید اتفاق بیفتد:
• بهبود درکد برای کاهش پیچیدگی و بالا بردن خوانایی کد (مانند تغییر نام متغییر ها).
• افزودن قابلیت های جدید به کد (مانند تغییر امضای متد ها)
• بهبود طراحی سیستم (جدا کردن قسمتی از یک کلاس و ایجاد کلاس جدید برای آن قسمت)
معمولا IDE های زبان های برنامه نویسی مختلف امکاناتی برای اعمال refactoring در کد را در اختیار برنامه نویسان قرار می دهند. refactoring وابسته به زبان برنامه نویسی خاصی نیست و برای موارد فوق الذکر می تواند در هر زبان برنامه نویسی اتفاق بیفتد.

آپشن های منویRefactor در netbeans :


پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)
وقتی روی کلاسی کلیک راست می کنیم و گزینه ی Refactor را انتخاب می کنیم،هم می بینیم:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)
اکنون به معرفی بعضی از آنها می پردازیم:

Rename Refactoring

دو استفاده مهم از Rename refactoring می توان داشت:
Renaming Java classes (Rename کردن کلاس):
Rename از طریق Refactor نه تنها نام کلاس را تغییر می دهد بلکه نام سازنده ها (constructor) ، استفاده های داخلی و مراجعات توسط دیگر کلاسها را تغییر می دهد.
dialog box زیر باز می شود که نام جدید را وارد می کنید:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)
اگر خواستید تغییرات را ببینید، گزینه ی preview را بزنید. این گزینه لیست تغییرات را نشان می دهد.
Renaming entire package structures ( Rename کردن کامل یک ساختارپکیج ):
این، زمانیکه یک برنامه نویس نام یک پکیج را اشتباه یا با غلط املائی نوشت ، مفید واقع می شود. که مثل حالت قبل نام جدید را وارد می کنیم.البته می توانید به طور دستی تغییر دهیدوروی آن کلیک کنید تا بتوانید بنویسید. با این طریق منوی زیر باز می شود و می گوید Refactor کند یا نه:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)

Move Class Refactoring

وقتی کلاسی را از یک پکیج به پکیج دیگر انتقال می دهید در ابتدا ساده به نظر می رسد. یک برنامه نویس می تواند به صورت دستی یک فایل را Copy و Paste کند و مسیر آنرا تغییر دهد وسپس دستور پکیج آن فایل را که در ابتدای آن وجود دارد ویرایش کند. اما اگرکلاسهای دیگر آنرا import کنند یا به آن رجوع کنند باید آن را جستجو کند واصلاح کند.
Move درمنوی refactor دقیقا به همین مطلب اشاره داردو به شما اجازه می دهد که یک کلاس را به پروژه یا پکیج دیگر یا به source package یا test package انتقال دهید. و همچنین ارجاعات به کلاس انتقال یافته، که در کلاسهای دیگر وجود دارد را تصحیح می کند.
برای این کار از دو راه بالا ، Refactor > Move را انتخاب می کنیم و یک dialog box مانند تصویر زیر می بینید که شما می توانید موقعیت و Package ای که می خواهید کلاستان را به آنجا انتقال دهید را انتخاب کنید:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)
همچنین می توانید move refactoring را از طریق درگ ودراپ ((drag and drop یک کلاس درپنجره project به موقعییت دیگر فعال کنید. یک تفاوت دراستفاده از این روش وجود دارد که یک آپشن در dialog box اضافه می شود.

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)
و آن Move Without Refactoring است. با انتخاب آن refactoring انجام نمی شود. گاهی اوقات نیاز به refactoring ندارید. به عنوان مثال: زمانیکه یک package را تست می کنید یا بعضی از ابزار های آنالیز را بر روی پکیجی اجرا می کنید، ممکن است بخواهید یک کلاس را مستثنی قائل شوید.

Safe Delete Refactoring

در طول توسعه ی نرم افزار، برنامه نویسان بارها کدهایی را که قبلا نوشتند را بازدید می کنند. آنها چیز هایی را که نوشته بودند را بررسی می کنند و تصمیم می گیرند که چه چیز هایی را می توانند پاک کنند و چه چیزی را نمی توانند پاک کنند. یک اشتباه معمول پاک کردن متغییر عضو کلاسی است که شما فکر می کنید استفاده نمی شود، است. بعدا پی می برید که در واقع در کدتان ظاهر می شود وکلاستان کامپایل نمی شود.
باSafe Delete Refactoring می توانید هراستفاده از یک کلاس، تابع،یا فیلد را قبل از پاک کردن آن، در کد مشاهده کنید. بخصوص اگر کلاسی را که توسط کلاسهای دیگر استفاده می شود، Remove کنید، این اصل می تواند فوق العاده باشد.
به عنوان مثال کد زیر را درنظر بگیرید که تابعی است که چندین متغییر محلی را تعریف می کند :

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)
سپس تصمیم می گیرید که متغییر number را حذف کنید. شما می توانید با چشم کلاس را بررسی کنید و بگردید هر کجا که number استفاده شده پیدا کنید.این کاردراین مثال بسیار ساده است اما اگر تابع ما مثلا 100 خط کد داشت و شامل چندین دستورات تودرتو بود، پیدا کردن number بسیار مشکل می شد.با اجرای Safe Delete Refactoring متغییری را که می خواهید حذف کنید را مشخص (هایلایت) کنید، که در اینجا متغییر number است و از مسیر زیر safe delete را انجام دهید:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)
که یک dialogbox به صورت زیرباز می کند:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)
درتصویر بالا اگر بخشی را که با کادر قرمز رنگ مشخص شده، ( search In Comment ) را تیک بزنید چیزی را که می خواهید حذف کنید را از توضیحات ( comment ) هم حذف می کند.
اگرعنصری را که می خواهید حذف کنید درهیچ جا از کد استفاده نشود، این کار برای حذف اطمینانی است. اما اگر این عنصر در جاهایی از کد استفاده شود یک سری مراحل باید طی کرد. بعد از کلیک دکمه ی Refactor در dialogbox بالا ، لیستی از خطاها ( errore)و هشدارها ( warning ) را مانند تصویر زیرنشان خواهد داد :

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)
اگر فقط warning داشته باشد می توانید Refactor کنید اما اگر خطا هم داشت، لازم است یه کار کوچولوهم انجام دهید. گزینه ی Show Usages برای حل این مساله است که هر بخشی از کد که ازآن استفاده می کند، بایدحذف شود. آنرا کلیک کنید، مانند شکل زیر:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)
دراین پنجره هر جا که number استفاده شده را نشان می دهد. یکی ازاستفاده ها را دابل کلیک کنید، آن خط را در سورس کد نشان می دهد. بعد از اینکه بررسی کردید و به صورت دستی، متغییری را که می خواستید درهرجایی از کد حذف کنید، را حذف کنید دکمه ی Rerun safely Delete را کلیک کنید.

Use Supertype Where Possible Refactoring

این کار استفاده ازیک subclass را به superclass تبدیل می کند. فرض کنید که کدزیر را درسورس دارید:
ArrayList myarray = new ArrayList();

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)
با وارد کردن این دستور یک هشدار (علامت لامپ) در ستون سمت چپ دیده می شود که با کلیک کردن آن کادری در زیر آن دستور باز می شود که می گوید چیزی را Import کنیم و ما گزینه ی اول آن را انتخاب می کنیم و در بالا دستور Import وارد می شود:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)
اگر می خواهید آنرا به یک superclass خاص تبدیل کنید، روی نوع آبجکت ( object type) ArrayList دابل کلیک کنید وآن را هایلایت کنید و از منوی Refactor گزینه ی Use Supertype Where Possible Refactoring را کلیک کنید. که یک dialogbox به صورت زیر باز می شود که به شما اجازه می دهد که یک Superclass یا interface را انتخاب کنید:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)

Move Inner to Outer Level Refactoring

این گزینه یک کلاس داخلی را به کلاس خارجی مجزا تعریف شده در فایل خودش، تبدیل می کند. فرض کنید کد زیر را دارید که کلاس InnerClass در داخل OuterClass تعریف شده است:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)
برای اینکه کلاس InnerClass را به یک کلاس مجزا تبدیل کنیم، ابتدا نام کلاس را هایلایت می کنیم وگزینه Move Inner to Outer Level را از منوی Refactor انتخاب می کنیم. در dialogbox بازشده می توان یک نام جدید برای کلاس مورد نظراختصاص داد. مخصوصا بعد از اینکه کلاس داخلی نام گرفت ، ازبین متنی که شامل کلاس خارجی است، تشخیص کلاس داخلی آسان می شود. به طور اختیاری می توانید گزینه ی declare a field for the current outer class (تعریف یک فیلد برای کلاس خارجی جاری) را تیک بزنید و نامی برای این فیلد در نظر بگیرید.

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)
اگر گزینه ی declare a field for the current outer class را تیک نزنید، و Refactor کنید، کد کلاس InnerClass به یک کلاس مجزا انتقال می یابد و innertoouter در همان پکیج به عنوان کلاس خارجی می شود. نتیجه آن کد زیر می شود:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)
اگر گزینه ی declare a field for the current outer class را تیک بزنید و یک نام (outer) در فیلد در نظر بگیریدو Refactor کنید، کد زیر را می بینید:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)

Encapsulate Fields Refactoring

کپسوله سازی یک فیلد بازسازی کد است که یک فیلد فقط با دو متد اکسسور قابل دستیابی است. متد اکسسور به متدهای read/write یا get/set اشاره می کند.
به عنوان نمونه وقتی که یک فیلد را کپسوله می کنید، شما دسترسی فیلد را به خصوصی ( private) تغییر می دهید. بنابراین نمی توان مستقیما از بیرون از کلاس به فیلد مراجعه کرد. کلاس های دیگر برای مراجعه به فیلد بایداز متدهای اکسسور استفاده کنند.
شما می توانید در IDE فیلد ها را با دستورات زیر کپسوله کنید:
1 - ایجاد متد اکسسور برای فیلد. نام این متد ها به این صورت است: getfield-name و setfield-name .
2- تنظیم تغییر دهنده ی دسترسی برای فیلد
3- جایگزین کردن ارجاع مستقیم به فیلد با فراخوانی متدهای اکسسور در کد.
برای کپسوله سازی فیلد:
روی مشخصه کلیک راست کرده و Refactor > Encapsulate را انتخاب می کنیم.

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)
سپس در dialogbox باز شده لیستی از مشخصه ها دیده می شود و هر کدام که می خواهیم را تیک می زنیم و متد های get و set را برای آن ها انتخاب می کنیم و Refactor می کنیم .

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)
مثلا برای مشخصه ی Name به صورت زیر می شود:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(6)
بخش Refactor را در اینجا به پایان می بریم.
استفاده از مطالب این مقاله با ذکر منبع راسخون بلامانع می باشد.
ادامه دارد...



 

 



مقالات مرتبط
ارسال نظر
با تشکر، نظر شما پس از بررسی و تایید در سایت قرار خواهد گرفت.
متاسفانه در برقراری ارتباط خطایی رخ داده. لطفاً دوباره تلاش کنید.