یک پیاده سازی از کلاس، میتواند به طور ضمنی شامل دو یا چند نوع (Type) باشد. یکی از سادهترین راههای پیاده سازی این حالت، استفاده از فیلدهایی برای نگهداری نوع اصلی دادهی کلاس است که اصطلاحا Type code نیز نامیده میشوند. به طور مثال پیاده سازی زیر را در نظر بگیرید. به طور مثال در کلاس بالا یک کارمند میتواند فروشنده یا مهندس باشد. پیاده سازی بالا این مورد را با استفاده از دو فیلد نشان دادهاست که در صورت true بودن، مقدار هریک از ...
زمانیکه متدی یک لیست (collection) را بر میگرداند، بهتر است این لیست، نسخهای فقط خواندنی باشد. برای توضیح بیشتر این موضوع میتوان به کلاس زیر و نحوهی بازسازی آن رجوع کرد. در کلاس Person فرضی، متدی مسئولیت دریافت لیست درسهای آن شخص را بر عهده دارد. متد دیگری نیز مسئولیت ثبت کردن آنها را بر عهده دارد. توجه کنید متد دریافت لیست درس ها، لیستی قابل ویرایش (افزودن یا حذف کردن) را بر میگرداند. در پیاده سازی ابتدایی، متدهای getter ...
در طراحی شیء گرا، ارتباط کلاسها امری عادی است. در صورتیکه فقط یکی از کلاسها نیاز به شیء کلاس دیگری را داشته باشد، این ارتباط یک طرفه نامیده میشود و زمانیکه هر دو کلاس به اشیاء یکدیگر نیاز داشته باشند، دو طرفه نامیده میشود. زمانیکه ارتباطی به صورت یک طرفه پیاده سازی شده باشد، ممکن است پس از مدتی نیاز به ارتباط برعکس بین کلاسها بوجود بیاید. در این صورت ارتباط دوطرفه را با اضافه کردن یک خصوصیت ایجاد میکنیم. به طور مثال نرم افزاری ...
از آرایه برای ذخیره سازی آیتمهای مشابه استفاده میشود. این تشابه باید علاوه بر اینکه در نوع دادهای آیتمها رعایت شود، باید از نظر مفهومی نیز رعایت شود. زمانیکه از یک آرایه برای نگهداری المنتهای غیر مشابه استفاده میشود، نیاز به چنین بازسازی کدی است. به طور مثال آرایهای که آیتم اول آن "نام" و آیتم دوم آن "امتیاز" است. قطعا کار با چنین آرایهای بسیار مشکل خواهد بود. زمانیکه یک آرایه را از نوع دادهای عمومیتری (مثلا object در سی شارپ ...
بازسازی کد جایگزینی داده با شیء، معمولا در طراحی موجودیتهای قابل ذخیره و بازیابی سیستمهای اطلاعاتی مورد نیاز قرار میگیرید. این بازسازی کد معمولا زمانی مورد نیاز است که آیتم دادهای نیاز به اطلاعات بیشتر یا رفتاری خاص دارد. در این صورت باید آن آیتم دادهای را به شیء از کلاس یا ساختار (struct) تبدیل کرد. معمولا زمانیکه توسعه محصول انجام میگیرد، ممکن است آیتمهای دادهای در ابتدا ساده دیده شوند و طراحی سادهای برای آنها در نظر گرفته ...
هیچ کلاسی کامل نیست. در مواقع زیادی ممکن است یک کلاس نیاز به متدی داشته باشد که در آن وجود ندارد. در چنین شرایطی اگر سورس کلاس را در دست داشته باشیم به راحتی میتوان رفتار مورد نظر را به آن اضافه کرد. اما اگر از کلاسهایی استفاده میکنیم که سورس آنها در دست نیست، حل این مورد کمی مشکل خواهد بود. برای مدیریت و رفع این مورد، دو بازسازی کد وجود دارند که به جهت همسویی این دو، آنها را در یک نوشتار پوشش میدهیم. نیاز به متد جدید در یک کلاس ...
زمانی نیاز به این بازسازی کد بهوجود میآید که استفاده کنندهی از کلاسها، درگیر جزییات بیش از اندازهی کلاسها میشود. به طور مثال به نمودار بالا توجه نمایید. در این نمودار تکه کدی مدل شده است که در آن ClientClass استفاده کننده از امکانات دو کلاس دیگر است. برای بدست آوردن مدیر یک شخص در این طراحی نیاز است ابتدا ClientClass اطلاعات مربوط به department یک شخص را با استفاده از متد GetDepartment بدست آورد. سپس با استفاده از متد GetMa ...
زمانیکه کلاسی، دو یا چند کار را انجام میدهد، بهتر است این امور در کلاسهای مجزایی انجام شوند. راه اصلی این کار، بازسازی کد استخراج کلاس است. ایده اصلی این بازسازی کد با ساختن کلاسی جدید و انتقال خصوصیتها، فیلدها و متدهای مورد نظر به آن انجام میشود. کلاسها معمولا از ابتدا به صورت چند وظیفهای و پیچیده طراحی و پیاده سازی نمیشوند. اما با گذشت زمان معمولا کلاسها پیچیدهتر میشوند. این پیچیدگی تاثیر مستقیمی را بر روی قابلیت نگهداری نر ...
معمولا زمانیکه متدی از امکانات کلاس دیگری غیر از کلاسی که در آن تعریف شده است استفاده میکند، نیاز به چنین بازسازی کدی داریم. روش کلی این بازسازی کد، انتقال متد به کلاسی است که بیشترین تعلق را به آن دارد! جابجایی متد یکی از موارد پر تکرار و مهم در امر بازسازی کد است. این بازسازی در مراحل انجام دیگر بازسازیهای کد، مانند شکستن کلاس نیز استفاده میشود. با این روش ساده میتوان کلاسهایی با مسئولیتهای محدود و مشخص را توسعه داد. ...
زیبایی متدهای کوچک، در قابل درک بودن آنها نهفته است. هدف نهایی بیشتر روشهای بازسازی کد، تغییر تکه کدی بزرگ و در هم تنیده، به تکههای کوچک قابل درکتر است. مهمترین مانع در شکستن تکه کدهای طولانی، وجود متغیرهای موقتی در آن است. چند روش بازسازی کد مطرح شده به طور خاص به این موضوع توجه دارند. زمانیکه متد طولانی ای در کد وجود داشته باشد که نتوان (به راحتی) آن را به چند متد کوچکتر تقسیم کرد، معمولا از این روش بازسازی کد استفاده میشود. د ...