تنويه

المعلومات والكتابات الواردة ادناه هي مجرد مسودة لتدوينة كنت اقوم بالتحضير لها ولم تكتمل, وفضلت وضع المعلومات هنا على أن تبقى من دون أي فائدة على القرص الصلب الخاص بي

ملاحظة

المعلومات في الادنى هي مجرد اجتهاد شخصي ولا أجزم أنها صحيحة, إذا كان لك رأي على احد اخر أرجو منك وضعه هنا ليستفيد الجميع

ومعذرة على المعلومات الغير مرتبه

أريد بناء مشروع جديد من خلال بيئة الدوت نت (.NET Environment)

أريد بناء مشروع جديد من خلال منصة الدوت نت (.NET Platform)

أريد بناء مشروع جديد من خلال إطار عمل الدوت نت (.NET Framework)

أيهما صحيح ؟ إذا أردت بناء برنامج من خلال الدوت نت فماذا أطلق عليها تحديدا ؟ هل هي منصة عمل ؟ أم إطار عمل ؟ أم بيئة ؟ هل يمكننا اعتبار أن كافة المصطلحات في الأعلى صحيحة وتؤدي نفس الغرض ؟ أم أن هناك فروقات فيما بينها ؟

لأجد أجوبة على مجموعة الإستفسارات تلك قمت بالبحث على الإنترنت لعل وعسى أن أجد ما يزيل ذلك الغموض في إستخدام تلك المصطلحات ولكن للأسف لم أجد معلومة واضحة وصريحة عن الفروقات بين تلك العبارات من مصدر موثوق أو تمتلك مرجعية, فقررت أن أبحث عن مجموعة من التعريفات Definitions لها وأقارنها بنفسي وهذا ما حصلت عليه :

منصة العمل "Platform" :منصه العمل في الحاسوب تطلق على نظام التشغيل بشكل رئيسي وبرامج الكمبيوتر المبنية على مجموعه من الأوامر "set of instruction" تنظم عمل المعالجات الدقيقة "microprocessor", هناك بعض الجزئيات التي تنطوي على مفهوم منصة العمل مثل Motherboard وأيضا databus, ولكنها مؤخرا نظمت ضمن معايير قياسية Standarized وأصبحت ضمنيا تحت مفهوم منصة العمل بدون الحاجة لذكرها صراحة, مع وجود إطار عمل برمجي لتشغيل البرمجيات وتحقيق تواصل أفضل بين نظام التشغيل والعتاد الصلب, نظام التشغيل يجب أن يصمم لكي يعمل بتوافق مع مجموعة الأوامر المخصصة للمعالجات الدقيقة فعلى سبيل المثال نظام مايكروسوفت Windows 2000 صمم لكي يعمل متوافقا مع مجموعة معالجات من شركة Intel.

اذا اردت تجاهل كل الأسطر السابقه والحصول على تعريف بسيط يمكنك إعتبار منصة العمل المكان الذي تستطيع من خلاله تشغيل تطبيقاتك متجاوزا كل التفاصيل الممله.

في التعريف السابق وردت لدينا عبارة "ضمن وجود إطار عمل برمجي لتشغيل البرمجيات" لذلك أفضل أن نقوم مباشرة بتعريف إطار العمل. إطار العمل (Framework) : هو مجموعة من المكتبات "Library" والفئات "Classes" وواجهات التطبيق البرمجية "API" والتطبيقات "app" تعمل مع بعضها البعض للمساعدة في تطوير التطبيقات.

ولكن ما علاقة تطوير البرنامج حاليا بإطار العمل, فبالتأكيد إطار العمل في تعريف منصة العمل لا يعنى بمرحلة تطوير التطبيق, هو يتعامل مع تطبيق جاهز,

نلاحظ أن تعريف منصة العمل "platform" تضمن وجود إطار عمل ولكن تعريف إطار العمل لم يتضمن وجود منصه العمل, أي ان منصة العمل معنيه بكلا الجانبين Software و hardware ولكن إطار العمل مختص بجزء software

تعريف إطار العمل السابق هو تعريف شامل وعام لكافة أطر العمل المتوافره ولا يختص بإطار عمل معين عن غيره, وقبل الإطلاع على التعريف السابق كنت لتواجه مشكلة في التمييز بين مجموعة من أطر العمل فمثلا لو أخذنا مجموعة أطر العمل التالية (Twitter Boostrap, Rails, .NET Framework) كلها أطر عمل وكل له توجه معين وخاص به

فمثلا Twitter Boostrap هو إطار عمل مخصص للمصممين ومتعلق بتطوير تصميم الويب حيث يوفر لك هذا الإطار مجموعة من مكتبات Jquery ومجموعة من ملفات Css الجاهزه لتستطيع أستخدامها بشكل مباشر في تطوير تصميم تطبيقك على الإنترنت وبذلك يوفر الوقت والجهد والتكلفة عليك كمطور لهذا التطبيق.

إطار العمل Rails أو كما هو شائع Ruby on rails نظرا لأنه تمت برمجته بلغة Ruby هو من أطر العمل المختصه في برمجة تطبيقات الويب له مكتباته الخاصه وأيضا Interpreter و Debugger للتأكد من سلامة الكود وتنفيذه, كما يوجد عدد كبير من الحزم Bundle التي تعتبر بمثابة المكتبات تحتوي على العديد من الدوال Functions جاهزه للإستخدام بدون الحاجة لكتابتها.

إطار العمل .NET Framework :هو إطار عمل من شركة مايكروسوفت قائم على عدد من المكتبات Library و CLR "Common Language Runtime " يدعم تعدد اللغات " language interoperability"

اذا قمت بكتابة برنامج يقوم بجمع عددين من خلال C# وقمت بكتابة نفس البرنامج من خلال VB فإن فإن ال Compiler سيقوم بتوليد نفس كود MSIL في كلا الحالتين

من مميزات MSIL Code هو أنه يمكنك من التفاعل مع أي تطبيق كتب من خلال .net بغض النظر عن اللغة التي كتب بها

Base Class Library : هي مجموعة من التصنيفات للفئات التي يمكن للمبرمج استخدامها بشكل جاهز من غير الحاجة لإعادة كتابتها مرة اخرى

كل لغات الدوت نت تستخدم Base Class Library

CLR : يمكنك اعتبارة ك اله افتراضيه مسؤوله عن تنفيذ برامج الدوت نت فهو المسؤول عن تحويل MSIL الى binary code , او machine code

هو المسؤول عن التفاصيل في الطبقه السفله low level details مثل garbage collection , memory management , application hosting

لنفرض انك قمت بكتابة برنامج باستخدم احدى لغات الدوت نت وأردت تشغيله على نظام التشغيل المتوافر لديك بغض النظر عنه فما يحدث فعليا أن البرنامج لن يتعامل بشكل مباشر مع نظام التشغيل بل سيكون تعامله مع إطار العمل .NET Framework بغض النظر عن إصداره , اطار العمل Framework سيقوم بتحويل MSIL Code ألى native code او ما يسمى machine language عن طريق CLR ثم يتعامل بشكل مباشر مع نظام التشغيل, يقوم نظام التشغيل بإستدعاء الخدمات Services من العتاد الصلب Hardware ليقوم بتنفيذ الكود المطلوب ومن ثم يرجع النتائج إلى Framework التي بدورها ترجع النتيجة الى البرنامج.

لما هذا السيناريو المقيت ! لما لا يقوم CLR بتحويل برنامجي إلى native code مباشرة للتعامل مع نظام التشغيل فبالتأكيد سيكون أسرع.

سيكون أسرع ولكن إذا أردت أن تشغل برنامجك على نظام تشغيل اخر فستحتاج لإعادة كتابته مره أخرى بما يتناسب مع ذلك النظام ! بالتاكيد لن يكون هذا حل عملي للمشكلة

مشروع mono يطلق عليه cross-platform in .net أي يمكنك نسخ الملف التنفيذي للبرنامج من windows واخذه كما هو وتشغيله على الأنظمة التي تدعم mono project مثل linux , MacOS وغيرها

يمكنك النظر لأطار العمل .net framework على أنه مترجم , وبرنامجك يتكلم لغه واحده , وكل نظام تشغيل يتحدث لغته الخاصه , عندما يريد برنامجك اخبار نظام التشغيل بأمر معين لا فسيستعين بالمترجم , الذي يقوم بدوره لترجمه العبارات , وبعد رد نظام التشغيل عليه سيقوم بترجمه ما قاله نظام التشغيل للغتك الخاصه , هو كذلك "وسيط"

*IDE : *Integrated Development Environment : وهي بيئه التطوير المتكامله , يمكنك تفسيرها بكل سهوله , فماذا تحتاج لكي تقوم بتطوير برنامجك ؟ محرر ؟ compiler ؟ debugger ؟ library ؟ , كل هذه المكونات تسمى بيئه التطوير الخاصه بك , في أي مرحله تطوير أنت فعليا تستخدم بيئه تطوير ولكن ربما لا تكون متكامله integrated , فاذا كان المحرر منفصلا , وال compiler على حذى , وكذلك الأمر مع debugger فانت تعمل في بيئه تطوير غير متكامله

بيئه التطوير المتكاملة تسهل عليك عملية التطوير فتعمل كل مكوناتها بانسجام لتوفر لك اسلوب تطوير مريح بالنسبة لك

Library : تحتوي المكتبات على عدد من الفئات Classes الجاهزه يمكنك استخدامها في تطوير تطبيقاتك بدل من كتابتها من جديد.

API : يمكننا تعريف API على أنه ثوثيق documentation أو شرح لكيفية إستخدام ال Classes الموجوده داخل المكتبات Library

http://www.mono-project.com/Main_Page

المراجع : لغة البرمجة : http://ar.wikipedia.org/wiki/%D9%84%D8%BA%D8%A9_%D8%A8%D8%B1%D9%85%D8%AC%D8%A9

ASP.NET : http://www.microsoft.com/web/platform/framework.aspx

اطار العمل دوت نت http://ar.wikipedia.org/wiki/%D8%A5%D8%B7%D8%A7%D8%B1_%D8%B9%D9%85%D9%84_%D8%AF%D9%88%D8%AA_%D9%86%D8%AA

Computing platform : http://en.wikipedia.org/wiki/Computing_platform

platform in general : http://searchservervirtualization.techtarget.com/definition/platform

IDE : http://en.wikipedia.org/wiki/Integrated_development_environment

SDK : http://en.wikipedia.org/wiki/Software_development_kit

Web Application Framework : http://en.wikipedia.org/wiki/Web_application_framework

Difference between framework library API SDK toolkit : http://stackoverflow.com/questions/8772746/difference-between-framework-vs-library-vs-ide-vs-api-vs-sdk-vs-toolkits

Framework General Definition : http://cplus.about.com/od/glossar1/g/frameworkdefn.htm