پروژه دوره کاردانی پیوسته
رشته کاربرد کامپیوتر
پیشگفتار
ما بسوی تغییر دیگری در سکو (Platfrom) پیش می رویم. درست همانطور که Dos به Windows تحول پیدا کرد، تکنولوژی .NET نیز تحول دیگراست که کاربران کامپیوتر لزوم یادگیری آنرا بطور آشکار احساس می کنند.
دات نت هم یک استراتژی حرفه ای و تجاری برای شرکت مایکروسافت است و هم مجموعه ای از برنامه های قابل اجرا و پشتیبانی است،برای هر آنچه که بعنوان خدمات وب (Web Services) شناخته می شوند.
دات نت تلاش میکند تا در نهایت یک محدوده اجرایی برای تمام زبانها ارائه دهد. تا عمل متقابل (interoperate) به هم پیوسته ای با یک سیستم نوع متداول و کتابخانه کلاس پایه داشته باشند به همراه این Platform جدید، مایکروسافت یک زبان برنامه نویسی برای بهره گیری از تکنولوژی .NET طراحی و پیاده سازی نموده که C# نام دارد برخی از مطالب و مثالهایی که در این مجموعه تحقیقی ارائه شده در مورد این زبان است.
بر خلافت زبان Visual Basic، مایکروسافت هر دو زبان C# و CLS را به سازمان استانداردهای ECMA ارائه داده است تا از پذیرش Platfrom و زبان برنامه نویسی C# مطمئن شود. با استفاده از استانداردهای عمومی بعنوان زیر بنای .NET این شرکت اطمینان دارد که قدرت و میزان پذیرش این زبان باعث میشود که فراتر از زبانها و سیستمهای صرفاً تجاری گام بردارد.
این مجموعه تحقیقی که بعنوان پایان نامه دانشجویی ارائه شده است. مبتنی برهفت بخش است که شش بخش از آن شامل اطلاعات نسبتاً اجمالی در مورد .NET و به زبان فارسی می باشد که عبارتند از:
-.NET Platform
-زبان میانه (IL)
-زبان عمومی (CLR)
-توسعه فرمهایی ویندوز با Visual Studio.NET
-اساس ASP.NET
-خدمات وب (Web Services)
و بخش آخر این مجموعه نیز شامل اطلاعات تفصیلی در مورد .NET و به زبان انگلیسی می باشد. در خاتمه لازم می دانم از کمکها و راهنمایی های استاد راهنمای اینجانب، جناب آقای مهندس سید مسگری تشکر و سپاسگذاری نمایم.
مقدمه ای درباره NET.
یقیناً، میکروسافت برجسته ترین تحولات را در صنعت رایانه به وجو آورده است. موفقیت های DOS ، حاصل تلاش بی وقفه بیل گیتس و استیوبالمر بود، وقتی آنها به IBM اطلاع دادند که سیستم عاملی برای فروش دارند حرکت قابل توجهی در دنیای رایانه ایجاد شد. میکروسافت با الهام گرفتن از جذابیت اپل مکینتاش سیستم عاملی ایجاد کرد که به طور گسترده در جهان مورد استفاده قرار گرفت و تحولی دوباره در دنیای رایانه بوجود آورد.
اکنون، میکروسافت با ابداع مجدد روشی برای استفاده و برنامه ریزی رایانه ها تحول دیگری در جهان ایجاد کرده است. اگر شما یک برنامه نویس C++ هستید یا اگر با سیستم عامل ویندوز یا کلاس (رده) خیت بنیادین میکروسافت (MFC) کار می کنید، بدون شک کاملاً تحت تأثیر الزامات NET، خواهید بود.
اخیراً اینترنت به رسانه ای تبدیل شده است که ما از طریق آن میتوانیم تجارت کنیم، دوستان خود را ملاقات کنیم، حساب جاری خود را انجام دهیم، بازی کنیم، گپ بزنیم و با اشخاصی که دوست داریم در تماس باشیم . انجام همه کارها از طریق یک نرم افزار نوشته شده، عملی و امکان پذیر شده اند تا ارتباطات ضابطه اینترنت (IP) برای وب جهانی برقرار می شوند. از آن جا که وب پیشرفت نموده و پیچیده تر شده است نرم افزار لازم است برای اجرای آن نیز باید میلیون ها داده IP را به رایانه ما انتقال دهد تا از آن دریافت کند. با استفاده از پست الکترونیکی مرور صفحات وب تعامل (فعل و انفعال) با پایگاه دادهع ها و اجرای برنامه های کاربردی توزیع شده بسیار پیچیده تر شده است و در نتیجه مهارت ها و تکنیک های برنامه نویسی نیز به ایجاد و حفظ نرم افزاری نیاز دارد که پیچیده تر باشد. یک برنامه نویس، اغلب مواقع (و به طور روزانه) با XML , SOAP , ASP , DCOM . CoM+ COM، و XSL و یک آرایه رو به افزایش از SDK های کامل و نیز راهنماییهایی در رابطه با آنها مواجه می گردد.
میکروسافت، بنابر اصل نیازهای فناوری جاری همانند بسیاری از صنعتکاران به طور روزافزون، برنامه های کاربردی، مجموعه ابزارهای و سیستم های عامل و کتابخانه ها قابل حمل نیستند، زیرا بسیار گسترده تر می باشند و همچنین حاوی افزودنی ها، الحاقات (extensions) و توافق ها (compromisers) هستند. چارچوب NET، در اصل آن را تغییر می دهد. این تغییر نه نمونه ی است و نه برای تحکیم کار، بلکه این یک حرکت بسیار بزرگ، برجسته و قابل تأمل است که همه مطالب مربوط به برنامه نویسی رایانه های شخصی شما (در هر شکل و اندازه ای) را دوباره تعریف می کند و شامل خود زبان ها نیز می باشد.
یکی از مهمترین حقایق موجود در مورد چارچوب NET. (و شاید این نظر از جهانی درست نباشد) آنست که این زبان، همانند جاوا از فناوری ماشین مجازی استفاده نمی کند. نرم افزار قابل اجرا در NET کاملاً کامپایل (همگردانی) می شود و همانند کد (رمز) کامپایل شده از یک برنامه C در سطح ماشین اجرا خواهد شد. این تصور غلط رایج از آن ناشی می شود که NET از یک زبان میانه که گاهی اوقات به عنوان “P – code” تعریف می شود، استفاده می کند. NET در واقع روش کامپایل (همگردانی) چند مرحله ای را به کار می برد. یک کامپایل اولیه به یک فرمت (قالب) میانه قابل حمل و یک کامپایل درجا (JIT) برای یک برگه نهایی قابل اجرا در زمان اجرا.
این سیستم (در حالی که نسبتاً پیچیده است) برای انجمن برنامه نویسی فواید زیادی دارد. یعنی در همه زبان ها دارای یک سطح عمومی هستند که در شکل میانه خود آن را به اشتراک می گذارند. بنابر این ترکیبی از ماجول(پیمانه) های نوشته شده در زبان های COBOL . FORTRAN , Eiffel , Visual Basic , C# یا هر زبانی که در آینده پشتیبانی خواهد شد میتواند برای زبان میانه (IL) کامپایل (همگانی) می شود و همراه با شرح کاملی از خود بسته بندی می گردد. رابط ها،خصوصیات (Prroperties) روش ها و کلاس (رده) های آن (همانند فوق داده ها) برای سایر ماجول (پیمانه) ها با محیط های توسعه برنامه کاربردی که سریعاً مجتمع شده اند (نظیر Visual Studio. NET) در دسترس می باشند.
هنگامی که زمان اجرای NET برای اجرای یک برنامه تبدیل شده به IL استفاده می شود، NET از یک JITer برای کامپایل (همگردانی) IL به یک کد ماشین اصلی (درتبدیل کامل) که در ریز پردازنده دستگاه اجرا می شود، استفاده می کند. JITer ها حتی برای برخی از بخشهای بی استفاده کامپایل نشده از کد (رمز) میانه نیز بسیار سریع و مؤثر هستند. بدیهی است که این فرایند کامپایل وقت گیر است، بنابر این وقتی زمان های بارگذاری مهم هستند یا مسأله قابلیت حمل ضروی نیست، این سیستم یک کامپایلر pre – JIT را ارائه می دهد که آن رمز مبتنی بر IL را به یک قالب پایدار و اصلی تبدیل می کند.
چهارچوب NET چهار زبان اصلی را ارائه می دهد: C#، ویژوال بیسیک، C++ (همراه با الحاقات اداره شده) و Jscript. شرکت های دیگری نیز در حال ایجاد چند زبان دیگر هستند. مثلاً شرکت فوجیستو، نگارشی از COBOL را ارائه داده است.
مجموعه های اصلی از همگردان ها وجود دارند که زبان های تحت NET را می گیرند و ماجول (پیمانه) های زبان های میانه را ایجاد می کنند. در آنسوی این مجموعه ها، Jiter های IL به رمز ماشین هستند. یک Jiter استاندارد وجود دارد که عمدتاً توسط سیستم های دارای قدرت و حافظه زیاد استفاده می شود. این نوع Jiter یک شکل استاندارد IL را به شکل استاندارد IL را به یک شکل بهینه شده در ماشین کامپایل (همگردانی) می کند. در نتیجه یک کامپایلر JIT مقرون به صرفه به دست می آید که سرعت زیادی دارد ولی کمی بهینه سازی شده است و وابسته به زیرمجموعه ای از IL از پیش بهینه می باشد. در نهایت per – JIT موجود یک کد (رمز) اصلی قابل اجرا ایجاد می کند که میتواند در شکل آماده برای کامپایل خود توزیع شود. این روشها تنها زمانی استفاده می شود که برنامه مورد نظر نتواند برای سکوی (دستگاه) سخت افزاری دیگری توزیع گردد.
سرانجام زمانی نسبی سخت افزار و سیستم عامل موجود در ماشین همان زمان اجرای زبان عمومی NET(CLR)، می باشد. این بلوک مؤثر خدماتی را ارائه می دهد که مؤلفه ها بتوانند از آنها استفاده کنند تا به رایانه شما یا OS اصلی ماشین تعامل داشته باشد. این نکته، جالب توجه است که میزبان ماشین CLR به عنوان یک PC شناخته نمی شود و سیستم عامل مورد نظر لزوماً نباید DOS یا ویندوز باشد. میکروسافت برای گسترش چارچوب، NET در بسیاری از سکوها (از کوچک ترین وسایل دستی ها، تلفن ها، PDA ها تاسیستم های لینوکس و یونیسک) یک راهکار (استرانژی) کاملی دارد. با وجود این که این راهکار در سیستم هایی غیر از سیستم 1386Windose 2000 سریعاً در دسترس قرار نمی گیرند، ولی قابلیت حمل آن باعث شد توسعه گران یک محیط برنامه نویسی قابل اجرا در همه جا و یکبار نوشته شده را ایجاد کنند.
زبان میانه (IL) میکروسافت
یک نکته قابل توجه در مورد زبان میانه (IL) میکروسافت این است که این زبان در ماشین مزبور پنهان نشده است. IL، یک زبان کاملاً جدید و مبتنی بر stake (پشته) است و شباهت کمی با کد اسمبلی (همگذاری) دارد که در صورت لزوم می توانید آن را با دست بنویسید. همچنین ابزارهایی وجود دارند که شما را قادر می سازد تا IL را از اسامبلی (همگذاری) خارج نموده و محتوای موضوعات سیستم رمز مختص به خود را مشاهده کنید. در فص 3-1 زبان میانه IL جزئیات بیشتری از IL را بررسی خواهیم کرد و حتی می توانیم مستقیماً آن را برای نوشتن برخی از برنامه ها مورد استفاده قرار دهیم.
مقدمه ای برای مدیریت حافظه .NET
یکی از واقعیت های NET که افراد بسیاری را هیجان زده نگران و یا فقط مات و مبهوت می کند این است که مدیریت حافظه زمان اجرای NET همانند یک سیستم GC (جمع آوری آشغال) می باشد. برنامه نویسان قدیمی در روزهای اوج زبان Lisp دچار کابوس می شدند، روزهایی وجود داشت که انتظار برای رسیدن به جمع کننده آشغال (garbage - collector) یک تجربه سخت بود زیرا این کار فقط در روزهای سه شنبه انجام می شد. برنامه نویسان C++، مدیریت حافظه ای داشتند که به آنها یادآوری می کرد که از دست دادن نظارت بر تخصیص حافظه ها و حذف ها کار درستی نیست.
سیستم مدیریت حافظه NET، تخصیص منابع حافظه را به شکل دیگری انجام می دهد. یک بلوک حافظه، به آشغال های جمع آوری شده یا کپه (heap) اداره شد، اختصاص دارد که سابقه (رکورد) همه موضوعات ارجاع داده شده به آن را حفظ می کند. فقط زمانی که آن مرجع ها ترخیص می شوند، موضوع از بین می رود. بدین وسیله، برنامه نویس از مسئولیت مدیریت حافظه خلاص می شود. شما دیگر مجبور نیستید که پاکسازی حافظه را به خاطر بسپارید، بلکه فقط باید استفاده از آن را متوقف نمایید. همچنین یک کلاس (رده) دیگر نباید از شمارش های مرجع آگاه باشد بلکه فقط زمان حذف خود را می داند. برای تکه تکه شدن کمتر کپه، GC موضوعات را جابجا می کند تا فضاهای خالی و استفاده شده ای که در ذخیره گاه حافظه اداره شده قرار دارند را یکپارچه نماید.
این امر مانع از نشست های (leaks) حافظه می شود و باعث پیشرفت کارآیی سیستم های خادمی که به شدت فشرده شده اند، می گردد. همچنین کپه اداره شده باید اطمینان یابد که دستیابی های ناامن ]نظیر سرریزش ها و صدمات بافر (میانگاه) [ نمی توانند داده های مربوط به سایر اجرای برنامه های روی همان سیستم را اصلاح کنند. این امر کل سیستم عامل را ایمن تر و مطمئن تر خواهد کرد. سیستم های جمع آوری کننده آشغال، به نامؤثر و کند بودن معروف هستند. ولی میکروسافت به مرحله ای رسیده است که کارکرد واقعی جمع آوری آشغال در NET را تضمین می کند. این برنامه دارای سرعت بسیار زیادی است و تأثیر عمیقی در بارگذاری مهم CPU نخواهد داشت. معمولاً در یک برنامه ویندوز 2000 (مبتنی بر ماشین)، GC (جمع کننده آشغال) فقط به حدود 1000/1 از کل زمان پردازنده نیاز دارد.