مفاهیم اولیه برنامه نویسی در دات نت
دات نت محیطی جدید بمنظور طراحی، پیاده سازی و اجرای برنامه های کامپیوتری را در اختیار طراحان و پیاده کنندگان نرم افزار قرار می دهد. با استفاده از پلات فرم فوق ، می توان بسرعت اقدام به پیاده سازی نرم افزار نمود.
برنامه های تولیده شده ، امکان استفاده از پتانسیل های محیط
( Common Language Runtime CLR ) را خواهند داشت . آشنائی با مفاهیم اولیه برنامه نویسی در محیط فوق ، دارای اهمیت خاص خود بوده و سرعت در استفاده مطلوب از محیط فوق ، را بدنبال خواهد داشت . در مقالاتی که در این زمینه ارائه خواهد شد به بررسی مفاهیم اولیه برنامه نویسی محیط فوق ، خواهیم پرداخت . در این راستا ، در ابتدا با نحوه نوشتن یک برنامه آشنا و در ادامه به تشریح برخی از مفاهیم مهم در این زمینه ، خواهیم پرداخت .
نوشتن یک برنامه در فریمورک دات نت
تمامی زبانهای حمایت شده در دات نت ، از سیستم نوع یکسان ، کتابخانه کلا س فریمورک مشابه و CLR استفاده خواهند کرد . بدین ترتیب، تمامی برنامه های نوشته شده با یکی از زبانهای حمایت شده ، خصایص مشابهی را به اشتراک می گذارند. شاید مهمترین تفاوت قابل توجه در رابطه با زبان های برنامه نویسی حمایت شده در دات نت ، به گرامر هر یک از آنها برگردد . ( در مثال هائی که در این مقاله ذکر می گردد ، از ویرایشگر Notepad ،در مقابل ویژوال استودیو دات نت، استفاده شده است . مثال های ارائه شده به اندازه کافی ساده بوده تا بتوان بکمک آنان با فرآیندهای ترجمه و اجراء ، بسرعت آشنا گردید ).
نوشتن یک برنامه
برای نوشتن یک برنامه ساده در دات نت ، مراحل زیر را دنبال می نمائیم :
* فاز اول : ایجاد برنامه
برنامه Notepad را فعال و پس از درج کدهای زیر آن را با نام Hello.vb ، ذخیره نمائید .
یک برنامه نمونه نوشته شده به زبان VB.NET
Imports System
Public Class MainApp
Public Shared Sub Main( )
Console.WriteLine( "Welcome to .NET Programming " )
End Sub
End Class
* فاز دوم : ترجمه و ایجاد یک فایل اجرائی
برای اجراء برنامه ایجاد شده در مرحله قبل ، در ابتدا کمپایلر VB.NET را از طریق خط دستور و بصورت زیر فعال می نمائیم : ( دستور فوق را می توان از طریق خط دستور ویندوز و یا خط دستور موجود در ویژوال استودیو ، فعال کرد )
vbc Hello.vb
در ادامه و پس از ایجاد فایل اجرائی (hello.exe ) ، امکان اجرای برنامه فراهم می گردد.
استفاده از Namespace
با استفاده از VB.NET ، می توان به کلاس ها مراجعه و از آنان استفاده کرد . در مثال زیر ، یک نمونه از کلاس System.Io.FileStream ، ایجاد شده است .
Dim aFileStream As System.IO.Filestream
مراجعه به Namespace های مورد نیاز در یک برنامه روشی مناسبتر در این زمینه است . با استفاده از namespace ، ضرورتی به توصیف تمامی مراجعات به کتابخاته کلاس ، وجود نخواهد داشت .
Imports System.IO
…..
Dim aFileStream As Filestream
مثلا" برای دستیابی به اشیاء System ، می بایست از Namespace با نام System در برنامه استفاده گردد. ( Imports) .
تعریف namespace و کلاس
VB.NET ، امکانات حمایتی لازم در خصوص ایجاد Namespace های خاص و کلاس های مربوط به آن را ارائه می نماید. (نکته : مدل زیر یک روش عمومی برای نامگذاری namespace است ) :
CompanyName.TechnologyName
.For Example:
Microsoft.Office
namespace در VB.NET
در VB.NET با استفاده از عبارت namespace می توان یک namespace را تعریف کرد . با استفاده از namespace تعریف شده ، امکان کپسوله نمودن کلاس های ایجاد شده ، فراهم خواهد شد.
Namespace CompVB
Public Class StringComponent
….
End Class
End Namespace
برخی از ویژگی های namespace عبارتند از :
* namespace می تواند درون سایر namespace ها ، مستقر گردند .
* یک namespace می تواند در چندین فایل تعریف گردد .
* یک فایل حاوی کد مبداء می تواند چندین namespace را تعریف نماید.
نقاط ورود ، حوزه ، تعاریف
هر برنامه اجرائی می بایست شامل یک نقطه ورود خارجی باشد . مکان فوق ، محلی را که برنامه اجرای خود را از آنجا آغاز می نماید ، مشخص می نماید..در VB.NET تمامی کد می بایست در متدهای یک کلاس قرار بگیرد.
نقاط ورود در VB.NET
بمنظور ارائه کد نقطه ورود در VB.NET ، در ابتدا می بایست یک ماژول و یا یک کلاس مشخص گردد .
Public Module modMain
Public Class clsMain
در ادامه می بایست نقطه ورود برای برنامه ، مشخص گردد. نقطه ورود ، می بایست بعنوان یک متد عمومی که main نامیده می شود ، در نظر گرفته شود.( کمپایلر به دانش فوق نیاز خواهد داشت ) . در یک کلاس ، متد فوق می بایست بصورت اشتراکی تعریف گردد .امکان تعریف متد فوق در یک ماژول بصورت اشتراکی ، وجود نخواهد داشت . نحوه تعریف ( مشخص نمودن ) نقاط ورود برای یک ماژول و یا یک کلاس ، بصورت زیر است :
Public Module modMain
Public Sub Main( )
…
End Sub
End Module
Public Class clsMain
Public Shared Sub Main( )
…
End Sub
End Class
حوزه
VB.NET ، از نقطه بعنوان یک عملگر resolution حوزه ، استفاده می نماید . مثلا" در صورت استفاده از متد WriteLine مربوط به کلاس Console ، از گرامر Console.WriteLine ، استفاده می شود.
تعاریف
در VB.NET ، الزامی به تعریف یک متغیر قبل از استفاده از آن نمی باشد . پیشنهاد می گردد که در چنین مواردی متغیرها با صراحت تعریف گردند. در این راستا می توان از عبارت options ، استفاده کرد. بمنظور ایجاد نمونه ای از یک شی ، از New استفاده می گردد. مثال زیر ، نحوه تعریف یک شی از نوع Comp در namespace با نام Lib و با نام MyComp را نشان می دهد .
Dim myComp As New Lib.Comp( )
کنسول ورودی و خروجی
می توان از کلاس Console ، مربوط به CLR وابسته به System Namespace ، برای ورودی و خروجی هر نوع رشته و مقادیر عددی توسط متدهای Read , ReadLine و Write,WriteLine استفاده کرد . برنامه زیر، نحوه نمایش یک رشته در خروجی را نشان می دهد .
برنامه نمونه :
Imports System
Public Class MainApp
Public Shared Sub Main( )
Console.WriteLine( "Welcome to .NET Programming " )
End Sub
End Class
ترجمه و اجراء یک برنامه فریمورک دات نت
اکثر جنبه های برنامه نویسی در دات نت برای تمامی زبانهای سازگار ، یکسان است . هر کمپایلر حمایت شده باعث تولید کدهای "خود تشریح " MSIL)Microsoft Intermediate Language) ، می گردد . تمامی کدهای مدیریت یافته ( Managed code ) با استفاده از CLR(Common Language runtime) ، اجراء خواهند شد . CLR ، امکان یکپارچگی بین برنامه ها ، مدیریت اتوماتیک حافظه ، برخورد یکدست با موارد خاص و استثناء ، امنیت پیشرفته و در نهایت یک مدل برنامه نویسی ساده و همگن را ارائه می نماید.
گزینه های کمپایلر
فریمورک دات نت، دارای یک کمپایلر خط دستوری برای VB.NET است ( vbc.exe ) . برای ترجمه برنامه Hello.vb ، بکمک کمپایلر فوق ، از دستور زیر استفاده می شود :
vbc Hello.vb
گرامر فوق، باعث فراخوانی کمپایلر VB.NET می گردد. در این مثال خاص، صرفا" نام فایل مورد نظر برای کمپایلر مشخص شده و در ادامه ، کمپایلر فایل اجرائی را تولید خواهد کرد ( Hello.exe )
گزینه های خط دستور
در VB.NET ، می توان لیست کاملی از گزینه های همراه کمپایلر را با استفاده از ?/ ، مشاهده نمود ( ?/ Vbc ) . از گزینه های مفید در این زمینه، می توان به سوئیچ out/ ، ( نام فایل خروجی را مشخص می نماید) و سوئیچ target/ ، ( نوع کد مقصد را مشخص می نماید") ، اشاره کرد. بصورت پیش فرض ، نام فایل خروجی مشابه نام فایل ورودی و با انشعاب exe . ، خواهد بود. مقدار پیش فرض برای تعیین نوع کد مقصد ، یک برنامه اجرائی است ( سوئیچ t/ ، دارای عملکردی معادل با سوئیچ target/ است ). دستور زیر نحوه استفاده از سوئیچ های فوق را نشان می دهد :
vbc /out :hello.exe /t:exe hello.vb
استفاده از گزینه کمپایل reference/
در زمان مراجعه به سایر اسمبلی ها ، می بایست از سوئیچ reference/ ، استفاده گردد . گزینه فوق این امکان را برای کمپایلر فراهم می آورد که اطلاعاتی را ایجاد و در کتابخانه های مشخص شده استقرار تا زمینه استفاده از آنان برای کد مورد نظر ( در حال ترجمه ) ، فراهم گردد. مثال زیر نحوه ایجاد یک برنامه اجرائی از طریق خط دستور و با استفاده از reference / ، را نشان می دهد .
( عملکرد سوئیچ r / مشابه reference / است ).
Vbc / r:assembll.dll , assemb2.dll / out :output.exe input.vb
در بخش دوم این مقاله به بررسی فرآیند اجراء مدیریت یافته ( اداره شده ) ، خواهیم پرداخت .
مفاهیم اولیه برنامه نویسی در دات نت ( بخش دوم )
در بخش اول این مقاله به بررسی یک برنامه نمونه ساده دات نت پرداخته شد و از این رهگذر با برخی مفاهیم اولیه و در عین حال مهم برنامه نویسی در دات نت آشنا شدیم . در بخش دوم این مقاله به بررسی فرآیند اجراء پرداخته و بدنبال آن با برخی دیگر از مفاهیم اساسی برنامه نویسی در دات نت آشنا خواهیم شد .
در فریمورک دات نت ، CLR زیر ساخت لازم برای یک محیط اجراء مدیریت یافته ( اداره شده ) را فراهم می نماید . در زمان پیاده سازی یک برنامه در فریمورک دات نت ، برنامه مورد نظر می تواند با استفاده از هر یک از زبان های سازگار با CLR ، نوشته گردد. کمپایلر استفاده شده ، کدها را به مقصد CLR ، ترجمه می نماید . پس از فرآیند ترجمه کد نوشته شده ، یک ماژول مدیریت یافته( اداره شده ) ایجاد خواهد شد. ماژول فوق، در فایلی که PE)Portable Executable) ، نامیده می شود، قرار گرفته و شامل اطلاعات زیر خواهد بود :
* MSIL)Microsoft Intermediate Language) ، کمپایلر کد نوشته شده را به MSIL ترجمه می نماید . کد فوق ، مجموعه ای از دستورالعمل های مستقل از نوع پردازنده بوده و در ادامه با توجه به نوع پردازشگر به کدهای مختص ماشین تبدیل می گردند.
* Type metadata .اطلاعات فوق ، نوع ها ، اعضاء و سایر مراجع استفاده شده توسط CLR در زمان اجراء را بطور کامل تشریح خواهد کرد.
* مجموعه ای از سایر منابع . منابع فوق ، شامل موارد متععدی نظیر فایل های Jpg . و یا Bmp . ، می باشند .
اگر در زمان استفاده از کمپایلر ویژوال بیسیک از سوئیچ target / ، استفاده و مقدار آن Exe و یا Library در نظر گرفته شود ، کمپایلر یک ماژول اجرائی را تولید که یک اسمبلی (Assembly ) خواهد بود. اسمبلی ها بخش ضروری و اساسی برنامه نویسی در فریمورک دات نت بوده و CLR از آنان بعنوان واحدهای پایه و بمنظور اشتراک ، بکارگیری امنیت و ورژن های متفاوت، استفاده می نماید. CLR دات نت ، صرفا" کدهای MSIL را که در یک اسمبلی موجود می باشند ، اجراء خواهد کرد . در صورتیکه بهمراه سوئیچ target / (در کمپایلر ویژوال بیسیک ) ، از Module استفاده شود ، کمپایلر یک ماژول مدیریت یافته را تولید که یک اسمبلی نخواهد بود .ماژول تولیده شده ، شامل یک مانیفست نبوده و نمی تواند توسط CLR ، اجراء گردد. یک ماژول مدیریت یافته را می توان به یک اسمبلی و از طریق استفاده از کمپایلر ویژوال بیسیک و یا با استفاده از Assembly Linker) Al.exe) اضافه نمود. در ادامه به تشریح MSIL ، متادیتا و اسمبلی خواهیم پرداخت .
کد اجرائی
در زمان اجرای یک برنامه مدیریت یافته ، لودر سیستم عامل ، CLR را در حافظه مستقر و در ادامه زمینه اجرای کد MSIL ماژول های مدیریت یافته ، فراهم می گردد. با توجه به اینکه پردازنده میزبان در مقطع کنونی ، قادر به اجرای مستقیم دستورالعمل های MSIL نخواهد بود، CLR ، می بایست در ابتدا دستورالعمل های MSIL را به کد مختص ماشین و با توجه به نوع پردازنده ، تبدیل نماید .
CLR ، تمام کدهای MSIL را به دستورالعمل های مستقل از پردازنده در زمان لود ، ترجمه نخواهد کرد . در مقابل، CLR در زمان فراخوانی هر یک از توابع ، دستورالعمل های مربوطه را به کد مختص پردازنده تبدیل خواهد کرد.MSIL ، صرفا" در زمان مورد نیاز، ترجمه خواهد شد . عناصر CLR که مسئولیت انجام عملیات فوق را برعهده دارند، کمپایلر JIT)Just in Time) ، نامیده می شود . ترجمه JIT ، باعث صرفه جوئی حافظه و زمان در حین مقداردهی اولیه برنامه می گردد .
Appliaction Domain
سیستم عامل و محیط های اجراء نوع های خاصی از ایزولاسیون ( تمایز) بین برنامه ها را ارائه می نمایند . با ارائه سرویس فوق ، این اطمینان بوجود خواهد آمد که یک برنامه در حال اجراء قادر به تاثیر منفی بر سایر برنامه ها ی غیر مرتبط ، نخواهد بود . ویژگی فوق ، یک واحد ایمن و چندکاره پردازش را ارائه نموده و CLR بر اساس آن قادر به ایزولاسیون بین برنامه ها خواهد بود. حوزه های برنامه ، عموما" توسط میزبانان زمان اجراء که مسئولیت فعال نمودن CLR قبل از اجرای برنامه ها را برعهده دارند ، فراهم می گردد.
متادیتا
هر کمپایلر که مقصد آن CLR است ، نیازمند توزیع ( انتشار) کامل متادیتا در هر یک از ماژول های مدیریت یافته است .متا دیتا ، مجموعه ای از جداول داده بوده که بصورت کامل هر یک از عناصر تعریف شده در یک ماژول را تشریح می نماید .اطلاعات فوق ، شامل نوع داده ، اعضاء بهمراه تعاریف مربوطه ، پیاده سازی و مراجعه به سایر نوع ها و اعضاء باشد . متادیتا ، تمامی اطلاعات موردنیازبرای ارتباط عناصر نرم افزاری تولیده شده را در اختیار CLR قرار خواهد داد .رویکرد فوق ، جایگزینی مناسب برای تمامی تکنولوژی های قدیمی نظیر: IDL)Interface Defination Language) ، کتابخانه های نوع و ثبت خارجی ( External registration ) ، می باشد. متا دیتا همواره در یک فایل exe . و یا dll . ، حضور داشته و شامل کد MSIL است . بنابراین ، امکان تفکیک متادیتا از کد MSIL وجود نخواهد داشت .با توجه به اینکه متادیتا در یک مستقل از یک زبان برنامه نویسی خاص بوده و در یک محل مرکزی نظیر ریجستری ویندوز ذخیره نمی شوند ، امکان تشریح اتوماتیک برنامه های دات نت ، فراهم می گردد.
متادیتا دارای کاربردهای متعددی است که مهمترین آنها عبارتند از :
* مکان یابی و لود کلاس ها . با توجه به اینکه متا دیتا و MSIL در یک فایل مشابه قرار دارند ، تمام اطلاعات موجود در این فایل برای CLR ، در زمان ترجمه قابل استفاده بوده و ضرورتی به استفاده از فایل های هدر(header) وجود نخواهد داشت ( تمام نوع ها در هر اسمبلی توسط مانیفست مربوطه اسمبلی ، تشریح می گردند ).
* تاکید امنیت . متا دیتا ، می تواند شامل مجوزهای لازم بمنظور اجراء کد باشد ( البته عکس عبارت فوق نیز ممکن است وجود داشته باشد ، یعنی متا دیتا می تواند شامل مجوزهای لازم بمنظور اجراء کد نباشد ) . سیستم امنیتی از مجوزها استفاده تا باعث ممانعت کد از دستیابی به منابعی گردد که مجوز لازم برای دستیابی به آنان وجود ندارد
MSIL
MSIL مایکروسافت که در برخی حالات Managed code نامیده می شود ، دستورالعمل هایی می باشند کمپایلرآنها را در زمان ترجمه کد اولیه ، تولید می نماید. صرفنظر از سازماندهی منطقی آنان ، اکثر اسمبلی ها شامل کدهائی با فرمت MSIL می باشند . MSIL یک زبان ماشین مستقل از پردازنده بوده که توسط مایکروسافت و مشاوره با سایر تولیدکنندگان کمپایلر، ایجاد شده است . MSIL یک زبان بمراتب سطح بالاتر نسبت به اکثر زبان های ماشین است . MSIL شامل دستورالعمل های لازم برای عملیات متداولی نظیر : دستوراتی برای ایجاد ، مقداردهی و صدا زدن متدهای مربوط به یک شی ( اشیاء ) ، دستورات لازم برای عملیات منطقی جاری ، Control Flow ,DMA و Exception handling می باشد .
قبل از اینکه کد MSIL قادر به اجراء گردد ، می بایست به کد مختص یک پردازنده خاص توسط یک کمپایلر JIT ، تبدیل گردد. CLR ، یک کمپایلر JIT با معماری خاص برای هر نوع معماری پردازنده ، ارائه می نماید . کمپایلرهای JIT مبتنی بر یک معماری خاص ، امکان نوشتن کد مدیریت یافته را فراهم تا در ادامه و بکمک آن امکان ترجمه و تولید کد وابسته به یک معماری خاص فراهم و در نهایت زمینه اجراء کد نوشته شده ، فراهم گردد.(هر کد مدیریت یافته که API مختص یک سیستم عامل و یا کتابخانه ها را استفاده می نماید ، صرفا" قادر به اجراء بر روی سیستم های عامل خاصی خواهد بود ) .
اسمبلی ها
یکی دیگر از عملیاتی که CLR ، انجام می دهد لود و اجرای برنامه های دات نت است . برنامه های دات نت بعنوان اسمبلی بکار گرفته می شوند . اسمبلی شامل یک و یا چندین فایل EXE و یا DLL بهمراه اطلاعات متا دیتا است . متا دیتا مربوط به تمام اسمبلی در مانیفست اسمبلی ذخیره می گردد . CLR ، از اسمبلی بعنوان واحدهای عملیاتی جهت اشتراک و استفاده مجدد استفاده می نماید. یک اسمبلی ، واحد بکارگیری کلاس است ( در مقایسه با یک Dll منطقی ) هر اسمبلی شامل تمامی فایل های فیزیکی است که واحد اجرائی ( عملیاتی ) را تشکیل خواهد داد ( ماژول مدیریت یافته ، منابع ، فایل های داده ) . از لحاظ مفهومی ، اسمبلی ، روشی را بمنظور مشاهده مجموعه ای از فایل ها بعنوان یک موجودیت ، فراهم می نماید. استفاده از اسمبلی ها بمنظور ایجاد یک برنامه ، یک باید است . در این راستا می توان ، نحوه بسته بندی اسمبلی ها بمنظور استفاده را انتخاب کرد.
مانیفیست اسمبلی ( Assembly Manifest )
یک اسمبلی شامل بلاکی از داده ها است که "مانیفست " ، نامیده می شود . مانیفست ، جدولی است که هر entry آن نام یک فایل بوده و بعنوان بخشی از اسمبلی در نظر گرفته خواهد شد.مانیفست شامل متا دیتا ئی است که بمنظور مشخص نمودن ملزومات ورژن ، یکسان سازی امنیت ، و سایر اطلاعاتی مورد نیازی است که از آنان بمنظور تعریف حوزه اسمبلی و مراجع لازم بمنظور دستیابی و استفاده از منابع ها و کلاس ها ، استفاده می گردد. با توجه به اینکه متادیتا باعث می شود که یک اسمبلی دارای ویژگی خود تشریحی گردد ، CLR همواره دارای اطلاعات مورد نیاز در رابطه با اسمبلی بمنظور اجراء آن خواهد بود . تمامی برنامه ها که توسط CLR اجراء می گردند ، می بایست ترکیبی از یک و یا چندین اسمبلی باشند . تمام فایل هائی که یک اسمبلی را ایجاد می نمایند در مانیفست اسمبلی لیست می گردند . مانیفست ، قادر به ذخیره شدن در یک و یا چندین فایل است:
* اسمبلی های تک فایل ( Single-file) . اگر اسمبلی صرفا" دارای یک فایل مرتبط باشد ، مانیفست همرا ه و مرتبط با فایل PE ، خواهد بود .
* اسمبلی های چند فایل ( Multi-file ) ، اگر اسمبلی دارای بیش از یک فایل مرتبط باشد ، مانیفست می تواند بصورت یک فایل stand alone بوده و یا در یکی از فایل های PE در اسمبلی مستقر گردد.
ابزارهای CLR
CLR ، در رابطه با تست و اشکال زدائی کد MSIL دو ابزار را ارائه می نماید:
* اسمبلر MSIL . اسمبلر MSIL ( فایل ILasm.exe ) کد MSIL را بعنوان ورودی اخذ و یک فایل PE شامل نمایش باینری کد MSIL بهمراه متا دیتا مورد نیاز را تولید می نماید . گرامر استفاده بصورت زیر است:
ILasm [options] filename [options]
* برنامه MSIL Disassembler . با استفاده از برنامه فوق ( فایل ILdasm.exe ) می توان بررسی لازم در خصوص متدیتا و کد disassembled هر یک از ماژول های مدیریت یافته را انجام داد .
استفاده از برنامه ILdasm.exe
برنامه ILDASM ، قادر به نمایش متادیتا و دستورالعمل های MSIL مرتبط با کد دات نت است . ابزار فوق ، بمنظور اشکال زدائی و افزایش شناخت شما نسبت به زیر ساخت دات نت بسیار مفید است . برنامه زیر ، کد نوشته شده به زبان ویژوال بیسیک را بمنظور نمایش یک عبارت ساده در خروجی نشان می دهد .
یک برنامه نمونه نوشته شده به زبان VB.NET
Imports System
Public Class MainApp
Public Shared Sub Main( )
Console.WriteLine( "Welcome to .NET Programming " )
End Sub
End Class
برای ترجمه برنامه فوق و با استفاده از کمپایلر ویژوال بیسیک ، دستور زیر را وارد می نمائیم :
> VBC Welcome.VB
پس از اجرای دستور فوق ، فایل Welcome.exe تولید می گردد .
* مرحله اول : در برنامه ویژوال استودیو دات نت و از طریق خط دستور برنامه Welcome.exe را فعال می نمائیم 🙁 ildasm Welcome.exe ) . پس از باز نمودن آیکون MainApp ، رابط کاربر گرافیکی Disassembler اطلاعاتی را در رابطه با فایل Welcome.exe نمایش خواهد داد.
* مرحله دوم : نمایش محتویات مانیفست . بر روی MANIFEST کلیک نموده و در ادامه شاهد نمایش پنجره MANIFEST خواهیم بود.
در بخش سوم این مقاله به بررسی کمپایلر JIT و سایر موارد در ارتباط با برنامه نویسی دات نت ، خواهیم پرداخت .
مبانی دا ت نت ( بخش اول )
دات نت ، پلات فرم جدید ماکروسافت بمنظور تحقق نظریه : " نرم افزار بعنوان سرویس " ، است . دات نت یک محیط پیاده سازی است که بکمک آن می توان اقدام به ایجاد و بکارگیری نرم افزار و نسل جدیدی از عناصر موسوم به " سرویس های وب " ، نمود. تمامی محصولات اصلی ماکروسافت از ویژوال استودیو دات نت تا ویندوز و نهایتا" مجموعه آفیس ، متاثر از پلات فرم فوق شده و خواهند شد . دات نت به پیاده کنندگان این امکان را خواهد داد که با زبان برنامه نویسی مورد علاقه خود ، اقدام به پیاده سازی برنامه ها نمایند. ویژگی ( پتانسیل ) فوق از طریق معرفی CLR)Common Language Runtime )، میسر شده است . در این مقاله قصد داریم به بررسی دات نت پرداخته و پتانسیل ها و قابلیت های آن را تشریح نمائیم .
در جولای سال 2000 ، شرکت ماکروسافت در کنفرانس پیاده کنندگان حرفه ای (PDC ) ، در شهر Orlando ایالت کالیفرنیا ، جزئیات بیشتری از نسل جدید پلات فرم خود ( دات نت ) بمنظور پیاده سازی برنامه های ویندوز و اینترنت را در اختیار علاقه مندان خصوصا" پیاده کنندگان نرم افزار قرار داد . محوریت ابتکار فوق ، بر فریمورک دات نت استواربوده ونشاندهنده یک پلات فرم مناسب بهمراه کتابخانه های کلاس گسترده ای است که پتانسیل های متعددی را در اختیار قرار می دهد. یکی از نکات قابل توجه در پلات فرم فوق،استفاده از XML و SOAP بمنظور ارتباط بین نرم افزارها ی موجود در اینترنت ( نرم افزارهای مبتنی بر وب ) ، است . در این راستا مجموعه ای از محصولات مبتنی بر سرویس دهنده با نام سرویس دهندگان Enterprise دات نت، مطرح که بمنزله نسل جدیدی از محصولات Backoffice ماکروسافت ، می باشند.
فریمورک دات نت ، مدلی کاملا" جدید بمنظور برنامه نویسی و بکارگیری نرم افزار را ارائه نموده است. "بیل گیتس "، در سخنرانی خود در PDC ، بدین نکته اشاره داشتند که در هر پنج تا شش سال ما شاهد یک تحول عمده در رابطه با پیاده سازی نرم افزار بوده ایم . آخرین موارد در این زمینه به سوئیچ از DOS به ویندوز در سال 1990 و گذر از پیاده سازی شانزده بیتی به سی و دو بیتی ( از ویندوز widows 3.x به ویندوز NT/95 ) در اواسط دهه 90 میلادی ، است.
با معرفی دات نت در PDC ، پیاده کنندگان آن را معماری مناسبی برای پیاده سازی نرم افزار ( برنامه های Desktop و برنامه های وب ) مشاهده نمودند . ویژوال استودیو دات نت ، اولین محصول مبتنی بر دات نت ماکروسافت بوده که در سال 2001 در اختیار علاقه مندان قرار گرفت . اهمیـت دات نت برای ماکروسافت تا بدین حد است که در سال 2001 ، بیش از هشتاد درصد منابع بخش تحقیق و توسعه این شرکت در رابطه با آن صرف شده است . زبان سی شارپ ، که زبانی جدید برای برنامه نویسی در دات نت است بعنوان زبان استاندارد برای پیاده سازی داخلی در شرکت ماکروسافت پذیرفته شده است .
یک پلات فرم مناسب برای آینده
دات نت، اولین پلات فرم طراحی شده از صدر تا ذیل با در نظر گرفتن واقعیتی با نام اینترنت است . دات نت از یک ماشین مجازی خاص در این زمینه استفاده می نماید . ماهیت ماشین مجازی فوق ، بگونه ای است که از API ویندوز فاصله و در این رابطه از یک کتابخانه کلاس استفاده می نماید که می توان به جرات این ادعا را داشت که تاکنون نظیر آن ، ایجاد نشده است . امکان استفاده از زبانهای متعدد برنامه نویسی ، وجود خواهد داشت .معماری دات نت ، امکان ارتباط بین زبانها را بسادگی فراهم خواهد کرد .دات نت ، یک رویکرد جدید در رابطه با پیاده سازی نر م افزار را مطرح نموده است . نگاه به دات نت ، عمدتا" بصورت سیستم های توزیع شده است. با استفاده از XML ،امکان اجرای توابع بر روی کامپیوترهای متفاوت یک سازمان ویا جهان فراهم و جلوه ای زیبا در همیاری بمنظور اجرای یک برنامه ، به نمایش در خواهد آمد. از این منظر ، سیستم ها از سرویس دهندگان تا سیستم های بدون کابل ، قادر به اشتراک پلات فرم عمومی یکسانی خواهند بود . با استفاده از نسخه های دات نت که برای تمام آنها در دسترس خواهد بود، امکان ارتباط مناسب آنها با یکدیگر فراهم خواهد شد. دات نت ، بمنظور طراحی و پیاده سازی برنامه های سنتی نیز راهکارها و امکانات مناسبی را ارائه تا از این طریق امکان پیاده سازی و بکارگیری این نوع از نرم افزارها ، بسادگی انجام گیرد . برخی از تکنولوژی ها ی ارائه شده در دات نت نظیر فرم های ویندوز، تلاشی در این راستا است .
ایده های اولیه
از اواخر سال 1995 ، شرکت ماکروسافت توجهی خاص و قابل توجه نسبت به اینترنت نمود . هدف ماکروسافت در این زمینه پیوند بین پلات فرم ویندوز و اینترنت بود. ماحصل تلاش ماکروسافت در این زمینه ارائه مدل برنامه نویسی Windiws DNA ، بود . در این راستا مجموعه ای از ابزارها و تکنولوژی های مبتنی بر اینترنت ، طراحی و ارائه گردید . ASP ، از اولین تلا ش های ماکروسافت در این زمینه است . عملا" در این زمینه ( مطرح شدن اسکریپت ها ی مفسری ) یک برگشت به عقب نسبت به پیاده سازی ساختیافته و شی گراء را شاهد بوده ایم . طراحی ، اشکال زدائی و نگهداری چنین کدهای غیر ساختیافته ای مسائل خاص خود را خواهد داشت . سایر زبانها نظیر ویژوال بیسیک بصورت موفقیت آمیز در رابطه با برنامه نویسی بر روی اینترنت و پلات فرم ماکروسافت استفاده می گردید ولی اغلب از آن بمنظور ایجاد عناصری که از طریق ASP ، بخدمت گرفته می شدند ، استفاده می گردید .در این رابطه تلاش های اندکی نیز در جهت ایجاد یک اینترفیس مبتنی بر وب بر روی زبان های سنتی نظیر webclasses در VB ، نیز انجام شد ولی هیچکدام از تلاش های فوق ، در سطح گسترده ای مورد استقبال و پذیرش قرار نگرفت . ماکروسافت در صدد حل آشفتگی های همراه برنامه های ویندوز DNA بود . ویندوز DNA ، تصویری مناسب از یک معماری Three-Tire و مبتنی بر COM بود که تکنولوژی ASP در لایه Presentation ، اشیاء Bussiness در لایه میانی و یک engine بانک اطلاعاتی رابطه ای در لایه Data ، قرار می گرفت . مفاهیم همراه DNA ،کامل و بی عیب بود اما در زمان استفاده عملیاتی چالش های خاص خود را بدنبال داشت . پیاده سازی عناصر COM ، مستلزم یک سطح مناسب از دانش و مهارت است و می بایست زمان زیادی در این رابطه صرف گردد . بکارگیری نرم افزارهای DNA ، نیز مسائل خاص خود را داشت ( مسائل مربوط به ورژن ، نصب عناصر و عناصری که با آن مرتبط می باشند ) .
بموازات تلاش سایر شرکت ها در رابطه با ارائه راهکارهائی خاص بمنظور پیاده سازی برنامه ها ی وب ، شرکت ماکروسافت در صدد برطرف نمودن محدودیت های مدل برنامه نویسی DNA گردید.
تولد دات نت
در اوایل سال 1998 ، گروهی از پیاده کنندگان نرم افزار در ماکروسافت ، کار خود را بر روی نسخه ای جدید از IIS ( نسخه چهار) ، به اتمام رساندند که دارای چندین ویژگی جدید در رابطه با ASP بود .در این راستا ، قابلیت های جدیدی بمنظور پیاده سازی برنامه های وب در ویندوز NT ، فراهم گردید.گروه پیاده کننده دارای ایده های متعددی برای اعمال اصلاحات جدید بودند . گروه فوق ، کار خود را بر روی یک معماری جدید برای پیاده سازی ایده های مطرح شده ، آغاز نمود . این پروژه ، NGWS)Netx Generation Window Services) ، نامیده گردید. پس از ارائه ویژوال استودیو شش ، در اواخر سال 1998 ، تلاش برای ایجاد نسخه ای جدید از ویژوال استودیو در دستور NGWS ، قرار گرفت . گروه COM+/MTS در مدل پیشنهادی خود از یک Runtime ، عمومی برای تمامی زبانهای استفاده شده در ویژوال استودیو ، استفاده نمودند . تلاش افراد درگیر در پروژه NGWS ادامه تا در نهایـت ، شرکت ماکروسافت در کنفرانس پیاده کنندگان حرفه ای (PDC) ، دات نت را معرفی نمود.
مروری بر فریمورک دات نت
فریمورک دات نت ، تمامی لایه های پیاده سازی نرم افزار را از سطح سیستم عامل به بالا ، تحت پوشش قرار می دهد. فریمورک فوق، سطحی مناسب وقدرتمند از ارتباط و همبستگی بین تکنولوژی Presentation ، تکنولوژی های Component و تکنولوژی های Data را ارائه می نماید ( نظیر این ارتباط و همبستگی تاکنون در پلات فرم ویندوز مشاهده نشده است) . معماری فوق ، امکان طراحی و پیاده سازی برنامه های مبتنی بر اینترنت و محیط های Desktop ، را بسادگی فراهم و نیازهای هر گروه از نرم افزارهای فوق را بخوبی جواب می دهد . اجزای اصلی فریمورک دات نت در شکل زیر نشان داده شده است .
فریمورک دات نت از لایه پائین با عملیاتی نظیر مدیریت حافظه آغاز و بسمت بالا بمنظور ارائه اینترفیس های برنامه ها و کاربران ، دنبال می شود . در بین لایه ها ، لایه های سیستمی دیگر که هر یک دارای پتانسیل های خاصی برای پیاده کنندگان می باشند ، وجود دارد.
CLR) Common Language Runtime) ، بمنزله قلب فریمورک دات نت محسوب و engine لازم بمنظور ارائه قابلیت های کلیدی را ارائه می نماید . CLR ، شامل عناصر اساسی دیگری نظیر: (Common Type System (CTS ، است. علاوه بر مدیریت حافظه ، CLR ، مراجعات به اشیاء و عملیات Garbage Collection را نیز انجام می دهد .
در لایه میانی ، ما شاهد نسل جدیدی از سرویس های استاندارد نظیر ADO.NET و XML می باشیم .سرویس های فوق ، تحت کنترل فریمورک بوده و امکان بکارگیری آنها بصورت جامع و استاندارد در بین تمامی زبانها ، فراهم می گردد . بالاترین لایه ، شامل اینترفیس های برنامه و کاربر است . فرم های ویندوز ، روشی جدید بمنظور ایجاد برنامه های Desktop مبتنی بر win32 می باشند. فرم های وب ، یک رابط کاربر مناسب برای برنامه های مبتنی بر وب را ارائه می نمایند. سرویس های وب ، مکانیزمی بمنظور ارتباط برنامه ها از طریق اینترنت و با استفاده از SOAP ، می باشد. سرویس های وب ، قابل مقایسه با عناصر COM و DCOM بوده با این تفاوت مهم که در این راستا از تکنولوژی های متعدد اینترنت ، استفاده می گردد. فرم های وب و سرویس های وب ، اینترفیس اینترنت دات نت را تشکیل و پیاد ه سازی آنان از طریق بخش دیگری در فریمورک دات نت که ASP.NET ، نامیده می شود ، محقق می گردد .
پتانسیل های موجود در هر لایه فریمورک دات نت ، توسط هر یک از زبان های سازگار با دات نت ، قابل استفاده خواهد بود. در پایان لازم است به این نکته اشاره گردد که در این رابطه ( فریمورک دات نت ) می توان از اینترفیس های مبتنی بر متن ( کاراکتری) نیز استفاده کرد . این نوع برنامه ها اصطلاحا" Console Application ، نامیده می شوند .
دربخش دوم این مقاله به بررسی CLR و جایگاه آن در فریمورک دات نت، خواهیم پرداخت .
مبانی دا ت نت ( بخش دوم )
در بخش اول این مقاله به بررسی و معرفی فریمورک دانت پرداخته گردید. در این بخش به بررسی 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 ، خواهند شد.
در بخش سوم این مقاله ، به بررسی کلاس های پایه فریمورک دات نت خواهیم پرداخت .
مبانی دا ت نت ( بخش سوم )
آنچه تاکنون گفته شده است :
بخش اول : معرفی فریمورک دانت
بخش دوم : بررسی CLR
در این بخش به بررسی کلاس های پایه فریمورک دات نت و اینترفیس های کاربر و برنامه خواهیم پرداخت .
در بخش دوم این مقاله با اولین لایه فریمورک دات نت ( CLR ) آشنا شدیم . در ادامه بر روی لایه بعد متمرکز و به بررسی امکانات ارائه شده خواهیم پرداخت . این لایه ، کلاس های پایه فریمورک دات نت نامیده شده و مسئولیت ارائه سرویس ها و مدل های اشیاء برای داده ، عملیات ورودی و خروجی ، امنیت و موارد دیگر را بر عهده دارد . نسل بعدی ADO که ADO.NET نامیده می شود در این لایه قرار دارد . در لایه فوق ، امکانات و پتانسیل های لازم بمنظور انجام عملیات مرتبط با XML نیز ارائه شده است . پارسر و تبدیل کننده XSL ، نمونه هائی از پتانسیل های موجود در این لایه بمنظور کار با اسناد XML می باشند.
اکثر امکانات و پتانسیل های مورد نیازی که ضرورت فراگیری آنان برای هر برنامه نویس در رابطه با یک زبان برنامه نویسی وجود دارد ، به کلاس های فریمورک منتقل شده است . مثلا" تابع Sqr که در ویژوال بیسیک از آن بمنظور محاسبه جذر یک عدد استفاده می گردد در دات نت وجود نداشته و این تابع با متد System.Math.Sqrt موجود در کلاس های فریمورک جایگزین شده است .
تمامی زبانهای سازگار با دات نت قادر به استفاده از کلاس های فریمورک می باشند . بدین ترتیب در یک زبان برنامه نویسی نظیر کوبال و یا ویژوال بیسیک دات نت ، برای محاسبه جذر یک عدد از تابع مشابهی استفاده خواهد شد .رویکرد فوق ، پیوستگی و ارتباط مناسب بین زبان های متفاوت برنامه نویسی را بدنبال خواهد داشت . تمامی زبان ها به روشی مشابه از متد System.Math.Sqrt استفاده و به کد یکسانی دستیابی خواهند داشت ( اختلاف موجود صرفا" به گرامر استفاده از متد مورد نظر در زبان مربوطه ، برمی گردد) .
اکثر قابلیت ها و پتانسیل موجود در کلاس های پایه فریمورک در یک namespace عظیم و با نام System ارائه شده است . namespace فوق ، شامل چندین namespace زیرمجموعه دیگر است . مثلا" Microsoft.VisualBasic شامل Runtime ویژوال بیسیک و کلاس ها ئی بمنظور ترجمه و تولید کد مورد نظر برای برنامه های نوشته شده به زبان ویژوال بیسیک دات نت است .
اینترفیس های کاربر و برنامه
در بالاترین لایه ، دات نت روش هائی را بمنظور تفسیر و مدیریت رابط های کاربر ( فرم های ویندوز ، فرم های وب ، برنامه های کنسول ) و اینترفیس مورد نیازعناصر از راه دور ( سرویس های وب ) ، ارائه می نماید .
اینترفیس کاربر : فرم های ویندوز
فرم های ویندوز ( به آنان WinForms هم می گویند ) روشی پیشرفته ویکپارچه بمنظور ایجاد برنامه های Desktop استناندارد سی و دو بیتی را ارائه می نمایند. تمامی زبان ها ی سازگار با دات نت ، قادر به استفاده از پتانسیل فرم های ویندوز در مقابل روش هائی که در حال حاضر استفاده می نمایند ، خواهند بود ( MFC و یا Win32API در ++C و یا موتور VB Forms در ویژوال بیسیک ) . فرم های ویندوز ، مجموعه ای قدرتمند و یکپارجه از کنترل ها و توابع عملیاتی را برای تمامی زبانها ارائه و بعنوان بخشی از کلاس های فریمورک در namespace با نام System.WinForms ،ارائه شده است . بدین ترتیب امکان استفاده از فرم های ویندوز توسط تمامی زبان های مبتنی بر دات نت وجود خواهد داشت . با استفاده از Drag & Drop Designer فرم های ویندوز ، می توان اقدام به ایجاد ویژوال فرم های مورد نظر بمنظور استفاده در هر زبان برنامه نویسی نمود.
در ویندوز DNA ، تعداد زیادی از برنامه های داخلی سازمان ها و موسسات مبتنی بر مرورگر بودند ، چراکه هزینه نصب و نگهداری یک برنامه سرویس گیرنده بر روی صدها و یا هزاران ایستگاه بسیار قابل تامل بود . فرم های ویندوز و فریمورک دات نت دارای پتانسیل لازم بمنظور بهینه سازی اقتصادی ( مقرون بصرفه ) نصب و نگهداری یک برنامه سرویس گیرنده با توانائی اجراء بر روی هزاران ایستگاه می باشند . یک برنامه مبتنی بر فرم های ویندوز ،نسبت به برنامه سرویس گیرنده ای که با ویژوال بیسیک نوشته شده باشد ، بسادگی نصب و بهنگام خواهد شد . با استفاده از دستوری نظیر : XCOPY ، امکان بکارگیری برنامه بسادگی و بسرعت فراهم و در این رابطه نیازی به ریجستر نمودن عناصری وجود نخواهد داشت . نصب و بهنگام سازی اینچنین برنامه هائی بمراتب ساده تر از وضعیتی است که قبلا" شاهد آن بوده ایم.بدین ترتیب طراحی و پیاده سازی برنامه هائی که نیازمند یک رابط کاربر قدرتمند برای تعداد زیادی از کاربران می باشند ، با استفاده از دات نت بخوبی محقق و عملی خواهد شد ( نسبت به ویندوز DNA ) .
اینترفیس کاربر : فرم های وب
فرم های وب ،یکی از بخش های مهم ASP.NET محسوب و رابط کاربر مبتنی بر یک مرورگر وب را ارائه می نمایند. فرم های وب، نسل جدیدی از پیاده سازی اینترفیس های مبتنی بر وب را ارائه می نمایند ( جداسازی لی اوت از منطق). فرم های وب شامل دو بخش مجزاء می باشند : یک تمپلیت که شامل اطلاعات لی اوت مبتنی بر HTML برای تمامی عناصر رابط کاربر و بخش دوم که شامل تمامی منطق لازم برای ارتباط با رابط کاربر است . بدین ترتیب ، اطلاعات مربوط به کنترل ها بهمراه خصایص و لی اوت مربوطه در یک بخش و کدهای مربوطه در بخش دیگر مستقر خواهند شد. کدها ی نوشته شده رفتار کنترل ها را نظارت و در صورت بروز یک رویداد ، روتین های مربوطه فعال خواهند شد .
فرم های وب دارای امکانات متعددی می باشند . کنترل های موجود بر روی فرم های وب بر روی سرویس دهنده اجراء ولی حضور آنان بمنزله سرویس گیرنده خواهد بود .بدین ترتیب امکانات و شرایط مطلوبی برای ایجاد اینترفیس های قدرتمند فراهم که شباهت زیادی به اینترفیس های Win32 استفاده شده در برنامه های Desktop خواهند داشت . اینترفیس های وب ، دارای هوشمندی لازم بمنظور ارتباط با مرورگرهای متفاوت می باشند ( بهینه سازی خروجی برای هر یک از مرورگرهای خاص ) . امکان استفاده از فرم های وب ، برای تمامی زبان ها ی سازگار با دات نت وجود خواهد داشت . این بدان معنی است که می توان کدهای لازم ( منطق ) برای ارتباط با بخش ویژوال یک فرم را با استفاده از هر یک از زبان های حمایت شده نوشت . بدین ترتیب ، امکان طراحی و پیاده سازی اینترفیس های وب انعطاف پذیری فراهم که می توان از آنان در مجموعه گسترده ای از زبان ها ، استفاده بعمل آورد.
کنترل های سرویس دهنده
پیاده کنندگان ویژوال بیسیک با ایده کنترل ها ، آشنائی لازم را دارند . کنترل ها ، عناصر رابط کاربر با قابلیت استفاده مجددی می باشند که بمنظور ایجاد یک فرم از آنان استفاده می گردد . این نوع کنترل ها در فرم های وب ، کنترل های سمت سرویس دهنده ، نامیده می شود. کنترل های سمت سرویس دهنده، در حقیقت یک پروکسی را بر روی سرویس دهنده برای یک عنصر رابط کاربر که بر روی یک فرم وب و یا یک صفحه ASP است ، ایجاد می نمایند. کنترل های سمت سرویس دهنده ، با منطق محلی در صورت ضرورت ارتباط و در ادامه هوشمندانه رابط کاربر خود را بعنوان HTML تفسیر و در صورت ضرورت خروجی مورد نظر را برای هر صفحه حاوی کنترل های سمت سرویس دهنده ، ارسال می نمایند .
کنترل ها ی سمت سرویس دهنده ، بمنظور تفسیر HTML برای طیف متنوعی از مرورگرها و هماهنگی با رویدادها ئی که بر روی صفحه درحال اجراء بر روی سرویس گیرنده محقق می گردند ، می بایست از هوشمندی مناسبی برخوردار باشد . با استفاده از مجموعه ای گسترده از کنترل های ارائه شده بهمراه ویژوال استودیو دات نت ، می توان اینترفیس های مبتنی بر وبی را ایجاد که شباهت بسیار زیادی به اینترفیس های Win32 خواهند داشت . یکی از مهمترین ویژگی های مهم و در عین حال جالب کنترل های سمت سرویس دهنده ، توانائی آنان در ارتباط با مدیریت وضعیت خود است . بمنظور مدیریت وضعیت یک صفحه ، ضرورتی به نوشتن کدهای خاصی در ASP.NET وجود نخواهد داشت .
اینترفیس کاربر : برنامه های کنسول
با اینکه مایکروسافت بر نوشتن برنامه های مبتنی بر کاراکتر ، تاکید خاصی نمی نماید ،ولی بهمراه فریمورک دات نت امکانات لازم بمنظور طراحی و پیاده سازی این نوع برنامه ها پیش بینی شده است (اینترفیس لازم) . همانند فرم های وب و ویندوز ، اینترفیس کنسول برای تمامی زبانهای سازگار با دات نت در دسترس خواهد بود. نوشتن برنامه های مبتنی بر کاراکتر در نسخه قبلی ویژوال بیسیک ، دارای چالش های خاص خود بود . با استفاده از پتانسیل های ارائه شده همراه دات نت می توان برنامه های کنسول واقعی را پیاده سازی نمود.
اینترفیس های برنامه : سرویس های وب
طراحی و پیاده سازی برنامه های کامپیوتر، بسمت نسل جدیدی از برنامه های غیر متمرکز در حال تغییر و تحول است . در سالیان گذشته ، اغلب برنامه ها سرویس های اساسی و مورد نیاز خود را از طریق سیستم عامل مربوطه ، دریافت می کردند ( نظیر سیستم فایل ) . در ادامه ، قابلیت استفاده از توان و پتانسیل موجود در هر نرم افزار برای سایر نرم افزارها فراهم و بدین ترتیب امکان بهره گیری و ارتباط با عناصر نوشته شده فراهم گردید . تمامی تلاش های انجام شده بر این واقعیت استوار بود که با بکارگیری پتانسیل ها ی ارائه شده ، توان عملیاتی یک نرم افزار افزایش یابد و کمتر به نیاز فوق بصورت بنیادی و ریشه ای نگاه می گردید . در این رابطه می بایست فونداسیون لازم بمنظور ارتباط بین برنامه ها فراهم و تمامی برنامه ها با اتکاء به زیرساخت ایجاد شده از خدمات یکدیگر در جهت ارائه بهینه خدمات خود استفاده نمایند. سرویس های وب ، رویکرد جدیدی در این زمینه می باشند. در سرویس وب ، قابلیت های نرم افزار بعنوان یک سرویس عرضه می شود . با استفاده از سرویس های وب ، طراحان و پیاده کنندگان می توانند با ترکیب و بکارگیری منابع محلی و از راه دور ، یک سیستم توزیعی و پیوسته را ایجاد نمایند .
در دات نت ، سرویس های وب بعنوان بخشی از ASP.NET پیاده سازی می گردند( ASP.NET ، مسئول ارائه تمامی اینترفیس های وب است ) . بدین ترتیب امکان گفتگوی برنامه ها با یکدیگر و از طریق وب فراهم می گردد(استفاده از SOAP ) . پیاده کنندگان در این رابطه با انجام عملیاتی مختصر ، قادر به استفاده از سرویس های وب خواهند بود.آنان می بایست به عضوی از سرویس وب شده و فریمورک دات نت سایر مسائل موجود را دنبال و مدیریت خواهد کرد . رویکرد فوق، تغییر معماری برنامه های وب را بدنبال داشته و امکان ارتباط سرویس های وب با یکدیگر و بر روی بستر وب ، میسر خواهد شد . سرویس های وب دارای نقش و جایگاهی بسیار مهم در تولید نسل جدیدی از برنامه های مبتنی بر وب می باشند . سرویس های وب، گزینه ای مناسب برای جایگزین شدن با برخی از پکیج های نرم افزاری خواهند بود.
اهمیت XML در دات نت
اکثر پتانسیل های ارائه شده بمنظور ارتباط بین هر یک از اجزاء دات نت ، با استفاده از XML میسر می گردد . مثلا" سرویس های وب ، کاملا" وابسته به XML برای ارتباط با اشیاء از راه دور می باشند. ADO.NET ارتباط تنگاتنگی با XML برای ارائه راه دور داده دارد .زمانیکه ADO.NET یک Dataset را ایجاد می نماید ( یک ساختار بمراتب پیچیده تر نسبت به نسخه قبلی Recordset ) ، داده بمنظور پردازش آتی توسط ADO.NET به XML تبدیل و پس از اعمال تغییرات بر روی XML ، مجددا" داده بمنظور ذخیره سازی برای مکان مورد نظر ارسال خواهد شد .با استفاده از XML در حوزه های متفاوتی از دات نت ، امکان ارتباط و یکپارچگی بین عناصر مورد نظر چندین برابر می گردد. XML در دات نت دارای جایگاهی خاص و مهم بوده و می توان آن را بمنزله پتانسیلی در نظر گرفت که تمامی عناصر مورد نظر را بیکدیگر مرتبط می نماید .
مبانی برنامه نویسی وب در دات نت ( بخش اول )
اینترنت بدون شک تاثیری شگرف در فرآیند طراحی و پیاده سازی نرم افزار را ایجاد و ما امروزه با نسل جدیدی از برنامه ها مواحه می باشیم که از زیرساخت اینترنت بعنوان بستری مناسب استفاده تا ما همچنان شاهد پویائی نرم افزار بمنظور سرویس دهی در تمامی عرصه های بشریت و این بار در گستره جهانی باشیم . در این راستا شرکت های عظیم نرم افزاری با ارائه راه حل های جامع و فراگیر ، پاسخی شایسته به خیل گسترده نیازهای مطرح دراین زمینه را داده اند . شرکت مایکروسافت با ارائه پلات فرم دات نت ، تحولی عظیم در عرصه طراحی و پیاده سازی نزم افزار ایجاد و امکانات گسترده و یکپارچه ای را برای پیاده کنندگانی ارائه که تمایل به استفاده از پلات فرم مایکروسافت برای پیاده سازی نرم افزار دارند .
در این مقاله و دو مقاله ای که در ادامه منتشر خواهد شد ،اهداف زیر دنبال خواهد شد :
* آشنائی با برنامه هائی که بر روی بستر اینترنت پیاده سازی می گردند .
* آشنائی با ابزارهای موجود بمنظور پیاده سازی برنامه های وب
* آشنائی با نحوه عملیات برنامه های وب ASP.NET
* آشنائی با بخش های متفاوت یک برنامه وب
* آشنائی با پتانسیل های فریمورک دات نت بمنظور پیاده سازی برنامه ها ی وب
* آشنائی با محیط ویژوال استودیو دات نت بمنظور پیاده سازی برنامه های وب
در بخش اول این مقاله ، به بررسی چهار مورد اولیه خواهیم پرداخت .
انواع برنامه های وب
برنامه های وب یکی از چهار نوع برنامه نویسی اینترنت می باشند که می توان با استفاده از ویژوال استودیو دات نت آنان را ایجاد نمود . یک برنامه اینترنت ، برنامه ای است که از اینترنت با رویکردهای متفاوت بمنظور نیل به اهداف خود ، استفاده می نماید. مثلا" برنامه هائی که امکان ریجستر نمودن کاربران را از طریق اینترنت فراهم و یا برنامه هائی که اطلاعات و راهنمائی لازم در خصوص استفاده از یک نرم افزار را از طریق اینترنت به مخاطبان خود ارائه می نمایند ، جملگی برنامه های اینترنتی می باشند که از زیرساخت اینترنت استفاده می نمایند . تعریف یک برنامه اینترنت بسیار گسترده بوده و شاید تعریف کامل آن با در نظر گرفتن تمامی ابعاد از حوصله این مقاله خارج باشد . بدین دلیل و بمنظور تمرکز بر انواع برنامه های اینترنت ، آنان را به چهار گروه متفاوت تقسیم و ادامه بحث را با آنان دنبال خواهیم کرد .
* برنامه های وب ( Web applications ) . این نوع از برنامه ها ، محتویات مورد نظر خود را توسط سرویس دهنده و از طریق اینترنت برای سرویس گیرنده ارسال می نمایند . کاربران ، برنامه های وب را ازطریق یک مرورگر وب مشاهده خواهند کرد .
* سرویس های وب ( Web services). این نوع از عناصر، سرویس های پردازشی لازم را از طریق یک سرویس دهنده به سایر برنامه ها بر روی اینترنت ، ارائه می نمایند .
* برنامه های Internet-enabled . این نوع از برنامه ها ، برنامه های خود اتکائی ( Stand-alone ) بوده که از یکپارچگی اینترنت بمنظور انجام عملیاتی نظیر ریجستر نمودن کاربران بصورت online ، ارائه راهنمائی و پشتیبانی فنی به کاربران و بهنگام سازی محصولات نرم افزاری استفاده می نمایند .
* برنامه های نظیر به نظیر ( Peer-to-Peer application ) . این نوع از برنامه ها، برنامه های خوداتکائی ( Stand-alone ) می باشند که از اینترنت بعنوان بستر ارتباطی خود با سایر کاربرانی که نمونه هائی از برنامه رااجراء می نمایند ، استفاده می نمایند .
با استفاده از ویژوال استودیو دات نت ، امکان پیاده سازی انواع برنامه های فوق وجود خواهد داشت . در این مقاله صرفا" بر روی برنامه های وب متمرکز خواهیم شد.
نحوه کارکرد برنامه های وب
برنامه های وب ، تابع معماری سرویس گیرنده – سرویس دهنده می باشند . در این راستا، برنامه وب بر روی سرویس دهنده مستقر و مسئولیت پاسخگوئی به درخواست های ارسالی توسط چندین سرویس گیرنده بر روی اینترنت را برعهده خواهد داشت .
در سمت سرویس گیرنده ، برنامه وب توسط یک مرورگر میزبان می گردد. رابط کاربربرنامه، مشابه صفحات وب مبتنی بر HTML بوده که توسط مرورگر سرویس گیرنده تفسیر و نمایش داده می شود . از زاویه سرویس دهنده ، برنامه وب تحت IIS)Internet Information Services) اجراء می گردد . IIS ، مسئولیت مدیریت برنامه ، پردازش درخواست های ارسالی از سرویس گیرندگان به برنامه و ارائه پاسخ های برنامه به سرویس گیرندگان را بر عهده دارد .درخواست های سرویس گیرندگان و پاسخ های سرویس دهندگان از طریق اینترنت و با استفاده از پروتکل HTTP)Hypertext Transport Protocol) انجام می شود . پروتکل ، مجموعه ای از قوانین لازم بمنظور تشریح نحوه ارتباط دو و یا چندین آیتم از طریق یک محیط انتقال ( زیر ساخت انتقال داده ) نظیر اینترنت است . شکل زیر نحوه ارتباط سرویس گیرنده و سرویس دهنده در یک برنامه وب را نشان می دهد .
برنامه وب ، هماهنگی ومدیریت لازم در خصوص پاسخ های لازم به متقاضیان را با استفاده از منابع موجود بر روی سرویس دهنده انجام خواهد داد . منابع فوق، شامل کدهای اجرائی در حال اجراء بر روی سرویس دهنده ، فرم های وب ، صفحات HTML ، فایل های تصویر و سایر مواردی است که محتویات برنامه را ایجاد می نمایند . برنامه های وب، شباهت زیادی به وب سایت های سنتی دارند. با این تفاوت که محتویات بصورت پویا و پس از اجرای کدهای نوشته شده، تولید و در اختیار کاربران قرار می گیرد . (در مقابل استفاده از اطلاعات ایستا و ذخیره شده در صفحات وب بر روی سرویس دهنده ) . شکل زیر، نحوه ارسال محتویات مبتنی بر HTML به کاربر را نشان می دهد .
بخش اجرائی ( کدهای اجرائی ) یک برنامه وب،امکان انجام عملیاتی رافراهم می نماید که تحقق آنان بکمک صفحات وب ایستا و بالطبع وب سایت های ایستا وجود نخواهد داشت . موارد زیر ، نمونه هائی در این زمینه می باشد :
* جمع آوری اطلاعات از کاربر و ذخیره سازی اطلاعات اخذ شده بر روی سرویس دهنده
* انجام عملیات متفاوت نظیر : ثبت سفارش یک کالای خاص ،پردازش های محاسباتی پیچیده و یا بازیابی اطلاعات ذخیره شده در یک بانک اطلاعاتی
* شناسائی یک کاربر خاص و ارائه یک اینترفیس خاص و سفارشی برای وی
* ارائه محتویاتی که ماهیتی کاملا" متغیر دارند نظیر : فهرست موجودی ، اطلاعات محموله ها و سفارشات تعیین تکلیف نشده
موارد فوق، صرفا" نمونه هائی اندک در زمینه پتانسیل های برنامه های وب بوده و می توان با استفاده از یک برنامه وب، هرگونه عملیاتی را که امکان انجام آن در برنامه های مبتنی بر معماری سرویس گیرنده – سرویس دهنده وجود دارد ، پیاده سازی نمود.
ASP.NET و پتانسیل ها ی مربوطه
ASP.NET ، پلات فرمی است که از آن بمنظور ایجاد برنامه های وب و سرویس های وب با نظارت و مدیریت IIS، استفاده می گردد. ASP.NET تنها گزینه و روش موجود بمنظور ایجاد یک برنامه وب نبوده و در این راستا می توان از تکنولوژی های دیگر نظیر CGI نیز استفاده کرد . چیزی که ASP.NET را از سایر تکنولوژی های موجود متمایز می نماید ، ارتباط و یکپارچگی لازم بین سرویس دهنده مایکروسافت ، برنامه نویسی ، دستیابی به داده و ابزارهای امنـیتی است . ASP.NET ، انسجام لازم بمنظور پیاده سازی برنامه وب را ارائه و خود بعنوان بخشی از فریمورک دات نت مطرح و شامل چندین عنصر اساسی است :
* ابزارهای پیاده سازی وب مربوط به ویژوال استودیو دات نت . در این رابطه ابزارهای ویژوال لازم بمنظور طراحی صفحات وب و تمپلیت های برنامه نویسی ، مدیریت پروژه و ابزارهای لازم بمنظوربکارگیری برنامه های وب ، ارائه شده است .
* استفاده از namespace با نام System.Web . پتانسیل فوق، بخشی از فریمورک دات نت محسوب و شامل کلاس های لازم برنامه نویسی بمنظور انجام عملیات مرتبط و مختص وب نظیر درخواست ها و پاسخ ها ی مبتنی بر HTTP ، مرورگرها و نامه های الکترونیکی است .
* کنترل های سرویس دهنده و HTML . پتانسیل های فوق ، عناصر مورد نیاز بمنظور طراحی وپیاده سازی رابط کاربر بوده که از آنان بمنظور دریافت و جمع آوری اطلاعات از کاربر و ارائه پاسخ های لازم ، استفاده می گردد.
علاوه بر موارد اشاره شده ، ASP.NET از عناصر متداول برنامه نویسی و ابزارهای ویندوز استفاده می نماید. عناصر فوق ، بعنوان بخشی از ASP.NET محسوب نمی گردند ولی دارای نقشی اساسی در رابطه با برنامه نویسی ASP.NET می باشند .
* IIS . همانگونه که اشاره گردید ، IIS مسئولیت میزبان نمودن برنامه های وب بر روی سرویس دهنده ویندوز را برعهده دارد .
* زبان های برنامه نویسی VB.NET ، ویژوال #C و ویژوال #J . سه زبان فوق ، بطور کامل توسط ویژوال استودیو بمنظور ایجاد برنامه های وب ، حمایت می گردند.
* فریمورک دات نت . پتانسیل فوق، مجموعه ای کامل و گسترده از کلاس های برنامه نویسی در ویندوز شامل کلاس های ASP.NET را ارائه که می توان از آنان بمنظور انجام عملیات مختلف برنامه نویسی نظیر دستیابی به فایل ، تبدیل نوع داده ، عملیات بر روی بردار و رشته ها و سایر موارد دیگر، استفاده نمود.
* ابزارها و کلاس های بانک اطلاعاتی ADO.NET . عناصر فوق ، امکان دستیابی به بانک اطلاعاتی SQL SERVER و بانک های اطلاعاتی ODBC را فراهم می نمایند . دستیابی به داده، اغلب بعنوان یکی از عناصر اساسی در برنامه های وب تلقی می گردد .
* مرکز تست برنامه ( ACT ) . عناصر ویژوال استودیو دات نت ، روشی اتوماتیک بمنظور بررسی و تست برنامه های وب را ارائه می نمایند.
ASP.NET یک پلات فرم کامل برای پیاده سازی برنامه های وبی می باشد که تحت IIS ، اجراء می گردند. لازم است به این نکته اشاره گردد که ASP.NET یک پلات فرم مستقل نبوده چراکه عملا" توسط IIS میزبان می گردد. ASP.NET ، می بایست بر روی سرویس دهندگان ویندوز ، اجراء گردد .
مزایای ASP.NET
ASP.NET ، دارای مزایای متعددی نسبت به سایر پلات فرم ها ی ارائه شده بمنظور تولید برنامه های وب است . شاید مهمترین و شاخص ترین ویژگی آن ، ارتباط با سرویس دهنده ویندوز و ابزارهای برنامه نویسی است . برنامه های وبی که با استفاده از ASP.NET ایجاد می گردند ، بسادگی ایجاد ، اشکال زدائی و بکارگرفته خواهند شد چراکه انجام عملیات فوق، توسط محیط پیاده سازی ویژوال استودیو دات نت بصورت یکپارچه و منسجم میسر می گردد . استفاده از ASP.NET توسط پیاده کنندگان برنامه های وب ، مزایای زیر را بدنبال خواهد داشت :
* بخش های اجرائی یک برنامه وب، ترجمه می گردند، بنابراین سرعت اجرای آنان بمراتب بیشتر از اسکریپت های تفسیری است .
* بهنگام سازی On-the -fly ، برنامه های وب بکارگرفته شده بدون نیاز به راه اندازی مجدد سرویس دهنده
* دستیابی به فریمورک دات نت که تسهیل در امر برنامه نویسی را بدنبال خواهد داشت .
* استفاده از زبان برنامه نویسی شناخته شده و گسترده ویژوال بیسیک که بطور کامل امکانات برنامه نویسی شی گراء را حمایت می نماید.
* معرفی زبان جدید ویژوال #C که نسخه ای با نوع ایمن و شی گراء از زبان برنامه نویسی C است .
* قابلیت ایجاد کنترل های سرویس دهنده سفارشی از کنترل ها ی موجود
* اتوماسیون مدیریت وضعیت برای کنترل ها ی موجود بر یک صفحه وب ، بدین ترتیب رفتار آنان دراکثر موارد مشابه کنترل های ویندوز می گردد.
* استفاده از امکانات امنیتی از قبل ایجاد شده در سرویس دهنده ویندوز و یا سایر روش های تائید و معتبر سازی
* ارتباط و پیوستگی با ADO.NET بمنظور دستیابی به بانک اطلاعاتی و ابزارهای طراحی ارائه شده در ویژوال استودیو دات نت
* حمایت کامل از XML ،CSS و سایر استانداردهای جدید مرتبط با وب
* دارای امکانات لازم و از قبل تعبیه شده در رابطه با caching صفحات بر روی سرویس دهنده که فرکانس درخواست آنان زیاد است ، محلی نمودن محتویات برای زبان های خاص و فرهنگ های متفاوت و تشخیص قابلیت های مرورگر
بخش های یک برنامه وب
یک برنامه وب از سه بخش اساسی تشکیل می گردد : محتویات ، منطق برنامه و اطلاعات مرتبط با پیکربندی وب . جدول زیر خلاصه ای از وضعیت سه بخش فوق را بهمرا ه نمونه مثال هائی که در یک برنامه وب ASP.NET استفاده می گردد، نشان می دهد.
توضیحات
نوع فایل ها
بخش
فایل های فوق ، ظاهر یک برنامه وب را مشخص می نمایند. این فایل ها ، می توانند متن ایستا و یا تصاویری باشند که توسط منطق برنامه و بصورت on the fly ایجاد می گردند ( مثلا" درخواست از یک بانک اطلاعاتی )
فرم های وب ، HTML ، تصاویر ، صوت ، تصویر و سایر داده های موجود است.
محتویات
نحوه پاسخگوئی برنامه به عملیات کاربر را مشخص می نماید. برنامه های وب ASP.NET ، دارای یک فایل DLL بوده که بر روی سرویس دهنده اجراء و می تواند شامل اسکریپت هائی باشد که بر روی سرویس گیرنده اجراء می گردند .
فایل های اجرائی و اسکریپت ها
منطق برنامه
نحوه اجراء برنامه بر روی سرویس دهنده ، افراد مجاز برای دستیابی به برنامه ، نحوه برخورد با خطاهای احتمالی و سایر جزئیات مربوط را مشخص می نمایند .
فایل پیکربندی وب ، تنظیمات IIS و Style sheets .
پیکربندی
فرم وب ، عنصری اساسی در یک برنامه وب بوده و دارای شکل ظاهری مشابه و رفتاری نظیر یک صفحه HTML می باشد . فرم های وب ، دارای کنترل های لازم بمنظور پاسخگوئی و واکنش در مقابل رویدادها و اجرای کد متناظر با رویداد محقق شده می باشند .در یک برنامه وب ، بخش اجرائی فرم وب در یک اسمبلی ( dll . ) ذخیره و بر روی سرویس دهنده و تحت کنترل پردازه خدمتگزار ASP.NET ( با نام asp_wp.exe ) و با هماهنگی و ارتباط با IIS ، اجراء می گردد.بخش محتویات یک فرم وب در یک دایرکتوری وب مستقر می گردد. شکل زیر بخش های متفاوت یک برنامه وب را بر روی سرویس دهنده وب ، نشان می دهد.
پس از درخواست یک فرم وب توسط کاربران ، مراحل زیر دنبال می گردد :
* IIS ، پردازه خدمتگزار ASP.NET را در صورتیکه هنوز اجراء نشده باشد، اجراء می نماید. پردازه خدمتگزار ASP.NET اسمبلی مربوط به فرم وب را در حافظه مستقر می نماید
* اسمبلی ،پاسخ مناسب را به کاربر و بر اساس محتوی فرم وب درخواستی و یا هر منطق برنامه که محتویاتی پویا را ایجاد می نماید ، ارائه خواهد داد .
* IIS ، پاسخ لازم به کاربر را به شکل HTML ارائه می نماید .
پس از دریافت فرم وب توسط کاربر ، امکان ورود اطلاعات ، انتخاب گزینه های موجود، کلیک نمودن Button فراهم و می توان از سایر کنترل های موجود در صفحه استفاده کرد. برخی از کنترل ها نظیر button می توانند باعث post back صفحه به سرویس دهنده برای پردازش رویداد مربوطه گردند. نحوه انجام مراحل سه گانه فوق، در شکل زیر نشان داده شده است .
اجزاء فرم وب
بر روی یک فرم وب می توان از عناصر متفاوتی استفاده کرد. جدول زیر، عناصر مورد نظر را نشان می دهد
توضیحات
مثال
عنصر
کنترل ها ی فوق به رویدادهای کاربر از طریق اجراء روتین مرتبط با رویداد بر روی سرویس دهنده، پاسخ خواهند داد . کنترل های سرویس دهنده دارای ویژگی های از قبل ساخته بمنظور ذخیره داده درج شده توسط کاربر بین صفحات متفاوت است . از کنترل های فوق ، بمنظورتعریف رابط کاربر یک فرم وب استفاده می گردد .
TextBox, Label, Button, ListBox, DropDownList, DataGrid
کنترل های سرویس دهند ه .
کنترل های فوق ، عناصر ویژوال استاندارد ارائه شده در HTML را ارائه می نمایند . استفاده از کنترل های فوق ، درمواردیکه به قابلیت های کامل و بیشتر ارائه شده توسط کنترل های سرویس دهنده نیاز نباشد ، توصیه می گردد .
Text Area, Table, Image, Submit Button, Reset Button
کنترل های HTML
کنترل های فوق ، روشی مناسب بمنظور ارتباط ، اجرای دستورات و بازیابی داده از بانک های اطلاعاتی SQL ، ODBC و فایل های داده XML است .
SqlConnection, SqlCommand, OleDbConnection, OleDbCommand, DataSe
کنترل های داده
عناصر فوق ، رویدادهای متفاوت سطح سیستم که بر روی سرویس دهنده محقق می گردند را ارائه می نماید .
FileSystemWatcher, EventLog, MessageQueue
عناصر سیستم
از کنترل های سرویس دهنده و HTML بمنظور ایجاد رابط کاربر یک فرم وب استفاده می گردد. کنترل های داده و عناصر سیستم، صرفا" در زمان طراحی بر روی یک فرم وب قرار گرفته تا روشی ویژوال بمنظور تنظیم خصلت ها و برخورد با رویدادهای مربوطه را میسر سازند. کنترل های داده و عناصر سیستم در زمان اجراء دارای نمایش ویژوال نخواهند بود .
در بخش دوم این مقاله به بررسی جایگاه فریمورک دات نت دررابطه با برنامه های وب و در بخش سوم به بررسی امکانات ویژوال استودیو دات نت در رابطه با برنامه نویسی وب در دات نت ، پرداخته شده است .
مبانی برنامه نویسی وب در دات نت ( بخش دوم )
در بخش اول این مقاله ، با ماهیت برنامه هائی که بر روی بستر اینترنت پیاده سازی می گردند ، آشنا و در ادامه به بررسی ابزارهای موجود بمنظور پیاده سازی برنامه های وب ، نحوه عملیات برنامه های وب ASP.NET و تشریح بخش های متفاوت یک برنامه وب ،اشاره گردید . در این بخش به بررسی جایگاه فریمورک دات نت دررابطه با برنامه های وب ، خواهیم پرداخت .
فریمورک دات نت
ASP.NET یکی از بخش های مهم فریمورک دات نت می باشد . در این رابطه لازم است به این نکته دقت شود که ASP.NET ، صرفا" یک بخش از تمام پلات فرم دات نت است . آشنائی با سایر امکانات فریمورک دات نت، قطعا" در ایجاد برنامه های وب مفید و باعث پیشگیری از انجام عملیاتی خواهد شد که توسط فریمورک دات نت پیاده سازی و بعنوان یک پتانسیل در دسترس پیاده کنندگان می باشد. ( عدم انجام کارهای تکراری ) . فریمورک دات نت، پلات فرم جدید برنامه نویسی مایکروسافت بمنظور پیاده سازی نرم افزارهای وب و ویندوز است . فریمورک دات نت از دو بخش عمده تشکیل شده است :
* یک هسته ( موتور) اجرائی که CLR)Common Language Runtime) نامیده می شود.
* یک کتابخانه کلاس که هسته توابع برنامه نویسی (نظیر توابع ارائه شده توسط Windows API ) را ارائه که می توان از آنان بمنظور پیاده سازی برنامه های متفاوت استفاده نمود. در این راستا ، توابع متفاوتی بمنظور پیاده سازی برنامه های وب (ASP.NET ) ، دستیابی به داده ( ADO.NET ) ، امنیت و مدیریت راه دور ، ارائه گردیده است .
برنامه های دات نت همانند برنامه های سنتی ویندور اجراء نمی گردند. این نوع از برنامه ها در مقابل ترجمه کدهای اجرائی نوشته شده به کد ذاتی مختص یک ماشین خاص ، به یک زبان میانی و با نام MSIL)Microsoft intermediate Language) تبدیل و در یک فایل با نام اسمبلی ( assembly ) ذخیره می گردند . در زمان اجراء ، اسمبلی به وضعیت نهائی خود توسط CLR ، ترجمه خواهد شد. CLR ، امکانات لازم در رابطه با مدیریت حافظه ، بررسی امنیت نوع ها و سایر عملیات مورد یناز برنامه ها در زمان اجراء را ارائه می نماید . شکل زیر نحوه انجام عملیات فوق را نشان می دهد .
برنامه هائی که با نظارت و مدیریت CLR اجراء می گردند را managed code می گویند ( کد اداره شده ) ، چراکه CLR مراقبت های لازم در خصوص تعداد زیادی از فعالیت ها ئی که ممکن است راسا" از طریق کدهای نوشته شده در برنامه صورت پذیرد را انجام خواهد داد . کد اداره شده ، مسائل برنامه نویسی ویندوزنظیر ریجستر نمودن عناصر و وجود نسخه های متقاوت ( DLL hell ) را برطرف می نماید ، چراکه اسمبلی شامل تمامی نسخه های متفاوت و اطلاعات مربوط نوع های متفاوتی بوده که CLR بمنظور اجراء برنامه به آنان نیاز خواهد داشت . CLR ، مسئله ریجستر نمودن را در زمان اجراء و بصورت پویا انجام خواهد داد( در گذشته،ریجستر نمودن عناصر در ریجستری سیستم بکمک برنامه و یا از طریق عناصر COM:Componenet Object Model، انجام می گردید) .
کتابخانه کلاس دات نت ، امکان دستیابی به تمامی پتانسیل های CLR را فراهم می نماید . کتابخانه کلاس دات نت، درون مجموعه ای از namespace ها ، سازماندهی شده است . هر namespace شامل گروهی از کلاس های مرتبط است . جدول زیر، برخی از مجموعه های فوق را نشان می دهد .
ارائه دهنده کلاس هائی برای
namespace
گروه
تمامی نوع های داده متداول ،شامل رشته ها ، بردار ها و نوع های عددی . کلاس های فوق ، دارای متدهای لازم بمنظور تبدیل نوع ها ، عملیات بر روی رشته ها و بردارها بمنظور عملیات ریاضی و اعداد تصادفی می باشد .
System
نوع های متداول
دستیابی به بانک های اطلاعاتی . کلاس فوق ، شامل متدهائی برای ارتباط به بانک های اطلاعاتی ، اجرای دستورات ، بازیابی و تغییر داده می باشند.
System.Data
System.Data.Common, System.Data.OleDb, System.Data.SqlClient, System.Data.SqlTypes
دستیابی داده
اشکال زدائی و دنبال نمودن اجراء برنامه
System.Diagnostics
اشکال زدائی
دستیابی به سیستم فایل . کلاس های فوق ، شامل متدهائی برای خواندن و نوشتن در فایل ها و آگاهی از مسیر و نام فایل است .
System.IO,
System.IO.IsolatedStorage, System.DirectoryServices
دستیابی فایل
ارتباط بر روی اینترنت با استفاده از پروتکل های سطح پائین نظیر TCP/IP . کلاس های فوق ، درمواردیکه برنامه های Peer-To-Peer ایجاد می گردد ، استفاده می گردند.
System.Net,
System.Net.Sockets
ارتباطات شبکه ای
ارائه امکانات لازم در خصوص معتبر سازی کاربر ، تائید کاربر و رمزنگاری داده
System.Security, System.Security.Cryptography, System.Security.Permissions, System.Security.Policy, System.Web.Security
امنیت
ایجاد برنامه های سرویس گیرنده – سرویس دهنده که بر روی اینترنت اجراء می گردند. کلاس های فوق ، بمنزله هسته اساسی کلاس های مورد نظر بمنطور ایجاد برنامه های وب ASP.NET می باشند .
System.Web.Hosting,
System.Web.Mail, System.Web.SessionState, System.Web.UI,
System.Web.UI.Design, System.Web.UI.WebControls, System.Web.UI.HtmlControls
برنامه های وب
ایجاد و نشر عناصری که می توانند بر روی اینترنت استفاده گردند . کلاس های فوق ، بمنزله کلاس های پایه بمنظور ایجاد سرویس های وب ASP.NET می باشند .
System.Web.Services, System.Web.Services.Configuration, System.Web.Services.Description, System.Web.Services.Discovery, System.Web.Services.Protocols
سرویس های وب
ایجاد برنامه هائی که از عناصر رابط کاربر ویندوز استفاده می نمایند . کلاس های فوق ، فرم های ویندوز و کنترل های لازم و قابلیت ایجاد کنترل های سفارشی را ارائه می نمایند.
System.Windows.Forms, System.Windows.Forms.Design
برنامه های ویندوز
ایجاد و دستیابی به فایل های XML
System.Xml
System.Xml.Schema, System.Xml.Serialization, System.Xml.Xpath,
System.Xml.Xsl
داده XML
با توجه به اینکه سازماندهی namespace های دات نت بر اساس نوع عملکرد آنان ، انجام شده است ، می توان از آنان بمنظور کمک در مکان یابی کلاس ها و اعضاء کلاس ارائه شده در ارتباط با ویژگی های CLR ، استفاده بعمل آورد . مثلا" namespace با نام system یکی از متداولترین namespace مورد نظر در این زمینه است ، چراکه شامل کلاس هائی برای تمامی نوع های داده پایه است . هر مرتبه که یک متغیرعددی ، رشته و یا نوع بردار، تعریف می گردد از namespace فوق، استفاده می گردد . بدین ترتیب ، فریمورک دات نت متدهای از قبل ایجاد شده ای را بمنظور تبدیل نوع های داده ، عملیات بر روی رشته ها و بردارها ، ارائه نماید. مثلا" برنامه زیر ، با استفاده از متدهای از قبل ساخته شده در ارتباط با کلاس های String و Array ، یک لیست را مرتب می نماید.
VB.NET
' Declare and initialize a string
Dim strFruit As String = "oranges apples peaches kumquats nectarines mangos"
' Declare an array.
Dim arrFruit As String()
' Place each word in an array element.
arrFruit = strFruit.Split(" ")
' Sort the array.
System.Array.Sort(arrFruit)
' Put the sorted data back in the string.
strFruit = String.Join(" ", arrFruit)
Visual C#
// Declare and initialize a string.
string strFruit = "oranges apples peaches kumquats nectarines mangos";
// Declare an array.string[ ] arrFruit;
// Place each word in an array element.
arrFruit = strFruit.Split(" ".ToCharArray());
// Sort the array.
System.Array.Sort(arrFruit);
// Put the sorted array back in the string.
strFruit = System.String.Join(" ", arrFruit);
تعداد زیادی از کلاس ها در namespace با نام System را می توان مستقیما" و بدون ایجاد یک نمونه شی از کلاس استفاده نمود. این نوع کلاس ها ، اعضاء مشترک در ویژوال بیسیک دات نت و اعضاء ایستا در سی شارپ نامیده می شوند. اعضاء مشترک و یا ایستا قادر به فراخوانی از طریق نام کلاس می باشند . Sysytem.Array.Sort در برنامه فوق ، نمونه ای در این زمینه می باشد . یک نمونه مثال دیگر از یک کلاس با اعضاء مشترک و ایستا ، کلاس Math است .
VB.NET
' Get the area of a circle.
dblCircArea = System.Math.Pi * System.Math.Pow(intRadius, 2)
Visual C#
// Get the area of a circle.
dblCircArea = System.Math.PI * System.Math.Pow(intRadius, 2) ;
زبان های برنامه نویسی
ASP.NET و تمامی فریمورک دات نت مستقل از زبان برنامه نویسی است . بدین ترتیب ، می توان هر زبان برنامه نویسی را که یک کمپایلر سازگار با CLR را حمایت می نماید ، انتخاب نمود. علاوه بر ارائه زبان های اختصاصی توسط مایکروسافت ، سایر تولید کنندگان امکانات لازم در خصوص استفاده از زبان های متفاوت برنامه نویسی دیگر نظیر : Perl, Pascal, Eiffel, Cobol, Python, Smalltalk را فراهم نموده اند . VB.NET و #C دو زبان ارائه شده توسط مایکروسافت در دات نت می باشند که دارای قابلیت های عملکردی یکسان بوده و می توان از آنان بمنظور ایجاد برنامه های وب ، استفاده نمود. تفاوت موجود بین زبان های فوق ، اغلب به نوع گرامر آنان برمی گردد .
اکثر برنامه نویسان ، زبانی را انتخاب می نمایند که دارای سابقه آشنائی مطلوبی با آن باشند . برنامه نویسان فعلی ویژوال بیسیک بمنظور پیاده سازی برنامه های وب ، تمایل به استفاده از VB.NET و برنامه نویسان C و یا ++C تمایل به استفاده از ویژوال سی شارپ دارند .اکثرعملیات مورد نظر در یک برنامه وب از طریق بکارگیری کلاس های کتابخانه فریمورک دات نت ، انجام خواهد شد و این بدان معنی است که کد نوشته شده VB.NET و سی شارپ در اکثر موارد مشابه یکدیگر خواهد بود.
جدول زیر برخی از تفاوت های مشهود بینVB.NET و سی شارپ را نشان می دهد .
Feature
VB.NET
Visual C#
Case sensitive
Not case sensitive
response.write("Yo") ? OK
Case sensitive
response.write("Yo"); // Error! Response.Write("Yo"); // OK
Functional blocks
Use beginning and ending statements to declare functional blocks of code
Sub Show(strX as String) Response.Write(strX)
End Sub
Use braces to declare functional blocks of code
void Show(string strX)
{
Response.Write(strX);
}
Type
conversion
Implicit type conversions are permitted by default:
Dim X As Integer
X = 3.14 ? OK
You can limit conversions by including an Option Strict On statement at the beginning of modules.
Implicit type conversions are limited to operations that are guaranteed not to lose information, such as converting from int to float:
int X = 0;
float Y = X; // OK
Other type conversions are performed explicitly by casts:
Y = 3.14F;
X = (int)Y; //Cast, OK.
Or, by using type conversion methods:
string Z;
Z = Y.ToString();
Comments
Comments always start with an apostrophe (?):
' This is a comment.
There are three different types of comments: block (/* */),
inline (//),
documentation (///):
/* Block comments canspan lines or be usedto comment out code. */
// Inline comments appear
// to the right of code.
/// <summary>Description
/// of class.</summary>
Arrays
Array elements are specified using
parentheses:
arrFruit(1) = "Apple"
Array elements are specified using square brackets:
arrFruit[1] = "Apple";
Methods
You can omit parentheses after method names if arguments are omitted:
strX = objX.ToString
You must include parentheses after all methods:
strX = objX.ToString();
Statement termination
Statements are terminated by carriage return:
Response.Write("Hello")
Statements are terminated by the semicolon (;):
Response.Write("Hello");
Statement continuation
Statements are continued using the underscore (_):
intX = System.Math.PI * _ intRadius
Statements continue until the semicolon (;) and can span multiple lines if needed:
intX = System.Math.PI *
intRadius;
String operator
Use the ampersand (&) or plus sign (+) to join strings:
strFruit = "Apples" & _ " Oranges"
Use the plus sign (+) to join strings:
strFruit = "Apples" + " Oranges";
Comparison operators
Use =, >, <, >=, <=, <> to compare values:
If intX >= 5 Then
Use ==, >, <, >=, <=, != to compare values:
if (intX >= 5)
Negation
Use the Not keyword to express logical negation:
If Not IsPostBack Then
Use the ! operator to express logical negation:
if (!IsPostBack)
Object comparison
Use the Is keyword to compare object variables:
If objX Is objY Then
Use == to compare object variables:
if (objX == objY)
Object existence
Use the Nothing keyword or the IsNothing function to check whether an object exists:
If IsNothing(objX) Then
Use the null keyword to check whether an object exists:
if (objX == null)
در بخش سوم این مقاله با امکانات ویژوال استودیو دات نت در رابطه با برنامه نویسی وب در دات نت آشنا خواهیم شد .
مبانی برنامه نویسی وب در دات نت ( بخش سوم )
در بخش اول این مقاله ، با ماهیت برنامه هائی که بر روی بستر اینترنت پیاده سازی می گردند ، آشنا و در ادامه به بررسی ابزارهای موجود بمنظور پیاده سازی برنامه های وب ، نحوه عملیات برنامه های وب ASP.NET و تشریح بخش های متفاوت یک برنامه وب ،اشاره گردید . در بخش دوم به بررسی جایگاه فریمورک دات نت دررابطه با برنامه های وب ، پرداخته گردید . در این بخش با امکانات ویژوال استودیو دات نت در رابطه با برنامه نویسی وب در دات نت آشنا خواهیم شد .
صفحه آغاز ( Start Page )
پس از اجرای ویژوال استودیو دات نت ، اولین چیزی که مشاهده خواهد شد ، Start Page است. صفحه فوق ، شامل بخش های مختلفی بمنظور ارائه اطلاعات و تسهیل در انجام برخی فعالیت های متداول است (مثلا" فعال نمودن یکی از آخرین فایل هائی که از آن استفاده شده است ) .
پانل Project ، نشان داده شده در شکل فوق ، لیست آخرین چهار پروژه ای که بر روی آنان کار شده است را نشان داده و می توان با کلیک نمودن بر روی یکی از آنان ، زمینه ادامه انجام عملیات بر روی پروژه مورد نظر را فراهم نمود . بمنظور ایجاد یک پروژه جدید و یا فعال نمودن پروژه ای که در لیست پروژه های اخیر ، نمایش داده نشده است ، می توان متناسب با خواسته خود یکی از دکمه های موجود بر روی Project tab را فعال نمود.
در سمت چپ ، Start page ، لیستی از سایر عناوین شامل اطلاعات جاری در رابطه با ویژوال استودیو دات نت و سایر محصولات ، وب سایت های مربوطه و سایر موارد نمایش داده شده است . در صورتیکه بر روی یک ازعناوین فوق کلیک گردد ، Start Page ، عنوان مربوطه را نمایش می دهد.
اطلاعاتی که در Start page نشان داده می شود ، بصورت پویا از اینترنت اخذ و بهمراه سایر اطلاعات موجود ، نمایش داده می شود ( مشروط به متصل بودن به اینترنت ) . در رابطه با برنامه های وب ، جالبترین پانل ، مربوط به Web hosting بوده که مسئولیت نمایش لیست وب سایت هائی که امکان میزبان نمودن برنامه های وب ASP.NET را بر روی اینترنت فراهم می نمایند ، برعهده دارد .
پانل My Profile ، در صفحه Start ، امکان انجام تنظیمات لازم و دلخواه در رابطه با ویژوال استودیو دات نت را فراهم می نماید .
با استفاده از گزینه های موجود ، می توان لی اوت پنجره پیش فرض ویژوال استودیو دات نت ، تنظیم زبان برنامه نویسی مورد نظر و سایرعملیات متداول نظیر: مشخص نمودن نوع نمایش Help را انجام داد( در پانل طراحی ویژوال استودیو دات نت و یا در یک پنجره جداگانه ). پنجره help ، از جمله مواردی است که استفاده از آن در ویژوال استودیو دات نت ممکن است برای کاربران شلوغ جلوه نماید ( در صورت استفاده از یک مانیتور نوزده اینچ ، وضعیت نمایش Help مطلوبتر می گردد). دراین رابطه می توان از گزینه External option استفاده تا وضعیت نمایش Help بهبود یابد .
پنجره های ویژوال استودیو دات نت
ویژوال استودیو دات نت دارای دو نوع پنجره است : پنجره Document و پنجره ابزار. پنجره Document ، محتویات برنامه را نمایش می دهد : فرم ها ، صفحات وب و کد تماما" در پنجره Document نمایش داده می شوند. در این راستا ، می توان چندین پنجره Document را در یک لحظه فعال و بمنظور انتخاب آنان از دکمه های Tab مربوطه درقسمت بالای صفحه نمایش استفاده نمود. پنجره ابزار ، عناصر لازم بمنظور ایجاد برنامه را نمایش می دهد . عناصر فوق ، شامل کنترل ها ، ارتباطات بانک اطلاعاتی ، کلاس ها و خصلت هائی می باشند که در یک پروژه استفاده می گردد. پنجره ابزار ، در سمت چپ و راست پنجره های Document نمایش داده شده و می توان وضعیت نمایش آنان رابصورت اسلاید ( حرکت کشوئی ) تبدیل نمود (کلیک بر روی Tab مربوطه ) .بمنظور استقرار دائم یک پنجره ابزار بر روی صفحه ، می توان از دکمه Auto Hide در قسمت بالا و سمت راست پنجره ابزار استفاده نمود. (دکمه Auto Hide نظیر یک سوزن ته گرد، نشان داده می شود) . با کلیک نمودن مجدد بر روی پنجره ابزار ، می توان وضعیت نمایشی ان را بصورت Tabbed تبدیل نمود. بدین ترتیب می توان از نمایش Tabbed بمنظور مخفی نمودن پنجره ابزار در دو سمت پنجره Document استفاده تا فضای لازم بمنظور ویرایش محتویات برنامه فراهم گردد.
نمایش پیش فرض پنجره های Document و Tool در ویژوال استودیو دات نت بصورت Tabbedمی باشد . بمنظور تغییر پیش فرض فوق، می توان گزینه Options از منوی Tools را انتخاب و پس از نمایش جعبه محاوره ای مربوطه ، تنظیمات مورد نظر را انجام داد .
آشنائی با Toolbox
عناصر در Toolbox طبقه بندی و در گروه های متفاوتی سازماندهی شده اند .زمانیکه بر روی یک گروه کلیک می گردد ، Toolbox مربوطه ، آیتم های مربوط به گروه انتخابی رانمایش خواهد داد . در ادامه می توان در بین آیتم ها حرکت و کنترل موردنظر را انتخاب نمود.
در مواردیکه Document جاری ، کد می گردد ، Toolbox صرفا" شامل Clipboard Ring می باشد Clipboard Ring ، بیست مورد آخری را که کپی ( Ctrl + C) و یا Cut شده است
( Ctrl+X ) را نمایش و بدین ترتیب امکان paste نمودن آنان در یک document دیگر فراهم می گردد .
ویرایش سندهای وب
بمنظور ویرایش فرم های وب و اسناد HTML بصورت ویژوال ، می توان از روش معروف drag-and-drop نظیر آنچیزی که در ویرایش فرم های ویندوز استفاده می گردد، استفاده و یا ویرایش آنان را بعنوان فایل های Text انجام داد . بمنظور سوئیچ نمودن بین حالات متفاوت ویرایش ، می توان از دکمه های Designو یا HTML در پنجره Document استفاده نمود. در صورت عدم ضرورت انجام برخی عملیات بصورت ویژوال ، می توان ویرایش اسناد وب را بعنوانText انجام داد. استفاده از حالت HTML بمراتب راحت تر از استفاده از ابزارهای ویژوال خواهد بود. در صورت آشنائی با HTML ، تکنولوژی IntelliSense ( تشخیص هوشمندانه ) ، کمک لازم در خصوص تکمیل عناصر HTML را ارائه خواهد داد .
ویرایش Code-Behind
فرم های وب ، علاوه بر عناصر ویژوال که در یک فایل خاص ذخیره می گردند، دارای فایل هائی با محتویات کد( منطق موردنظر برای انجام عملیات در ارتباط با فرم وب ) بوده که به آنان مرتبط می گردند. در زمان ایجاد یک فرم وب جدید، فایل کد مربوطه نیز بصورت اتوماتیک ایجاد خواهد شد. این نوع فایل ها ، اصطلاحا" Code-Behind نامیده شده و دارای نامی مشابه فرم وب بوده که دارای انشعاب vb . و یا cs . ، اضافه شده به انشعاب آنان می باشد. یک فرم وب از طریق Pagedirective @ که در صفحه HTML فرم های وب استفاده می گردد با فایل کد مربوطه، مرتبط خواهد شد .
VB.NET
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="Form1.aspx.vb" Inherits="WebApplication1.Webform1"%>
Visual C#
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebApplication1.WebForm1" %>
ویژوال استودیو ، بصورت اتوماتیک پشتیبانی اطلاعات ارائه شده توسط page directive را انجام خواهد داد . مثلا" در صورتیکه فرم وب با یک نام متفاوت دیگر ذخیره گردد ، خصلت CoedBehind بصورت اتوماتیک بهنگام می گردد.ویژوال استودیو، بصورت اتوماتیک پشتیابی اطلاعات ارائه شده توسط خصلت Inherits مربوط به Page directive را انجام نخواهد داد ، بنابراین در صورتیکه namespace ریشه مربوط به پروژه و یا نام کلاس یک فرم وب تغییر یابد ، می بایست عملیات بهنگام سازی بصورت دستی در دایرکتیو مربوط به صفحه وب انجام شود. ویژوال استودیو دات نت ، تعریف کلاس ، روتین مقداردهی اولیه و روتین مربوط به رویداد Page_Load را در ارتباط با هر فایل Code Behind مربوط به فرم وب ایجاد می نماید .کد ارائه شده در ناحیه ای که با عبارت Web Form Designer Generated Code ، نشان داده شده است را نمی بایست تغییر داد ، چراکه کد فوق در ادامه توسط ویژوال استودیو باتوجه به شرایط برنامه، مجددا" بازنویسی و تغییرات شما نادیده گرفته می شود. برای مخفی نمودن کد ، می توان بر روی علامت "- " در سمت چپ دایرکتیو Region# کلیک و آن را بصورت یک خط نمایش و با تغییر علامت "-" به علامت "+" ، ناحیه مربوطه را مجددا" نمایش داد. ویرایشگر کد ویژوال استودیو دات نت ، امکان تکمیل دستورات تایپ شده در ارتباط با کلید واژه ها ، اعضاء کلاسی که در کد مورد نظر از آنان استفاده شده است را بصورت هوشمندانه فراهم می نماید.
ویرایش فرم های وب که از یک فایل استفاده می نمایند
ASP.NET ، حمایت لازم در خصوص فرم های وبی که از یک فایل استفاده می نمایند را فراهم می نماید . در این مدل ، فرم وب دارای کد مربوطه خود بهمراه HTML در یک فایل یکسان می باشد . تعداد زیادی از کدها ی نمونه و خود آموزها ئی که بر روی وب سایت ها قرار می گیرد از مدل فوق ، استفاده می نمایند ( توزیع و نمایش آنان ساده تر است ) .ویژوال استودیو دات نت ، قادر به ویرایش و حتی اجرای این نوع از فرم های وب نیز می باشد .لازم است بدین نکته توجه گردد که امکان استفاده از برخی امکانات پیشرفته نظیر: تکمیل اتوماتیک( تشخیص هوشمندانه ) در ارتباط با کد درج شده بین المان های <script> و < script /> ، وجود نخواهد داشت . درنمونه فرم وب زیر که از یک فایل استفاده شده است ، محیط یک دایره محاسبه می گردد.
VB.NET
<%@ Page Language="VB" %>
<script runat="server">
Private Sub butCalculate_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs)
' Declare variables.
Dim dblCircArea, dblRadius As Double
' Convert text input to a double (optional).
If txtRadius.Text <> "" Then _
dblRadius = System.Convert.ToDouble(txtRadius.Text)
' Calculate area.
dblCircArea = System.Math.PI * System.Math.Pow(dblRadius, 2)
' Display result.
ShowResult(dblCircArea)
End Sub
Sub ShowResult(ByVal Result As Double)
litResult.Text = "<h3>Results</h3>"
litResult.Text += "<p>The circle?s area is: <b>" + Result.ToString() _
+ "</b>"
End Sub
</script>
<html>
<head>
<title>Calculate Area</title>
</head>
<body>
<form runat="server">
<h2>Calculate Area
</h2>
<hr />
Circle radius:
<asp:TextBox id="txtRadius" Runat="server"></asp:TextBox>
<asp:Button id="butCalculate" onclick="butCalculate_Click" Runat="server"
Text="Calculate"></asp:Button>
<p>
<asp:Literal id="litResult" Runat="server"></asp:Literal>
</p>
</form>
</body>
</html>
Solution Explorer
سازماندهی برنامه ها در ویژوال استودیو دات نت ، بصورت Projects و Solutions می باشد. Project ، شامل مجموعه ای از فایل ها بمنظور ایجاد یک برنامه اجرائی است .Solution ، شامل گروهی از پروژه ها بمنظور ایجاد یک واحد عملیاتی واحد است .بمنظور مشاهده فایل های موجود در یک Solution ، می توان از Solution Explore استفاده نمود.
اطلاعات مربوط به Solution درفایلی با انشعاب slh .، ذخیره و بصورت پیش فرض در فولدر My Document ذخیره می گردد. بمنظور فعال نمودن Solution ، می توان از فایل فوق استفاده و یا بصورت مستقیم اقدام به فعال نمودن فایل های پروژه که در فولدر Project مستقر می باشند ، نمود( vbproj . و یا csproj . ). در صورت فعال شدن یک فایل Project و پس از ذخیره سازی آن ، ویژوال استودیو دات نت ، یک فایل Solution جدید برای آن ایجاد می نماید.
اجرای یک پروژه
بمنظور اجرای یک Project در ویژوال استودیو دات نت، می توان بر روی دکمه Start موجود بر Toolbar ، انتخاب گزینه Start از طریق منوی Debug و یا فشردن کلید F5 استفاده کرد. زمانیکه یک Project اجراء می گردد ، فایل های پروژه ایجاد و در صورت بروز هرگونه خطاء ، موارد مربوطه در Task List window نمایش داده می شود.با کلیک نمودن بر روی شرح خطاء در Task list ، خط مورد نظر و مرتبط با خطاء بوجود آمده در پنجره Document نمایش و امکان تصیح آن فراهم می گردد.در صورت عدم بروز خطاء در زمان فرآیند Build ، اجرای برنامه درحالت Debug آغاز می گردد. در رابطه با یک برنامه وب ، برنامه IE فعال و صفحه شروع برنامه نمایش داده می شود. در صورتیکه در زمان اجراء برنامه و در حالت Debug ، خطائی بوجود آید ، خطاء مورد نظر در مرورگر نمایش داده می شود. در این وضعیت از دو گزینه متفاوت می توان استفاده نمود در صورت آگاهی از علت بروز خطاء ، می توان اجراء برنامه رامتوقف ( با بستن پنجره مرورگر ) و به ویژوال استودیو دات نت مراجعت و خطاء مورد نظر را برطرف نمود .
* در صورتیکه اطمینان لازم نسبت به علل بروز خطاء وجود نداشته باشد ، می توان دکمه Back مرورگر را فعال تا به ویژوال استودیو دات نت سوئیچ ویک Breakpoint در محلی که خطاء بروز نموده است را تعریف و مجددا" به مرورگر مراجعه و اجرای برنامه را دنبال نمود. ویژوال استودیو دات نت ، اجراء برنامه را در محل Breakpoint متوقف و می توان مراحل مربوطه به مکان یابی منبع خطاء را دنبال کرد.
تنظیم Breakpoint و مشاهده متغیرها
با تنظیم و تعریف یک Brakpoint ، می توان اجراء یک پروژه را در خط خاصی متوقف نمود. زمانیکه ویژوال استودیو دات نت ، پروژه ای را اجراء می نماید ، پروژه را متوقف و خط مورد نظر بهمراه Breakpoint را در ویرایشگر کد و قبل از اجرای خط مربوطه ، نمایش خواهد داد . بمنظور تنظیم یک Breakpoint ، می توان بر روی حاشیه خاکستری سمت چپ خط کلیک و یا خط مورد نظر را انتخاب و از کلید F9 استفاده نمود.
زمانیکه ویژوال استودیو دات نت ، اجراء برنامه را در محل یک Breakpoint متوقف می نماید ، می توان مقدار متغیرهای فعال را با انتقال اشاره گر موس بر روی متغیر مشاهده کرد. در صورتیکه متغیر یک نوع پیچیده باشد ، نظیر یک شی و یا یک آرایه ، می توان داده مرتبط با آن را با اضافه نمودن آن به پنجره Watch مشاهده نمود. بمنظور افزودن یک آیتم به پنجره Watch ،می توان آیتم مورد نظر را انتخاب و آن را به پنجره فوق Drag نمود. با کلیک نمودن بر روی علامت "+" در پنجره Watch ، می توان آیتم های زیر مجموعه را نیز مشاهده نمود ( نظیر المان های یک آرایه و یا خصلت های شی ).
اجرای دستورات
پس از توقف در یک Breakpoint ، می توان فرآیند اجراء را با کلیک نمودن دکمه Continue موجود بر روی Toolbar و یا فعال نمودن کلید F5 ادامه داد . در این رابطه ، می توان بمنظور اجرای خط به خط برنامه از کلید F10 ویا F11 استفاده نمود. کلید F10 ، هر فراخوانی به یک روتین را بعنوان یک عبارت در نظر می گیرد. بعبارت دیگر، کلید F10 بمتزله Steps Over نمودن یک روتین است ( اجراء روتین و توقف در خط بعدی روتین جاری) . F11 ، باعث فراخوانی روتین ها با دنبال نمودن دستورات موجود در روتین و توقف در اولین خط مربوط به روتین فراخوانده شده ،می گردد.
خلاصه
* چهار نوع متفاوت از برنامه های اینترنت وجود دارد : Web applications, Web services, Internet-enabled applications, and peer-to-peer applications.
* برنامه های وب بر روی یک سرویس دهنده اجراء و درخواست های کاربران را پردازش و از کدهای اجرائی و منابع ایستا بر روی سرویس دهنده استفاده می نمایند.
* برنامه های وب ، قادر به ارائه محتویات پویا بر اساس منابع پویای سرویس دهنده نظیر یک بانک اطلاعاتی و بر اساس داده های ورودی کاربران نظیر ایجاد یک فرم ورود اطلاعات و اخذ داده از کاربران می باشند.
* ASP.NET ، پلات فرمی برای ایجاد برنامه های وب بوده که بر روی سرویس دهنده ویندوز و با استفاده از IIS و فریمرک دات نت اجراء می گردند.
* برنامه های وب ، شامل محتویات ، کد اجرائی و فایل های پیکربندی می باشند .
* محتوی یک برنامه وب از طریق فرم های وب ارائه می گردد . فرم های وب از عناصر HTML نظیر صفحات معمولی HTML استفاده و قادر به پاسخگوئی رویدادهای کاربر نظیر کلیک نمودن موس می باشند.
* کدهای اجرائی برنامه های وب در یک فایل .dll . ذخیره که اسمبلی نامیده می شود. اسمبلی ها ، به یک وضعیت میانی ترجمه و ترجمه نهائی آنان توسط CLR و قبل از اجراء برنامه انجام خواهد شد .
* فریمورک دات نت از CLR و کتابخانه کلاس دات نت تشکیل شده است . کتابخانه کلاس دات نت ، عملیات زمان اجراء CLR را برای برنامه یسان انجام می دهد .
* کلاس های دات نت بر اساس نیازهای برنامه نویسی ، طبقه بندی و در مجموعه ای از namespace ها ، سازماندهی شده اند . بدین ترتیب ،امکان یافتن کلاس ، متد و خصلت مورد نیاز بمنظور انجام یک فعالیت براحتی فراهم می گردد .
* با استفاده از ویژوال استودیو دات نت و از طریق Start page ، می توان یک پروژه موجود را فعال و یا پروژه ای جدید را ایجاد و همچنین تنظیمات دلخواه مربوط به محیط کاربر را انجام داد .
* بمنظور ویرایش فرم های وب و صفحات HTML می توان از دو گزینه متفاوت استفاده نمود : ویرایش ویژوال ، (استفاده از گزینه Design مربوط به پنجره Document ) و ویرایش متنی (استفاده از گزینه HTML مربوط به پنجره Document ) .
* برای تغییر پارامترها و امکانات محیط ویژوال استودیو دات نت، می توان از جعبه محاوره ای Options استفاده کرد.
XML در دات نت ( بخش اول )
XML ، یکی از مهمترین دستاوردهای بشریت در عرصه نرم افزارطی سالیان اخیر است که بدون شک بیشترین تاثیر را در ارتباط با طراحی و پیاده سازی برنامه های کامپیوتری خصوصا" در اینترنت، بدنبال داشته و خواهد داشت . XML ، یکی از استانداردهای ارائه شده توسط کنسرسیوم وب است که زمینه استفاده از آن برای تمامی تولیدکنندگان نرم افزار، فراهم شده است . XML ، بهمراه خود مجموعه ای از تکنولوژی های دیگر را ایجاد نموده است، بطوریکه امروزه از آن بعنوان یک خانواده بزرگ یاد می گردد (XSLT , XSD ,DOM , XPath ,…) . بدیهی است توجه به استانداردهای فوق برای تولیدکنندگان نرم افزار بسیار حایز اهمیت بوده و در این راستا ،شرکت های عظیم نرم افزاری بدنبال ارائه بستر مناسب برای طراحی و پیاده سازی نرم افزار بر اساس واقعیت های موجود، خصوصا" پدیده شگرف اینترنت می باشند . ماکروسافت، بعنوان یکی از شرکت های عظیم نرم افزاری ،پروژه دات نت را مطرح و در نهایت آن را در اختیار علاقه مندان قرار داده است . XML ، در دات نت دارای نقشی بسیار مهم و محوری بوده و لازم است با جایگاه آن بصورت اصولی آشنا شویم . در این مقاله، به بررسی جایگاه XML در دات نت پرداخته می گردد .
مقدمه
XML ، یک تکنولوژی استاندارد ایده آل برای برنامه هائی است که بر روی بستر اینترنت اجراء می گردند. ماکروسافت در پروژه دات نت ،از استادنداردهای کنسرسیوم وب پیروی و نسخه های اختصاصی خود را طراحی و پیاده سازی نموده است. بدین ترتیب (با توجه به تبعیت ماکروسافت از استانداردهای کنسرسیوم وب)، می توان این اطمینان را بدست آورد که نرم افزارهای تولید شده در دات نت ، قابلیت ارتباط با سایر برنامه های تولید شده مبتنی بر استانداردهای کنسرسیوم وب را بخوبی دارا می باشند . در محیط اینترنت، داده ها می توانند از منابع متفاوت و به اشکال گوناگون دریافت گردند . سرویس های وب XML و سایر برنامه هائی که با استفاده از دات نت پیاده سازی می گردند ، مسائل و مشکلات مربوط به انجام عملیات بر روی داده هائی با فرمت های متفاوت و از منابع گوناگون ، را برطرف می نماید.
سرویس های وب XML
ساختار و بدنه دات نت، محیطی مناسب برای ایجاد سرویس های وب XML است . کاربران قادر به فراخوانی سرویس ها بکمک پروتکل های استاندارد شده ای نظیر : SOAP ، UDDI و XML می باشند. سرویس های وب XML ، با استفاده از کلاس ها و Namespace هائی که توسط کنسرسیوم وب استاندارد شده اند، ایجاد می گردند. سرویس های وب XML ، روشی مطلوب بمنظور اشتراک ، سازماندهی و انجام عملیات متفاوت در رابطه با داده ها می باشند .
محیط ( پلات فرم ) دات نت
محیط دات نت، شامل مجموعه ای از محصولات است که بر اساس XML و سایر استانداردهای اینترنت،ایجاد شده اند .محیط فوق، برای هر یک از جنبه های مرتبط با پیاده سازی، مدیریت ، استفاده ، سرویس های وب XML ، امکانات و راهکارهای مناسبی را ارائه داده است . سرویس های وب XML ، این امکان را به برنامه ها خواهند داد تا قادر به اشتراک اطلاعات از طریق اینترنت صرفنظر از سیستم عامل و زبان برنامه نویسی مربوطه باشند. با استفاده از XML در دات نت ، می توان اغلب مشکلات مربوط به پیاده سازی نرم افزار بر روی اینترنت را که در حال حاضر با آن مواجه هستیم ، برطرف کرد. XML ، یک راه حل جامع برای تشریح و مبادله داده های ساختیافته را ارائه می نماید .
چالش های موجود در زمینه بکارگیری برنامه ها در اینترنت
گسترش فعالیت های تجاری بر روی اینترنت باعث حضور شرکت های متعدد بهمراه سیستم های گوناگون، در کنار یکدیگر شده است . با اینکه ایده انجام فعالیت های تجاری بر روی اینترنت نسبتا" جدید است ولی اغلب شرکت ها و سازمان ها ، زمان و هزینه زیادی را صرف این نوع فعالیت ها و تعامل اطلاعاتی مربوطه ، می نمایند . ارتباط داده ها با سیستم های موجود ، یکی از بزرگترین مسائل برنامه نویسان است( خصوصا" در مواردیکه داده ها از مراکز و شعب متفاوت یک شرکت دریافت و می بایست به سیستم های اصلی تغذیه گردند ) .
یکپارچگی بین برنامه های مختلف
دستیابی به داده ها ی مشترک بین شرکت های متعدد ، توسط برنامه های متفاوت موجود بر روی سیستم های عامل گوناگون ، به یک ضرورت مهم تبدیل شده است . بمنظور مبادله اطلاعات بین برنامه های متقاضی ، می بایست در مرحله اول داده ها، ساختیافته بوده تا زمینه استفاده از آنان فراهم گردد.برخی از داده ها در سیستم های های سلسه مراتبی، شامل سندهای XML ، برخی دیگر در بانک های اطلاعاتی رابطه ای، نظیر SQL Server و برخی دیگر، بصورت غیرساختیافته و در فایل هائی تخت (Flat) ذخیره شده اند .
ترجمه بین فرمت های داده متفاوت
یکی از بزرگترین مشکلات موجود در بکارگیری فراگیر و یکپارچه برنامه های کامپیوتری خصوصا" بر روی بستر اینترنت ، استفاده از داده ها با فرمت های متفاوت، توسط این نوع از برنامه ها است . این مشکلات شامل موارد زیر است :
* فرمت های متفاوت XML . فایل های XML می توانند از گرامرهای متفاوتی استفاده نمایند . مثلا" گرامری، صرفا" از المان ها استفاده نموده و در گرامری دیگر ، از المان ها بهمراه خصلت های مربوطه استفاده می گردد . شرکت ها و موسسات تجاری برای غلبه بر این نوع مشکل تبدیل داده ،می توانند از تمپلیت های استاندارد شده استفاده نمایند.
* تولید XML از داده هائی با فرمت دیگر . داده ها ی موجود در هر سازمان با فرمت های متفاوتی نظیر: EDIFACT ,ANSI ,X12 , XML , فایل های CSV)Comma Separated value) ، فایل های Tab -Separated و موارد دیگر، ذخیره شده اند. در این راستا ، می توان ساختاری استاندارد برای داده ها ایجاد تا زمینه استفاده از آنان برای سایر برنامه ها فراهم گردد .
* معتبر سازی ساختار داده ها . یکی از مزایای مهم استفاده از XML در برنامه ها ، ارائه روشی مطلوب بمنظور اشتراک اطلاعات است . با توجه به دریافت داده ها از منابع متفاوت، می بایست از روشی بمنظور اطمینان از صحت و اعتبار داده ها استفاده گردد .بدین منظور و جهت غلبه بر مشکل فوق، می توان از ابزارهای معتبر سازی نظیر Schema که در بین تمام برنامه ها و نوع داده ها استاندارد است، استفاده گردد.
جستجو و بازیابی اطلاعات
پس از دریافت داده ها از منابع متفاوت و با فرمت ها ی گوناگون ، می بایست قادر به یافتن اقلام اطلاعاتی مورد نیاز برنامه های با صراحت و بسرعت باشیم . خواسته فوق می تواند مشکلات خاص خود را بدنبال داشته باشد
* جستجو برای یک آیتم خاص در داده ها : برنامه ها از داده ها ئی با فرمت متفاوت و ساختاری گوناگون استفاده می نمایند. برخی از داده ها در ساختارهای سلسله مراتبی، برخی دیگر در ساختارهای رابطه ای و برخی دیگر دارای ساختاری خاص نبوده و صرفا" بصورت متن ذخیره می گردند. بدین منظور لازم است از روشی بمنظور حرکت در طول ساختار استفاده تا به نتایج مطلوب بمنظور بازیابی یک آیتم اطلاعاتی بدرستی و بسرعت دست پیدا کرد .
* خلاصه سازی، ترکیب و همبستگی . پس از یافتن اطلاعات مورد نیاز، می خواهیم بر روی آنان عملیات متفاوتی را انجام دهیم . مثلا" ممکن است، قصد تنظیم یک گزارش خاص در رابطه با میزان فروش ماهانه، وجود داشته باشد. در این راستا می توان، داده های دریافتی از منابع متفاوت را با یکدیگر ترکیب و آنها را با یک فرمت خاص ذخیره و در ادامه پردازش های لازم را انجام داد . طراحی دات نت بر اساس استفاده از تکنولوژی محوری XML پایه گذاری شده است . با استفاده از XML ، می توان عملیات فیلترسازی داده ها را بمنظور کاهش حجم اطلاعاتی انجام و بدین ترتیب صرفا" با داده هائی که به فعالیت مرتبط می باشند، درگیر خواهیم شد .
پردازش ( عملیات ) بر روی داده ها
بمنظور انجام عملیات بر روی داده ها، می بایست یک ساختار، بافتار(Context) لازم را ارائه نماید . پس از انجام عملیات بر روی داده ها ، می بایست از ساختاری بمنظور نمایش نتایج استفاده گردد.در این رابطه موارد زیر مورد توجه خواهد بود :
* تبدیل داده از XML به فرمت دیگر .در صورتیکه المان ها و خصلت های برنامه ای که با آن کار می شود متفاوت از ساختار XML مربوط به داده هائی باشد که از آن بعنوان منبع تامین اطلاعات ، استفاده می گردد، می بایست از روشی برای تبدیل داده از یک گرامر XML به شکل دیگر، استفاده گردد. در صورتیکه با یک برنامه وب کار می شود، می بایست داده های ساختیافته در اسناد XML به اسناد Html بمنظور نمایش بر روی وب سایت ، تبدیل گردند.
* تغییر ساختار یک سند . در برخی موارد لازم است به یک سند XML المان و یا خصلتی ، اضافه و یا حذف گردد . بدین ترتیب در ساختار سند موجود تغییراتی بوجود می آید.
استانداردهای کنسرسیوم وب در دات نت
امکان استفاده از XML در محیط ها و برنامه های متعددی وجود دارد . تحقق خواسته فوق، بکمک استانداردهائی است که توسط کنسرسیوم وب ایجاد شده است. XML در دات نت، استانداردهای ارائه شده توسط کنسرسیوم وب را حمایت تا زمینه ارتباط متقابل بین برنامه های استاندارد شده ، فراهم گردد.
در بخش دوم این مقاله ، به بررسی استانداردهای کنسرسیوم وب در دات نت ، کلاس های XML در دات نت و امکانات امنیتی در ارتباط با XML ، خواهیم پرداخت .
مفاهیم اولیه CLR فریمورک دات نت
در بخش اول این مقاله به بررسی مفاهیم اولیه CLR ، آشنائی با Runtime و نحوه شروع بکار متدها ، اشاره گردید . در این بخش به بررسی نوع ها ی حمایت شده توسط IL و فراخوانی متدها ، خواهیم پرداخت .
نوع ها ی حمایت شده در IL
مجموعه ای از نوع ها ی متفاوت در سطح IL ارائه شده است . نوع های فوق را می توان مستقیما" و از طریق دستورالعمل های IL استفاده نمود .برخی از نوع های حمایت شده در IL عبارتند از :
* int8 : هشت بیتی علامت دار ( متمم دو )
* Unsigned int8 : هشت بیتی بدون علامت
* int16 : شانزده بیتی علامت دار
* Unsigned int16 : شانزده بیتی بدون علامت
* int32 : سی و دو بیتی علامت دار
* Unsigned int32 : سی و دو بیتی بدون علامت
* int64 : شصت و چهار بیتی علامت دار
* Unsigned : شصت و چهار بیتی بدون علامت
* float32 : سی و دو بیتی اعشاری
* float64 : شصت و چهار بیتی اعشاری
* native int : نوع فوق ، دارای اندازه Native بوده و اعداد علامت دار متمم دو را در خود نگهداری می نماید.
* native unsigned int : نوع فوق ، دارای اندازه Native بوده و مقادیر بدون علامت باینری را در خود نگهداری می نماید .
* F : متغیر اعشاری Native size . این متغیر برای CLR داخلی بوده و برای کاربر مشهود نیست .
* O . یک شی با اندازه native بمنظور اشاره به حافظه مدیریت یافته (اداره شده ).
* & . اشاره گر مدیریت یافته( اداره شده ) با اندازه native
نوع های فوق ، قابل ارائه در حافظه بوده ولی در ارتباط با پردازش آنان ، برخی محدودیت ها وجود دارد . CLR ، پردازش های لازم در ارتباط با نوع های فوق را از طریق یک پشته ارزیابی ( evaluation stack) که بعنوان بخشی از حالت داده در رابطه با هر متد می باشد ، انجام می دهد . پشته فوق ، قادر به ارائه یک آیتم با هر اندازه ای می باشد. تنها عملیات مجاز در این رابطه ، تکثیر آنان به حافظه ( و یا از حافظه ) و محاسبه آدرس نوع های تعریف شده توسط کاربر است . تمامی عملیاتی که شامل مقادیر اعشاری می باشند از یک نمایش داخلی برای ارائه اعداد اعشاری استفاده که به سبک خاصی پیاده سازی شده است ( یک مقدار F ) .
سایر نوع های داده ، بجزء مقایر اعشاری که به آنان اشاره گردید ، دارای یک اندازه native می باشند : native int ، native unsigned int ، مرجع شی ( O ) و اشاره گر مدیریت یافته ( &) . نوع های داده فوق ، مکانیزمی برای CLR بمنظور تاخیر در انتخاب اندازه نوع مورد نظر می باشد . مثلا" ، مکانیزم فوق ، این امکان را فراهم می آورد که یک native int بر روی یک ماشین شصت و چهار بیتی ، 64 بیت و در یک ماشین سی و دو بیتی ، 32 بیت در نظر گرفته شود.
دو نوع از داده های فوق( native ) ، بنظر مشابه یکدیگر می باشند . نوع O ( با اندازه native و اشاره به شی ) و نوع & ( با اندازه native اشاره گر مدیریت یافته ) . یک متغیر از نوع O ، به یک شی مدیریت یافته ، اشاره و استفاده از آن محدود به دستورالعمل هائی است که با صراحت یک عملیات بر روی یک شی مدیریت یافته را انجام و یا دستورالعمل هائی که متایتا آنان امکان اشاره به یک شی مدیریت یافته را اجازه داده باشد، . نوع O ، به خارج از شی و یا تمام شی اشاره می نماید . نوع & ، نیزبه یک شی مدیریت یافته ، اشاره نموده با این محدودیت که صرفا" به یک فیلد شی و یا عنصری از بردار ، اشاره خواهد کرد . نوع های O و & ، توسط CLR ردیابی شده و می توانند با توجه به نتایج جمع آوری اطلاعات زائد ( garbage collection) ، تغییر نمایند .
یکی از موارد خاص استفاده از نوع های native ، اشاره گرهای غیر مدیریت یافته است . با اینکه نوع اشاره گره های غیرمدیریت یافته را می توان توسط متادیتا ، مشخص نمود ولی آنان بعنوان native unsigned int در کد IL نشان داده می شوند . بدین ترتیب ، CLR دارای انعطاف لازم بمنظور نسبت دهی یک اشاره گر غیرمدیریت یافته به یک فضای آدرس دهی بزرگ و بر روی پردازنده ای است که آن را حمایت ولی الزامی دررابطه با درگیر شدن حافظه بمنظور ذخیره سازی مقادیر فوق بر روی پردازنده هائی که دارای قابلییت آدرس دهی چنین فضای آدرس دهی بزرگی نمی باشند ، وجود نخواهد داشت .
برخی از دستورالعمل های IL نیازمند وجود یک آدرس در پشته می باشند ، دستورالعمل های زیر : calli ، cpblk ، initblk نمونه هائی در این زمینه می باشند. استفاده از یک نوع native ، قابلیت حمل مناسبی در ارتباط با عملیاتی که شامل نوع فوق می باشند را فراهم و تضمین می نماید . در صورتیکه آدرس مشخص شده ، یک عدد 64 بیتی صحیح را مشخص نماید ، در ادامه ،قابلیت حمل آن در صورت دنبال نمودن مراحل موردنظر بمنظور اطمینان از تبدیل مقدار به یک آدرس فراهم می گردد .در صورتیکه یک آدرس بعنوان یک عدد سی و دو بیتی و یا کوچکتر مشخص گردد ، کد هرگز قابل حمل نخواهد بود، ولواینکه ممکن است بر روی اکثر ماشین های سی و دو بیتی امکان اجرای آن وجود داشته باشد. در اکثر موارد ، رویکرد فوق ، ماحصل نتایج تولید کننده IL و یا کمپایلر بوده و نمی بایست نسبت به این موضوع نگران گردید . در این رابطه لازم است به این نکته توجه شود که با استفاده غیر صحیح از دستورالعمل ها ، ممکن است قابلیت حمل کد ، حذف و عملا" امکان چنین پتانسیل ارزشمندی از یک برنامه و یا بخشی از برنامه نوشته شده ، سلب گردد .
مقادیر عددی کوچک ( آنانی که که کمتر از چها ر بایت می باشند ) ، در زمان لود ( زمانیکه از حافظه در پشته قرار می گیرند ) به چهار بایت تبدیل و در زمان ذخیره سازی محدودتر خواهند شد ( کپی از پشته به حافظه ) . هر نوع عملیاتی که شامل یک مقدار عددی کوچک باشد ، بعنوان یک عملیات چهار بایتی در نظر گرفته شده و با آن برخورد خواهد شد . دستورالعمل های خاص IL که با نوع های عددی کوچک سروکار دارند عبارتند از :
* عملیات لود و ذخیره سازی به / از حافظه : ldelem, ldind, stind و stelem
* تبدیل داده : conv ,conv.ovf
* ایجاد آرایه ( بردار ) : newarr
بعبارت دیگر ، IL صرفا" عملیات علامت دار را حمایت می نماید . تفاوت بین عملیات علامت دار و بدون علامت ، به نحوه تفسیر مقدار برمی گردد. برای عملیاتی که نحوه تفسیر مقدار مورد نظر حائز اهمیت است ، عملیات انجام شده ، دارای یک نسخه بدون علامت ویک نسخه علامت دار می باشد
منزلگاه مقادیر
بمنظور ردیابی اشیاء ، CLR مفهوم جدیدی با نام محدوده ( منزلگاه ) یک شی را معرفی نموده است . . منزلگاه شی ، محلی است که مقدار شی ذخیره و می بایست دارای مکانیزمی بمنظور مشخص نمودن نوع شی توسط کمپایلر JIT ، باشد . زمانیکه یک شی بصورت Reference ( ارسال اشاره گری به شی ) ، پاس داده میشود ، شی فوق ، می بایست دارای یک منزلگاه باشد، چراکه آدرس منزلگاه بعنوان مرجع ارسال می گردد . در این رابطه دو نوع داده وجود داشته که بی خانمان ! ( بدون منزلگاه ) بوده و نمی توان آنان را بصورت Reference ارسال نمود : مقادیر ثابت و میانی در پشته ارزیابی از دستورالعمل های IL و یا مقادیر برگردانده شده توسط متدها . CLR منزلگاه های زیر را در ارتباط با اشیاء حمایت می نماید :
* آرگومان incoming . دستورالعمل های ldarg و ldarga ، آدرس یک آرگومان منزلگاه را مشخص می نمایند. signature متد، نوع مربوطه را مشخص خواهد نمود.
* متغیرهای محلی . دستورالعمل های ldloca و یا idloc ، آدرس یک متغیر محلی را مشخص می نمایند. پشته ارزیابی محلی ، نوع متغیرهای محلی را بعنوان بخشی از متادیتا مشخص خواهد نمود.
* فیلد ( نمونه و یا ایستا ) . استفاده از ldflda برای نمونه ای از فیلد و ldsflda برای یک فیلد ایستا ، آدرس فیلد مورد نظر رامشخص می نماید . متا دیتا ئی که با اینترفیس کلاس و یا ماژول مرتبط است ، نوع فیلد را مشخص خواهد نمود.
* عنصر آرایه . استفاده از ldelema ، آدرس یک عنصر بردار را مشخص می نماید. نوع المان بردار، نوع المان را مشخص خواهد نمود.
Method Flow Control
CLR ، مجموعه گسترده ای از دستورالعمل های کنترلی را ارائه می نماید :
* پرش شرطی و غیر شرطی . کنترل می تواند در هر محلی از یک متد انتقال یابد، مشروط به اینکه انتقال فوق ، با کرانه های یک محدوده حفاظت شده ، تلاقی ننماید. یک محدوده حفاظت شده ، در متادیتا تعریف وناحیه ای است که با یک exception handler مرتبط شده است . در سی شارپ ناحیه فوق ، یک try block نامیده شده و با یک catch block که بعنوان یک handler می باشد ، مرتبط می گردد . CLR ، قابلیت اجرای انواع متفاوتی از exception handler ها را دارا بوده که در بخش بعدی این مقاله در رابطه با آنان توضیح داده خواهد شد . نکته مهمی که لازم است به آن اشاره گردد ،عدم امکان پرش شرطی و یا غیر شرطی به مقصدی است که با محدوده یک execption تلاقی می نماید .
* فراخوانی متد. دستورالعمل های متفاوتی امکان فراخوانی متدها توسط متدهای دیگر را فراهم می نماید.
* فراخوانی دنباله . نوع خاصی پیشوند است که بلافاصله مقدمات فراخوانی یک متد را فراهم و به متد فراخوانده شده اعلام می نماید که فریم پشته را قبل از فراخوانی متد مورد نظر نادیده و رها نماید . بدین ترتیب ، متد فراخوانده شده به نقطه ای مراجعت می نماید که متد صدازننده می بایست مراجعه نماید .
* مراجعت . نوع ساده ای بمنظور مراجعت از یک متد است .
* پرش متد . نوع بهینه شده ای از فراخوانی "دنباله " بوده که آرگومانها و کنترل یک متد را به متد دیگر منتقل می نماید ( با signature مشابه )
* Exception . شامل مجموعه ای از دستورالعمل ی لازم بمنظور ایجاد یک execption بوده که کنترل را به خارج از یک ناحیه حفاظت شده منتقل می نماید.
CLR ، در مواردیکه کنترل درون یک متد منتقل می گردد ، از مجموعه ای قوانین استفاده می نماید .کنترل نمی تواند درون یک Exception handler منتقل گردد ( بجز درمواردیکه بعنوان نتیجه یک Exception باشد ) . قانون فوق ، نشاندهنده این واقعیت است که مقصد یک پرش نمی تواند با یک ناحیه حفاظت شده تلاقی نماید .
* پس از استقرار در یک handler مرتبط با یک ناحیه حفاظت شده ، امکان انتقال به خارج از handler صرفا" از طریق مجموعه ای محدود از دستورالعمل های exception ( نظیر : Leave, end.finally ,end.filter و end.catch ) وجود خواهد داشت .
* هر اسلات در پشته ارزیابی ، می بایست نگهداری نوع مربوط به خود را در مدت زمان عمر مفید پشته ارزیابی ( طبیعتا" عمر مفید متد ) ، انجام دهد . بعبارت دیگر ، نمی توان نوع یک اسلات ( متغیر) در پشته ارزیابی را تغییر داد . موضوع فوق ، مسئله ای خاص را بدنبال نخواهد داشت ، چراکه پشته ارزیابی برای کاربران در دسترس نخواهد بود .
* این امکان وجود نخواهد داشت که کنترل بسادگی به حیات خود خاتمه دهد . در این رابطه لازم است ، تمامی مسیرهای اجراء متوقف گردند . ( استفاده از دستورالعمل های ret ، Jmp,throw و یا * . tail )
فراخوانی متد
CLR ، قادر به فراخوانی متدها با استفاده از سه روش متفاوت است . تفاوت هر یک از روش های فوق صرفا" به روشی که call site descriptor مشخص می نماید ، بستگی دارد.call site descriptor ، به CLR و موتور JIT اطلاعات کافی در رابطه با فراخوانی متد را ارائه می نماید. بنابراین، امکان ایجاد یک فراخوانی native فراهم ، آرگومان های مناسب امکان دستیابی به متد را ایجاد و اطلاعات مورد نیاز بمنظور مراجعت ایجاد می گردد.
* دستورالعمل calli ، ساده ترین نوع فراخوانی متد می باشد . دستورالعمل فوق، زمانیکه آدرس مقصد در زمان اجراء محاسبه می گردد ، استفاده می شود.
* دستورالعمل call ، در مواردیکه آدرس تابع در زمان کمپایل شناخته شده باشد ، استفاده می گردد .
* دستورالعمل callvirt ، متدی در رابطه با نمونه ای خاص از یک شی را فرامی خواند .
روش فراخوانی متد
CLR از یک روش خاص بمنظور فراخوانی در تمامی کد IL استفاده می نماید. اگر متدی که صدا زده شده است ، متدی مربوط به یک نمونه باشد ، یک مرجع به نمونه شی مورد نظر بهمراه هر یک از آرگومانهای متد با اولویت چپ به راست در پشته مستقر می گردند . بدین ترتیب ، اشاره گرفوق ، در ابتدا توسط متد فراخوانده شده از پشته برداشته شده ( pop ) و در ادامه نوبت به هر یک از آرگومان ها خواهد رسید ( شروع با آرگومان صفر تا آرگومان شماره n ) . اگر متد فراخوانده شده یک متد ایستا باشد ، اشاره گر مرتبط با نمونه شی مربوطه وجود نداشته و پشته صرفا" شامل آرگومانها خواهد بود . برای دستورالعمل calli ، آرگومانها با اولویت چپ به راست و بدنبال آن اشاره گر تابع درون پشته مستقر می گردند .
ارسال پارامتر متدها
CLR، از سه روش متفاوت برای ارسال پارامتر ( parameter-passing ) استفاده می نماید :
* By value . در این روش ، مقدار شی درون پشته قرار خواهد گرفت . برای نوع های از قبل ایجاد شده ، نظیر inreger و float ، بسادگی مقدار مورد نظر درون پشته مستقر می گردد . برای اشیاء ، یک نوع مرجع O مرتبط با شی ، درون پشته قرار خواهد گرفت . برای اشاره گرهای مدیریت یافته و غیر مدیریت یافته ، آدرس در پشته مستقر خواهد شد. برای نوع های تعریف شده توسط کاربر ، می توان یک مقدار را در پشته ارزیابی مستقر تا زمینه فراخوانی یک متد رابه دو صورت فراهم نماید : روش اول : می توان با استفاده از دستورالعمل های ldarg , ldloc , ldfld و یا ldsfld مقدار مورد نظررا مستقیما" در پشته قرار داد، . روش دوم : آدرس مقدار مورد نظر محاسبه و مقدار مربوطه را می توان با استفاده از دستورالعمل ldobj در پشته مستقر نمود.
* By Reference . با استفاده از روش فوق ، آدرس پارامتر در مقابل مقدار مورد نظر به متد ارسال می گردد.بدین ترتیب ،یک متد قادر به تغییر پارامتر در صورت لزوم می باشد . در این رابطه صرفا" مقادیری که دارای منزلگاه می باشند را می توان با استفاده از روش فوق ، ارسال نمود( عملا" آدرس منرلگاه ارسال می گردد ) . بمنظور بررسی امنیت نوع ها ، می بایست از دستورالعمل های * . ldind و* . stind ( به ترتیب ) برای ارسال و مراجعه به پارامترها ، استفاده گردد.
* Type reference . روش فوق ، مشابه یک پارامتر Reference نرمال بوده که بهمراه آن یک نوع داده ایستا بهمراه مرجع داده ارسال می گردد .
136