تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الدرس الثالث : مفاهيم بيئة .net الرئيسية
#1
منقول من المنتدى القديم
صاحب الموضوع أحمد جمال المشرف العام

كتب بتاريخ 07-02-08
بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .

في هذا الموضوع سوف نتحدث عن بنية .net الرئيسية ... كل ما يتعلق بها ومفاهيمها ، وذلك على مدار اربع ايام حيث نضيف كل فترة موضوعاً جديداً عن هذه النقطة ، سيتم ضغط الحلقات ليتم طرح حلقتين هذا الاسبوع إن شاء الله .

وكالعادة ... لنبدأ .
الرد }}}
تم الشكر بواسطة:
#2
منقول من المنتدى القديم
صاحب الرد أحمد جمال المشرف العام
لغات .net :

لا تعتبر .net لغة واحدة ، بل هي عبارة عن معيار قياسي تستخدمه عدة لغات برمجة ... تم طرح هذا المعيار من قبل مايكروسوفت حوالي العام 2000 وتبنت العديد من الشركات هذا المعيار ليكون قاعدة انطلاقها في لغات البرمجة ، حيث تتميز جميع هذه اللغات بإن لها الكود المصدري نفسه ، وتترجم نفسها مروراً بنفس المراحل ولا تختلف سوى في طريقة الصياغة ... سنقوم بالتعرف على المكونات الاساسية لمحرك اللغة Engine كاملة ضمن خططنا لهذا الاسبوع .. ولكن قبلاً لنتعرف على بعض اللغات التي تبنت معيار .net .

فبعد اللغات التي تصدرها مايكروسوفت بنفسها والتي تضم : C# ، VB.net ، J#.net ، اضافة إلى C++/CLI وأخيراً JScript.net ... هناك اللغات الأخرى التي تدعم معيارية .net مثل باسكال ودلفي ، كوبول وحتى LISP.net لبرمجة تطبيقات الذكاء الإصطناعي .


لا ننسى ايضاً الإصدارات التي تعمل على بيئة Linux ، ف mono مثلاً يدعم معيارية .net تحت بيئة اللينكس .. لكن في النهاية فقد كان المنتج الاساسي لخدمة بيئة .net هو C# ، لتنضم إليه لاحقاً VB.net ربما لاغراض تسويقية وبدأ بعدها تتابع اللغات ، لا ننسى ان انضمام f# للمجموعة قد يجعله الاسلوب رقم 1 للبرمجة بتقنية .net .

تستطيع في النهاية الاطلاع على مجمل اللغات التي تدعم هذه المعيارية مع بعض التفصيلات عنها هنا :
http://www.dotnetlanguages.net/DNL/Resources.aspx

في كتاب Pro C# 2008 .NET 3.5 Platform -Exploring the .NET universe using curly brackets ، يطرح الكاتب تساؤلاً ويجيب عليه ، لماذا كل هذا العدد من لغات .net ما دام سيتحولوا جميعاً في النهاية إلى maneged code ، ويجيب على هذا التساؤل بعدة اسباب :

1- ان العديد من المبرمجين حساسين جداً للغة التي يبرمجون بها ويحبونها ، فبعضهم يفضل اسلوب الكتابة ب ; والأقواس ... فيما يفضل البعض الآخر الاسلوب الأكثر قابلية للقراءة مثل Syntex لغات Visual Basic ، لا ننسى هنا الدور التسويقي ومحاولة جذب جميع المبرمجين للعمل مع .net حيث يمكن لمبرمجي C# و Basic و C++ و Fortran و Delphi العمل جميعاً تحت منصة واحدة ، وهذا ما يجعل انتقالهم بينها اسهل اضافة لتجميع المبرمجين تحت مظلة واحدة .

2- مشاركة الفريق الواحد مبرمجين بلغات متعددة ، حيث يمكن ان تجد في الفريق الواحد مبرمجين يبرمجون بعدة لغات ويتم اخراج منتج واحد في النهاية بعد ان كان من المفضل ان يكون المبرمجين لنفس اللغة ، هذا يفتح الاختيارات كثيراً امام الشركات في اختيار المبرمجين .

3- بعض اللغات تتميز بنقاط قوة تضطر الناس لاستخدامها ، فمثلاً هناك لغات مميزة في العمليات الرياضية والمعادلات مثل الفورتران ، الكوبول مميزة ايضاً في التعاملات المالية والعمليات الحسابية ... هكذا تستطيع الاستفادة من هذه المميزات وتدمجها جميعاً مع بعضها تحت بيئة .net .


والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
الرد }}}
تم الشكر بواسطة:
#3
منقول من المنتدى القديم
صاحب الرد أحمد جمال المشرف العام
العناصر الأساسية لبيئة .net :

تقدم .net بين طياتها ثلاث عناصر رئيسية تتحكم في دورة حياة البرنامج المعتمد على بيئة .net ، هذه التقنيات الثلاث يرمز لها اختصاراً بأسماء : CLR, CTS and CLS ، سنتعرف في هذا الدرس على مهامهم بشكل مختصر وسريع فيما سنتعرف على تفاصيل كل منهم في دروس متفرقة قادمة إن شاء الله ضمن هذا الأسبوع .

تمثل ال CLR ال runtime lyer للبرنامج ، وهي اختصار ل Common Language Runtime ، مهمته الاساسية هي التحكم في الأنواع والمكونات الرئيسية لل .net - المكتبات والدوال - وحجز المتغيرات في الذاكرة وتقسيم الذاكرة والتعامل معها ، ال threads والتنفيذ اضافة لبعض اختصارات الأمان ،" باختصار شديد تشكل ال CLR المرحلة الاساسية لترجمة أوامر .net وتنفيذها على جهاز الكومبيوتر .

ال Common Type System والذي يتم اختصاره ب CTS مختص بالتعامل مع انواع البيانات المدعومة للعمل ضمن بيئة .net ، وكيف يتم التعامل بينهم وبين بعضهم ، مع مراعاة وجود بعض الانواع غير المدعومة في جميع بيئات .net والتي توجد بها اختلافات بين بيئة وأخرى ، أما الأخيرة وهي Common Language Specification والتي يتم اختصارها بالرمز CLS فهي مختصة بالتعامل فقط مع انواع البيانات القياسية والمدعومة من جميع اصدارات بيئة .net .

وبهذا نستطيع ان نقول ان البرنامج المصمم باستخدام C# مثلاً ويستخدم فقط الأنواع المتاحة في CLS هو متوافق تماماً للعمل على نفس توزيعة .net من اجل العمل على Linux المسماه mono ، اما لو خرجت خارج نطاق ال CLS إلى CTS فلن تضمن ان يتم تنفيذها بنفس الكفاءة في كل الأنظمة المختلفة .

في الدروس اللاحقة المخصصة للحديث بالتفصيل عن هذه العناصر الثلاثة سوف نتعرف على طريقة عملها بالتفصيل إن شاء الله تعالى .


والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
الرد }}}
تم الشكر بواسطة:
#4
ال Base Class :

توفر تقنية .net ما يعرف باسم Base Class Library ، وهو عبارة عن كلاس يحتوي على الأوامر والدوال الرئيسية في بيئة .net ، هذا الكلاس موجود في جميع بيئات .net ويتم التعامل معه ومع خصائصه بنفس الطريقة ، يضم الكلاس العناصر الاساسية مثل التعامل مع الملفات وقواعد البيانات ، ال Threads ، ال XML ، ال GUI وخلافه . وتساهم هذه المكتبة في جعل اسلوب البرمجة موحد وأسهل . وقابل للتكامل مع أي من اللغات التي تدعم .net .

هذا الجدول لمحتويات ال BCL من مايكروسوفت :
[ATTACH=CONFIG]730[/ATTACH]

وكترجمة سريعة ، يحتوي System على كل ما تحتاجه لتطوير تطبيقات .net ، يحتوي ايضاً على ال Datatypes والدوال الاساسية للعمليات الحسابية .. الخ ، باختصار شديد تجد ان System هي الفئة الرئيسية والتي تحتوي تحتها على باقي الفئات .
System.CodeDom خاصة بكتابة الاكواد وتنفيذها .
ال System.Collections تحتوي على عدد من الانواع مثل Lists, Stacks وخلافه .
System.Diagnostics يضم ال Events وال Counters وال Process .
System.Globalization يحتوي على كل ما يتعلق بتشغيل برنامجك على نظم مختلفة من حيث اللغات والاعدادات الاقليمية وخلافه .
System.IO : كل ما يتعلق بعرض واستقبال البيانات سواء عن طريق الملفات والمجلدات ، او عن طريق منافذ الكومبيوتر مثل ال Serial Port .
System.Resources : ال Resources التي تصف البرنامج ، يتيح لك عمل تطبيقات متعددة اللغات على سبيل المثال .
System.Text : كل ما يتعلق بالتعامل مع النصوص .
System.Text.RegularExpressions : التعامل مع ال RegularExpressions

في دروسنا القادمة في الدورة سنتطرق بالحديث لكل هذه التفاصيل وكيفية استخدامها ، الآن نحن فقط نقوم بالتعريف ببيئة .net الرئيسية .


والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .


الملفات المرفقة صورة/صور
   
الرد }}}
تم الشكر بواسطة:
#5
.Net Assemblies

في النهاية ومهما كانت لغة البرمجة وال Compiler الذي تستخدمه لبناء تطبيقات .net ، فإن الكود يتحول في النهاية ل intermediate language وهو ما يعرف اختصاراً IL بالاضافة إلى بعض ال metadata ، ويتم وضعه في ملف اسمبلي قابل للعمل مباشرة سواء على شكل exe أو على شكل dll .

سابقاً كان يرمز لل IL باسم MSIL وال MS اختصار لمايكروسوفت ، اما الآن فتمت اضافة اللاحقة C كاختصار ل Common بدلاً من MS السابقة .

يمثل ال IL أو ال MSIL المهام التي يقوم بها البرنامج والأكواد وما شابه ، اما ال metadata فتحتوي على وصف لجميع الأنواع والفئات التي استخدمتها في برنامجك ، ملف الاسمبلي نفسه الذي يضم ال IL وال metadata يتم وصفه ب metadata أيضاً ، يتم اضافة manifest ايضاً لهذه المجموعة ، هناك حالات تجد برنامجك فيها مرتبطاً باكثر من ملف اسمبلي ، وفي هذه الحالة لن يكون لديك سوى manifest واحد فقط في واحد منها يقوم بعمل البداية وربط الملفات مع بعضها البعض .

ال CIL :

لنفترض هذا البرنامج بلغة C# - من كتاب Pro.CSharp 2008

كود :
// Calc.cs using System; namespace CalculatorExample { // This class contains the app's entry point. class Program { static void Main() { Calc c = new Calc(); int ans = c.Add(10, 84); Console.WriteLine("10 + 84 is {0}.", ans); // Wait for user to press the Enter key before shutting down. Console.ReadLine(); } } // The C# calculator. class Calc { public int Add(int x, int y) { return x + y; } } }
لو قمت بفتحه الاسمبلي الناتج عن هذا الكود ستجد الكود التالي :
كود :
.method public hidebysig instance int32 Add(int32 x, int32 y) cil managed { // Code size 9 (0x9) .maxstack 2 .locals init (int32 V_0) IL_0000: nop IL_0001: ldarg.1 IL_0002: ldarg.2 IL_0003: add IL_0004: stloc.0 CHAPTER 1 n THE PHILOSOPHY OF .NET 13 IL_0005: br.s IL_0007 IL_0007: ldloc.0 IL_0008: ret
} // end of method Calc::Add

يمكن ان يكون لنا في فترة قادمة من هذه الدورة فرصة لتعلم كيفية كتابة الكود CIL ، ولكن لنتركها مبدئياً حسب ظروف الدورة .

حتى هذه المرحلة ، لم يتم تحويل الكود إلى Platform-Specific Instructions ، يتم ذلك في المرحلة التالية من خلال ما يعرف باسم Jitter والذي يقوم بترجمة الكود الناتج إلى كود مناسب لامكانيات الجهاز ونظام التشغيل الذي يعمل عليه البرنامج .

ال MetaData :

مثال على MetaData :

كود :
TypeDef #2 (02000003)
------------------------------------------------------- TypDefName: CalculatorExample.Calc (02000003) Flags : [NotPublic] [AutoLayout] [Class] [AnsiClass] [BeforeFieldInit] (00100001) Extends : 01000001 [TypeRef] System.Object Method #1 (06000003) ------------------------------------------------------- MethodName: Add (06000003) Flags : [Public] [HideBySig] [ReuseSlot] (00000086) RVA : 0x00002090 ImplFlags : [IL] [Managed] (00000000) CallCnvntn: [DEFAULT] hasThis
ReturnType: I42 Arguments
Argument #1: I4
Argument #2: I42 Parameters
(1) ParamToken : (08000001) Name : x flags: [none] (00000000)
(2) ParamToken : (08000002) Name : y flags: [none] (00000000)

يقوم الكود السابق بوصف الكود السابق ، يمكنك وانت تعمل على .net ان تقوم بالاطلاع على هذا الكود ، اغلب النقاط واضحة وتشرح نفسها ، اعتقد انه ربما لن تحتاج يوماً للتعديل اليدوي على هذا الملف .

ال Manifest :

نسخة واحدة لكل برنامج حتى لو كان هناك اكثر من Assembly File ، يصف هذا الملف الاسمبلي نفسه من حيث رقم نسخة الاسمبلي وملف الاسمبلي الرئيسي في حالة وجود اكثر من ملف ، هذا مثال على كود من هذه النوعية :

كود :
.assembly extern mscorlib
{ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) .ver 2:0:0:0 } .assembly Calc { .hash algorithm 0x00008004 .ver 0:0:0:0 } .module Calc.exe .imagebase 0x00400000 .subsystem 0x00000003 .file alignment 512
.corflags 0x00000001

والله الموفق ..
والسلام عليكم ورحمة الله وبركاته .
الرد }}}
تم الشكر بواسطة:
#6
منقول من المنتدى القديم
صاحب الرد أحمد جمال المشرف العام
Common Type System

سنركز في هذا الموضوع المختصر على CTS بعد ان شرحناه اختصاراً في مشاركة سابقة وذكرنا انه مختص بوصف الانواع المدعومة في بيئة .net وكيفية تعاملها مع بعضها البعض ، هذه الأنواع هي Class, interface, Struct, Enumeration, Delegate

سنتعرف على طريقة تعريف كل منهم اثناء سير الدورة الخاصة بنا ، إلا ان ما يتعلق بنا الآن خلال الدرس الخاص بنا هو كيفية تعامل ال CTS معهم ، إذا كنت مبرمج تطبيقات عادية فلن تحتاج لمعرفة اكثر من فائدة ال CTS اما مبرمجو الأدوات او الذين يقومون ببناء كومبايلر او لغة برمجة ضمن بيئة تطوير .net فيحتاجون للتعرف على الخصائص الاساسية ، سأذكر مثالاً مختصراً على Class :

هناك ما يعرف باسم Abstract Class ، ال Abstract Class لا يحتوي على اي كود - شديد الشبه بال interface - بحيث يمكن بعد ذلك عمل وراثة له قبل البدء في استخدامه حيث انه لن يحتوي على سطر كود واحد ، هذا مثال لما يعرف باسم Abstract Class .
كود :
class abst_class
{
int sum(int x,int y);
string name;
}

والآن من ضمن جدول خصائص ال CTS التي ستحتاج إليها فيما لو رغبت في التعامل مع CTS في الكومبايلر الخاص بك مثلاً . ستجد الخاصية Is the class abstract or concrete ، ستحتاج قبل اخبار CTS بان لديك Class هنا ان تخبره ايضاً بمثل هذه النقاط .


لا تقلق لو لم تتضح لديك مثل هذه الخصائص ، في دروس قادمة سنشرح بالتفصيل كيفية عمل Class وانواعه وطرقة المختلفة .

ال Members :

بعد ان قمت بوصف الأنواع المختلفة من خلال CTS ، يمكنك اضافة اي عدد من ال Members إلى كل منهم ، ال Members يمكن ان تكون متغيرات عادية لحقول Fields ، يمكن ان تكون ايضاً :constructor, finalizer, static constructor, nested type, operator, method, property, indexer, field, read-only field, constant, event

كل واحد من هذه الأعضاء لديه ما يعرف باسم ( visibility trait) أو مدى رؤية ، يمكن ان يكون Public مثلاً بحيث يمكن رؤيته من خارج الكلاس .. الخ مما سنتعرف عليه لاحقاً ضمن دروسناً ، ما يعنينا هنا ان نعرف ان كل هذه الخصائص يتم توصيفها في CTS .

ال DataTypes :

يحتوي ال CTS ايضاً على ال DataTypes المدعومة من قبل .net ، هذا الجدول من كتاب Pro C# 2008 مع توضيح لل keywords للغات .net الاساسية الثلاث :
[ATTACH=CONFIG]731[/ATTACH]
كل ما يهمك كمبرمج تطبيقات عادي ان تعرف لمعلوماتك فائدة ال CTS كنوع من المعرفة العامة لبنية .net الاساسية ، أما إذا كنت قد اعجبتك الفكرة وترغب في التعرف على المزيد عن CTS ، فيمكنك البدء من هذا الرابط :
http://msdn2.microsoft.com/en-us/library/zcx1eb1e.aspx

والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .


الملفات المرفقة صورة/صور
   
الرد }}}
تم الشكر بواسطة:
#7
منقول من المنتدى القديم
صاحب الرد أحمد جمال المشرف العام

Common Language Specification

كما ذكرنا في الموجز السابق ، ال CLS هي subset من ال CTS تصف الحد الأدنى من المتطلبات اللازمة لنستطيع القول ان هذه اللغة تعمل تحت بيئة .net ، وبمعنى آخر ، فإن بعض محتويات CTS اختيارية حيث يمكن ان تجدها في بعض لغات .net ولا تجدها في الآخر ، مجموعة من محتويات CTS تم تجميعها في CLS لتكون اجبارية لكل لغة تستخدم بيئة .net للتطوير .

ويتم اطلاق مصطلح CLS Rules على هذه الشروط الاجبارية ، ويتم توصيفها ولا بد من تطبيقها لكل لغة تستخدم بيئة .net للتطوير .

بالنسبة للغات C# و VB.net ، هناك مجموعة كبيرة من الخصائص التي لا يضمها ال CLS ، بامكانك معرفة اذا كان الكود الذي تستخدمه موجود ضمن ال CLS ام لا لمراعاة عملها على جميع أنظمة التشغيل من خلال الكود التالي :

كود :
[assembly: System.CLSCompliant(true)]

سنتعرف على المزيد عنذ كتابة ال assembly في مراحل قادمة ، وحتى ذلك الحين ، إذا كنت مهتماً بموضوع ال CLS يمكنك مواصلة القراءة من هنا :
http://msdn2.microsoft.com/en-us/library...S.71).aspx
والله الموفق ..
والسلام عليكم ورحمة الله وبركاته .
Common Language RunTime :

كما ذكرنا سابقاً ، فإن ال CLR تضم كافة المعلومات المطلوبة ليعمل كود ال .net الخاص بك على الجهاز بغض النظر عن اللغة التي تمت بها كتابة الكود الأصلي ، ولتقريب المثال ، إذا كنت مبرمج فيجوال بيسك فإنك مضطر لوجود msvbvm60.dll على الجهاز ليعمل برنامجك المصمم بالفيجوال بيسك وبالأدوات الرئيسية ، اما لو كنت مبرمج جافا فإنك تحتاج إلى JVM على الجهاز الذي سيعمل عليه تطبيقك ... وبنفس الطريقة ، فإن ال CLR هو الملف الوحيد الذي تحتاجه ليعمل تطبيقك المصمم تحت بيئة .net على اي جهاز كومبيوتر .

ففي عالم ال .net ، تحتاج لوجود مكتبة ال CLR المسماه mscoree.dll اختصاراً ل Microosft Common Object Runtime Execution Engine ، مع بدء برنامجك ومع بداية اشارة ملف الاسمبلي إلى هذه المكتبة يقوم ال CLR بعمل Load لملف الاسمبلي وقراءة ال metadata ، يعمل Load ايضاً لل Types في الميموري ، واخيراً يقوم بترجمة اوامر البرنامج الموجودة في CIL إلى platform specific instructions كما اتفقنا سابقاً ليمكنه التنفيذ على جهازك ... اخيراً يبدء ال CLR بتنفيذ برنامجك ، وخلال عمل البرنامج سيقوم ال CLR بالتعامل مع الفئات الاساسية لل .net الموجودة في Base Class إذا كنت تستخدمها في برنامجك .

هذا المخطط من ويكبديا يوضح مراحل كتابة الكود حتى تحويله إلى native كود ومن ثم تنفيذه :


وكالعادة ، إذا كنت ترغب في معرفة المزيد يمكنك البدء من هنا :
http://msdn2.microsoft.com/en-us/library...S.71).aspx

والله الموفق ....
والسلام عليكم ورحمة الله وبركاته .
الرد }}}
تم الشكر بواسطة:
#8
منقول من المنتدى القديم
صاحب الرد أحمد جمال المشرف العام
استخدام Object Browser :

من قائمة View اختر Object Browser ، ستظهر لك الشاشة التالية :
[ATTACH=CONFIG]732[/ATTACH]

من خلال هذه ال Tool المتوفرة مع اصدارات Visual Studio المختلفة ، تستطيع استعراض كافة المكتبات والفئات الرئيسية في .net ، وتستطيع ان تعرف مكانه وملفات الاسمبلي التي يتبعها ، طريقة استخدامه ونبذة مصغرة عن فائدته .

لمزيد من المعلومات عن اي منها يمكنك اللجوء إلى مكتبات MSDN سواء الموجودة في قائمة Help ، او الموجودة على الانترنت مباشرة في موقع msdn .


الملفات المرفقة صورة/صور
   
الرد }}}
تم الشكر بواسطة:
#9
منقول من المنتدى القديم
صاحب الرد أحمد جمال المشرف العام
ال Name Space :

من خلال الدروس التي قدمناها هذا الاسبوع ، تستطيع ان تلاحظ أن System هي ال namespace الرئيسية التي تجد تشتق منها أغلب ال name spaces الأخرى .

هناك name space آخر باسم Microsoft تجد تحتها العديد من الفئات مثل Microsoft.ManagementConsole وجميع الفئات المشتقة من فئة Micosoft هي خاصة فقط بالتعامل مع خدمات مايكروسوفت ولذا فهي لا تعمل تحت ال mono مثلاً .

لاحقاً ، سيكون من الواضح ان تفسر ال name space التالي : System.Windows.Forms انها تحتوي على المهام الرئيسية التي تحتاجها لبناء Forms .

تعريف مجالات الأسماء :

يمكنك تعريف مجال الاسماء اعلى ملف الكود الخاص بك بالشكل التالي C# :
كود :
using System.Data.SqlClient;

أو VB.net :

كود :
Imports System.Data.SqlClient

إذا قمت على سبيل المثال باستيراد مجال الاسماء كما اوضحنا ، فيمكنك كتابة الأمر التالي مباشرة :
كود :
SqlConnection sql1=new SqlConnection();

في المقابل ، لو لم تقم بتعريفه في مجال الاسماء ، ففي هذه الحالة انت مضطر لدخوله بالترتيب في كل مرة تستخدمه فيها :
كود :
System.Data.SqlClient.`SqlConnection sql1=new System.Data.SqlClient.SqlConnection();
والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
الرد }}}
تم الشكر بواسطة:
#10
منقول من المنتدى القديم
صاحب الرد أحمد جمال المشرف العام
استخدام برنامج ildasm :

ضمن البرامج الملحقة مع Visual Studio 2008 تجد في الغالب برنامج ildasm ، يمكنك هذا البرنامج من الاطلاع على الاسمبلي الخاص بأي برنامج قمت بعمله باستخدام .net ، ايضاً يمكنك من رؤية ال CIL الخاص بهذا البرنامج ... هذه صور لكل مهمة فيهم :

الرد }}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم