در ابتدای پیدایش علوم کامپیوتر، برنامهنویسان کدهایی در سطح ماشین مینوشتند.
به همین دلیل بیشتر توجه آنان معطوف به مجموعه دستورات ماشین بود.
به تدریج زبانهای سطح بالا ایجاد شد و در نتیجه توجه برنامهنویسان بیشتر به اصل مسئله معطوف گردید.
اکنون سطح انتزاعی بر روی کامپیوترهای مختلف ایجاد شده است.
یعنی برنامهی نوشته شده روی هر ماشین اجرا میشود.
در زبانهای ساختیافته ، برنامه را به تعدادی روال تقسیم مینمودند، بدین صورت که هر روال کار خاصی را انجام میداد.
برنامهنویسی شیگرایی اجازه میدهد تا سیستمی دارای اشیای مرتبط و همکار داشته باشید.
کلاس ها این امکان را فراهم میکنند که جزییات پیادهسازی را پشت واسط برنامهنویسی پنهان نمایید.
چندشکلی یا چندریختی ، رفتار و واسط مشترکی را برای مفاهیم مشابه نشان میدهد.
بدین وسیله قادر خواهید بود تا پیمانههای خاص و جدیدی را بدون نیاز به دستکاری در پیادهسازی مفاهیم پایه ایجاد نمایید.
روشهای برنامهنویسی و زبانها در واقع راه ارتباط با ماشین را تعریف میکنند.
هر روش جدید، شیوههای نو را برای تجزیهی مساله ارائه میدهد که عبارتند از: کد ماشین، کد مستقل از ماشین، روالها، کلاسها و غیره.
هر شیوهی جدید، نگرشی تازه جهت تبدیل نیازهای سیستم به زیرساختهای برنامهنویسی ارائه میدهد.
تکامل این نوع شیوههای برنامهنویسی امکانی را فراهم مینماید تا سیستمهای پیچیدهتری ایجاد کنید.
عکس این مطلب نیز صادق میباشد.
یعنی سیستمهای پیچیده میتوانند پیادهسازی شوند.
اکنون، برنامهنویسی شیگرا به عنوان روش ایجاد پروژههای نرمافزاری استفاده میشود.
این شیوه قدرت خود را در مدلسازی رفتارهای معمولی نشان داده است.
اما این روش به خوبی نمیتواند بر روی رفتارهایی که بین چندین پیمانه مشترک وجود دارند، کار کند.
برعکس، شیوهی جنبهگرا تا حد قابل توجهی این مشکل را برطرف میکند.
در سال 1972 پارانز مفهومی به نام جداسازی دغدغهها را مطرح کرده که امروزه جزء مفاهیم اساسی در فرآیند مهندسی نرمافزار به شمار میآید.
این مفهوم به صورت زیر تعریف شده است:
قابلیت تشخیص، کپسولهسازی و کار با دغدغه، هدف و یا مقصود هستند
دغدغه را میتوان به عنوان محرکی برای تقسیم نرمافزار به بخشهای قابل مدیریت درنظر گرفت.
برای نمونه، یک وظیفهمندی خاص نرم افزار و مسائلی که به خواستههای غیروظیفهمندی مرتبط میشوند مانند ثبت وقایع، امنیت و غیره، همگی به عنوان دغدغه هستند، البته با توجه به جداسازی دغدغهها آنها را در قالب واحدهای مستقل کپسوله کردهاند.
در سال 1997، مشهورترین رویکرد زبان جنبهگرا به نام AspectJ ابتدا توسط گروهی درXerox PARC عمومیت یافت.
این گروه روی پروتکلها و ایدهی مدلسازی دغدغههای مشترک کار میکردند.
در همان حال، گروهی در شرکت IBM برنامهنویسی موضوعگرا را مطرح کردند.
برنامهنویسی موضوعگرا و عناوین بعدی آن، تحت نام جداسازی چندبعدی دغدغهها، به جداسازی و ادغام پیمانههای مختلف برنامهنویسی بر پایهی دغدغههایی در ابعاد مختلف پرداختهاند.
[1]
نخستین کار در دانشگاه Twente هلند انجام یافت که در مورد فیلترهای ادغامسازی کار میکردند.
به طوری که در پیادهسازی فیلترهایی که رفتار شی را در اجرا پیشرفت میدادند دخیل بودند.
در دانشگاه Northeastern نیز انتزاعی از ساختار کلاسها انجام گرفت که پشتیبانی بهتری از مفهوم دانش و رفتار عملیاتی ارائه میداد.
در سال 1997، کریستیانا لوپز از هر دو مقاله استفاده کرد و زبان D-Java را به عنوان اولین مجموعهی رسمی از زبان جنبهگرا ارائه نمود.
شیوهی موضوعی اولین روشی بود که مفاهیم جنبهگرایی را با زبان مدلسازی یکپارچه ادغام کرد.
این کار مشترکی از چندین گروه با گروه برنامهنویسی موضوعگرا است.
برنامهنویسی موضوعگرا به طراحی موضوعگرا تبدیل شده و در سال 2001 به Theme/UML تبدیل گردید.
تعریف و نمایش دغدغهها برای نخستین بار در مستندات الیسا و گیل مورفی از دانشگاه British Columbia ارائه شد و در سال 2003 به عنوان بخشی از شیوهی موضوعی طراحی جنبهگرا به نام Theme/Doc مطرح گردید.
حدود یک دههی قبل، به دنبال موفقیت درخور توجه ابزار CASE ، چیکوفسکی و کراس مبحث مهندسی معکوس و بازیابی طراحی را مطرح نمودند.
تعریفی که آنها از مهندسی معکوس داشتند در زیر ارائه شده است:
مهندسی معکوس، تحلیل یک سیستم به منظور تشخیص اجزا، ترکیبات فعلی، روابط بینابین آنها، استخراج و تولید تجریدهای موجود در سیستم و دادههای مربوط به طراحی است.
[2]
در دو دههی قبل، محققان امکاناتی را به منظور کشف، اعمال تغییر، تحلیل، جمعبندی، تولید، تجزیه و به تصویر کشیدن محصولات نرمافزاری ابداع کردند.
این امکانات شامل تهیهی اسناد نرمافزاری در شکلهای گوناگون، نمایش کد میانی، داده و معماری بود.
اغلب ابزارهای مهندسی معکوس بر استخراج ساختار درونی سیستم موجود با هدف انتقال آن به ذهن مهندس نرم افزار تمرکز دارد.
در هر صورت، این ابزارها راه زیادی در پیش دارند تا به مرحلهای برسند که مورد استفادهی روزانهی مهندسان نرمافزار قرار گیرند.
مطالعه و درک برنامه در صنعت نرمافزار به منظور کنترل هزینه و ریسک چرخهی تحولات سیستمهای نرمافزاری از اهمیت بالایی برخوردار میباشد {1.2}
بررسی زبان دات نت
1- 1 - مروری بر.
Net Framework
Net Framework ، تمامی لایه های پیاده سازی نرم افزار را از سطح سیستم عامل به بالا، تحت پوشش قرار می دهد.
Framework فوق، سطحی مناسب وقدرتمند از ارتباط و همبستگی بین تکنولوژی Presentation ، تکنولوژی های Component و تکنولوژی های Data را ارائه می نماید ( نظیر این ارتباط و همبستگی تاکنون در پلات فرم ویندوز مشاهده نشده است) .
معماری فوق ، امکان طراحی و پیاده سازی برنامه های مبتنی بر اینترنت و محیط های Desktop ، را بسادگی فراهم و نیازهای هر گروه از نرم افزارهای فوق را بخوبی جواب می دهد.
اجزای اصلی Net Framework.
در شکل ( 1-1) نشان داده شده است
Net Framework ، تمامی لایه های پیاده سازی نرم افزار را از سطح سیستم عامل به بالا، تحت پوشش قرار می دهد.
در شکل ( 1-1) نشان داده شده است شکل 1-1- اجزاء دات نت .
Net Framework.
از لایه پائین با عملیاتی نظیر مدیریت حافظه آغاز و بسمت بالا بمنظور ارائه اینترفیس های برنامه ها و کاربران ، دنبال می شود.
در بین لایه ها ، لایه های سیستمی دیگر که هر یک دارای پتانسیل های خاصی برای پیاده کنندگان می باشند ، وجود دارد.
CLR( Common Language Runtime) ، بمنزله قلب فریمورک دات نت محسوب و engine لازم بمنظور ارائه قابلیت های کلیدی را ارائه می نماید .
CLR ، شامل عناصر اساسی دیگری نظیر (Common Type System) CTS است.
علاوه بر مدیریت حافظه ، CLR ، مراجعات به اشیاء و عملیات Garbage Collection را نیز انجام می دهد .
در لایه میانی ، ما شاهد نسل جدیدی از سرویس های استاندارد نظیر ADO.NET و XML می باشیم .سرویس های فوق، تحت کنترل Framework بوده و امکان بکارگیری آنها بصورت جامع و استاندارد در بین تمامی زبانها ، فراهم می گردد.
بالاترین لایه، شامل اینترفیس های برنامه و کاربر است.
فرم های ویندوز، روشی جدید بمنظور ایجاد برنامه های Desktop مبتنی بر win32 می باشند.
فرم های وب، یک رابط کاربر مناسب برای برنامه های مبتنی بر وب را ارائه می نمایند.
سرویس های وب ، مکانیزمی بمنظور ارتباط برنامه ها از طریق اینترنت و با استفاده از SOAP، می باشد.
سرویس های وب، قابل مقایسه با عناصر COM و DCOM بوده با این تفاوت مهم که در این راستا از تکنولوژی های متعدد اینترنت، استفاده می گردد.
فرم های وب و سرویس های وب ، اینترفیس اینترنت دات نت را تشکیل و پیاد ه سازی آنان از طریق بخش دیگری در فریمورک دات نت که ASP.NET ، نامیده می شود ، محقق می گردد.
پتانسیل های موجود در هر لایه فریمورک دات نت ، توسط هر یک از زبان های سازگار با دات نت، قابل استفاده خواهد بود.
در پایان لازم است به این نکته اشاره گردد که در این رابطه ( Net Framework.
) می توان از اینترفیس های مبتنی بر متن ( کاراکتر) نیز استفاده کرد.
این نوع برنامه ها اصطلاحا "" Console Application، نامیده می شوند .
[1و2] 1 – 2 - معماری داتنت داتنت امکانات متنوعی را برای برنامهنویسی در اختیار ما قرار میدهد تا برای کامپیوترهای شخصی و موبایل کامپیوترها سیستمهای قدرتمندی بنویسیم.
از مزایای داتنت این است که برنامهها و دستگاهها را با استفاده از استانداردهایی همچون XML ،HTTP ،SOAP یکپارچه میسازد.
همچنین داتنت زیربنای کنترلی از راهدور را برای ما فراهم میسازد که به ما اجازه میدهد برنامهها را در پروسههای مختلف و روی کامپیوترهای مجزا اجرا کنیم و اطلاعات را با استفاده از باینری و پروتکل HTTP جابهجا سازیم.
ابزارهایی که دات در اختیار ما قرار میدهد، عبارت است از: - وبسرویسها -NET Server Infrastructure.
- نرمافزارهای Smart Client - Visual Studio .NET شکل (1-2 ) کامپوننتهای داتنت را نشان میدهد همانطور که در این شکل مشاهده میکنید، هسته مرکزی XML Web Service است که به برنامه کلاینت اجازه میدهد اطلاعاتش را با سرور یا کلاینتهای دیگر مبادله کند.
شکل1-2- کامپوننتهای داتنت NET Framework.
در حقیقت ساختار زیربنایی برای ساختن برنامههای داتنت است.
مدل برنامهنویسی NET Framework.
مدلی شیءگرا است.
برای ساخت برنامهای در داتنت ابتدا کلاس اصلی آن را میسازیم.
سپس عملکرد آن را در قالب متدهای آن کلاس قرار میدهیم.
نکته مهمی که در اینجا باید به آن اشاره نمود این است که کلاسی که مثلاً با کدهای C#.NET نوشته شده است، میتواند به راحتی به VB.NET تغییر یابد.
ECMA یا European Computer Manufactures Association، زبان عمومی، شامل نقشهایی برای این تبدیل شدن کدها و قابلیت Interoperability، را به نام CLR یا Common Language Runtime تعیین کرده است.
از آن جایی که کدهایی که با CLR هماهنگ هستند، موقع کامپایل به کدهایی به نام IL یا Intermediate Language تبدیل میشوند (و این کدها هستند که در واقع اجرا میشوند).
کدهای برنامههایی که با CLR سازگار هستند، میتوانند به کدهای دیگر زبانهایی که با CLR هماهنگ هستند تبدیل میشود.
زبانهایی که با CLR هماهنگ هستند، عبارتند از: - Microsoft Visual Basic.NET - #Microsoft Visual C - Microsoft Visual C++.NET - Microsoft Visual J# .NET شایان ذکر است که در بین این زبانها #C بهعنوان زبان استاندارد بینالمللی توسط ECMA معرفی شده است.
کدهایی که با این زبانها نوشته میشوند، همه به کدهای میانی به نام MSIL یا Microsoft Intermediate Language تبدیل میشوند.
پس میتوان با هر یک از زبان های بالا برنامه را آماده کرد و این برنامه میتواند با برنامههای دیگری که به زبان متفاوت دیگری نوشته شده است، سازگار باشد.
همانطور که قبلاً بیان شد یکی از امکاناتی که معماری داتنت در اختیار ما قرار میدهد به نام Side by Side Execution معروف است.
بدینمعنا که با استفاده از داتنت فریمورک برنامهنویسان میتوانند با استفاده از اسمبلیها نسخههای چندتایی از یک برنامه را در یک سیستم داشته باشند.
اسمبلیها شامل کدهای IL و Metadata (مسئول نگهداری اطلاعاتی همچون نام و نسخه برنامه) هستند.
CLR در حقیقت با استفاده از Metadata و جمعآوری اطلاعات نسخههای برنامه میتواند نیازهای برنامه را پیدا کند و به ما اجازه دهد نسخههای مختلف از یک برنامه را به صورت Side By Side اجرا کنیم.
همانطور که در شکل (1-3 ) مشاهده میکنید، فریمورکداتنت شامل دو کامپوننت است: کتابخانه کلاسها و CLR.
کتابخانه کلاسها در حقیقت Typeهایی که در داتنت عمومی هستند را مشخص میکنند و با استفاده از این کلاسها برنامهنویسان میتوانند برنامههای گوناگون از قبیل Windows Forms ،Web Forms و XML Web Serviceها را تهیه کنند.
از طرف دیگر، قسمت CLR شامل کامپوننتهایی است که کدهای IL را اجرا میکند و امنیت، صحت نوع دادهها و...
را کنترل میکند.
کدهایی که درون CLR اجرا میشوند را اصطلاحاً Managed Code و اگر خارج از CLR اجرا شوند، Unmanaged Code مینامند.
[1و2] شکل 1-3- معماری کلی داتنت 1 – 3 -زبان مشترک در داتنت همانطور که اشاره شد CLR یکی از اجزای مهم فریمورکداتنت است.
کار اصلی CLR ایجاد محیط اجرایی برنامه و ارایه سرویس به برنامهها است.
در واقع اجزای CLR دائماً با همدیگر در ارتباط هستند و کار میکنند تا بتوانند محیطی زیربنایی در داتنت برای اجرا شدن مهیا سازند.
(شکل 1-4 ) معماری CLR را نشان میدهد.
کار اصلی این کامپوننتها لودکردن کدهای IL برنامه، کامپایل کردن و اجرای آن کدها است.
شکل1-4 – نمایش کامپوننت های دات نت کامپوننتهای CLR که در شکل (1-4 ) نیز مشاهده میکنید عبارتند از: - لودکننده کلاسها یا Class Loader برای Load کردن کلاسها در حین اجرای برنامه - کامپایلر تبدیلکننده کدهای MSIL به Native Code - مدیر کدها یا Code Manager که مسئول مدیریت کدها در زمان اجرای برنامه است.
- GB یا Garbage Collector برای مدیریت حافظه - موتور مدیریت امنیت در سیستم - چککننده نوع پارامترها - پشتیبانیکننده Threadها - مدیریتExceptionها - موتور اشکالزدایی (debug) سیستم - COM Marshaler برای مدیریت تبادل اطلاعات بین برنامههای داتنت و برنامههای COM - Base Class Library برای اینکه یک برنامه بتواند در CLR اجرا شود، باید به یکی از زبانهای NET.
و CLS-Compliant نوشته شود.
کامپایلر داتنت این کدها را به کدهای MSIL و Metadata تبدیل میکند.
این کدها شامل اطلاعاتی از قبیل نحوه لود شدن، ذخیرهشدن و چگونگی فراخوانی متدها در کلاسها میشود.
کدهای MSIL همچنین شامل دستورات خاصی برای کار با عملیات ریاضی، چگونگی مدیریت خطاها و...
نیز هست.
مدیریت خودکار حافظه در داتنت یکی از مزایای داتنت مدیریت خودکار حافظه است که موقع اجرای برنامهها استفاده میشود.
در داتنت رویههای اجرایی مدیریت میشوند و به اصطلاح موقع اجرای برنامهها MEP یا Managed Execution Process استفاده میشود، ولی به راستی MEP چیست؟
MEP در حقیقت پروسههایی هستند که در لود شدن و اجرای برنامهها حافظه را به صورت خودکار مدیریت میکنند.
همچنین سرویسهای دیگری مانند چک کردن Type Safety، امنیت و مدیریت خطاها را ارایه میکنند.
MEP در واقع شامل کدهای مدیریت شده (Managed Code) و اطلاعات مدیریت شده (Managed Data) است.
در داتنت این اطلاعات در کدهای MSIL ذخیره میشوند و به صورت metadata در فایلهای اجرایی exe وجود دارند.
Managed Data توسط GC یا Garbage Collector به حافظه منتقل میگردند و موقعی که نیازی نیست از حافظه برداشته میشوند.
اگرچه Managed Code میتواند به Managed Data و Unmanaged Data دسترسی داشته باشند، Managed Dataفقط از طریق Managed Code قابل دسترسی است.
یکی از مزایای دات نت، استفاده از GC جهت مدیریت خودکار حافظه است و نیازی نیست که برای اختصاص دادن حافظه (وقتی که آبجکت ساخته میشود) و آزاد کردن حافظه (وقتی که برنامه به آن آبجکت نیاز نداشته باشد) کد خاصی نوشته شود.
مدیریت خودکار حافظه در داتنت دارای سه مراحله زیر است: - Allocating - Releasing - Implementing Finalizers مدیریت اختصاص حافظه به این طریق عمل میکند که وقتی یک پروسه در مرحله آغازین خود قرار دارد، بدون اختصاص هر گونه حجم، یک آدرس حافظه برای آن پروسه رزرو میشود.
این فضای آدرس رزرو شده را MH یا Managed heap مینامند.
MH از یک پوینتر در مکانی که Object بعدی بنا است قرار بگیرد، نگهداری میکند.
مثلاً تصور کنید که اسم پوینتر Pointer1 باشد.
ابتدا Pointer1 به آدرس پایه از MH اشاره میکند.
وقتی که در یک برنامه از Operator جدیدی برای ایجاد یک آبجکت استفاده شود، آن Operator جدید مقدار حافظهای که برای آبجکت لازم است را در heap چک میکند.
اگر حافظه موجود باشد به آن آبجکت داده میشود و آن آبجکت در Heap همانجا که Pointer1 به آن اشاره کرده بود، به وجود میآید.
شکل 1-5 – مدیریت حافظه در دات نت همانطور که در شکل (1-5) مشاهده میکنید، وقتی که آبجکت تولید شد، Pointer1 به قسمت بالای آن میرود.
وقتی که آبجکت بعدی تولید شد، GCدر Managed Heap حافظه را به آن آبجکت اختصاص میدهد و در بالای آبجکت اولی قرار میگیرد و Pointer1 به بالای آبجکت جدید خواهد رفت.
در Unmanaged Memory ،pointerها در حافظه توسط ساختار Linked-List مدیریت میشوند و در نتیجه اختصاص دادن حافظه در Managed Heap زمان کمتری نسبت به Unmanaged Memory میگیرد.
آزادسازی حافظه کار دیگری است که مدیریت خودکار حافظه در داتنت انجام میدهد.
وقتی یک آبجکت درست میکنید، ممکن است حافظه مورد نیاز که به آن تعلق بگیرد، وجود نداشته باشد.
برای اینکه آن شیء بتواند تولید شود GC یا Garbage Collector فضای حافظه را که به آبجکتهایی که دیگر نیازی به وجودشان نیست از آنها میگیرد.
در واقع هر برنامه دارای تعدادی ریشه یا Root است.
این ریشهها به قسمتی از Managed Heap که مسئول ذخیرهسازی است، اشاره میکنند.
هر ریشه یا به یک آبجکت در MH اشاره میکند یا به NULL.
هر ریشه برنامه از Object Pointerهای عمومی یا Globalو Static، متغیرهای محلی و پارامترهای منبع در Thread Stack تشکیل شده است و فهرست این ریشهها توسط کامپایلر JIT نگهداری و مدیریت میشود.
GC در واقع از این فهرست استفاده میکند و حافظه را مدیریت مینماید.
GC در ریشه برنامه جستوجو میکند و آبجکتها را با Referenceهایشان در Root List مطابقت میدهد.
شکل1-6 - نحوه استفاده دات نت از اشیاء داخل رم شکل (1-6) شیءهای A ،D و F را نشان میدهد که برنامه از آنها استفاده میکند.
اگر چه Object B مستقیماً توسط ریشه برنامه استفاده نمیشود، چون توسط Object D استفاده میشود، نمیتوان حافظهاش را آزاد نمود.
GC به هر آبجکت که توسط برنامه چه به صورت مستقیم یا به صورت غیرمستقیم مورد استفاده قرار میدهد دست نمیزند و آبجکتهایی که مورد استفاده قرار نمیگیرند را بهعنوان Garbage یا زباله تلقی میکند.
GC پس از شناسایی آبجکتهایی که نیازی به آنها نیست پروسه هایی برای جمعآوری این آبجکتها اجرا مینماید.
شکل1 – 7 - نحوه کار پروسه GC پس از آنکه این عملیات انجام شد، GC اشیا را مجدداً مرتب میکند و همانطور که در شکل(1-7 ) مشاهده مینمایید، پس از انجام پروسه GC اشیا مرتب میگردند.
شاید بگویید حال که GC فضای حافظه آبجکتها را خالی میکند، دیگر نیازی به کدنویسی برای این کار وجود ندارد، ولی باید گفت که GC قادر به تمیز کردن منابع سیستم (System Resource) که توسط Managed Object استفاده میشوند نیست و برای اینکار باید حتماً پس از آنکه کارمان با آبجکت تمام شد، متد Dispose آن را فراخوانی کنیم.
برای مدیریت حافظه و تمیز کردن حافظه سیستم، باید از متدهای Finalizer ها استفاده کرد.
کدهای شکل (1 – 8 ) با ذکر مثالی چگونگی این کار را نشان میدهد.
[1و2] شکل 1- 8 - نحوه استفاده از متدهای Finalizer برای پاک کردن حافظه 1 – 4 - اسمبلیها در دات نت اسمبلیها در واقع بخشهای پایه در برنامهنویسی داتنت هستند.
Assemblyها حاوی Typeها و منابع مورد نیاز برنامهها میباشند.
علاوه بر این، برنامههای مختلف میتوانند مثلاً از Typeهای یک اسمبلی استفاده نمایند (این نوع اسمبلی را Global Assembly مینامند که معمولاً در GAC یا Global Assembly Cache نصب میگردند).
هر اسمبلی حاوی کدهای MSIL است که CLR آن را اجرا مینماید.
اسمبلیها با توجه به اینکه چگونه ساخته و ذخیره شدهاند، میتوانند به دو صورت استاتیک و داینامیک وجود داشته باشند.
اسمبلی استاتیک وقتی به وجود میآید که برنامهای را با کامپایلر زبانهای داتنت کامپایل میکنیم.
اسمبلی استاتیک حاوی Typeها، اینترفیسها و منابعی است که اسمبلی به آن احتیاج دارد.
این اسمبلی در هارددیسک و به صورت فایلهای DLL یا EXE وجود دارد.
از طرف دیگر، اسمبلیهای داینامیک در روی هارددیسک ذخیره نمیشوند و وقتی برنامه در حال اجرا است و به تایپهای اسمبلی خاصی نیاز دارند، به وجود میآیند.
با استفاده از Reflection APIs که درSystem.Reflection.Emit وجود دارد، میتوانیم آبجکتها را به صورت داینامیکی به وجود آوریم.
شکل1 – 9 - تفاوت اسمبلی یک فایل با چند فایل یک اسمبلی میتواند به صورت یک یا چند فایل باشد.
شکل (1-9) اسمبلی تکفایلی و چند فایلی و فرق آنها را با هم نشان میدهد.
هر فایل اسمبلی شامل Manifest و Type Metadata ،MSIL و منابع مورد نیاز برنامه میباشند.
[1و2] 1 – 5 - پیکربندی و امنیت یکی از مزایای دیگر داتنت این است که با کمک آن میتوان منابعی که برنامه به آن دسترسی دارد را کنترل نماییم.
این کار توسط فایلی XML که فایل پیکربندی یا Configuration است انجام میپذیرد.
فریمورکداتنت سه نوع فایل برای این منظور دارد: - فایل تنظیمکننده ماشین (Machine.config) - فایل تنظیمکننده برنامه (Application Configuration File) کاربرد این فایل بیشتر در زمانی احساس میشود که میخواهید مقدار پارامتری را عوض کنید، ولی نمیخواهید برنامه را دوباره کامپایل نمایید.
کدهای شکل روبهرو نمونهای از فایل کنترلی پایگاه داده است که میتوانید تنها با عوض کردن رشته ارتباطی با پایگاه داده مسیر آن را عوض نمایید.
فایل تنظیمکننده امنیت: شامل فایلهایی که میتوان در آن اختیارات گروههای کد را تغییر داد.
جدول( 1 – 1 ) نام و محل این فایلهای کنترلی امنیت را نشان میدهد.
جدول1 – 1 - محل و نام فایل تنظیم کننده امنیت 1 – 6 - مزایای استفاده از Net Framework.
در آغاز پیاده سازی برنامه های مبتنی بر ویندوز، تمامی برنامه های نوشته شده بمنظور استفاده از API ، از C و یا ++C استفاده می کردند.
با مطرح شدن ویژوال بیسیک و سپس اینترنت، پیاده کنندگان مجبور به سفارشی نمودن ( پیاده سازی نسخه هائی خاص ) برنامه های C++ ، C، برنامه های ویژوال بیسیک و یا ASP بودند.
با استفاده از Net Framework.، می توان با اتکاء به مهارت های موجود، اقدام به آفرینش هر نوع نرم افزاری کرد.
انتخاب Net Framework.
بمنظور پیاده سازی برنامه ها، مزایای زیر را بدنبال خواهد داشت : مبتنی بر استانداردهای وب .
فریمورک دات نت، بطور کامل تکنولوژی های موجود در اینترنت نظیر : HTML , HTTP,SOAP,XSLT,XPath و سایر استانداردها را حمایت مینماید.
طراحی مبتنی بر یک مدل یکسان .
از پتانسیل های یک کلاس دات نت ، می توان در هر یک از زبانهای حمایت شده در دات نت و یا مدل برنامه نویسی ، بخوبی استفاده کرد .
بنابراین می توان ، بخش هائی از کدهای نوشته شده را در برنامه های متعدد استفاده کرد (برنامه های ویندوز، وب ، سرویس های وب XML ) .
پیاده کنندگان بسادگی قادر به استفاده از آن می باشند.
در فریمورک دات نت ، کد ، بصورت Namespace های سلسله مراتبی و کلاس ها ، سازماندهی می گردد .
فریمورک دات نت یک Common Type System)CTS) را بعنوان سیستم نوع یکسان ، ارائه نموده که توسط هر زبان سازگاز با دات نت، قابل استفاده خواهد بود .در سیستم فوق ، تمامی عناصر زبانها بصورت شی می باشند.
این اشیاء قادر به استفاده توسط هر برنامه مبتنی بر دات نت و نوشته شده توسط هر زبان مبتنی بر دا ت نت ، خواهند بود .
کلاس های توسعه پذیر .
ماهیت سلسله مراتبی فریمورک دات نت، برای پیاده کنندگان مخفی نخواهد بود .در این راستا می توان به کلا س ها دستیابی و آنها را توسعه داد( مگر اینکه آنها حفاظت شده باشند ).
در این زمینه امکان پیاده سازی توارث از نوع Cross - Language ، نیز وجود خواهد داشت .
[1و2] فصل دوم : بررسی جاوا 2 – 1 - مقدمه ای بر جاوا : به عنوان یک راه حل اساسی جهت برآورد کردن نیازها و مسائل مختلف در نظر گرفته می شود.
تکنولوژی های میان افزار از Corba و IDLS تا سیستم های پیغام گرا، راه بسیاری را پیموده اند و تکامل آنها مرحله به مرحله بوده است که طرح آن فراتر از محدوده این مقاله است.
J2EE شرکت سان یک نقطه تحول قطعی در تاریخ تکنولوژی های میان افزار و سبب پذیرش و تشخیص تشکیلات کامپیوتری شناخته می شود.
در ادامه مطلب در مورد “J2EE” چیست و چه نیست؟
بررسی دقیق تری صورت می گیرد.
به هر حال، با وجود مجموعه ای بزرگ از استانداردها و ویرایش ها از یک سو و وجود سرورهای برنامه های کاربردی گوناگون از سوی دیگـر، معمولا J2EE غیرقابل درک می نماید.
قبل از آن که تعریف کنیم J2EE چیست بهتر است درک کنیم که J2EE زبان بـرنامه نویسی بسته نرم افزاری، یک ابزار و یا یک سرویس نیست.
به عبارت ساده تر J2EE لزوما یک میان افزار استاندارد است که شرکت سان میکروسیستم آن را برای توسعه و به کارگیری برنامه های کاربردی تجاری در مقیاس گسترده و با قابلیت الکترونیکی و به صورت توزیعی و چندلایه ارائه کرده است.
برنامه های کاربردی که برای استانداردهای J2EE نوشته می شوند مزایای زیادی را در بر می گیرند که قـابلیت جابه جایی، امنیت، مقایس پذیری، توازن بار و قابلیت استفاده مجدد از آن جمله است.
میان افزارها، راه حل های نرم افزاری سمت سروری هستند که بنیاد و اساس مورد نیاز در اتصال سیستم های نامتجانس و منابعی توزیعی در شبکه را فراهم می کنند.
پیش از J2EE، راه حلهای میان افزار و محدود به محصولات و عرضه کننده ها بودند.
این میان افزارهای قدیمی ویژگی های محدودی داشتند و سازگاری آنها نیز کم بود و حتی در قابلیت های عملکردی و جابه جایی در مسائل مختلف نیز محدود بودند.
به عبارت دیگر، هیچ استاندارد صنعتی مشترک و قابل قبولی برای این منظور وجود نداشت و بسیرای از ویژگی ها به انتخاب عرضه کننده بود.
J2EE با یادگیری از اشتباهات گذشته و ارائه نیازمندی های ضروری صنعت سبب رشد و کمال تکنولوژی میان افزار شد.
همچنین امکان گسترش و توسعه های آتی نیز در آن لحاظ گردید.
در توسعه این استاندارد، سان با دیگر عرضه کننده های اصلی میان افزار، سیستم عامل و سیستم های مدیریت پایگاه داده از جمله IBM و اوراکل همکاری کرد.
در اصل J2EE مجموعه ای از اتانداردها و خط مشی هایی است که تعریف می کند چگونه برنامه های کاربردی در لایه توزیعی می توانند با استفاده از زبان جاوا ساخته شوندً؟
توسعه دهنده ها، برنامه های کاربردی خودشـان را تحت این استانداردها می سازند و عرضه کننده های زیرساختار، سازگاری با این مجموعه خط مشی ها را از طریق J2EE تضمین می کنند.
از این طریق، برنامه های J2EE می توانند به صورت مدخلی برای به کارگیـری چندین سرور برنامه های کاربردی با حداقل تغییرات در سطح کم (و حتی بدون تغییر) در نظر گرفته شوند[3] 2 – 2 - اعمال جاوا : J2EE به ارائه محیط های مختلفی می پردازد که این محیط ها در ادامه بررسی شده است: J2EE ترکیبی برای میان افزار توزیعی چندلایه J2EE کاملا بین لایه های مختلف درگیر در محیط برنامه کاربردی حد فاصل قایل می شود و مولفه های قرار گرفته در هر لایه را تعریف می کند.
این لایه ها می توانند هر یک از لایه های Client، لایه طرح، لایه تجارت و یا ارائه سیستم های اطلاعاتی گسترده باشند.
کلیه برنامه های کاربردی J2EE براساس این قالب کاری ساخته شده است.
همچنین هر لایه در سیستم چندلایه ممکن است در چند سرور توزیع شده باشد.
با J2EE توسعه برنامه های کاربردی توزیعی دیگر یک وظیفه پیچیده نیست.
مولفه های J2EE هیچ فرضی درباره محیط سرور و منابعی که از طریق دایرکتوری های گسترده دسترسی می یابند، ندارند.
این بدان معناست که توسعه دهندگان برنامه های کاربردی برای توزیع مولفه ها و منابع اشان به تلاش زیادی نیاز ندارند.
J2EE محیطی برای برنامه های کاربردی در مقیاس گسترده J2EE به صورت سرورهای برنامه های کاربردی مانند BEA WEB Logic یا IBM WEB Sphere پیاده سازی شده که محیطی برای برنامه های کاربردی توزیعی در مقیاس گسترده است.
برنامه های کاربردی می توانند براساس مدل برنامه نویسی برنامه های کاربردی J2EE ساخته شوند و حتی در یک یا چند سرور برنامه های کاربردی وب سازگار با J2EE به کار گرفته شوند.
به عبارت دیگر می توان مناسب ترین محیط سرور برنامه کاربردی از محصولات گسترده سازگار J2EE را انتخاب کرد.
حتی بدون توجه به این ویژگی های منحصر به فرد نیز، کلیه سرورهای برنامه های کاربردی J2EE یک حیطه کاری مشترک برای توسعه و به کارگیری برنامه های کاربردی گسترده فراهم می کنند.
J2EE مدلی برای توسعه برنامه های کاربردی با قابلیت الکترونیکی برنامه های کاربردی J2EE به راحتی می توانند بر روی وب، پالم و دستگاه های دستی، تلفن های همراه و بسیاری دیگر از دستگاه های نمایش داده شوند.
به عبارت دیگر، مولفه های برنامه های کاربردی می توانند بدون هیچ مشکلی دارای قابلیت الکترونیکی باشند.
مدل برنامه نویسی J2EE تضمین می کند که منطق تجاری و سیستم های BackOffice بدون تغییر باقی بمانند و به عنوان تسهیلاتی برای نمایش به راه های گوناگون و دسترسی Clientها به کار روند.
یکی دیگر از ویژگی های خوب محیط J2EE توازن بار اتوماتیک، مقایس پذیری و تحمل خرابی است.
مولفه های به کار رفته در محیط J2EE به طور اتوماتیک این تسهیلات را به دنبال خواهند داشت که به این ترتیب دیگر نیازی به کدنویسی نخواهد بود.
این ویژگی ها در ساخت مدخل های وب مورد نیاز Clientها اهمیت چشمگیری دارند.
J2EE استاندارد سازگار در سرورهای برنامه های کاربردی وب J2EE را می توان اولین استاندارد صنعتی در پذیرش و تشخیص دنیای میان افزار دانست.
تقریبا تمام سرورهای برنامه های کاربردی وب (BEA WEB Logic, IBM WEB Sphere, HP’S Application Server, Sun-Netscapes’s inlanet, Macromedia’s Jrunو غیره(، سرورهای تایید شده برنامه کاربردی J2EE هستند.
تاکنون هیچ استاندارد دیگری تا این حد پشتیبانی و تایید نشده بود.
همگام بافًـزوده شدن دیگر مولفه های برنامه های کاربردی به خصوصیات J2EE، می توان آنها را در سرورهای گوناگون برنامه های کاربردی در شبکه های گسترده به کار برد.
از این رو، به منظور تضمین سازگاری و همبستگی بین سرورهای متفاوت برنامه های کاربردی J2EE، مجموعه تست سازگاری را ارائه کرده است.
[3] 2 – 3 - بینش جاوا بینش اولیه خلق و ایجاد J2EE را می توان به صورت زیر خلاصه نمود: “توسعه دهندگان باید کدهای مختلفی را بنویسند تا تجارت و منطق طرحشان را شرح دهند، در همین حین، زیرساختار میان افزار از مسائل سطحی سیستم مانند مدیریت حافظه، تخصیص منابع، عملیات چندرشته ای، دسترس پذیری و جمع آوری آشغال به طور اتوماتیک مراقبت می کند.
آیا J2EE مشـکلات را رفع می کند؟
حال بهتر است بررسی شود که J2EE چگونه مسائل و مشکلات اصلی ناشی از گستردگی را رفع می نماید و چگونًـًـه امکان توسسعه آتی برقرار می شودً؟
استقلال از سیستم عامل و سخت افزار J2EE runtime بر روی ماشین مجازی جاوا (JVM) قرا رمی گیرد.
شکل 2 نشانگر این امر است.
JVM مستقل از سخت افزار و سیستم عامل است.
محیط (JRE) Java runtime تقریبا برای تمام سخت افزارها و سیستم عامل های مشهود در دسترس است.
بنابراین با پذیرش جاوا، J2EE تشکیلات کامپیوتـری را از سرمایه گذاری در سیستم عامل ها و سخت افـزارگران و پرهزینه خلاصی می بخشد.
امکان نزدیک تر ساختن لایه یکپـارچه گسترده J2EE به سیستم های Backoffice مزیت ویژه دیگری است.
در برخی موارد، می توان لایه J2EE را در خود محیط سرور EES جای داد و از این طریق ترافیک شبکه را کاهش و عملکرد آن را افزایش داد.
پیوستگی با طراحی شی گرا و متدولوژی مولفه ارتباط تنگاتنگ با شی گرایی، جاوا را به یک زبان کدنویسی و خوش ترکیب تبدیل کرده است.
تقریبا کلیه ویژگی های برنامه نویسی شی گرا در جاوا پشتیـانی شده است.
مدل برنامه نویسی J2EE براساس متدولوژی های شی گرا و طراحی مبتنی بر مولفه ساخته شده است.
J2EE مدل های مولفه ای گوناگونی برای لایه های متفاوت دارد.
بنابراین با پذیرش ترکیب های مناسب یک پروژه، توسعه دهندگان می توانند مولفه های بسیاری را فراهم کرده و گسترش دهند که در نتیجه توسعه برنامه های کاربردی تسریع می شود.
با این تفاسیر و قابلیت ها در تشکیلات کامپیوتری، برنامه های کاربردی خوش ساختار، انعطاف پذیر و قابل استفاده مجدد شکل خواهند گرفت.
[3] 2 – 4 - شی گرا : جاوا یک زبان برنامه نویسی شی گرا است .
برای یک برنامه نویس این به این معنا است که به جای فکر کردن به قسمت های رویه برنامه ، باید به کاربرد داده ها و روش هایی که روی آن داده ها عمل میکنند ، توجه شود.