الجزء الثالث VBScript
هذه السلسة التي كنا قد بدأناها بجزأين، يمثل الأول مقدمة إلى اللغة ويحوي الثاني
جزءا كبيرا من مفاهيم اللغة، وكما قد نوهنا سابقا بأن الجزأين السابقين كافيان
لتوضيح الحصة الكبرى من هذه اللغة، أما فيما تبقى من الدروس -التي تم فصلها بناء
على رغبة الاخوة- فإن الحديث سيكون حول موضوعات متقدمة بعض الشيء، وعلى الأخص
الدرسين الأولين، فإن لم تكن شغوفا للتطلع لكيفية إدارة الأمور فإنك تستطيع انتظار
الدروس التي تليها وثق بأنك تجاوزك لهذه الدرسين لن يؤثر على استيعابك لما يليها،
إلا أنك ستفتقد إمكانية النظر إلى ما خلف الكواليس.
أخيراً احب أن أخبركم بأنني أجد صعوبة في تبسيط بعض الأمور من خلال نقاط سريعة لذلك
فأنا لا أثق أنني أستطيع إيصال ما أريد إيصاله لك كاملا ولكنني سأحاول ذلك و أتتمنى
أن أوفق،
الدرس الثامن: الكائنات والأصناف Objects and Classes…
لا شك أنك كمبرمج قد سمعت عن مصطلح OOP أو أسلوب البرمجة كائنية التوجه، وربما قد
اعتدت استعماله إذا كنت مبرمجا بإحدى اللغات التي تدعمه بشكل جيد كـC++ و Java ومن
المؤكد أنه سيكون وسيلة تفكيرك الوحيدة إذا انتقلت إلى بيئة .Net الجديدة من
مايكروسوفت……
كأني بك تتساءل الآن "هل لغة VBScript لغة كائنية التوجه وإذا لم يكن الأمر كذلك
فما سر هذه المقدمة؟!" والجواب بأن لغة VBScript ليست لغة كائنية التوجه لأنها لا
تدعم المبادئ الأساسية للأخيرة …… ولكن اللغة قد بدأت بدعم فكرة الأصناف والتي تعد
المدخل الرئيس لفكرة البرمجة كائنية التوجه ولا أدري لماذا لم تكمل مايكروسوفت
مسيرتها وتقوم بدعم أسلوب OOP ولو بشكل جزئي كما فعلت في اللغة الأم Visual Basic.
إذا كنت ترى أن ما تحدثنا عنه مربكا بالنسبة لك فأنت بحاجة إلى توضيح لبعض المفاهيم
قبيل الانتقال إلى التطبيق العملي…
الكائن Object
تدعم لغة VBScript مفهوم الكائنات منذ إصداراتها الأولى ويمكن اعتبار أي كيان معروف
في الوجود كائنا مثلا "محمد" كائن، وموقع "C4arab" كائن آخر، والشركة الفلانية كائن
ثالث وهكذا … ولكل كائن خصائص Properties مميزة له تعرفه كاللون والحجم، أيضا
للكائن طرق Methods وهي الأعمال التي يقوم الكائن بإنجازها كالحركة أو القراءة.
الصنف Class
يعد الصنف النواة الأساسية للبرمجة كائنية التوجه OOP، وقد تم دعم مفهوم الصنف في
لغة VBScript منذ الإصدار الخامس للغة ويمكن تعريف الصنف بأنه جملة من الكائنات
المتشابهة في الخصائص والطرق، فمثلا "محمد" و "احمد" كائنان من صنف الإنسان حيث
نلاحظ أن لهما نفس الخصائص والطرق، بينما يختلف صنف "الدراجة الهوائية" عن صنف
"الإنسان"، فالأول قد يحتوي على الخاصية "حجم العجلات" أما الثاني فلا. ولنأخذ مثال
من بيئة البرمجة فمثلا عنصر تحكم HTML المسمى TextArea يعتبر صنف، ولو وضعنا
نسخا(حالات) في صفحتنا فسيعتبر كلا منها كائن مثلا TextArea1 و TextArea2.
إنشاء الأصناف
قبل الحديث عن كيفية إنشاء الأصناف من المفيد أن أخبرك بأن بنائك للصنف سيتيح لك
إعادة استخدامه مستقبلا بطريقة سهلة ودون حدوث مشكلات مع نصك البرمجي الجديد، وهذا
مما ابرز فوائد استخدام هذا الأسلوب البرمجي.
عند إنشائك لصنف معين ستفكر في الخصائص والطرق – والتي تطرقنا لها سابقا – إضافة
للأحداث التي سنتطرق لها بعد قليل.
وتمكنك لغة VBScript من إضافة الأصناف من خلال العبارة Class كالتالي
كود:
-------------------------------------------
Class ClassName
'Class Code
End Class
-----------------------------------------
إنشاء كائن من الصنف وتدميره
لن نتمكن من استخدام الصنف المنشأ إلا بعد إنشاء حالة(كائن) منه، ويمكن إنشاء كائن
من صنف كالتالي ..
كود:
---------------------------------------------------------------
Dim objBook 'التصريح عن متغير للكائن
Set objBook = New CBook 'CBook إنشاء كائن من الصنف
--------------------------------------------------------------
لعلك لاحظت في المثال السابق استخدامنا للعبارة Set عند إسناد القيمة للمتغير
والسبب في ذلك أننا نتعامل مع متغير لكائن وهذا يعني أننا لا نقوم بإسناد الكائن
نفسه، ولكننا نضع مؤشر Pointer إليه.
ولتدمير الكائن –عند عدم الحاجة إليه- فإننا نستخدم القيمة Nothing لتحرير الذاكرة
كالتالي ..
كود:
-----------------------------------------------
Set objBook = Nothing
---------------------------------------------
إنشاء الخصائص
تمثل الخصائص متغيرات ويفضل أن تكون من نوع Private أي يمكن التعامل معها على مستوى
الصنف فقط..
كود:
-----------------------------------------------------
Private m_sUsername
-----------------------------------------------------
وهناك عدة أنواع من الخصائص، فمنها ما هو للقراءة فقط ومنها ما هو للكتابة فقط
ومنها ما هو للقراءة والكتابة معا، وتوفر لغة VBScript بعض الإجراءات التي تمكنك من
قراءة وكتابة الخصائص، وفيما يلي توضيح ذلك..
1. الإجراء Property Let
ويستخدم لإسناد القيم للخصائص..
كود:
---------------------------------------------------------------
'التي تمثل كلمة المرور CustomerPassword متغير الخاصية
Private m_sPassword
Public Property Let CustomerPassword(sPassword)
m_sPassword = sPassword ' إسناد القيمة الجديدة
End Property
------------------------------------------------------------------
2. الإجراء Property Get
كود:
------------------------------------------------------------------
Class CCustomr
'التي تمثل كلمة المرور CustomerAge متغير الخاصية
Private m_iAge
Public Property Let CustomerAge(iAge)
m_iAge = iAge 'إسناد القيمة الجديدة
End Property
Public Property Get CustomerAge()
CustomerAge = m_iAge 'قراءة القيمة الحالية
End Property
End Class
----------------------------------------------------------------------
ويمكن التعامل مع الخاصية السابقة كالتالي..
كود:
---------------------------------------------------------------
Dim objCustomer
Set objCustomer = New CCustomer
objCustomer.CustomerAge = 90 ' ضبط
msgbox objCustomer.CustomerAge ' قراءة
----------------------------------------------------------------
3. الإجراء Property Set
وهو يشبه الإجراء Property Let كثيرا ولكنه يستخدم مع الكائنات.
إنشاء الطرق
الطرق قد تكون دالة أو إجراء فرعي –وقد تناولنا الدوال والإجراءات في الجزء الثاني-
ولذلك ستجد أن إضافة الطرق للصنف عملا سهلا..
كود:
-------------------------------------------------------------
Class CCustomer
' ShowGreeting الإجراء الفرعي الذي يمثل الطريقة
Sub ShowGreeting()
document.write "Hello"
End Sub
End Class
---------------------------------------------------------
ويمكن استخدام الطريقة السابقة من خلال شيفرتك كالتالي..
كود:
----------------------------------------------------------------
Dim objCustomer
Set objCustomer = New CCustomer
'ShowGreeting استدعاء الطريقة
objCustomer.ShowGreeting
-------------------------------------------------------------------
إنشاء الأحداث Events
الحدث هو عبارة عن رسالة يمكن للكائن إرسالها، فمثلا عند النقر على زر أمر كالذي
يظهر في مربعات الحوار فسينطلق حدث النقر Click، ويمكنك إضافة كود ينفذ مهمة معينة
عند إطلاق حدث معين …
وتوفر لغة VBScript الحدثين Class_Initialize الذي يتم إطلاقه عند إنشاء الكائن
والحدث Class_Terminate والذي يتم إطلاقه عندما تتحرر كافة المؤشرات التي تشير إلى
الكائن، وهذا مثال لتوظيف الحدث Class_Initialize
كود:
--------------------------------------------------------------
Private Sub Class_Initialize()
msgbox "Created"
End Sub
-------------------------------------------------------------
ملاحظات عامة:
ستجد في الدرس اللاحق تطبيقات أخرى على الاصناف تجعلك تفكر بشكل جدي باستعمالها
في شيفراتك المستقبلية.