لماذا #c???
ماهي او لغة برمجية يجب ان أتعلمها أولا؟
هي #C و الجافا ..ولكن لماذا؟ سنجيبك عن سؤلك عبر هذا الموضوع الهام:
لماذا#C?
في شهر يونيه 2000، أعلنت ميكروسوفت عن بيئة .Net و عن لغة جديدة تدعى C# (سي شارب)
لغة C# لغة بسيطة تحوي فقط 80 كلمة مفتاحية keywords و اثنا عشر من قوالب
أو أنواع البيانات datatypes المغروسة فيها. لكن C# لها قدرة تعبيرية عالية عند بناء المفاهيم البرمجية الحديثة.
تتضمن C# دعما كليا للبرمجة البنيوية structure و المرتكزة على المكونات component-based و المنحى للكائن object-oriented، و الذي يتوقعها المرء من أية لغة حديثة. لغة C# استلهمت أفضل خصائص اللغات السابقة أهمها SmallTalk و C++ و Java و دلفي، كما ابتعدت عن كثير من عيوبها. و هي شبيهة جدا في صيغتها بلغتي C++ , Java.
تم تطوير اللغة من قبل فريق صغير في ما يكروسوت بقيادة اثنين من كبار مهندسيها هما: اندريس هيزبرغ Anders Hejlsberg و سكوت ويلثموت Scott Wiltamuth. اشتهر هيزبرغ بابتكار Turbo Pascal أحد أول بيئات التطوير المتكاملة، كذلك لقيادته لفريق العمل الذي صمم بيئة تطوير دلفي و مجموعة مكتبة المكونات فيها VCL من بورلاند.
C# كلغة ذات منحى للكائن تدعم تعريف الصنفيات classes و التعامل معها، الصنفيات تحدد أنواعا types جديدة تتيح توسعا لللغة من أجل معالجة أفضل للمسائل المراد حلها. C# تمتلك كلمات مفتاحية لتعريف صنفيات جديدة و مناهجها و خصائصها و للقيام بعمليات التغليف encapsulation و التوريث inheritance و التشكل polymorphism و هي الدعامات الثلاث للبرمجة بالمنحى للكائن.
في C# كل ما يتعلق بتعريف الصنفية class declaration موجود في التعريف نفسه (كما في لغة دلفي). تعريف الصنفية في C# لا يتطلب ملفات ترويس header منفصلة أو ملفات للغة تعريف الواجهة (IDL) Interface Definition Language، أكثر من ذلك، أن C# تدعم نمط XML الجديد من أجل التوثيق الداخلي في التوليف، و الذي يسهل عمليات استخراج الوثائق المرجعية و ملفات المساعدة للتطبيق.
تدعم C# أيضا الواجهات interfaces ، و هي وسيلة تعاقدية مع الصنفية من أجل خدمات محصورة فقط في المحددات التي اشترطتها الواجهة. في C# الصنفية لا يمكنها الوراثة inherit إلا من أصل واحد، لكن الصنفية يمكنها تنفيذ عدة واجهات. عند تنفيذ الواجهة تقوم صنفية C# بتقديم فقط الوظيفيات التي حددتها الواجهة.
تدعم C# أيضا البناءات structs ، و هو المفهوم الذي تغير كلية عن ما كان عليه في C++. في C# البناء يكون نوعا مقيدا، و خفيفا بحيث لا يشكل عند استحضاره عبئا على نظام التشغيل أو الذاكرة كما هو الحال في الصنفية. البناء struct لا يمكنه الوراثة من صنفية أو التوريث منه، لكن بإمكانه تنفيذ واجهة interface.
توفر C# مقومات المنحى للمكونات component-oriented، مثل الخصائص properties و الأحداث events و بناءات التعريف و تسمى سمات attributes. البرمجة بالمنحى للمكون مدعومة في جزئية CLR في بيئة .Net حيث تقوم بتخزين بيانات التعريف metadata مع التوليف الخاص بالصنفية. بيانات التعريف تصف الصنفية ومكوناتها من مناهج و خصائص، بالإضافة لاحتياجاتها الأمنية و السمات الأخرى مثل إذا كان بالإمكان تسلسلها serialized للمرور عبر حدود الشبكات، أو التوليف الحاوي لطريقة التعامل مع الوظيفيات. لذلك فإن الصنفية المحولة compiled تكون وحدة متكاملة المعلومات، بحيث يمكن للبيئة المستضيفة لها أن تعرف منها وحدها كيفية قراءة بيانات التعريف للصنفية، و لا يتم الاحتياج لمعلومات أخرى من مصادر منفصلة. باستخدام C# و CLR يمكن إضافة بيانات تعريف مخصوصة للصنفية بإنشاء سمات خاصة بها. و من جهة أخرى من الممكن قراءة بيانات التعريف الخاصة بالصنفية باستخدام أنواع CLR لتقوم باستظهار هذه البيانات من خلال خاصية الانعكاس reflection فيها.
أيضا المجمع assembly و هو مجموعة من الملفات التي تظهر للمبرمج و كأنها ملف مكتبة ربط حيوية (DLL) أو ملف تنفيذي. و يعد المجمع في .Net الوحدة الرئيسية من أجل القيام بإعادة الاستخدام و التحكم في الإصدارة versioning و الأمنية security و التجهيز للنشر deployment. و يوفر CLR مجموعة من الصنفيات لمناولة المجمعات.
تقوم C# أيضا بتقديم الدعم للنفاذ المباشر للذاكرة باستخدام مؤشرات pointers بنمط C++ و كلمات مفتاحية من أجل حصر مثل هذه العمليات على أنها “غير آمنة” unsafe، و لتنبيه جامع المهملات garbage collector في CLR بأن لا يقوم بالتقاط الكائنات objects التي تشير إليها المؤشرات حتى يتم تسريحها released من قبل البرنامج.
************
ولدت لغة C# تحت منصة الدوت النت مع المحافظة على قوتها وسرعتها لتكون بذلك الملجأ الأساسي لمختلف المبرمجين ( على حد زعم مايكروسوفت).
ما هو مفهوم بيئة عمل الـ Net Framework. –
بيئة الدوت نيت هي الاساس القادم لتطوير تطبيقات تستطيع ربط نظم ومعلومات و اجهزه و مستخدمين فى إطار موحد و مخصص
تقع منصة الدوت نيت في نقاط اساسيه :
1- أدوات التطوير Developer Tools : الواجهة البرمجية والادوات(لغات البرمجة) التي يستخدمها المطور لتصميم و إنشاء الحلول لبيئة الدوت نيت …. تدعم دوت نيت حوالى 24 لغة برمجه
2- مجموعة من الخوادم Servers : السيرفرات التي تمثل البنية التحتية لبناء وتطوير و تنفيذ الحلول لبيئة الدوت نيت مثل MS SQL Server او E-Commerce Server او BizTalk Server
3- خدمات الويب Xml Web Service : مجموعه من الخدمات المحددة للقيام بالعمليات الروتينية و الوسائل التي تساعد المطور في تطوير خدماته الخاصة
4- العملاء Clients : و المقصود بها الأجهزة التي تستخدم انظمة تشغيل مدمج معها إطار عمل الدوت نيت… هناك مشروع مونو لنقل الدوت نيت على اللينكس
5- خبرة المستخدمين User Experinece : البرمجيات التقليد والمدمجة مع خدمات الويب لتقدم كل ما يحتاجه المستخدم
ربما تبدو هذه النقاط مقدمه نظريه لا فأئده منها و لكنى تعلمت ان معرفة هيكلية (معمارية) بيئة العمل هامه جداً
بيئة عمل الدوت نيت تقدم نموذج عمل بالبرمجة الكائنية ( سنفهم معناها لاحقاً) و هو ما يضمن سلامة تنفيذ الكود باستخدام قواعد التحقق من الصحة وقت التنفيذ RunTime بمعنى انه لايمكن لبرنامجك ان يتخطى حدوده و يحاول الوصول إلى كائنات اخرى فى تطبيق اخر مالم يسمح له هذا التطبيق او ربما يحاول تطبيقك او ما سنسميه كائنك ان يقوم بعمليه لم تحددها له
إطار عمل الدوت نيت Dot Net FrameWork
إطار العمل هو بمثابة القلب النابض للدوت نيت و هو يحتوى على مكونين رئيسيين :
1- Common Langauge RunTime او (CLR)
2- DotNet Class Library
1- Common Langauge RunTime او (CLR)
او ما يطلق عليه بيئة العمل المشتركة و هي البيئة التي يتم تنفيذ كل تطبيقات الدوت نيت فيها تقدم هذه البيئة الكثير للتطبيقات العاملة بها
البرامج التى يتم عمل Compilation لها تحت بيئة الدوت نيت لا يتم تحويلها مباشره إلى Native Code بل يتم تحويلها إلى MSIL ( Microsoft Intermediate Language ) تماماً مثل تطبيقات الجافا التي يتم تحويلها إلى Byte Code و بالتالي هذا يجعل تطبيقات الدوت نيت قابله للعمل على أي نظام تشغيل يحتوى على ال CLR بعد ذلك يتم تحويل كود ال MSIL إلى Native Code بواسطة مترجم وقت التنفيذ (Just In Time Compiler ) تحويل الكود إلى MSIL شيء ممتع فهو يجعلك تعمل تحت منصة الدوت نيت باستخدام لغتك المفضلة (التى يجب ان تدعم تحويل الكود إلى MSIL )
يبقى شئ يجب ان نوضحه هنا و هو ان الكود الذى يتم تنفيذه تحت بيئة الدوت نيت يسمى managed code و يسمى كذلك لانه يستخدم ململم النفايات GC لتحرير الذاكرة من الكائنات الغير مستخدمه و ما غير ذلك فيسمى unmanaged code
دعنا نوضح النقطة السابقة الخاصة بكيفية تنفيذ ال managed code بشئ من التفصيل
كما ذكرنا فان ال CLR هي المسئولة عن تحميل المجمعات (Assemblies) و الكائنات (Objects) الخاصة بتطبيقك في الذاكرة … بعد ان يتم تحميل الكود و يبدأ تنفيذه تستمر ال CLR فى العمل لمراقبة تنفيذ ال managed code خاصتك لتقدم له الخدمات الموجوده بالشكل الموضح اعلاه
ايضاً لكى تتأكد من ان برنامجك يعمل فى بدون اى عوامل خارجيه تؤثر على عمله
ماذا بعد ان تنتهى دورة حياة تطبيقك ؟
تقوم ال CLR بتحرير الذاكرة من كائنات تطبيقك باستخدام ميكانيكيه داخليه تسمى ال Garbage Collector او ململم النفايات (مثل تطبيقات جافا)
قبل ان يبدأ ال CLR في هذه الميكانيكية فهو يقوم بتحميل نفسه فى ال Windows Hosting Process
دعنا نلقى نظره عن قرب من هذه العملية
المترجمات التي تدعم ال managed code مثل VB.NET مثلاً تقوم بإضافة ترويسة (Header) تقوم بتوليد managed assembly file هذا الملف يجعل نظام التشغيل ويندوز يقوم اوتوماتيكياً بتحميل ملف MSCOREE.DLL الذى يقوم ببدأ جلسة عمل لل CLR لتطبيقك عن طريق تحميل ملف MSCORWKS.DLL
افترض ان تطبيقك ينتج ملف اسمه MyApp.exe و انظر إلى الصورة التأليه لتستوعب هذه الفكرة باختصار شديد
هل معنى هذا ان تطبيقات الدوت نيت ستعمل على أي منصة مثل جافا ؟
نظرياً نعم حيث انه من المفترض ان منصة الدوت نيت منفصله عن نظام التشغيل و لكن تقنياً حتى الان لا تعمل تطبيقات الدوت نيت إلا من خلال منصة الويندوز و إن كان هناك مجهودات مبذوله لنقل منصة الدوت نيت إلى لينكس من خلال مشروع مونو
2- مكتبة فئات الدوت نيت DotNet Class Library
تأتى بيئة الدوت نيت محمله بأكثر من 5 الآلاف فئه Class جاهزة تساعد المطور فى إنشاء التطبيقات المختلفه بكل سلاسة فهي تقدم له كل الاكواد التي يتكرر تنفيذها و لكن مغلفه مما يعطى امن للكود اثناء تنفيذه كما تجعل ذهن الطور يتجه نحو ما هو المطلوب تاديته من البرنامج و يترك التفاصيل الفرعية لفئات الدوت نيت
هذه الفئات Classes تقع فى 7 مجموعات رئيسيه :
1- فئات التعامل مع هياكل البيانات Data Structures
2- فئات التعامل مع ادوات الادخال والاخراج IO management
3- فئات ادوات تطبيقات الويندوز و الويب Windows and Web Controls
4- فئات الوصول إلى البيانات Database access
5- فئات تعدد خيوط المعالجة Multithreading
6- Remoting
7- فئات الانعكاس Reflections
كل هذه الفئات يمكن الوصول إليها من اى لغة تدعم الدوت نيت اى ان المطور الذى يستخدم الفيجوال بيسك دوت نيت سيستخدم هذه الفئات كما هو الحال مع المطور الذى يستخدم ال #C مثل المطور الذى يستخدم Perl.NET مثل المطور الذى يستخدم Delphi.Net
كل ال Implementaion الخاصه بإطار عمل الدوت نيت يتم شحنها مع مجموعه كبيره من الفئات المبنيه بداخلها (المدمجه معها)
مكتبة فئات إطار العمل FCL تحتوى على مجموعه كبيره من الفئات تتنوع فى استخداماتها من دوال ال API التى تم تغليفها ووضعها فى صوره امنه للمبرمج يستطيع التعامل معها داخل الدوت نيت – فئات للتعامل مع قواعد البيانات – فئات للتعامل مع الواجهه الرسوميه للمستخدم – فئات للتعامل مع تنسيق النص – فئات للتعامل مع المجموعات COLLECTIONS – فئات للتعامل مع ال Program Security و هكذا ترى ان لديك مكتبه كبيره جداً من الفئات القابله للاستخدام
و لكن ليس كل الفئات قابله للاستخدام داخل كل انواع التطبيقات فقد نجد فئات تستخدم فى تطبيقات الويندوز windows application و لكن لا تستخدم بداخل تطبيقات الويب web application او ال mobile applications او العكس
يجب ان تحذر استخدام مكتبة الفئات إلا للمنصات التى تعمل عليها فقط اى لا تحاول استخدام مكتبه للتعامل مع السيكيورتى مثلاًُ مع نظام لا يدعم السيكيورتى
ليس ان تحوبل الكود فقط إلى MSIL يسمح لك بالعمل عبر المنصات المختلفه بل ايضاً معرفتك باى مكتبه من الفئات قابله للعمل عبر تلك المنصات
التحديدات specification الخاصه بال CLI عرفت مجموعه من الفئات الاساسيه التى يجب توافرها لاى DOT NET FrameWork Implementaion هذه الفئات تعرف باسم Base Class Library او اختصاراً BCL
استخدامك لل BCL يضمن لك قابلية عمل تطبيقك على اى منصة عمل تستخدم إطار عمل الدوت نيت و لكن استخدامك لاى فئه خارج اطار ال BCL قد يعرض برنامج لعدم التوافقيه مع منصة العمل التى يجرى عليها تطبيقك
ال Microsoft.VisualBasic يقوم بمهمتين رئيسيتين لمبرمجى الفيجوال بيسك دوت نيت
المهمه الاولى : تقدم وسائل المساعده التى تقوم بتحويل الكود إلى MSIL
المهمه الثانيه : تقدم وصول مباشر للطرق و الثوابت التى تشبه تلك الموجوده فى الاجيال الاولى من الفيجوال بيسك
و بالتالى فكما ترى ان هناك اعتماديه من مبرمجى فيجوال بيسك دوت نيت على هذا المجمع
مميزات بيئة عمل الدوت نيت
هذه المزايا ساسردها من وجهة نظرى و لكن هناك العديد من المصادر التى تسهب فى هذا الجزء
1 – تكاملية بيئة الدوت نيت بما تحمله من دمج لنظام التشغيل و ادوات التطوير و السيرفرات المستخدمه
حقيقة هذه احدى مزايا و عيوب مايكروسوفت فى نفس الوقت
2 – لغة واحدة لجميع الاغراض
الان يمكن فعلاً كتابة تطبيقات الويب و تطبيقات بيئة الخادم / العميل و التطبيقات المكتبية فى نفس الوقت بنفس اللغة بدون ان تحتاج شركتك لمبرمجين بلغات اخرى …. الم نواجه فى معظم الاحوال كمبرمجين الحاجة لاستخدام لغات اخرى لانشاء مشروعات ويب مثلاً فكنا نضطر لتعلم احدى اللغات مثل ASP او PHP او غيرها
اما الان فيمكنك نقل خبرتك لاستخدام ASP.NET مباشرة باستخدام VB.NET او C# بدون الحاجة لتعلم لغات جديدة ( ترى هل سيوفر هذا على الشركات بدون الحاجة للحصول على مبرمجين جدد)
3 – الامان Security
كم من مرة واجهت فيها موقفاً يشبه الموقف التالي ….. قمت بتصميم برنامج يستخدمه مجموعة مختلفة من الاشخاص و انت تريد تحديد صلاحيات داخل برنامجك لكل مجموعة من الاشخاص
قمت مرة بتخزين بيانات حساسة و اردت تشفيرها و لم تعرف كيف تقوم بذلك
الان اصبح بالإمكان استخدام Code Access Security و Evidence-based security و Role Based Security و Application Domain و استخدام التشفير Encryption بدون الحاجة للعديد من الأكواد المعقدة في معظم الاحيان حيث توفر بيئة الدوت نيت العديد من الفئات داخل فضاءات الاسماء System.Security
صفحات ال ASP.NET و العديد من الانماط لحماية المحتوى
4 – السرعة فى ASP.NET
تختلف ASP.NET عن سابقتها ASP في كونها Compiled و ليست Interpreted هذا بالإضافة لإمكانية استخدام ال Caching لصفحات معينة كما يمكن تحديد فترة زمنية لهذا التخزيم مما يزيد من كفائتها
5 – انشاء خدمات ويب Web Services
لا شك ان خدمات الويب اصبحت تلعب دوراً هاماً الان فى ال Business Logic و ال Code Reuse فركزت عليها مايكروسوفت فى بيئة الدوت نيت و اصبح بالإمكان برمجة او استخدام خدمات الويب مباشرة من داخل تطبيقك
6 – برمجة تطبيقات الاجهزة الذكية Mobile & Smart Applications
ميزة جديدة مع الدوت نيت و إن كانت غير منتشرة مع انتشار تطبيقات جافا فى الاسواق … ما زلنا ننتظر الجديد من مايكروسوفت لهذه السوق الجديدة
العديد من المميزات التي ربما لم اتطرق إليها هنا و لكن يمكن البحث عنها في الانترنت …… بيئة الدوت نيت رائعة و مليئة بالمزايا مهما كانت لغة برمجتك المفضلة لربما احببت ان تلقى نظرة للدوت نيت
ما هو الفرق بين الـ C والـ C#؟
رغم أن لغة C هي الأصل، وتفتقر لميزة إنشاء المكونات أو العناصر أو ما يسمى بالإنجليزية objects، وتبرمج بها أنظمة التشغيل والبرامج بشكل عام، لكن افتقارها لميزة إنشاء العناصر يجعل برمجة بعض التطبيقات شيء صعب، لذلك تم إنشاء C++ التي وهي لغة قوية وتصلح لإنشاء تطبيقات كبيرة، ثم جاءت مايكروسوفت بلغة C#، وأرادت بذلك الجمع بين سهولة VB وقوة C واللغة قوية فعلاً ومرنة، وتم تبنيها في لينكس أيضاً من خلال مشروع mono.
جميع اللغات السابقة تتشابه في طريقة كتابة الأوامر إلى حد كبير، ومن لديه معرفة بلغة php وجافاسكربت سيجد قواسم مشتركة في أسلوب كتابة الأوامر بين كل هذه اللغات، والأصل C.
وتعتبر أفضل لغة تتعامل مع الدوت نت تستفيد من قدراتها كاملة و قد أصدر في أواخر العام 2005 الإصدار الثاني من اللغة [1]C#2
كتب هامة حول لغة البرمجة:
انكليزية:
https://docs.google.com/uc?id=0B4C8dbEdhwiqdkczZjh6alVNTGs&export=download
كلمة السر : harraneamine.blogspot.com
http://www.arageek.com/tech/2015/05/21/top-5-books-to-learn-csharp.html
http://www.boosla.com/articlesList.php?Sec=Programm&menu=CSharpNet
عربية:
https://tusfiles.net/12zp1u90zyee
كلمة السر : harraneamine.blogspot.com
http://www.boosla.com/showArticle.php?Sec=Programm&id=51
وننصح بالانكليزية ، لسهولة التناول والتطبيق والتبويب.
[1] من مصادر المعلومات: ( بتصرف وبعد التنقيح اللغوية والطباعي).
http://www.gulfcollege.edu.om/forum/showthread.php?t=1116
http://www.aoua.com/vb/showthread.php?t=183943
( قد\ لاتفتح بعض الكتب، لكن يكفي إحداها للبدء بأول الطريق وبالتوفيق).