بعون الله نبدأ الدرس الثامن من سلسلة دروس هيا نتعلم بعض المبادء لنطرق باب الإحتراف
أتمنى من الله أن يمدكم بجلد لتقوموا بقراءة هذه الدروس بعناية
هناك مشكلة في التعريب: عند محاولتي لتعريب المصطلحات البرمجية ولكني أثرت دائماً على كتابة المصطلح بلغته في جميع هذه الدروس أعذروني على تعريبي لهذه المصطلحات التي يمكن أن تكونوا غير متألفين عليها فأتمنى أن تحفظوها في لغتها على أنه مصطلح غير قابل لتعريب.أنواع النظام المشتركة - Common Type System (CTS)
تعرف أنواع النظام المشتركة Common Type System (CTS) كيفية التصيريح وأستخدامم وأدارة النوع Type في وقت التشغيل Runtime وهي أيضاً من أهم الأجزاء التي تدعم التوفقية بين تعددية اللغات المستخدمة cross-language integration. ينجز أنواع النظام المشتركة Common Type System (CTS) الوظائف التالية :
• يأسس المكاتب التي تساعد على التوفقية بين تعددية اللغات المستخدمة cross-language integration و أنواع أمنه وتنفيذ عالي الأداء للكود.
• يزود أنواع يمكن إعادة إستخدامها والتطوير عليها (نماذج غرضية التوجه Object-Oriented Model).
• تعريف مجموعة من القواعد التي يجب أن تتبعها جميع اللغات في تعريف الأنواع Types لكي تضمن توافقية في تصدير الكود بين اللغات وتساعد من التأكد من الكائن المنشأ في أحد اللغات يمكن أن يتفاعل مع لغات مختلفة.
لمحة عن أنواع النظام المشتركة - Common Type System (CTS) Overview
يصف هذا القسم المفاهيم لأنواع النظام المشتركة Common Type System (CTS) ويعرّف الشروط التي ستساعدك على فهمها كيفية العمل معها في لغتك:
تصنيف الأنواع - Classification of Types
تدعم أنواع النظام المشتركة Common Type System (CTS) نوعين رئيسيين:
• نوع القيمة Value types
وهو عبارة عن منطقة في الذاكرة تقوم بتخزين مباشر للبيانات, وأي حالة Instances من هذا النوع تخزن مباشرة في مكدس العملية stack أو تخزن مباشرة في التنظيم, أو تأتي معرفة مسبقاً داخل وتنجز أثناء التشغيل وكأمثله عليه : البيانات المعرفة من قبل المستخدم User-Defined Type – التعداد Enumeration
• نوع الإشارة Reference types
وهو عبارة عن منطقة في الذاكرة تقوم بتخزين مؤشر لعناوين للبيانات وجميع هذه الأنواع تخزن في منطقة في الذكرة تابع للبرنامج يطلق عليها اسم الكومه Heap أنواع الإشارة Reference types يمكن أن تكون أنواع وصف ذاتية،أمثله على هذه الأنواعPointer types أو Interface typesالنوع من نوع الإشارة Reference types يمكن أن تحدد من قيم أنواع الوصف الذاتية. الأنواع ذات الوصف الذاتي تنقسم إلى أنواع المصفوفات Array والصفوف Class. إنّ أنواع الصنف Class أصناف معرّفة من قبل المستخدم, الأصناف المعلبة Boxed Value Types والمندوبين Delegates.
المتحولات التي تكون من نوع القيمة Value types كل متحول يملك نسخته الخاصة للبيانات، ولذا العمليات التي نقوم بها على متحول لا تؤثّر على المتحولات الأخرى. نوع المتحولات التي تكون من نوع الإشارة Reference types يمكن أن تشير إلى نفس الكائن Object ،لذلك العمليات التي نقوم بها على متحول سوف تؤثّر على نفس الكائن Object المشار إليه لذلك حميع المتحولات التي تشير على نفس الكائن يمكنها أن ترى التغير الذي حدث علية.
تشتقّ كل الأنواع من System.Object الأساسي.
سنرى في المثال التالي الإختلاف بين أنواع الإشارة وأنواع القيمة
كود |
Imports System
Class Class1
Public Value As Integer = 0
End Class 'Class1
Class Test
Shared Sub Main()
Dim val1 As Integer = 0
Dim val2 As Integer = val1
val2 = 123
Dim ref1 As New Class1()
Dim ref2 As Class1 = ref1
ref2.Value = 123
Console.WriteLine("Values: {0}, {1}", val1, val2)
Console.WriteLine("Refs: {0}, {1}", ref1.Value, ref2.Value)
End Sub 'Main
End Class 'Test
|
كود |
using System;
class Class1
{
public int Value = 0;
}
class Test
{
static void Main() {
int val1 = 0;
int val2 = val1;
val2 = 123;
Class1 ref1 = new Class1();
Class1 ref2 = ref1;
ref2.Value = 123;
Console.WriteLine("Values: {0}, {1}", val1, val2);
Console.WriteLine("Refs: {0}, {1}", ref1.Value, ref2.Value);
}
}
|
كود |
Values: 0, 123
Refs: 123, 123
|
وكل نوع من هذه الأنواع مقسم إلى مجموعة من الأقسام.
يبين المخطط التالي العلاقة بين الأنواع المختلفة. ملاحظة تلك الحالات Instances من الأنواع يمكن أن تكون نوع القيمة Value typesأو أنواع وصف ذاتية، بالرغم من أنّ هناك أصناف مشتقة من هذه الأنواع.
| هذه الصورة مصغره ... نقره على هذا الشريط لعرض الصوره بالمقاس الحقيقي ... المقاس الحقيقي 701x389 . |
القيم والكائنات Values and Objects
القيم تمثيل ثنائي من البيانات، والأنواع تزوّد طرق لترجمة هذه البيانات. ونوع القيمة Value typesمخزنه مباشرة كتمثيل ثنائي البيانات. إنّ نوع الإشارة Reference types مؤشر لموقع سلسلة من القطع التي تمثّل البيانات.
كلّ قيمة لها نوع مضبوط الذي يعرّف تمثيل القيمة بالكامل والعمليات المعرّفة على القيمة. قيم أنواع الوصف الذاتية تدعو الكائنات Object. بينما هو محتمل دائما لتقرير النوع المضبوط لجسم بفحص قيمته، أنت لا تستطيع عمل ذلك مع نوع قيمة أو نوع مؤشر .قيمة يمكن أن تأخذ أكثر من نوع واحد. الأنواع التي تطبّق وصلةInterface أيضا هي قيمة من نوع الوصلة الذي طبقته. على نفس النمط :الأنواع التي تشتقّ من نوع أساسي Base Typeأيضا هي قيمة من نوع ذلك الصنف الأساسي الذي أشتقت منه.
كود |
Class Class1
Implements MyInterface
{
……
}
Dim obj As Class1 = new Class1();
Dim obj As MyInterface = new Class1();
|
الأنواع والتجمعات Types and Assemblies
يستخدم وقت التشغيل Runtime التجمعات لتحديد أماكن الأنواع ليقوم بتحميلها. تحتوي قائمة شحن الجمعية Assembly Manifest المعلومات التي يستخدم وقت التشغيل Runtimeليقوم بحل كلّ إشارات النوع التي جعلت ضمن مجال التجمع.
ينقسم اسم النوع في وقت التشغيل Runtime إلى قسمين منطقيّان: اسم التجمع واسم النوع ضمن التجمع. النوعان اللذان يملكان نفس الاسم ولكن في تجمعات المختلفة يعرفوا كنوعان مختلفين.
تزوّد التجمعيات إتساقا بين مجال الأسماء التي يراها المطوّر ومجال الأسماء من منظور المكاتب المستخدمه لتطوير. مثال نستطيع أن نقوم بإنشاء نوع مطلقين عليه اسم موجود مسبقاً ولكن في تجمع آخر
الأنواع وفضاء العناوين Types and Namespace
من جهة نظر وقت التشغيل Runtime فضاء العناوين Namespace ليس إلا مكان لتخزين أسماء الأنواع يمكن لإحد اللغات أن تقوم بعملية تسهيل للمبرمجين بأن يتم حذف اسم النوع الكامل ولكن كما قلنا مسبقأ فهذا لتسهيل فقط يعني عندما تقوم بإحدى اللغات بكتابة String حصراً سو ف يراه وقت التشغيل Runtime بالاسم الكامل System.String
تعريف الأنواع Type Definitions
نحن نقوم بتعريف أنواعنا عن طريق الأنواع المبني داخلأ Built-in value types مثل Int – Boolean … أو المؤشرات Pointers أو المصفوفات Arrays أو المندوبين Delegates. ويمكن لهذه الأنواع أن تتراكب ضمن بعضها البعض.
يتضمن تعريف الأنواع:
• الصفات Attributes التي تعرف على النواع.
• مدى رؤية النوع (مجال الرؤيه) Type Accessibility.
• أسم النوع.
• النوع الأساسي للنوع Base Type.
• الوجهات interfaces التي يرثها النوع.
• التعاريف لكلّ من أعضاء النوع Members.
الصفات Attributes
تزيد خصائص إذافية من قبل المبرمج: وتطبق على أغلب عناصر اللغة مثل الأنواع Types , الخصائص Properties، والمناهج Methods ... إلخ
مجال الرؤيا Type Accessibility
كلّ الأنواع لها معدّل وصول الذي يحكم وصول الأنواع الأخرى إليها. يصف الجدول التالي طرق الوصول Accessibilities المدعومه من قبل وقت التشغيل RunTime.
| هذه الصورة مصغره ... نقره على هذا الشريط لعرض الصوره بالمقاس الحقيقي ... المقاس الحقيقي 885x158 . |
الوصول إلى الأنواع المتراكبه ضمن النواع مرتبط إلى نوع مجال رؤيته ومحال رؤية مكان تواجد النوع على ذلك نبين أنه لا يمكن لأي عضو تجاوز رؤية المجال المصرح بداخله
لتوضيح ذلك نفترض لدينا عضو ما نطلق عليه اسم X في صنف قمنا بإنشائه مطلقين عليه اسم MyClass في احد البرامج ونطبق عليه مجالات الرؤيا Type Accessibility :
كود |
Accessibility Class MyClass
Accessibility X :: Integer
End Class
|
• إذا قمنا بتعريف الصنف MyClass Class بـ Private سوف يكون مجال رؤية العضو X Members ضمن هذا النوع فقط
• إذا قمنا بتعريف الصنف MyClass Class بـ Internal C#– Friend VB سوف يكون مجال رؤية العضو X Members ضمن هذا التجمع Assemblies ومرتبط برؤية مجال النوع التي سوف نأتي على ذكرها بعد قليل.
• إذا قمنا بتعريف الصنف MyClass Class بـ Internal C#– Friend VB أوPublic سوف يكون مجال رؤية العضو X Members مرتبط على حسب تعريفه:
إذا قمنا بتعريف مجال رؤية العضو X Members بـ Private لن نستطيع رؤية هذا العضو Members من خارج الصنف MyClass Class .
إذا قمنا بتعريف مجال رؤية العضو X Members بـ Public نستطيع رؤية هذا العضو Members من خارج الصنف MyClass Class .
إذا قمنا بتعريف مجال رؤية العضو X Members بـ Internal C#– Friend VB نستطيع رؤية هذا العضو Members من خارج الصنف MyClass Class ولكن ضمن هذا التجمع Assemblies.
إذا قمنا بتعريف مجال رؤية العضو X Members بـ Protected لن نستطيع رؤية هذا العضو Members من خارج الصنف MyClass Class إلا إذا قمنا بوراثة هذا الصنف أي من ضمن الأصناف المشتقة derived .
إذا قمنا بتعريف مجال رؤية العضو X Members بـ Protected Internal C#– Protected Friend VB نستطيع رؤية هذا العضو Members من خارج الصنف MyClass Class ولكن ضمن هذا التجمع Assemblies و من ضمن الأصناف المشتقة derived .
أسم النوع Type Names
يفرض نواع النظام المشتركة Common Type System (CTS) قيدين فقط على الأسماء:
1. كلّ الأسماء مشفّرة كنصوص نظام الحروف الدولي الموحد (16 بت) Unicode (16-bit) characters .
2. لاي يسمح للأسماء أن تتضمن قيمة 0x0000 .
كلّ المقارنات تعمل على قاعدة بايت بايت byte-by-byte ، وهو حساس لحالت الحروفحcase-sensitive ومكان التعريف.
بما أننا نستطيع الوصول إلى الأنواع من قبل تجمعات Assemblies آخرى، لذلك يجب على الأسم أن يحمل أسم فريد ضمن فضاء الأسماء Namespace المعرف بداخلة لأن نواع النظام المشتركة Common Type System (CTS) يتبع نظام الأسم بالكامل ليتم التعرف على النوع كما ذكرنا مسبقاً كمثال على ذلكً System.IO.File .
الأنواع الأساسية والواجهات Base Types and Interfaces
يمكن للأنواع أن ترث القيم والسلوك من نوع آخر. نواع النظام المشتركة Common Type System (CTS) لا يسمح للأنواع أن ترث من أكثر من نوع أساسي واحد.
يمكن للأنواع أن تقوم بتطبّق أيّ عدد من الواجهات. لتطبيق واجهه Interfaces ويجب تطبيق جيمع الأعضاء الإفتراضية Virtual Method ضمن النوع المعرفه من قبل الواجهه Interfaces.
نوع الأعضاء Type Members
إنّ السلوك وحالة النوع معرّف من قبل أعضاء النوع من : الأحداث Events و الحقول Fields و الأنواع المتراكبه Nested Types و الطرق Methods والخصائص Properties.
موعدنا إن شاء الله في الدروس القادمة أتمنى لكم التوفيق