خانه / آموزش برنامه نویسی وب / مبانی دا ت نت ( بخش دوم )

مبانی دا ت نت ( بخش دوم )

در بخش اول اين مقاله به بررسی و معرفی فريمورک دانت پرداخته گرديد. در اين بخش به بررسی CLR ، يکی از مهمترين عناصر موجود در فريمورک دات نت خواهيم پرداخت .
درابتدا لازم است تعريفی از CLR را داشته باشيم. CLR ، محيطی است که برنامه های دات نت بکمک آن اجراء می گردند . برنامه های نوشته شده توسط هر يک از زبان های سازگار با دات نت پس از ترجمه توسط کمپايلر مربوطه به MSIL)Microsoft Intermediate language) ، ترجمه می گردند ( به زبان فوق ، IL نيز گفته می شود ) .

CLR از نمای نزديک

Common Type System(CTS)
( Data Types ,…)

Intermediate Language(IL) to native code compilers

Execution Support (traditional runtime functions)

Security

Garbage Collection,Stack Walk ,Code manager

Class Loader and memory layout

هدف از طراحی CLR ، نيل به اهداف زير بوده است :

پياده سازی سريع و آسان

برخورد اتوماتيک با مقولاتی همچون مديريت حافظه

حمايت از ابزارهای متعدد

قابليت توسعه و گسترش متناسب با محيط بکارگيرنده

پياده سازی سريع و آسان
يک فريمورک گسترده و يکپارچه، امکان نوشتن کد کمتر و با قابليت استفاده مجدد را در اختيار پياده کنندگان قرارخواهد داد . با توجه به اينکه سيستم ( CLR ) ، مجموعه ای از پتانسيل ها و قابليت ها را ارائه می نمايد ، حجم کد نوشته شده توسط برنامه نويسان ، کاهش پيدا خواهد کرد . برنامه ها در دات نت ، با استفاده از يک روش استاندارد و يکپارچه به پتانسيل های ارائه شده ، دستيابی پيدا می نمايند .

برخورد اتوماتيک با مقولاتی همچون مديريت حافظه
در دات نت ، مجموعه ای گسترده از زيرساخت های برنامه نويسی بصورت اتوماتيک توسط CLR ارائه می گردد. مديريت حافظه ، نمونه ای مناسب در اين زمينه است . پياده کنندگان نرم افزار بکمک ويژوال بيسيک در زمانی نه چندان دور همواره نگران مسئله مديريت حافظه بودند . پياده کنندگان ويژوال بيسيک اينک و با استفاده از CLR ، نگرانی خاصی در ارتباط با مديريت حافظه ، نخواهند داشت. ( CLR ، دارای توابع متنوعی در رابطه با مديريت حافظه است ) . برنامه نويسانی که از ++C در محيط دات نت استفاده می نمايند ، ديگر ضرورتی به استفاده از CoCreateInstance برای نمونه سازی يک کلاس و يا استفاده از malloc بمنظور اختصاص حافظه ، نخواهند بود. با بکارگيری امکانات CLR در ارتباط با مديريت حافظه می توان با بخدمت گرفتن يک عبارت ساده خواسته خود را مشخص و CLR در زمان مورد نظر ، عمليات اختصاص حافظه را انجام خواهد داد . عملياتی ديگر، نظير جمع آوری اطلاعات زائد از حافظه ، از ديگر فرآيندهای ضروری و مهمی است که توسط CLR و در ارتباط با مديريت حافظه انجام می گردد.

حمايت از ابزارها ی متعدد
همانگونه که احتمالا" حدس زده ايد ، اغلب عملياتی که CLR انجام می دهد، مشابه سيستم عامل است ،موضوع فوق هرگز بعنوان مهمترين رسالت CLR ذکر نمی گردد و می بايست با صراحت به اين نکته ظريف اشاره گردد که هدف از طراحی CLR ، حمايت از پياده سازی نرم افزار با استفاده از زبان های برنامه نويسی متفاوت است . CLR مجموعه قدرتمندی از مدل های اشياء را ارائه که برای طراحان ، ديباگرها مفيد و قابل استفاده ، خواهد بود. با توجه به اينکه مدل های شی ارائه شده ، مربوط به زمان اجراء می باشند ، امکان بکارگيری ابزارهای طراحی شده مبتنی بر مدل های ارائه شده ، در بين تمام زبانهائی که از CLR استفاده می نمايند .، ميسر خواهد بود.
لازم است به اين نکته نيز اشاره گردد که مايکروسافت محدوديتی را در ارتباط با CLR بمنظور استفاده از زبان های مايکروسافت ايجاد ننموده است . توليدکنندگان زبان های برنامه نويسی ديگر با تغيير درمعماری زبان های خود ، امکان استفاده از CLR بهمراه مزايای متعدد آن را بدست خواهند آورد.در چنين مواردی ، علاوه بر بهره جستن از تمای قابليت های CLR ، امکان ارتباط بين زبان ها نيز فراهم می گردد. CLR ، قادر به کار با چندين زبان برنامه نويسی متفاوت است . ويژگی فوق ، دارای مزايای مهم و گسترده ای برای پياده کنندگان خواهد بود. اشکال زدائی يک برنامه ، نمونه ای مناسب در اين زمينه است . CLR ، اين امکان را فراهم می نمايد که بتوان ديباگری را پياده سازی و آن را در زبانهای مختلف بخدمت گرفت . رفتار و عملکرد ديباگر در تمامی زبانها مشابه و معادل خواهد بود ( پرش از يک زبان به زبان ديگر ) .

متا ديتا
متاديتا ، " داده ئی در رابطه با داده " بوده و می توان آن را بعنوان سطحی عميق تر از داده نسبت به خصلت های سطح سيستم در نظر گرفت. متاديتا ، عنصر اساسی برای تحقق اصل برنامه نويسی ساده ( تسهيل در امر برنامه نويسی ) مورد حمايت CLR است. متاديتا توسط يک کمپايلر توليد و بصورت اتوماتيک در يک فايل EXE و يا DLL ذخيره می گردد.فرمت آن بصورت باينری است ولی فريمورک يک API بمنظور صدور متاديتا به / از يک XML Schema و يا يک کتابخانه نوع COM ارائه می دهد . از Schema XML ، می توان در بازيابی ورژن و ساير اطلاعات مرتبط با يک عنصر ترجمه شده ، استفاده کرد. اطلاعات ارائه شده توسط متاديتا ، مجموعه گسترده ای را شامل می شود :

تشريح يک واحد بکارگيری ( اسمبلی ناميده می شود ) : نام ، ورژن ، فرهنگ ( که می تواند اطلاعاتی نظير زبان پيش فرض کاربر را مشخص نمايد) ، يک کليد عمومی برای بررسی، نوع های صادر شده توسط اسمبلی ، وابستگی ها به ساير اسمبلی ها ، مجوزهای امنيتی مورد نياز بمنظور اجراء

کلاس های پايه و اينرفيس های استفاده شده توسط اسمبلی

خصلت های سفارشی : تعريف شده توسط کاربرو يا کمپايلر

برخی از موارد فوق نظير خصلت های سفارشی ، انتخابی می باشند .کمپايلرها يکی از کاربران و استفاده کنندگان متا ديتا می باشند . مثلا" يک کمپايلر می تواند يک ماژول توليد شده نوسط يک کمپايلر متفاوت ديگر را بررسی و از متا ديتا بمنظور استفاده و درج ( Import ) ، نوع های cross-language استفاده نمايند. کمپايلرها می توانند متاد يتا هائی را در ارتباط با ماژول های ترجمه شده خود نيز توليد نمايند.
متا ديتا يکی از روش هائی است که CLR را قادر به حمايت از مجموعه گشترده ای از ابزارها می نمايد . برخی از استفاده کنندگان متاديتا ، عبارتند از :

طراحان

ديباگرها

توليد کنندگان پروکسی

ساير کمپايلرها

مرورگرها نوع / شی

حمايت و ارتباط چندين زبان
مهمترين ويژگی و بنوعی هدف CLR ، حمايت از زبانهای برنامه نويسی متفاوت و امکان ارتباط ( همبستگی ) بين زبانهای مختلف است .با بهره گيری از يک سيتم نوع ( CTS ) و با اعمال تمامی کنترل های لازم در ارتباط با فراخوانی اينترفيس، CLR امکان ارتباط مناسب و شفاف بين زبان های برنامه نويسی را فراهم می نمايد.
درگذشته يک زبان برنامه نويسی بکمک عناصر COM ، قادر به نمونه سازی و استفاده از عناصر نوشته شده توسط يک زبان برنامه نويسی ديگر بود .در برخی موارد، فراخوانی اينگونه عناصر، مشکلاتی را از بعد مديريتی ايجاد می کرد. بهرحال Subclassing يک عنصر نوشته شده به زبان ديگر، مستلزم وجود پتانسيلی خاص بودکه صرفا" پياده کنندگان حرفه ای قادر به انجام و استفاده از آن بودند. در فريمورک دات نت، می توان از يک زبان بمنظور subclass ( کلاس زيرمجموعه که از يک کلاس پايه ديگر مشتق شده باشد ) يک کلاس نوشته شده به زبان ديگر استفاده نمود. کلاس نوشته شده به زبان ويژوال بيسيک می تواند از يک کلاس پايه نوشته شده با ++C و يا کوبال به ارث رسيده می باشد. برنامه VB ، ضرورتی به آگاهی از زبان استفاده شده بمنظور نوشته کلاس پايه ، نخواهد داشت .بدين ترتيب ، زمينه بهره گيری و استفاده از تمامی مزايای توارث در پياده سازی فراهم و در صورتيکه کلاس پايه تغيير نمايد ، ضرورتی به ترجمه مجدد کلاس زير مجموعه نخواهد بود.چگونه اين کار انجام می شود ؟ اطلاعات ارائه شده توسط متاديتا ، اين امر را امکان پذير می سازند . در اين رابطه هيچگونه IDL(Interface Definition Language در دات نت وجود نداشته و يک اينترفيس کلاس صرفنظر از زبان استفاده شده برای توليد آن ، همواره يکسان مشاهده خواهد شد. CLR از متايتا بمنظور مديريت تمامی اينترفيس ها و فراخوانی بين زبان ها استفاده می نمايد توارث بين زبانها ، زمينه تحقق يک معماری باز را فراهم خواهد کرد .

سيتم نوع
يکی از اجزاء مهم CLR که حضور و عملکرد آن تاثير مستقیمی بر حمايت از چندين زبان را بدنبال دارد ، CTS)Common Type System) است .در سيستم فوق ، تمامی نوع های داده (حتی نوع هائی نظير : Long و Boolean )، بعنوان شی پياده سازی شده اند . بدين ترتيب هماهنگی بين نوع ها در يک سطح پائين تر و بمنظور سازگاری بيشتر بين زبان ها ، صورت می پذيرد. با توجه به اينکه تمامی زبانها از نوع های کتابخانه ای يکسانی استفاده می نمايند ، فراخوانی يک زبان از زبان ديگر نيازمند تبديل نوع، نخواهد بود.
يکی از مهمترين ويژگی های دات نت ، namespace است .namespace ، امکان سازماندهی کتابخانه های شی را بصورت سلسله مراتبی فراهم می نمايد.بدين ترتيب امکان مراجعه به آنان بسادگی و به دور از هرگونه نا همخوانی و يا تضادی ، محقق خواهد شد .بمنظور استفاده از امکانات موجود در کتابخانه های کلاس ، می بايست در ابتدا برای آنان يک مرجع ايجاد نمود.مرجع فوق ،امکان استفاده از نوع ها را بصورت خلاصه در کد نوشته شده ،فراهم خواهد آورد. در ويژوال بيسيک با استفاده از يک عبارت Import ، اين امر محقق خواهد شد. يک ماژول فرم ويژوال بيسيک در دات نت می تواند بصورت زير ، آغاز گردد :

Imports System.WinForms
Imports MyDebug = System.Diagnostics.Debug

در اولين خط ، امکان استفاده از تمامی خصلت ها و متدها ی استاندارد مرتبط با فرم ها ، برای کد موجود درماژول ، فراهم خواهد شد.دومين خط ، از يک نام مستعار استفاده می نمايد. يک شاخه از ساختار سلسله مراتب شی ( يک مسير مشخص بر روی ساختار درختی ) ، می تواند شناسه خاص خود را داشته باشد که صرفا" در ماژول مربوط معتبر خواهد بود. در ماژول مورد نظر می توان بمنظور مراجعه به شی System.Diagnostics.Debug ، از MyDebug استفاده گردد.

بکارگيری و اجراء
واحد بکارگيری همانگونه که قبلا" اشاره گرديد ، يک اسمبلی است. اسمبلی، می تواند شامل يک و يا چندين فايل بهمراه ويژگی خود تشريحی باشد . اسمبلی شامل يک "مانيفست" بوده که تمامی متاديتا صادر شده توسط اسمبلی و ساير اطلاعات لازم بمنظور بمنظور بکارگيری و اجراء را مشخص می نمايد. يک اسمبلی دارای ورژن خاص خود است . اسمبلی ها با يکديگر ترکيب و برنامه ها را بوجود می آورند . يک برنامه دارای يک و يا چندين اسمبلی بوده و ممکن است شامل فايل ها و داده های اختصاصی برنامه نيز باشد .
کد مبداء ماژول ها ی يک اسمبلی به IL)Intermediate Language) ترجمه می گردند . در ادامه و قبل از اجراء ، IL به کد مختص يک ماشين ترحمه خواهد شد. ترجمه با استفاده از روش های متفاوت و بدفعات ممکن است محقق گردد. معمولا" ترجمه به کد مختص يک ماشين ، صرفا" يک مرتبه انجام و نتيجه برای استفاده در موارد بعد و آتی Cache خواهد شد. CLR ، شامل مجموعه ای از کمپايلرهای JIT)Just-In-Time) است که مسئوليت تبديل IL به کد مختص يک ماشين را برعهده دارند . بدين ترتيب ، می توان برنامه ها ی نوشته شده در دات نت را بصورت کد IL ترجمه شده ، توزيع نمود. در ادامه با استفاده ازکمپايلرهای دات نت بر روی يک ماشين خاص ، کدهای بهينه و مختص آن ماشين توليد خواهد شد.در سناريوی فوق امکان استفاده از اسکريپت ها بهمراه ماژول نيز وجود دارد ، درچنين مواردی آنان قبل از استفاده ترجمه خواهند شد. در سيستم های موجود ، اسکريپت های تفسير شده ( در ASP و يا Windows Scriptiong Host ) ، هرگز ترجمه نمی شوند. در دات نت ، اينچنين اسکريپت هائی در اولين مرتبه دستيابی به IL تبديل و در ادامه به کد مختص ماشين مربوطه تبديل و برای استفاده مجدد cache ، خواهند شد.
در بخش سوم اين مقاله ، به بررسی کلاس های پايه فريمورک دات نت خواهيم پرداخت .

درباره ی Administrator

همچنین ببینید

دانلود کتاب آموزش Asp.Net

ASP.NET دانلود مقاله آموزش Asp.Net

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *