برنامه نویسی شی گرا در VBScript

در این قسمت قصد دارم طریقه ی برنامه نویسی شی گرا را در VBScript آموزش دهم.
برای ایجاد کلاس در VBScript، از کلمه ی کلیدی Class استفاده می کنیم. برای پایان تعریف هم از End Class استفاده می کنیم:

1Class Car
2
3  '...
4
5End Class

کد فوق، بدنه ی کلاسی به نام Car را ایجاد می کند.

در داخل بدنه ی کلاس می توانیم متد ها و خصوصیات کلاس را با کلمات کلیدی Private و Public تعریف کنیم:

1Class Car
2  Public Color
3  Public CurrentSpeed
4End Class

به این ترتیب یک کلاس به نام Car ایجاد کردیم که دارای دو تا خصوصیت Color و CurrentSpeed است. همین الان کلاس ما کامل است. می توانیم از روی کلاس یک نمونه (شی) بسازیم:

1Dim ObjMyCar
2Set ObjMyCar = New Car
3ObjMyCar.Color = "Blue"

همان طور که می بینید، برای ساختن یک شی (یک نمونه از روی کلاس)، کافی است از دستور Set و کلمه ی کلیدی New استفاده کنیم. در کد بالا، یک شی به نام ObjMyCar از نوع کلاس Car ایجاد می شود.
برای مقدار دادن به خصوصیات کلاس هم کافی است نام کلاس را با نقطه استفاده کنیم. درست مثل C++ و ویژوال بیسیک و خیلی زبان های دیگر

ساختن کلاس داراس متد

متد ها در واقع کار هایی هستند که یک کلاس می تواند انجام دهد. برای ایجاد متد در کلاس کافی است که تعریف متد را در درون کلاس بیاوریم:

 1Class Human
 2  Private name
 3  Private age
 4  Public Sub Speek
 5    MsgBox "I am a human. My name is " & name & ". And I am " & age & " years old!"
 6  End Sub
 7  Private Sub Class_Initialize()
 8    name = "John"
 9    age = 25
10  End Sub
11End Class
12Dim test
13Set test = New Human
14test.Speek

در برنامه ی بالا یک کلاس جدید به نام Human (انسان) ایجاد کردیم که دارای دو تا خصوصیت name و age می باشد. این کلاس دارای یک متد Speek است که یک عبارت را به صورت پیغام نشان می دهد و سن و نام را می گوید.
نکته ای که در برنامه ی فوق قابل توجه است این است که متدی تعریف کرده ایم به نام Class_Initialize. این نام یک کلمه ی رزرو شده در زبان VBScript است و برای متد سازنده ی کلاس به کار می رود.
در واقع در کلاس فوق و هر کلاس دیگری، اگر متدی به نام Class_Initialize تعریف شده باشد، متد سازنده به حساب می آید.

متد سازنده چیست؟ متد سارنده متدی است که موقع ایجاد کلاس به صورت خودکار فراخوانی می شود. در واقع شما وقتی با استفاده از کلمه ی کلیدی New اقدام به ایجاد یک شی جدید از نوع کلاستان می کنید، در همین لحظه شی ایجاد می شود و متد سازنده ی کلاس فراخوانی می شود. وظیفه ی متد سازنده، مقدار دهی اولیه به شی است. همواره ما لازم داریم که وقتی شی ایجاد می شود، داخل متغیر های آن یک سری مقادیر پیش فرض قرار دهیم تا جلوی خطا های احتمالی را بگیریم.

خصوصیت ها یا Property ها

در مثال های بالا از متغیر های کلاس ها و توابع (متدها) نام بردیم. اما نوع خاصی از متغیر های کلاس ها هستند که به آن ها Property یا خصوصیت می گویند.
Property ها با متغیر ها تفاوت عمده ای ندارند. فرق مهمی که بین این دو تا هست، این است که متغیر ها معمولا باید Private باشند.

یک قانون وجود دارد که می گوید برای حفظ ویژگی بسته بندی در برنامه نویسی شی گرا، باید همه ی متغیر های استفاده شده در کلاس، خصوصی Private باشند. فقط متد ها حق دارند که عمومی Public باشند. دلیل این مسئله این است که در محیط خارجی، جزییات شی باید مخفی باشد. در خارج از شی نباید به متغیر ها دسترسی داشت. زیرا مانع از بسته بندی شی است.

اما در برخی شرایط ما لازم داریم که یک متغیر از بیرون قابل دسترسی و مقدار دهی باشد. در این گونه مواقع، از Property ها استفاده می کنیم. Property ها در واقع وسیله ای هستند که بتوان به واسطه ی آن ها به متغیر های کلاس دسترسی داشت. یعنی دسترسی به متغیر کلاس به صورت مستقیم صورت نمی گیرد و با واسطه انجام می شود.

مثال زیر را در نظر بگیرید:

 1Class Human
 2  Private internal_name
 3  Private internal_age
 4
 5  Public Sub Speek
 6    MsgBox "I am a human. My name is " & internal_name & ". And I am " & internal_age & " years old!"
 7  End Sub
 8  Private Sub Class_Initialize()
 9    internal_name = "John"
10    internal_age = 25
11  End Sub
12End Class
13Dim test
14Set test = New Human

در برنامه ی فوق، یک کلاس به نام Human تعریف شده که دارای دو تا متغیر internal_name و internal_age است. و متد Speek که نام و سن شخص را میگوید. متد سازنده ی کلاس هم که متغیر ها را مقدار دهی اولیه می کند.

حالا فرض کنید شرایطی پیش بیاید که ما لازم داشته باشیم متغیر internal_name را از بیرون مقدار دهی کنیم و به آن دسترسی داشته باشیم. برای این منظور کافی است یک Property ایجاد کنیم

برای تعریف یک Property جدید، به صورت زیر عمل می کنیم:

 1Class Human
 2  Private internal_name
 3  Private internal_age
 4  Public Sub Speek
 5    MsgBox "I am a human. My name is " & internal_name & ". And I am " & internal_age & " years old!"
 6  End Sub
 7
 8  Private Sub Class_Initialize()
 9    internal_name = "John"
10    internal_age = 25
11  End Sub
12  Public Property Get Name
13    MsgBox "Getting Name"
14    Name = internal_name
15  End Property
16
17  Public Property Let Name(ByVal strName)
18    MsgBox "Setting Name"
19    internal_name = strName
20  End Property
21End Class
22
23Dim test
24Set test = New Human

در کد فوق، یک property ایجاد کردیم به نام Name. همان طور که می بینید، برای ایجاد خصوصیت در کلاس، باید از کلمه ی کلیدی Property استفاده کنیم. هر خصوصیتی دارای دو تا متد Let و Get است.

1Public Property Get Name
2    MsgBox "Getting Name"
3    Name = internal_name
4End Property
5
6Public Property Let Name(ByVal strName)
7    MsgBox "Setting Name"
8    internal_name = strName
9End Property

هنگامی که می خواهیم از خارج از کلاس، به این خصوصیت، مقدار بدهیم، متد Let فراخوانی می شود. و موقعی که می خواهیم مقدار یک خصوصیت را بخوانیم، متد Get فراخوانی می شود.

مطالب مرتبط:

نظرات شما

قسمت نظرات با استفاده از سرویس دیسکاس پیاده سازی شده است. متاسفانه این سرویس از داخل ایران قابل دسترس نیست. لطفا از آی پی خارجی استفاده کنید.