X بستن تبلیغات
X بستن تبلیغات
header
متن مورد نظر

معرفی دات نت و جایگاه ASP.NET

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

شرکت مایکروسافت در جولای سال ۲۰۰۰  میلادی در کنفرانس پیاده کنندگان حرفه ای (PDC) ابتکار جدید خود یعنی دات نت را معرفی نمود. دات نت چیست ؟ در صورتیکه صفحه اختصاصی دات نت در سایت مایکروسافت را مشاهده کرده باشید با تعریف  زیر مواجه می گردید  : \” پلات فورم (Plathform) مایکروسافت برای سرویس های وب XML \” . مایکروسافت همچنین دات نت را بعنوان روشی برای توزیع و عرضه سرویس های نرم افزاری مطرح نموده است . تعاریف فوق گرچه برخی از ابعاد مهم دات نت را تشریح می نمایند ولی نگرش فوق  صرفا\” از یک  بعد ساده و از زاویه یک شرکت  مورد توجه قرار گرفته است . برای پیاده کنندگان نرم افزار دات نت یک الگوی جدید جهت  طراحی و پیاده سازی نرم افزار است . در این مقاله به بررسی الگوی فوق  پرداخته و از این رهگذر جایگاهASP.NET در این پروژه نیز تبین خواهد شد.

شرکت مایکروسافت در جولای سال ۲۰۰۰  میلادی در کنفرانس پیاده کنندگان حرفه ای (PDC) ابتکار جدید خود یعنی دات نت را معرفی نمود. دات نت چیست ؟ در صورتیکه صفحه اختصاصی دات نت در سایت مایکروسافت را مشاهده کرده باشید با تعریف  زیر مواجه می گردید  : \” پلات فورم (Plathform) مایکروسافت برای سرویس های وب XML \” . مایکروسافت همچنین دات نت را بعنوان روشی برای توزیع و عرضه سرویس های نرم افزاری مطرح نموده است . تعاریف فوق گرچه برخی از ابعاد مهم دات نت را تشریح می نمایند ولی نگرش فوق  صرفا\” از یک  بعد ساده و از زاویه یک شرکت  مورد توجه قرار گرفته است . برای پیاده کنندگان نرم افزار دات نت یک الگوی جدید جهت  طراحی و پیاده سازی نرم افزار است . در این مقاله به بررسی الگوی فوق  پرداخته و از این رهگذر جایگاه ASP.NET در این پروژه نیز تبین خواهد شد.

نگاهی اجمالی به گذشته

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

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

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

در رابطه با رویکرد فوق برخی مسائل اساسی وجود دارد که در ادامه به آنها اشاره می گردد:

  • رویکرد فوق کاملا\” وابسته به پلات فورم است . این بدان معنی است که زمانیکه یک برنامه را مثلا\” با ویژوال بیسیک می نویسید ،برنامه فوق صرفا\” بر روی کامپیوترهائی که از ویندوز استفاده می نمایند، قابل اجراء خواهد بود.
  • هیچگونه تضمینی وجود ندارد که دو برنامه اجرائی نوشته شده با زبانهای برنامه نویسی متفاوت دارای کدهای مشابه سطح پایین باشند. بنابراین اشتراک مجموعه ای از توابع برای زبانهای برنامه نویسی غیرممکن بنظر می رسد. ( مایکروسافت با ارائه تکنولوژی Com سعی در ارائه راهکاری جهت حل مشکل فوق را داشت ولی عملا در مراحل عملیاتی با مشکل مواجه گردید. مثلا\” اگر قصد بکارگیری عناصر COM نوشته شده به زبان ویژوال بیسیک را بهمراه عناصر COM نوشته شده به زبان ویژوال C+ + را داشته باشید در زمان پاس دادن پارامتر بین آنها به مشکلات خاصی برخورد خواهید کرد.
  • کتابخانه Win32 API چیزی بیش از مجموعه وسیعی از توابع نیست . توابع فوق هریک دارای تعاریف اختصاصی خود بهمراه پارامترهای مربوطه می باشند. در برنامه های ویژوال بیسیک و یا C++ به دفعات ممکن است این نیاز احساس گردد که مستقیما\” یکی از توابع موجود در Win32 API فراخوانی گردد ، یافتن تابع مورد نظر جهت فراخوانی کار ساده ای بنظر نمی آید!

بموازات رشد و توسعه نرم افزارها مسئله دوم یکی از اساسی ترین چالش های جدی در زمینه برنامه نویسی گردید.در حالت ایده آل ما این انتظار را داریم که هر مجموعه تابع و یا عناصری را که بکمک یک زبان برنامه نویسی نوشته شده اند را بتوان به اشتراک گذاشت  و زمینه استفاده از آنان برای سایر زبانهای برنامه نویسی نیز فراهم گردد. مسئله فوق از این زاویه نگران کننده تر بنظر خواهد آمد که توجه داشته باشیم هر زبان برنامه نویسی ممکن است نوع های داده ئی اولیه مربوط به خود را دارا باشد. مثلا\” در ویژوال بیسیک  می توان برداری را داشت که که ایندکس باند پایین آن از هر محدوده ای شروع گردد در صورتیکه در C++ این تاکید وجود دارد که حتما\” می بایست باند پایین با ایندکس صفر آغاز گردد.

دات نت

مایکروسافت با ارائه دات نت عملا\” پاسخ های شایسته ای را نیز برای هر یک از مسائل گفته شده ارائه نموده است. از دیدگاه یک پیاده کننده نرم افزار ،دات نت دارای دو بخش اساسی است : CLR(Common Language Runtime)   و کلاس های فریمورک دات نت (.NET framework Classes) . بخش های فوق بگونه ای به مسائل اشاره شده پاسخ های مناسبی را ارائه داده اند.

Common Language Runtime(CLR)

در ابتدای مقاله به نحوه عملکرد کمپایلرهای کلاسیک در رابطه با ترجمه کدهای نوشته شده توسط  یکی از زبانهای سطح  بالا به دستورات قابل فهم برای کامپیوتر اشاره گردید .  در دات نت فرآیند ترجمه یک برنامه سطح بالا به زبان ماشین  بصورت کاملا\” محسوس  تغییر یافته است . کمپایلرهای سازگار با دات نت کدهای نوشته شده توسط  یکی  از زبانهای برنامه نویسی را به Win32 API Call  ترجمه نخواهند کرد.کمپایلرهای فوق کدهای نوشته شده را به یک زبان میانه خاص با نام MSIL(Microsoft Intermediate Language) تبدیل خواهند کرد. در ادامه CLR کدهای زبان میانه ای (IL) را اخذ و on the fly آنان را به دستورالعمل های اختصاصی ماشین تبدیل خواهند کرد.

 

 

 

توجه داشته باشید که مرحله CLR به Runing Program صرفا\” زمانی اتفاق خواهد افتاد که یک برنامه اجراء گردد. کمپایلر فایلی با محتویات کدهای MSIL را ایجاد خواهد کرد.زمانیکه فایل فوق اجراء می گردد ،کدهای MSIL به سمت CLR روانه شده و در ادامه با استفاده از مترجم  JIT(Just-In-Time) کدهای IL به دستورات قابل فهم برای کامپیوتر تبدیل خواهند شد. ( یک برنامه در حال اجراء بکمک CLR )

.NET FramWork Classes

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

برخلاف Win32 API ،کلاس های دات نت در یک سیستم سلسله مراتبی NameSpace  سازماندهی شده اند.هر NameSpace می تواند دارای تعداد نامحدودی از کلاس ها باشد. مثلا\” NameSpace پایه ای System شامل کلاس هائی است که از آنها برای نوع داده های اولیه نظیر : System.Int32,  System.Array  ,  System.string و غیره استفاده می شود. NameSpace  ،System.Data شامل کلاس ها و سایر Namespace های مربوطه برای دستیابی به داده ها است . NameSpace  ،System.IO شامل کلاس های مربوطه برای انجام عملیات متفاوت در رابطه با فایل ها و ورودی و خروجی است . دات نت دارای صدها کلاس بوده که تمامی آنها با استفاده از Namespace ها بدرستی سازماندهی شده اند. طراحان و برنامه نویسان می توانند در صورت نیاز اقدام به طراحی کلاس های اختصاصی  و NameSpace  مربوط به خود نموده و آنها را در برنامه های دات نت خود استفاده نمایند.

دقت داشته باشید که کلاس های فریمورک دات نت شامل یک کلاس برای هر یک از نوع داده ها در NameSpace ، System  می باشد. زبانهای برنامه نویسی دات نت نظیر VB.NET,C#,Jscript.NET,� می بایست از این نوع ها استفاده نمایند . این بدان معنی است که هر نوع داده بمنزله یک کلاس در نظر گرفته خواهد شد. بنابراین زمانی که عملیاتی مطابق زیر را انجام می دهیم :

IN VB.NET:    Dim i as Integer

IN  C#        :     int i;

IN Jscript.NET : Var i;

در حقیقت یک نمونه از یک کلاس  System.Int32 را ایجاد کرده ایم .  با توجه به این امر که هر یک از زبانهای برنامه نویسی از نوع داده های یکسان استفاده و از مجموعه یکسانی از کلاس ها استفاده می نمایند ،ارتباط متقابل بین زبانها ی برنامه نویسی که زمانی بیش از یک آرزو نبود ،میسر خواهد شد .  بدون دلیل نیست که CLR را Common Language Runtime نامیده اند. برنامه های نوشته شده توسط هر یک از زبانهای  برنامه نویسی در نهایت و پس از ترجمه توسط کمپایلرهائی که دات نت را حمایت می نمایند ، به کدهای MSIL تبدیل خواهند شد ،بدین ترتیب این اطمینان و تضمین بوجود خواهد آمد که تا این مرحله ( مرحله ترجمه کدهای نوشته شده با یک زبان برنامه نویسی و ترجمه آنها به MSIL ) تمامی زبانهای برنامه نویسی از  نوع داده ها و کلاس های موجود در فریمورک دات نت استفاده کرده اند.  

حل مشکلات سه گانه

همانطور که در ابتدای این مقاله اشاره شده ترجمه مستقیم کدها ی  نوشته شده به کدهای ماشین باعث بروز سه مسئله اساسی :  وابستگی محض به پلات فورم ،  بروز مشکل در ارتباط متقابل بین زبانها و ساختار آشقته Win32 API  می گردد.  دات نت برای سه مسئله فوق راهکارهای مناسبی را ارائه نموده است .

مشکل اول در مرحله تئوری نمی تواند باعث بروز مسائلی گردد . در تئوری مایکروسافت می تواند CLR و کلاس های فریمورک دات نت را برای هر نوع پلات فورم و سیستم عامل ارائه نماید.این بدان معنی است که کدهای MSIL تولیده شده توسط VB.NET را می توان بر روی لینوکس نیز اجراء نمود. در دنیای  واقعی  مایکروسافت تاکنون در زمیته تامین خواسته هائی اینچنین فعالیت های خاصی را انجام نداده است .

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

در رابطه با مشکل سوم ( ساختار آشفته Win32 API ) فریمورک دات نت ،تمامی کلاس ها را در یک ساختار سلسله مراتبی سازماندهی نموده  و از این طریق دستیابی ،استفاده و شناخت عملکرد هر یک از آنان بمراتب راحت تر از win32 API انجام خواهد شد.

جایگاه ASP.NET در دات نت

ASP.NET نسخه جدید ASP است که توسط مایکروسافت ارائه شده است . ASP از تمامی فاکتورهای تشریح شده دات نت که به آنها اشاره گردید بدرستی استفاده می کند. این بدان معنی است که صفحات ASP.NET می بایست با استفاده از یکی از زبانهای سازگار با دات نت نظیر : VB.NET,C#,Jscript.NET ایجاد گردنند.

زمانیکه یک صفحه ASP.NET بکمک یک  مرورگر مشاهده می گردد ، در ابتدا ASP.NET engine بررسی خواهد کرد که آیا آخرین نسخه بهنگام سازی شده از کدهای IL برای صفحه ASP.NET وجود دارد؟ در صورتیکه این نسخه وجود داشته باشد ،کدهای IL روانه CLR شده و خروجی HTML تولیده شده توسط صفحه ASP.NET برای مرورگر سرویس گیرنده ارسال خواهد شد. در صورتیکه کدهای IL موجود نبوده و یا صفحه اولیه ASP.NET از زمانیکه کدهای IL آن تولید شده اند ،تغییر کرده باشد ،صفحه ASP.NET می بایست مجددا\” ترجمه گردد. در چنین حالتی با توجه به زبانی که برای نوشتن کدهای صفحه ASP.NET استفاده شده است ،کمپایلر مربوطه فعال و کدهای IL تولید خواهند شد. کدهای IL فوق بر روی دیسک ذخیره تا مورد استفاده در آینده قرار گیرند.

در صورتیکه تاکنون صفحات ASP.NET را ایجاد کرده باشید ،به نقش بسیار مهم کنترل های وب واقف شده اید. از کنترل های فوق می توان بهمراه صفحات ASP.NET برای ایجاد عناصر HTML نظیر : Text Box,Labels,ListBoxes,� استفاده نمود. مثلا\” برای ایجاد یک TextBox بکمک یک کنترل وب می توان از عبارتی مطابق زیر استفاده نمود :

<asp:textbox   id=\”name\”  runat=\”server\” />

در حقیقت صفحه ASP.NET می تواند شامل ترکیبی از کدهای Server-Side ( محصور شده در بلاک Script ) و in-line HTML باشد.

یک نمونه  صفحه ASP.NET

<script language=\”VB\” runat=\”Server\”>

         Sub Page_Load(sender as Object, e as EventArgs)

        lblMessage.Text = \”Hello, World!\”

   End Sub

</script>

<html>

<body>

<h1>Simple ASP.NET Demo</h1>

<asp:label id=\”lblMessage\” runat=\”server\” />

</body></html>

چگونه کدهای Server-Side و HTML موجود در یک صفحه ASP.NET ترجمه شده تا کمپایلر VB.NET قادر به شناخت آنان باشد؟. یکی از مهمترین عملیاتی که توسط ASP.NET engine می بایست انجام گیرد ،ترجمه کدهای HTML/Server-Side به کلاسی است که کمپایلر  VB.NET ( و یا سایر کمپایلرهای Jscript.NET,C#) قار به تشخیص آنان باشند.پردازش فوق پیچیده بوده و از حوصله این مقاله خارج است . کافی است به این نکته اشاره گردد که صفحات به کلاسی تبدیل خواهند شد که خصوصیات خود را از کلاس page ( یکی از کلاس های فریمورک دات نت ) به ارث خواهند برد.در حقیقت تمامی کنترل های وب که در صفحات ASP.NET استفاده می گردند ،بصورت کلاس هائی در فریمورک دات نت در نظر گرفته خواهند شد. در این راستا تمامی کدهای Html که بصورت موردی در صفحات ASP.NET استفاده می گردنند ،بعنوان نمونه هائی از کلاس LiteralText در نظر گرفته خواهند شد.

اولین نسخه ASP.NET در ماه جولای سال ۲۰۰۱ عرضه گردیده است  . (Beta Version) با استفاده از ASP.NET می توان کارهای بزرگ و شگفت انگیزی را انجام داد که اگر قصد انجام  آنها را به کمک ASP کلاسیک داشتیم ،     می بایست صدها خط برنامه شامل کدهای آشفته ( غیرساختیافته ) را نوشت .

ارسال نظر