دات نت برای شروع

از زمان معرفی دات نت  توسط مايکروسافت در تابستان 2000 ، تعداد زيادی از علاقه مندان به دنيای گسترده کامپيوتر خصوصا" طراحی و پياد ه سازی نرم افزار، همواره با اين سوال مواجه بوده و هستند  که دات نت چيست و استفاده از آن چه  دستاوردهائی را برای استفاده کنندگان بدنبال خواهد داشت ؟ اجازه دهيد تعريف دات نت را عينا" از خود مايکروسافت نقل و قول نمائيم :" دات نت ، پلات فرم مايکروسافت برای سرويس های وب XML است " . بمنظور شناخت تمامی ابعاد دات نت لازم است به موارد زير نيز توجه گردد :

  • دات نت ، پلات فرمی  جديد بمنظور پياده سازی و بکارگيری برنامه های مديريت يافته ، شی گراء و پيشرفته است .
  • بمنظور پياده سازی  برنامه های دات نت می توان از زبان های برنامه نويسی متفاوتی استفاده کرد (کد توليد شده توسط  کمپايلر ، Runtim دات نت خواهد بود ) . 
  • دات نت ، کتابخانه  کلاس  گسترده ای  را ارائه می نمايد.
  • دات نت ، روشی جديد بمنظور پياده سازی برنامه  تحت ويندوز ( Desktop application )  را  با استفاده از کلاس های فرم های ويندوز ، ارائه می نمايد .
  • دا ت نت، امکان تشريح خودکار عناصر نرم افزاری را  ارائه و حمايت می نمايد .
  • دات نت ، امکاناتی نظير : ارتباط بين زبان ها ، عناصر مستقل از زبان برنامه نويسی  با قابليت استفاده مجدد و توارث در بين زبان ها را ارائه می نمايد .

  • دات نت ، روش جديدی برای پياده سازی برنامه های مبتنی بر مرورگر ( برنامه های وب ) را با استفاده از کلاس های ASP.NET ، ارائه می نمايد.
  • کلاس های ADO.NET مربوط به دات نت ، يک معماری جديد غير متصل برای دستيابی به داده ه از طريق اينترنت را ارائه می نما يند  .
  • دات نت ، امکان ايجاد سرويس های وب XML مستقل از پلات فرم را با استفاده از استانداردهائی نظير :
    SOAP)Simple Object Access Protocol) و WSDL)Web Service Description Langauge ) ارائه می نمايد .
  • دات نت، يک معماری جديد برای پياده سازی و بکارگيری اشياء راه دور را ارائه می نمايد .

  • دات نت ،  تکنولوژی ها ی متعددی از ويندوز را حمايت می نمايد.

بنظر حکايت دات نت همچنان ادامه و ما با واقعيتی بسيار بزرگ و توانمند روبر هستيم . برای شرکت مايکروسافت مهمترين تحول پس از عرضه ويندوز ، معرفی دات نت است . پياده کنندگان نرم افزاری که تمايل به استفاده از پلات فرم فوق را دارند ، می بايست بسرعت با چارچوب و مفاهيم اوليه آن آشنا شده تا زمينه استفاده معقول و منطقی از آن فراهم گردد.

پياده سازی در دات نت
برای پياده کنندگان نرم افزار تحت ويندوز ، دات نت امکانات متعددی را از ويژوال ++ C تا ويژوال بيسيک ارائه می نمايد .دات نت ،مستقل از نوع زبان برنامه نويسی بوده و در اين راستا کمپايلرهای متعددی برای چندين زبان طراحی و پياده سازی شده و تمهيدات لازم درخصوص طراحی و پياده سازی کمپايلرهای  ديگر نيز انجام شده است . در حال حاضر از زبان های  C#, Visual Basic .NET, JScript .NET, COBOL, Perl, Python, Eiffel, APL ، می توان استفاده کرد. دات نت از زبان های فوق مستقيما" حمايت نمی نمايد . در حقيقت ، دات نت صرفا" قادر به درک يک زبان بيشتر نيست . زبان فوق ،  زبان ميانی مايکروسافت ( Microsoft Intermediate Languge :IL  )  ناميده می شود.

يک پلات فرم مستقل از زبان
از يک کمپايلر اختصاصی هر زبان، بمنظور ترجمه کدهای نوشته شده به IL ، استفاده می گردد.خروجی فرآيند ترجمه ، شامل IL و متا ديتا است .IL ، را می توان بمنزله يک زبان اسمبلی برای يک پردازنده مجازی  stack-based دات نت  تصور نمود . از اين زاويه ، عملکرد IL ،  مشابه کدهای P توليده شده در نسخه های اوليه ويژوال بيسيک و يا بايت کدهای منتشر شده توسط يک کمپايلر جاوا ، است  . ( IL ، قبل از اجراء بطور کامل ترجمه خواهد شد) . IL ، برای يک زبان خاص طراحی نشده است .  عبارات IL ، نوع های متداول به اشتراک گذاشته شده را که  توسط تمامی زبانهای دات نت ،استفاده می گردد ، پردازش می نمايند . سيستم نوع فوق ، CTS ) Common Type System) ، ناميده می شود.  يک نوع دات نت، چيزی بمراتب بيشتر از يک نوع داده است . نوع های دات نت ، عموما" توسط کلاس هائی شامل کد و اعضاء داده تعريف می گردند. در زمان اجراء ، CLR)Common Language Runtime) ، مسئوليت استقرار يک برنامه دات نت در حافظه و اجرای آن را برعهده خواهد داشت .بمنظور نيل به هدف فوق ، CLR از تکنيکی با نام JIT) Just-In-Time) بمنظور ترجمه IL به کد مختص و وابسته به يک  ماشين استفاده می نمايد . کد دات نت ،همواره ترجمه و هرگز تفسير نمی گردد ، بنابراين دات نت از يک ماشين مجازی بمنظور اجراء برنامه استفاده نکرده و در مقابل کد IL برای هر متد براساس کمپايلر JIT در اولين فراخوانی ترجمه خواهد شد. در مرتبه بعد که يک متد صدا زده می شود ، کد ترجمه شده توسط JIT ، اجراء خواهد شد .

ماحصل فرآيند ترجمه ، توليد يک فايل اجرائی ويندوز با فرمت PE)Portable Executable) ، است .در رابطه با فايل فوق ، ذکر دونکته ضروری است : اول اينکه ، CLR از زبان استفاده شده برای توليد برنامه و يا عنصر مورد نظر آگاهی نداشته و صرفا" به کدهای IL توجه خواهد داشت .ثانيا" ، در تئوری استفاده ازکمپايلر JIT تمام عمليات مورد نياز بمنظور استفاده از پتانسيل های دات نت است .

دات نت و کد مديريت يافته ( اداره شده )
نحوه اجراء برنامه های دات نت تابع مدلی است که در شکل فوق ، نشان داده شده است . کد توليد شده که مقصد آن CLR فريمورک دات نت باشد را برنامه های مديريت يافته ( managed applications ) می گويند. در مقابل،برنامه های ويندوز غير از دات نت با نام برنامه های غيرمديريت يافته ( unmanaged applications ) از آنان ياد می گردد. مايکروسافت بر اين مسئله تاکيد نموده است که در حال حاضر و طی ساليان آتی نياز به اين نوع برنامه ها وجود داشته( برنامه های غيرمديريت يافته ) و تمهيدات لازم در خصوص ارتباط بين آنها انديشيده شده است. متداولترين نياز در اين رابطه، همزيستی برنامه های دات نت در کنار عناصر COM است . بدين منظورمايکروسافت ، امکان فعاليت و کار برنامه های دات نت را با عناصر غيرمديريت يافته COM ، فراهم نموده است . در اين راستا می توان يک عنصر دات نت را بعنوان يک شی COM ريجستر کرد. در رويکردی مشابه ، دات نت امکان دستيابی  به Win32 API  برای برنامه های دات نت را  فراهم تا از اين طريق و در صورت تمايل و ضرورت ، عناصر مديريت يافته قادر به فراخوانی  توابع غير مديريت يافته موجود در يک DLL)Dynamic Link Library) ، باشند .
CLR ، علاوه بر اينکه امکان ترجمه کدهای IL را به کد مختص  يک ماشين فراهم می نمايد ، عمليات مديريتی لازم در خصوص  برنامه ها را نيز انجام خواهد داد. استقرار يک برنامه در حافظه ، بررسی صحت کد ، حفاظت برنامه ها از يکديگر ، تاکيد بر مسائل امنيتی ، ارائه سرويس های اشکال زدائی ، نمونه هائی از خدمات ارائه شده توسط CLR می باشند . مديريت کد توسط CLR ، يک لايه اضافه را ارائه و باعث جداسازی برنامه ها از سيستم عامل می گردد . در گذشته سرويس های ارائه شده توسط لايه فوق در خود برنامه و با استفاده از امکانات ارائه شده سيستم عامل ارائه می گرديد.
متا ديتا و ضرورت انتشار و همراهی آن با کد IL يکی از جنبه های کليدی دات نت است . برای افراديکه با COM و CORBA آشنائی دارند ، متا ديتا بمنزله شکل خاصی از يک IDL)Interface Definition Language) بوده که بصورت اتوماتيک توسط کمپايلر زبان مربوطه توليد می گردد. متاديتا مسئول تشريح نوع ها ، شامل فيلدهای مربوطه ، خصلت ها ، امضاء( تائيد)  متد  بوده و عمليات حمايتی  لازم را در اين خصوص ارائه می نمايد. با توليد اتوماتيک اين داده در زمان ترجمه ، عناصر دات نت بصورت خود تشريح شده  و نيازمند ساير اطلاعات مورد نياز برای استفاده از عناصر دات نت  نوشته شده با زبانهای برنامه نويسی متفاوت بمنظور ارتباط یين آنها وجود نخواهد داشت .

اولين برنامه دات نت
برنامه زير ، يک  برنامه خط دستوری نوشته شده با زبان  #C بوده که به کاربر يک پيام را نمايش می دهد .

برنامه نمونه دات نت نوشته شده با C#

// file : hello.cs
// compile : csc hello.cs
using System;
class Hello {
   public static void Main() {
      Console.WriteLine("Hello from C#");
   }
}

هر برنامه #C، می بايست شامل حداقل يک کلاس باشد . در مثال فوق، کلاس  مورد نظر Hello بوده و متد Main نقطه ورود برنامه و محلی است که از آنجا برنامه آغاز می گردد. بمنظور نمايش پيام دلخواه از متد WriteLine کلاس Console استفاده شده است.( کلاس فوق در namespace با نام System وجود داشته و بعنوان بخشی از کتابخانه کلاس فريمورک دات نت محسوب می گردد). در ابتدای برنامه تمهيدات لازم در خصوص تعريف  System namespace انديشيده شده است ( using System ).بدين ترتيب امکان استفاده از namespace فوق ، در طول برنامه وجود داشته و می توان از کلاس های موجود در namespace فوق ، استفاده کرد.مثال فوق ، نحوه استفاده از کتابخانه کلاس فريمورک دات نت ( يک مخزن عظيم از کلاس های مفيد، قابل استفاده در تمامی برنامه های دات نت ) را نشان می دهد. کلاس های فوق ،  بر اساس نوع عملکرد گروه بندی و در namespace  ها ، سازماندهی شده اند. بمنظور ترجمه برنامه فوق ، به يک نسخه از فايل NET SDK و يا ويژوال استوديو دات نت نياز خواهد بود. برای ترجمه و اجراء مثال فوق ، از طريق خط دستور،کمپايلر # C را بصورت زير فعال می نمائيم :

csc hello.cs

بمنظور مقايسه اوليه زبان C# و VB.NET  ، کد مثال فوق را  با ويژوال بيسيک دات نت ، بازنويسی می نمائيم .

برنامه نمونه دات نت نوشته شده با VB.NET

' file : hello.vb
' compile : vbc hello.vb
Imports System
module Hello
   sub main()
     Console.WriteLine("Hello from VB.NET")
   end sub
end module

همانگونه که مشاهده می شود ، نسخه ويژوال بيسيک دات نت مثال فوق، شباهت زيادی با نسخه نوشته شده  #C دارد. برنامه ويژوال بيسيک دات نت نيز از کلاس Console مربوط به System namespace استفاده می نمايد. کتابخانه کلاس فريمورک دات نت بخشی از پلات فرم دات نت بوده و بمنظور استفاده در يک زبان خاص ايجاد نشده است .
در حالت کلی تفاوت های اندکی بين # C و ويژوال بيسيک دات نت وجود داشته که عمدتا" به نوع گرامر برمی گردد . برنامه نويسان # C و ويژوال بيسيک دات نت از کلاس های مشابه فريمورک استفاده و با جنبه ها و  مفاهيم مشترکی در رابطه با دات نت نظير : namespace ، کلاس ها ، CLR  سروکار دارند . برنامه های نوشته شده توسط هر يک از زبانهای فوق پس از ترجمه به IL تبديل خواهد شد . در صورتيکه کد توليد شده IL هر يک از برنامه های نوشته شده با #C و يا ويژوال بيسيک دات نت را مشاهده نمائيم به شباهت بسيار زياد موجود بين آنها بيشتر واقف خواهيم شد .

پلات فرم در مقابل زبان برنامه نويسی
IL ، يک زبان اسمبلی عمومی در مقايسه با زبان های اسمبلی نظير 8080 و يا 6809 نيست . IL ، شامل مجموعه ای از دستورالعمل ها و يک بردار از ويژگی هائی است که بمنظور حمايت از عمليات ضروری و خصايص تعداد زيادی از برنامه های پيشرفته و شی گراء ، طراحی شده است . تاکيد دات نت بر بودن بعنوان يک سيستم شی متداول در مقابل يک زبان برنامه نويسی خاص است . CLR ، مستقيما" ويژگی های زيادی را که عموما" بعنوان خصايص مربوط به زبان های برنامه نويسی مطرح می گردد، حمايت می نمايد . اين موضوع شامل يک سيستم نوع زبان های طبيعی برای حمايت از کلاس ها ، توارث ، نسبت دهی پويا ، مديريت حافظه ، جمع آوری زائده های حافظه ، بررسی و برخورد با موارد غير قابل پيش بينی و ساير موارد مرتبط است . مثلا" يک جمع کننده اطلاعات زائد حافظه ، مسئوليت حذف اشياء غير استفاده شده را از  heap و بازيافت حافظه را بر عهده داشته و مهم نيست که کدها با چه زبانی نوشته شده اند .ارائه پتانسيل های فوق در CLR ، يک پل ارتباطی معقول بمنظور تسهيل در ارتباط و يکپارچگی بين زبانها و عناصر را بدنبال خواهد داشت .
بمنظور تسهيل در ارتباط بين زبانها ، دات نت مشخصه استانداردی را  برای زبانها ، تعيين نموده است ( Commom Language Specification:CLS ) . استاندارد فوق ، مجموعه قوانين لازم در ارتباط با امکاناتی نظير: نوع های اساسی  ، محدوده های بردار ، نوع های مرجع ، اعضاء ، خصلت ها ، رويدادها و ساير موارد ديگر را تعريف می نمايد . عناصر و کتابخانه هائی که استانداردهای فوق را رعايت و به آنها پايبند باشد بعنوان يک زبان سازگار با CLS شناخته خواهند شد .
توارث در بين زبانها ، چالش خاصی را در زمان فراخوانی کد سازگار با CLS ايجاد نخواهد کرد. در اين راستا می توان ، يک کلاس پايه را با استفاده از ويژوال بيسيک دات نت ايجاد که از يک کلاس # C ،مشتق شده باشد . ويژگی فوق (ارتباط بين زبانها ) ،  يکی از مهمترين پتانسيل های دات نت محسوب می گردد .

معرفی کتابخانه کلاس فريمورک دات نت
در اوايلی که ويندوز پياده سازی گرديده بود ، برنامه ها عموما" با زبان C کد واز طريق توابع API مبتنی بر C با سيستم عامل مرتبط و از خدمات مربوطه استفاده می نمودند. اين موضوع در حقيقت بدين علت است که بخش عمده ای از ويندوز خود با زبان C نوشته شده است .پس از طی ساليانی ، رويکرد فوق بر روی استفاده از اينترفيس های مبتنی بر COM انعطاف پذير، تمرکز و امکان استفاده از آنان ( فراخوانی ) توسط برنامه های مبتنی بر C و ساير برنامه های نوشته شده توسط زبان های اسکريپت ، فراهم گرديد.
دات نت ، رويکردهای فوق را با يک کتابخانه کلاس فريمورک مستقل از زبان جايگزين نموده است . در فريمورک دات نت ، هر چيز بمنزله  يک شی در نظر گرفته می شود. ازيک بردار ساده در #C و  يا ويژوال بيسيک دات نت ( System.Array ) گرفته تا يک دايرکتوری مربوط به سيستم فايل ( System.IO.Directory ) و يا جمع کننده اطلاعات زائد در حافظه ( System.GC ) . همانگونه که قبلا" اشاره گرديد ، کلاس های فريمورک دات نت بر اساس عملکرد و منطق مربوطه گروبندی و در مجموعه ای از namespace ها سازماندهی شده اند. در اين راستا بيش از يکصد namespace بهمراه دات نت ارائه شده که برخی از آنان  شامل ده ها کلاس می باشند. ذکر تمامی namespace ها بهمراه کلاس های موجود در آنان ، کار مشکلی بوده و امکان آن از حوصله اين مقاله خارج است . علاقه مندان می توانند  در اين راستا  به مقاله : " کتابخانه کلاس فريمورک دات نت " ، مراجعه نمايند .

برنامه نويسی کلاس های  فريمورک دات نت
Namespace ، روشی مناسب بمنظور تقسيم منطقی گروه هائی از کلاس های مرتبط با يکديگر است . کلاس ها خود بصورت فيزيکی در فايل های DLL قرار گرفته وبهمراه فريمورک دات نت ، ارائه شده اند . فايل های DLL  در دايرکتوری زير قرار دارند :

C:\WINNT\Microsoft.NET\Framework\<.NET Version>

در صورتيکه يک برنامه از کلاس های موجود در ساير DLL ها ، استفاده نمايد ، می بايست در زمان ترجمه، برنامه به DLL مربوطه مراجعه نمايد . مثلا" کلاس SecurityIdentity از namespace با نام System.EnterpriseServices  در System.EnterpriseServices.dll قراردارد. بمنظور ترجمه يک برنامه  # C که از کلاس فوق استفاده می نمايد می بايست از گزينه reference/ کمپايلر استفاده و نام dll مربوطه را مشخص نمود. (  يکی از روش های زير )

csc /reference:System.Enterpriseservices.dll MyProg.cs

csc /r:System.Enterpriseservices.dll MyProg.cs                

لازم به اين نکته مهم اشاره گردد  که يک تناظر يک به يک بين namespace و فايل های DLL وجود ندارد . يک DLL ممکن است شامل کلاس هائی از چندين namespace متفاوت بوده  در حاليکه کلاس هائی از namespace های مشابه ممکن است بصورت فيزيکی در بين چندين فايل DLL توزيع شده باشند . شکل زير نحوه  استقرار فريمورک بهمراه مدل پياده سازی دات نت  را نشان می دهد .

متا ديتا از کتابخانه کلاس فريمورک دات نت بسمت کمپايلر #C حرکت می نمايد . کمپايلر از متاديتا بمنظور ترجمه مراجعات به نوع ها در زمان ترجمه، استفاده خواهد کرد. همانگونه که در شکل فوق مشاهده می گردد ،  CLR  عمليات pulling را در رابطه با IL و متا ديتا برای هم برنامه و هم کلاس های فريمورک استفاده شده ، انجام  خواهد داد .

جايگاه ASP و ADO  در دات نت
ممکن است با ASP و يا ADO آشنا بوده و اين سوال مطرح گردد که امکانات فوق به چه صورت با دات نت مرتبط می گردند؟ در پاسخ به سواال فوق ، می بايست به اين نکته اشاره نمود که تکنولوژی های  فوق،  بعنوان کتابخانه کلاس پياده سازی شده اند. مثلا" System.Data و System.Data.SqlClient و System.Data.SqlTypes  ، انواع متفاوتی از namespace  های  موجود بوده و بعنوان بخشی از زير سيستم جديد ADO.NET مطرح می باشند. در مقابل System.Web و System.Web.UI و چندين namespace ديگر بخشی از زير سيستم جديد ASP.NET را تشکيل می دهند. در روشی مشابه ، فريمورک دات نت ، امکانات لازم در خصوص طراحی و پياده سازی رابط کاربر برنامه های ويندوز را از طريق کلاس های فرم های ويندوز System.Windows.Forms  ، ارائه می نمايد.
دات نت ، امکانات مناسب و يکپارچه ای را بمنظور پياده سازی برنامه های مبتنی بر وب و ويندوز ارائه و فصل جديدی را در عرصه طراحی و پياده سازی نرم افزار خصوصا" برنامه های توزيع شده ، ايجاد نموده است . شناخت پلات فرم فوق ، شرط اوليه استفاده مطلوب و هدفمند در رابطه با طراحی و پياده سازی نرم افزار  در عصر حاضر برای علاقه مندانی است که محيط  مايکروسافت را برای طراحی و پياده سازی نرم افزار انتخاب  و يا قصد گزينش آن را دارند .

گزارش تخلف
بعدی