تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 9 از 9

نام تاپيک: بخشی از ويژگيهای جديد Borland Developer Studio 2006

  1. #1
    آخر فروم باز تکنیک برتر's Avatar
    تاريخ عضويت
    Sep 2005
    پست ها
    1,705

    پيش فرض بخشی از ويژگيهای جديد Borland Developer Studio 2006

    بخشي از ويژگيهاي جديد محيط BDS 4.0

    Method Navigation

    حركت/پرش بين متدها با استفاده از تركيب كليدهاي :

    Ctrl+Alt+Up متد قبل
    Ctrl+Alt+Down متد بعد
    Ctrl+Alt+End آخرين متد
    Ctrl+Alt+Home اولين متد


    • Class Lock
    براي حركت بين متدهايي كه در يك يونيت در كلاسهاي مختلف تعريف شده اند از روش بالا ميتوانيد استفاده كنيد،
    حالا براي اينكه حركت بين متدها را به يك كلاس خاص محدود كنيد ، ميتوانيد روي هر متدي كه هستيد
    (كه متعلق به يك كلاس خاص هست) كليد هاي Ctrl+Q+L را فشار دهيد تا از اين به بعد با استفاده از روش مذكور
    فقط در اين كلاس حركت كنيد و با استفاده دوباره همين كليدها (Ctrl+Q+L) اين محدوديت را از بين ببريد.



    • زمانيكه يك فايل سورس را باز كنيد شماره خطوط را در كنار اديتور مي بينيد كه تغيير ميكند.

    • به جاي اينكه كنار هر خط و همه خطوط "عدد" ببينيد، شماره خط را در كنار هر 10 خط خواهيد ديد. به اين معني كه
    خطوط به صورت 10 خط به 10 خط شماره گذاري شده اند با يك خط فاصله در خط پنجم و يك نقطه كنار هر خط.
    اين قاعده براي خطي كه كرسر در آن است استثناست، يعني براي خطي كه كرسر در آن ست شماره خط نيز نمايش
    داده ميشود. شماره خط در محلي كه علامت Bookmark و Breakpoint قرار ميگيرد نمايش داده نميشود و محلي جداگانه دارد.

    • در سمت چپ اديتور خطوطي را به رنگهاي مختلف ميبينيد كه :
    رنگ زرد : تغييرات جاري
    رنگ سبز : آخرين تغييرات كه ذخيره هم شده اند.



    • اگه در Code Editor روي هر كدام از Tabها دكمه سمت راست ماوس را فشار دهيد ميتوانيد با استفاده
    از گزينه Close all other pages به غير از اين Tab ، ساير Tab ها رو ببنديد.


    • با فشار دادن دكمه مياني ماوس روي هر Tab ميتوانيد آن Tab رو ببنديد.



    • اگه در جايي بخواهيد مقدار رشته اي را به يك ثابت (Const) يا به يك متغير تخصيص دهيد كه جمله نسبتا" طولاني هم براي
    آن در نظر گرفتيد ، ميتوانيد اين جمله را به چندين خط تقسيم كنيد و براي نوشتن اين جمله از ويژگي جديد BDS 2006
    استفاده كنيد به اين صورت كه بعد از تعريف نام ثابت و قرار دادن علامت مساوي و كوتيشن بخشي از جمله مورد نظر را
    بنويسيد و به جاي قرار دادن كوتيشن و عملگر + و زدن كليد Enter (براي نوشتن ادامه جمله در خط بعدي ) ، فقط كليد Enter
    را بزنيد و بقيه كار را به Editor بسپاريد.

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    • برای تعريف يك كلاس جديد ، ميتوانيد از ويژگي جديد BDS 2006 استفاده كنيد به اين صورت كه:
    در قسمت Type يعني در جايي كه ساختار يك كلاس تعريف ميشود يك خط جديد باز كنيد و در آن خط فقط كلمه Class
    را بنويسيد و بعد كليد Tab را بزنيد، ميبينيد كه قالب عمومي يك كلاس ايجاد ميشود و فقط كافيست نام كلاس و وراثت آن
    را تعيين كنيد، كه مطمئنا" انجام اين دو كار هم با استفاده از كليدهاي Shift+Tab مشكل نخواهد بود.


    • وقتي در يك متد در حال كار هستيد و نياز به يك متغير داريد ، حتما" لازم نيست كه به ابتداي متد رفته و متغير مورد نياز را
    در بخش var تعريف كنيد، ميتوانيد در جايي كه هستيد يك خط جديد باز كنيد و كلمه var را بنويسيد و كليد
    Tab را بزنيد ، كه در اين صورت تعريف يك متغير با نام Lvar از نوع Integer را در همان خط ملاحظه خواهيد كرد،
    حالا ميتوانيد با استفاده از كليدهاي Shift+Tab بين نام متغير و نوع متغير حركت كنيد و متغير را با نام و نوع مورد نياز
    خود تعريف كنيد و در آخر هم كليد Enter را بزنيد تا تعريف متغير در سر جاي خود قرار گيرد.



    • فراموش نكنيد كه IDE جديد دلفي شامل Error Insight و Help Insight و SyncEdit نيز هست.

    Error Insight : نمايشگر خطاي زمان طراحي ست ، برای نمونه اگر شما از متغيري استفاده كنيد كه تعريف نشده باشد
    يك خط قرمز رنگ در زير آن كشيده خواهد شد.

    Help Insight : راهنمايي كه با قرار دادن اشاره گر ماوس روي يك كلمه نمايش داده خواهد شد.
    (اين ويژگي را با Code Hints اشتباه نگيريد)

    SyncEdit ياSynchronized Editing : اگر يك بخش از كد را انتخاب كنيد كه در آن كلمات تكراری وجود داشته باشد
    در قسمت سمت چپ Editor ، آيكون دو قلم نمايش داده خواهد شد ، با انتخاب اين آيكون يا استفاده از
    كليدهاي Shift+Ctrl+J ميتوانيد SyncEdit را فعال كنيد . پس از فعال شدن SyncEdit ، زير تمام كلمات تكراری يك خط آبي قرار ميگيرد
    كه نشان ميدهد با تغيير يك كلمه از هر گروه ، مابقی گروه نيز تغيير ميكنند. براي اين كار ميتوانيد كلمه مورد نظر
    (كه خط آبي رنگ زير آن وجود دارد) را انتخاب كنيد و شروع به ويرايش كلمه كنيد و نتيجه را ببينيد.
    (آيكون SyncEdit زماني ظاهر ميشود كه در بلاك انتخاب شده كلمه تكراري وجود داشته باشد)



    • UML Designer (همان Together هست كه در BDS 2006 جا داده شده)
    ورژن 1.5 و 2.0 UML را پشتيباني ميكند و اگر نرم افزاري را با Rational Rose مدل كرده باشيد ، مبدل(Rational Rose to Together)
    آن را در اختيارتان قرار ميدهد.
    UML Designer سابقا" در نسخه 2005 توسعه داده شده و ويژگي جديد آن live code synchronization ميباشد ،
    كه شما ميتوانيد كد را تغيير دهيد و همين تغيير را در Diagram ببينيد يا Diagram را تغيير دهيد و نتيجه را در كد مشاهده كنيد.
    ميتوانيد يك كلاس جديد ايجاد كنيد و به آن Field و Property و Method را اضافه كنيد. در كنار Class Diagram با ساير
    دياگرامهاي UML نيز ميتوانيد كار كنيد ، مانند : Use Case, Sequence Collaboration, State Chart و ... .
    با استفاده از Together ميتوانيد مستندات كاملي را براي پروژه تهيه كنيد.



    • وقتي يك كنترل را روي فرم قرار ميدهيد در گوشه ها و مركز هر طرف كنترل ، يك دايره كوچك به رنگ آبي روشن مشاهده ميكنيد.
    اين علامات ، بخشهايي هستند كه شما ميتوانيد از آنها براي تغيير سايز كنترل استفاده كنيد.



    • اگر يك كنترل ديگر روي فرم قرار دهيد ، ميتوانيد از ويژگي جديد و مفيد Design Guidelines استفاده كنيد.
    اين ويژگي يك راهنماي بصري خوب براي تراز كردن كنترل هاي روي يك فرم هست (خط آبي رنگ). اين راهنما نه تنها براي
    تراز كردن كناره هاي كنترلهاست بلكه شما ميتوانيد كنترل ها را با توجه به متن موجود در آنها تراز كنيد(خط صورتي رنگ).





    • Form Positioner
    ويژگي ديگريست كه در سمت راست پائين Designer قرار دارد. توسط اين ويژگي ميتوانيد موقعيت فرم جاري در صفحه نمايش را
    در زمان اجراي برنامه ببينيد و آن را تغيير دهيد. براي راحتي كار ميتوانيد با دوبار كليك روي آن ، سايز Form Positioner را بزرگتر كنيد.



    • Block Completion
    با استفاده از اين ويژگي در Code Editor ميتوانيد بلاكهاي خود را تكميل كنيد براي نمونه اگر در خطي از برنامه
    كلمه End را بنويسيد و بعد كليد Enter را بزنيد اين بلاك با قرار دادن يك End و يك Semicolon در انتهاي آن تكميل ميشود .
    اين ويژگي شما را در تكميل بلاكهاي Beginو Try و Case و Record و Class و Repeat و If كمك خواهد كرد.
    به غير از بلاك If ، در انتهاي مابقي بلاكها Semicolon قرار ميگيرد.



    • Live (Code) Templates
    اين ويژگي واژه نامه اي شامل كدهاي از قبل نوشته شده را در اختيار شما قرار ميدهد كه ميتوانيد از اين كدها در برنامه
    استفاده كنيد (البته زمانيكه در Code Editor هستيد) تا از بخشي از مقدار تايپي را كه روزانه ميبايست انجام دهيد بكاهد.
    Live Template قابل تغيير نيز هست.



    • Block Comments
    زمانيكه در Code Editor هستيد با استفاده از تركيب كليدهاي /+Ctrl ميتوانيد خطي كه در آن هستيد را Comment
    كنيد (Comment يي كه با // ايجاد ميشود ) يا اينكه بخشي از كد (كه ميتواند شامل چندين خط باشد) را انتخاب كنيد
    و با /+Ctrl همه را يكدفعه Comment كرد. توسط همين تركيب هم ميتوانيد Comment هايي را كه ايجاد كرده ايد حذف كنيد.

  2. این کاربر از تکنیک برتر بخاطر این مطلب مفید تشکر کرده است


  3. #2
    آخر فروم باز تکنیک برتر's Avatar
    تاريخ عضويت
    Sep 2005
    پست ها
    1,705

    پيش فرض

    بخش دوم


    • Code Folding and Region
    با استفاده از علامت – و + در كنار هر تعریف، متد یا تمام بخشها مانند بخش Implementation یك یونیت كه وجود دارد
    میتوانید آن را ببندید یا باز كنید(این علامات به صورت خودكار در كنار هر بخشی ایجاد میشود).

    Ctrl+Shift+K+O : غیرفعال/فعال كردن Code Folding
    Ctrl+Shift+k+E : بستن كد
    Ctrl+Shift+K+U : باز كردن كد
    Ctrl+Shift+K+A باز كردن همه كد

    ویژگی كه به محیط Code Editor اضافه شده، تعریف شخصی چنین بخشی ست ، به این معنی كه شما میتوانید با
    استفاده از یك رهنمود كامپایلر (compiler directives) این بخش را ایجاد كنید و آن را نامگذاری كنید.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    • Refactoring

    تكنیكی ست برای دوباره ساختن و اصلاح كد جاری تا رفتار كد جاری به همان صورت باقی بماند.

    سه نوع Refactoring در دلفی تعریف شده ست :
    یكی استفاده از تركیب كلیدهای Ctrl+Shift+V، برای تعریف متغیر محلی و دیگری برای تعریف فیلد
    (یا همان متغیر در ساختار كلاس جاری ست) كه با تركیب كلیدهای Ctrl+Shift+D ست. خوب، این مراحل را كه خودم هم
    میتوانستم با رفتن به بخش تعریف كلاس یا Begin متد انجام بدهم !!؟؟ بله، Refactoring امكان مفید دیگری كه در كنار
    كدنویسی سریعتر به شما میدهد اینست كه نیازی نیست وقفه ای را ایجاد كنید و سرتاسر سورس را برای تعریف
    یك متغیر طی كنید، نیازی نیست كه به Begin متد بروید و كلمه var را اگر وجود نداشته باشد تایپ كنید و بعد هم متغیر
    مورد نظر را تعریف كنید یا به كلاس یك متد بروید تا در آنجا فیلدی را تعریف كنید.

    نمونه :
    خط زیر را در Code Editor بنویسید و از قبل مطمئن باشید كه متغیری به نام i وجود ندارد :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    به موقعیت i برگردید و تعریف متغیر (Declare Variable) را فعال كنید (با Ctrl+Shift+V یا از منوی اصلی و گزینه Refactor
    یا با استفاده از context menu كه همان كلیك راست در Code Editor و گزینه Refactoring). فرمی باز میشود كه اگر
    در جلوی متغیر := و مقدار را قرار نداده باشید ، نوع پیشنهادی خود را نمایش میدهد. اگر در این فرم دقت كنید، میبنید كه
    میتوانید یك آرایه نیز تعریف كنید، همچنین میتوانید یك مقدار اولیه (initial value) نیز برای متغیر در نظر بگیرید كه در این
    صورت دلفی یك خط جدید بعد از Begin متد ایجاد میكند و مقدار را به متغیر تخصیص میدهد.
    تعریف فیلد (Declare Field)نیز شباهت خیلی زیادی به تعریف متغیر دارد.



    Extract Resource String

    دومین Refactoring یی كه در دلفی وجود دارد راه ساده ایست برای انتقال یك متغیر رشته ای به بخش resource string.
    بخش resource string در قسمت code segment برنامه كامپایل نمیشود ولی مانند یك resource به فایل اجرایی لینك میشود.
    به این شكل میتوان بخشی از حافظه را كه همیشه درگیر متغیرهای رشته ای هست را آزاد كرد.

    نكته :
    تعریف resource string مانند تعریف Const است :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    استفاده از resource string ها واقعا خسته كننده ست؛ باید از رشته مورد نظر كپی بگیرید ، از محل فعلی به قبل از
    بلاك جاری(حداقل) حركت كنید ، resource string را تعریف كنید ، رشته مورد نظر را قرار دهید ، به موقعیت قبلی برگردید
    و از نام resource string یی كه در بالا تعریف كرده اید استفاده كنید. ولی حالا فقط با یك دستور همه این كارها انجام میشود، Ctrl+Shift+L .


    فرض كنید متدی مانند متد زیر دارید :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    كرسر متن را داخل رشته Hello ببرید (لازم نیست كه متغیر را انتخاب كنید یا این خط را انتخاب كنید) سپس كلیدهای Ctrl+Shift+L
    را فشار دهید. فرمی نمایش داده میشود كه در آن نام پیشنهادی resource string وجود دارد كه میتوانید آن را تغییر دهید و تائید كنید،
    تمام مراحلی كه در بالا ذكر كردم انجام میشود. (نام resource string برگرفته از رشته مورد نظر به اضافه كلمه Str ست).
    پس Extract Resource String با استفاده از :
    Ctrl+Shift+L
    یا از منوی اصلی گزینه Refactor و بعد هم گزینه Extract Resource String
    یا كلیك راست در Code Editor ، گزینه Refactoring و بعد هم Extract Resource String


    نكته :
    سه نوع Refactoring یی كه توضیح دادم Declare Variable) و Declare Field و Extract Resource String) در دلفی وجود دارد
    و جزء لیست رسمی Refactoring نیست ، ولی به هر حال پیاده سازی را ساده تر میكند.



    Rename Refactoring

    یكی از مهمترین انواع Refactoring است كه جزء لیست رسمی Refactoring نیز هست. Rename بسیار قدرتمند است و میتواند
    روی خیلی از موارد مانند متغیرها، procedure ها، type ها(شامل كلاسها)، فیلدها، functionها كار كند.

    فعال كردن Rename Factoring :
    تركیب كلیدهای Ctrl+Shift+E
    یا از منوی اصلی گزینه Refactor و بعد گزینه Rename
    یا كلیك راست در Code Editor و گزینه Refactoring و بعد هم گزینه Rename

    كافی ست كرسر متن را روی چیزی كه میخواهید تغییر نام دهید بگذارید(لازم نیست كه آن را انتخاب كنید) ، Rename را فعال كنید.
    اطلاعاتی از قبیل نام كلاس یا یونیت و نام فعلی و نام جدید نمایش داده می شود كه میتوانید نام جدید را وارد كنید.
    اگر گزینه View reference before refactoring انتخاب شده باشد، قبل از تغییر نام ، لیستی از تغییرات در یك پنجره جدید
    نمایش داده می شود ، پس از مرور میتوانید عملیات را ادامه دهید یا لغو كنید.
    اگر نوعی (منظور فیلد ، شئی، متغیر و ...) را تعریف كرده اید و از آن در چندین یونیت مختلف استفاده كرده اید و حالا
    قصد تغییر نام آن را دارید ، Rename تمام یونیتها را برای این تغییر مرور میكند.

    حقیقتا" زیبایی Rename Refactoring اینست كه نه فقط در تعریف و اعلان یك كلاس یا متد موثر هست، بلكه روی همه
    ارجاعات به متد یا كلاس نیز تاثیر گذار هست.

    یكی دیگر از تفاوتهای Search و Replace با Rename refactoring در اینست كه اگر در یك كلاس پدر، متد virtual یی
    را تغییر نام دهید ، Rename در كلاسهای فرزند نام متد را تغییر خواهد داد.

    اگر كه فرضا" با نام جدید شئی ، شئی دیگری وجود داشته باشد، Rename refactoring با خطا متوقف خواهد شد.

    موردی كه بوسیله Rename نمیتوانید تغییر دهید، Property ست، البته نه نام Property، بلكه متدهای setter و getter آن.
    به این صورت كه اگر نام یك Property را تغییر دهید، متدهای مربوط به آن كه معمولا" تركیبی ست از نام Property و پیشوندهای get و set،
    تغییر نخواهند كرد. كه البته برای این مورد میتوانید به صورت جداگانه از Rename استفاده كنید.



    Extract Method Refactoring

    یكی دیگر از Refactoring های رسمی Extract Method هست. Extract Method یك قطعه كد را تبدیل به یك متد میكند
    كه نام متد نشان دهنده هدف متد هست.
    ممكن است همین كار را زمانی انجام دهید كه متد برای درك خیلی پیچیده شده یا نیاز شما به چنین كدی كه
    در متد دیگری پیاده سازی شده باعث انجام این كار شود. فرض كنید دو متد مجزا دارید كه بخشی از كد در هر دو مشترك هست، در چنین مواقعی بهترست كه در صورت امكان بخش مشترك تبدیل به یك متد شود تا هر دو متد بتوانند از آن استفاده كنند.



    برای فعال كردن Extract Method Refactoring ابتدا بخشی از كد را كه میخواهید تبدیل به یك متد شود انتخاب كنید
    سپس یكی از سه روش زیر را اجرا كنید :

    تركیب كلیدهای Ctrl+Shift+M
    یا از منوی اصلی گزینه Refactor و بعد هم گزینه Extract Method
    یا كلیك راست روی Code Editor و گزینه Refactoring و بعد گزینه Extract Method

    در ابتدا Extract Method كد مورد نظر شما را تجزیه میكند و اگر قابل تبدیل نباشد به شما هشدار میدهد. اگر كد مورد نظر قابل
    تبدیل باشد آن را تبدیل به یك متد خارج از متد جاری میكند.

    نكته جالبی كه در Extract Method وجود دارد اینست كه اگر در قطعه كدی كه انتخاب شده متغیری وجود داشته باشد ،
    به صورت خودكار آن را به عنوان پارامتر در نظر میگیرد.

    بعد از باز شدن فرم Extract Method ، اطلاعاتی از قبیل نام متد جاری ، نام متد جدید و ساختار كامل متد نمایش داده میشود
    كه میتوان نامی را برای متد در نظر گرفت. فراموش نكنید كه در بخش new method name فقط نام متد را بنویسید و از قرار دادن
    پرانتز و تعریف پارامتر خودداری كنید.

    نمونه :
    این كد ، كد اصلی ما هست كه میخواهیم بخش داخلی حلقه for را تبدیل به یك متد كنیم:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    2)
    بخش داخلی حلقه را انتخاب كنید( به غیر از begin و end)، یعنی :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    3)

    یكی از روشهای فراخوانی Extract Method را انجام دهید، مثلا" Ctrl+Shift+M، بعد از باز شدن فرم، NumberToString را
    در قسمت نام متد تایپ و تائید كنید. ميتوانيد با مرور سورس نتيجه را ببينيد.


    نكته:
    هر كدی را نمیتوان تبدیل به یك متد كرد. كد حتما" باید بدون خطا باشد و شامل with و متدهای محلی/تو در تو
    (متدی كه داخل یك متد دیگر ایجاد شده) و دستور inherited نباشد.

  4. #3
    آخر فروم باز تکنیک برتر's Avatar
    تاريخ عضويت
    Sep 2005
    پست ها
    1,705

    پيش فرض

    بخش سوم


    Change Parameters
    توسط این Refactoring میتوانید نوع پارامتر(های) موجود یك متد را تغییر دهید، یك پارامتر جدید به متد اضافه كنید، پارامتری را حذف كنید یا ترتیب پارامترها را تغییر دهید. تغییری كه حاصل میشود هم بر روی تعریف(declaration) متد هست و هم روی پیاده سازی (implementation) متد.
    اگر پارامتر متدی كه به صورت virtual تعریف شده را تغییر دهید، این تغییر روی تمام كلاسهای فرزند كه این متد را override كرده اند نیز اعمال می شود.


    فراخوانی Change Parameters :

    تركیب كلیدهای Ctrl+Shift+A
    یا از منوی اصلی ، گزینه Refactor و بعد هم Change Params
    یا كلیك راست روی Code Editor ، گزینه Refactoring و بعد Change Params

    فرمی كه باز میشود اطلاعاتی مانند نام یونیت، نام كلاس و لیستی از پارامترها (اگر وجود داشته باشد) به همراه نوع داده ، مقدار پیش فرض و نوع پارامتر (var, const, out) نمایش میدهد.


    كاربرد دكمه ها :
    Add برای اضافه كردن پارامتر
    Edit برای تغییر نوع پارمتر موجود
    Remove حذف پارامتر
    Move up و Move Down تغییر ترتیب پارمترها در متد

    بعد از ایجاد تغییرات روی پارامترهای متد و زدن كلید OK ، لیستی از تغییراتی كه اعمال خواهند شد نمایش داده می شود كه شما می توانید این تغییرات را مرور كنید و نهایتا" تائید كنید.




    Extract Interface
    خارج كردن یك متد از یك كلاس و قرار دادن آن در یك Interface . با فعال كردن Extract Interface فرمی باز میشود كه میتوانید نام Interface و نام یونیتی كه میخواهید این Interface در آن قرار گیرد را وارد كنید. بعد از تائید فرم، لیستی از مواردی كه تغییر خواهند كرد نمایش داده می شود كه پس از مرور میتوانید آن را تائید یا لغو كنید.
    اگر نام Interface یی كه وارد میكنید از قبل وجود داشته باشه، این متد به Interface موجود اضافه خواهد شد.
    اگر نام یونیتی كه میخواهید Interface در آن ساخته شود وجود نداشته باشد، ابتدا یونیت ساخته شده و سپس Interface در آن قرار میگیرد.




    Introduce Variable و Introduce Field

    Introduce Variable
    در نگاه اول شباهت زیادی به declare variable دارد، در صورتیكه declare variable ، تعریف متغیری ست كه در كد استفاده شده ولی جایی تعریف نشده و introduce variable ، انتخاب یك عبارت برای تعریف یك متغیر جدید و تخصیص عبارت به آن متغیر هست.



    فراخوانی Introduce Variable :
    منوی اصلی ، گزینه Refactor ، گزینه Introduce Variable
    یا كلیك راست در Code Editor ، گزینه Refactoring ، گزینه Introduce Variable




    نمونه :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در این مثال می توانید عبارت Left + Top را انتخاب كنید و Introduce Field را فراخوانی كنید. فرمی باز میشود كه فقط باید نام متغیر جدید (فرضا" Position) را در آن وارد و تائید كنید. می بینید كه یك متغیر در بخش var تعریف میشود و كد به صورت زیر تغییر میكند :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    Introduce Field شباهت زیادی به Introduce Variable دارد با این تفاوت كه فیلدی(متغیری) كه در ساختار كلاس تعریف می شود ، ویژگیهایی از قبیل مقدار اولیه (intitialize) و میدان دید (visibility) ... را باید در مورد آن مشخص كرد كه با فراخوانی فرم Introduce Field ، این امكان فراهم میشود.

    فراخوانی Introduce Field :
    منوی اصلی ، گزینه Refactor ، گزینه Introduce Field
    یا كلیك راست در Code Editor ، گزینه Refactoring ، گزینه Introduce Field



    - Find Unit Refactoring
    آخرین Refactoring یی كه دلفی 2006 در اختیار شما میگذارد، توانایی اضافه كردن خودكار یونیت به دستور uses هست. بعضی مواقع ممكن ست كه از توابع ، پروسیجرها یا هر تعریفی از یونیتی دیگر استفاده كنید ولی آن یونیت در لیست uses اضافه نشده باشد.

    نمونه :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در اینصورت توسط Find Unit میتوانید نام یونیت مربوطه را در لیست uses اضافه كنید.

    Find Unit به صورت زیر فراخوانی میشود :
    Ctrl+Shift+A
    یا از منوی اصلی گزینه Refactor و بعد گزینه Find Unit
    یا كلیك راست در Code Editor و گزینه Refactoring و بعد گزینه Find Unit


    بعد از باز شدن فرم Find unit میتوانید تعیین كنید كه یونیت مورد نظر در كدام uses میبایست قرار گیرد، uses بخش Interface یا بخش Implementation .

  5. #4
    آخر فروم باز تکنیک برتر's Avatar
    تاريخ عضويت
    Sep 2005
    پست ها
    1,705

    پيش فرض

    بخش چهارم


    • دستور for…in
    مایكروسافت ویژوال بیسیك دستوری برای پیمایش از ابتدا تا انتهای یك مجموعه دارد كه for..each نامیده میشود. قبلا" چنین ایده ای
    در #C نیز پیاده شده است. شركت بورلند در دلفی نسخه 2005 تصمیم گرفت كه پشتیبانی بهتری از این نوع كد را انجام دهد. البته نه فقط برای كامپایلر دات نت بلكه هم برای كامپایلر Win32 و هم برای دات نت. الان این دستور برای استفاده آماده است، البته نه تنها برای یك كلاس Container بلكه برای :


    - كاراكترهای موجود در یك رشته
    - مقادیر یك مجموعه
    - آیتم های یك آرایه داینامیك یا استاتیك ، شامل آرایه های دو بعدی





    شكل كلی :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    به مثال های زیر توجه كنید :


    - كاراكترهای موجود در یك رشته
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در این مثال، حلقه به تعداد ch های موجود در s اجرا خواهد شد، يا به عبارتي حلقه به تعداد كاراكترهاي موجود در s اجرا ميشود.

    - آیتم های یك آرایه
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در این مثال، حلقه به تعداد i موجود در iArray تكرار خواهد شد. اگر فرضا" برای دو خانه آخر آرایه مقداری در نظر نگیرید ، چون آرایه به صورت استاتیك تعریف شده، باز هم حلقه 5 بار تكرار خواهد شد كه در مورد آرايه هاي دايناميك ، به خاطر ماهيتشان، چنين اتفاقي نمي افتد.

    - مقادیر یك مجموعه

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در این مثال، حلقه به تعداد عنصرهای موجود در مجموعه تكرار میشود، یعنی برای حلقه اول 3 بار و برای حلقه دوم 2 بار.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در این مثال، حلقه به تعداد كامپوننتهای موجود در فرم اجرا خواهد شد و نام آنها را به لیست اضافه خواهد كرد.



    • Advanced Record
    ركوردها همیشه بخشی از زبانهای برنامه نویسی هستند. اما در این نسخه به ركوردها میدان بیشتری داده شده چونكه از این به بعد برای ركورد میتوان هم "متد" تعریف كرد و هم از مفهوم نهان سازي يا Encapsulation استفاده كرد ( البته فقط از public و private).

    یك ركورد به همراه متد تا حدی شبیه به یك كلاس است. بیشترین تفاوت (به غیر از مفاهیم Inheritance و Polymorphism) این است كه :

    ركورد از حافظه محلی (از Stack frame) استفاده میكند.
    ركورد را میتوان به عنوان پارامتری از نوع By Value ارسال كرد.
    ركورد در زمان تخصیص یك متغیر ركورد به یك متغیر ركورد دیگر رفتار "value copy" دارد. به این معنی كه محل دیگری از حافظه با محتویات ركورد مبدا مقدار دهی میشود.
    از كلمات كليدي مانند dynamic و virtual و message در تعريف ركورد نمي توانيد استفاده كنيد.

    در مقابل متغیری از نوع كلاس :

    در حافظه Heap قرار میگیرد.
    به عنوان پارامتر به صورت By Reference ارسال میشود.
    در هنگام تخصیص یك متغیر كلاس به یك متغیر كلاس دیگر رفتار "reference copy" دارد. به این معنی كه متغیر مقصد هم به همان محل از حافظه اشاره میكند كه متغیر مبدا اشاره میكند، در واقع عمل "كپی" صورت نمی گیرد بلكه آدرس حافظه به متغیر مقصد تخصیص داده می شود.

    برای مثال :

    وقتیكه متغیري از نوع ركورد تعریف میكنید ، متغیر مربوطه در Stack ایجاد میشود و میتوانید بلافاصله از آن استفاده كنید .یك متغيری از نوع ركورد نسبت به متغیر نوع كلاس كمتر به سمت مدیر حافظه و Garbage Collector میرود.

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در این حالت ، به محض تعریف متغیر myInfo از نوع TpersonInfo ، محلی از حافظه به myInfo اختصاص داده میشود و میتوانید از آن استفاده كنید. در صورتیكه در مورد كلاس این مراحل یك قدم اضافه میشود :


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اینها دلایل كلیدی برای استفاده از Record به جای Class هستند.

    ركورد میتواند یك Constructor نيز داشته باشد، اما این Constructor حتما" باید یك پارامتر داشته باشد ، در غیر اینصورت پیغام خطای "parameterless constructors not allowed on record types" را دریافت می كنید. چرا بورلند اين شرط را لازم دانسته است؟ ركورد به طور خودكار ساخته ميشود ، يعني يك constructor بدون پارامتر دارد، پس زماني كه برنامه نويس ، constructor ديگري تعريف ميكند، بايد يكي يا بيشتر پارامتر نيز براي آن در نظر بگيرد تا تفاوتي بين constructor پيش فرض و constructor يي كه برنامه نويس تعريف كرده بوجود بياد.

    نمونه :

    تعريف :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    پياده سازي :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    استفاده
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

  6. #5
    آخر فروم باز تکنیک برتر's Avatar
    تاريخ عضويت
    Sep 2005
    پست ها
    1,705

    پيش فرض

    بخش پنجم


    • Sealed Class
    در Net framework. همچون معماری جاوا، راهی برای جلوگیری از ارث بری بیشتر از یك كلاس وجود دارد. Sealed Class ها، كلاسهایی هستند كه شما نمی توانید از آنها برای كلاس دیگری به ارث ببرید. این ویژگی الان در دلفی Win32 نيز وجود دارد.

    شكل كلی :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    به این معنی ست كه از كلاس TinheritedClass ، كلاس دیگری نمیتواند به ارث ببرد .

    مثال :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    از این به بعد نمی توانیم كلاس دیگری را از كلاس TBaseDeriv به ارث ببریم.

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در این صورت با پیغام خطای كامپایلر مواجه خواهید شد : "Cannot extend sealed class TbaseDeriv" .
    فراموش نكنید كه Abstract و Sealed را با هم نمی توانید به كار ببرید.



    • Final Method
    با Sealed class میتوانید یك كلاس را به صورت كامل از ارث بری محروم كنید. بعضی مواقع هم نیاز دارید كه از ارث بری متدی كه به صورت virtual تعریف شده است جلوگیری كنید.
    برای این كار میتوانید از Final Method ها استفاده كنید.


    مثال :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    از این به بعد كلاسی كه از كلاس TbaseDeriv به ارث ببرد ، نمیتواند متد A را override كند. در غیر اینصورت با پیغام خطای كامپایلر مواجه میشود : "Cannot override a final method" .

    خوب، حالا ممكن است كه از خودتان سئوال كنید كه چه دلیلی پشت سر این دو مفهوم وجود دارد؟ ممكن ست بخواهید سایرین را از ارث بری كلاس به صورت عمومی منع كنید و مخصوصا" میخواهید كه از ارث بری كلاسهای Security یا Cryptography توسط دیگران جلوگیری كنید، در این زمان این دو مفهوم به شما كمك میكنند.

    از نظر من تا جای ممكن باید از استفاده از این ویژگی در یك كتابخانه خودداری كرد و اجازه دهیم كه برنامه نویسان از كلاسهای موجود نهایت استفاده را بكنند، مگر در شرایط خاص كه مطمئنا" پیش خواهد آمد.

    با این حال اگر نگاهی به كتابخانه های مایكروسافت برای دات نت بیاندازید ، sealed class و final methodهای بیشماری را پیدا خواهید كرد.
    • Class Helper
    زمانیكه بورلند كار بر روی دلفی دات نت را آغاز كرد، یكی از مشكلاتی كه ظاهر شد؛ نیاز به تطبیق برخی از كلاسهای پایه دلفی (مانند Tobject، Exception) با كلاسهای .Net Framework بود. بعد از كمی تحقیق ، ایده ای متحیر كننده به نام Class Helper عرضه شد. Class Helper چیزی نیست به جز نوعی كلاس كه موقعیكه در كلاس دیگری شركت كند ، متدها و ویژگیهای بیشتری را مطرح میكند كه ممكن ست شما در متن كلاس اصلی از این متدها و ویژگیهای اضافه تر استفاده كنید. Class Helper راهی ست برای توسعه كلاس، بدون استفاده از مفهوم وراثت یا همان Inheritance. به عبارت دیگر ، شما یك Class Helper ایجاد میكنید تا متدهای آن به كلاس موجود اضافه شود. این قابلیت به غیر از دلفی .Net در دلفی Win32 نیز قابل استفاده هست.

    شكل كلی :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    نمونه :

    تعریف ساختار كلاس اصلی :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    تعریف Class Helper برای كلاس TmyObject كه در بالا تعریف شده است :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    پیاده سازی كلاس اصلی :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    پیاده سازی Class Helper :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    استفاده از كلاس TmyObject :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    می بینید كه متد Show كه در Class Helper یی با نام TmyObjectHelper تعریف شده به سادگی توسط كلاس اصلی قابل استفاده هست. بعد از اجرای متد Show به مقداری كه ClassName توسط ShowMessage نمایش می دهد دقت كنید.

  7. #6
    آخر فروم باز تکنیک برتر's Avatar
    تاريخ عضويت
    Sep 2005
    پست ها
    1,705

    پيش فرض

    امیدوارم که مورد قبولتون باشد

  8. #7
    حـــــرفـه ای مرد مباح's Avatar
    تاريخ عضويت
    Dec 2005
    محل سكونت
    روي ميخ
    پست ها
    2,143

    پيش فرض

    كارت درسته رفيق.
    ممنون از توضيحاتت.

  9. #8
    آخر فروم باز تکنیک برتر's Avatar
    تاريخ عضويت
    Sep 2005
    پست ها
    1,705

    پيش فرض

    خواهش مي كنم قابلي نداشت

  10. #9
    داره خودمونی میشه
    تاريخ عضويت
    Feb 2005
    پست ها
    101

    پيش فرض

    اينم Pdf اين مطلب كه البته كامل هست:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •