تبليغاتX
لحظه های ناب




















Blog . Profile . Archive . Email . Design by .


لحظه های ناب

فصل چهارم:

پروژه یک برنامه ی ساده:
یک برنامه ساده می خواهیم ایجاد کنیم که قابلیت پذیرش پلاگین را داشته باشد. این برنامه حاوی یک فرم است که روی ان دو عدد
textbox است و می خواهیم پلاگین بنویسیم که به کنترلهای textbox روی فرم اصلی دسترسی پیدا کند و حاصلضرب دو عدد داخل textbox را بدست آورد و منویی هم به متن فرم اصلی اضافه کند.
حالا یک
solution در vs ایجاد کنید و یک پروژه جدید از نوع class library به نام IPlugin به آن اضافه کنید تا اولین لایه برنامه را ایجاد کنیم.
لایه رابط
حالا یک
code file به پروژه اضافه کرده و با توجه به زبان یکی از کدهایه زیر را در ان قرار دهید.
با زبان وی بی

کد:

Public Interface IPlugin      Property Name() As String      Sub About()     Sub DisplayPlugForm()     Sub GetMessage(ByVal msg As String)      Event SendMessage(ByVal msg As String, ByVal IPlugin As IPlugin)     Property menu() As Windows.Forms.ToolStripItemCollection  End Interface

 

خوب interface بالا متدها و رویداها و خاصیتهایی که باید در هر پلاگین باشد را توصیف می کند.
خاصیت
name این خاصیت حاوی نام پلاگین است.
خاصیت
menu این خاصیت حاوی منوهایی است که می خواهیم به برنامه اصلی اضافه شود.
متد
about این متد فرم توضیحات پلاگین را نمایش خواهد داد.
متد
DisplayPlugForm فرم اصلی پلاگین را نمایش می دهد.
متد
GetMessage این متد برای فرستادن پیغام از برنامه اصلی به پلاگین بکار می رود.
رویداد
SendMessage این رویداد وقتی اجرا می شود که بخواهیم پیغامی را از پلاگین به برنامه اصلی بفرستیم .
خوب لایه اول تمام شد.
لایه برنامه
ابتدا یک پروژه جدید از نوع
application به نام program به solution خود اضافه کنید و پروژه قبلی را به فهرست رفرنس های این پروژه اضافه کنید.
این قسمت برنامه شامل دو کلاس مهم است.
اولین کلاس
IPlugin_Collection این کلاس همانطور که از نامش پیداست یک مجموعه است که ما تمام پلاگین هایه خودمان را در ان نگه می داریم کد این کلاس
وی بی

کد:

Imports sdk  Public Class IPlugin_Collection     Inherits CollectionBase      Public Property item(ByVal iIndex As Integer) As IPlugin         Get             Return (InnerList.Item(iIndex))         End Get         Set(ByVal Value As IPlugin)             InnerList.Item(iIndex) = Value         End Set     End Property      Public Function add(ByVal iPluginObj As IPlugin) As Integer         Return InnerList.Add(iPluginObj)      End Function      Public Function contains(ByVal iPluginObj As IPlugin) As Boolean         Return (InnerList.Contains(iPluginObj))     End Function      Public Function indexOf(ByVal iPluginObj As IPlugin) As Integer         Return (InnerList.IndexOf(iPluginObj))     End Function      Public Sub remove(ByVal iPluginObj As IPlugin)         Call InnerList.Remove(iPluginObj)     End Sub       End Class


کلاس بعدی کلاس
plugin_manager است در این کلاس ما پلاگین ها را لود می کنیم.
ما برای لود پلاگین ها علاوه بر داشتن فایل
dll انها باید نام کلاس اصلی این پلاگین ها که براساس انترفیس پروژه اول ما که شکل گرفته اند را باید داشته باشیم.من در این برنامه اطلاعات پلاگین ها را در ریجیستری ذخیره کردم.که بعدا در این مورد بیشتر توضیح میدهیم حالا کد کلاس
وی بی

کد:

Imports SDK Public Class plugin_manager     Public cPicPlugins As New IPlugin_Collection()     Public Event reciveMessage(ByVal msg As String, ByVal IPlugin As IPlugin)      Private Sub recive(ByVal msg As String, ByVal IPlugin As IPlugin)         RaiseEvent reciveMessage(msg, IPlugin)     End Sub          Public Sub load_plugin()         Dim r, r1, r2 As Microsoft.Win32.RegistryKey         Dim s(), s1, pStrPath, pStrType As String         r = Microsoft.Win32.Registry.LocalMachine         r1 = r.OpenSubKey("SOFTWARE\my program\plug in", False)         s = r1.GetSubKeyNames         For Each s1 In s             Try                 r2 = r1.OpenSubKey(s1)                 pStrPath = r2.GetValue("path")                 pStrType = r2.GetValue("type")             Catch ex As Exception             End Try             Try                 Dim pObhHandle As Runtime.Remoting.ObjectHandle = Activator.CreateInstanceFrom(pStrPath, pStrType)                 Dim pIpnPlugin As SDK.IPlugin = CType(pObhHandle.Unwrap, SDK.IPlugin)                 Call cPicPlugins.add(pIpnPlugin)                 AddHandler pIpnPlugin.SendMessage, AddressOf recive             Catch ex As Exception                 MsgBox(ex.ToString)             End Try         Next     End Sub  End Class

توضیحات کلاس
متد
load_plugin از اسمش مشخص است که برای لود پلاگین ها بکار می رود.در این تابع اطلاعات از ریجیستری خوانده شده و dll پلاگین ها لود می شود. لود این dll ها در این دو خط کد است.
وی بی

کد:

Dim pObhHandle As Runtime.Remoting.ObjectHandle = Activator.CreateInstanceFrom(pStrPath, pStrType)   Dim pIpnPlugin As SDK.IPlugin = CType(pObhHandle.Unwrap, SDK.IPlugin)

                               SDK.IPlugin pIpnPlugin = (SDK.IPlugin)pObhHandle.Unwrap();

پس از لود انها را در مجوعه پلاگین قرار می دهیم.
cPicPlugins مجموعه پلاگین هایه ماست.
رویداد
reciveMessage این رویداد واسطه ای بین رویداد sendmessage یک پلاگین و فرم اصلی برنامه است.
تابع
recive هم این رویداد را فرا می خواند.
کدهای فرم اصلی
با وی بی

کد:

Dim WithEvents p As New plugin_manager     Dim plug As SDK.IPlugin     Dim a As Integer      Private Sub p_reciveMessage(ByVal msg As String, ByVal IPlugin As SDK.IPlugin) Handles p.reciveMessage         If msg = "textbox1" Then             p.cPicPlugins.item(p.cPicPlugins.indexOf(IPlugin)).GetMessage(TextBox1.Text)         ElseIf msg = "textbox2" Then             p.cPicPlugins.item(p.cPicPlugins.indexOf(IPlugin)).GetMessage(TextBox2.Text)         End If     End Sub      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click         p.load_plugin()         For a = 0 To p.cPicPlugins.Count - 1             plug = p.cPicPlugins.item(a)             If Not plug.menu Is Nothing Then                 Me.MenuStrip1.Items.AddRange(p.cPicPlugins.item(a).menu)             End If         Next      End Sub

تو ضیحات کد:
متغییر ها که نیاز به توضیح ندارند اما دو تابع رویداد اولی تابع
p_reciveMessage که وقتی اطلاعاتی از پلاگین ها می رسد اجرا می شود. در این تابع ما پس از دریافت کردن پیغام پاسخ مناسب را می فرستیم مثلا در اینجا یک پلاگین با فرستادن پیغام textbox1 ما برای ان مقدار text این کنترل را می فرستیم.
رویداد کلیک دکمه لود پلاگین ها با اجرا شدن این تابع پلاگین ها لود و منو های داخل ان در منو اصلی برنامه ادغام می شود.


لایه پلاگین
ابتدا یک پروژه از نوع
application ایجاد کنید.سپس در قسمت خصوصیات پروژه نوع پروژه را از application به class library تغییر دهید چون باید خروجی ما حتما یک dll باشد.سپس پروژه ی اول یعنی IPlugin را به رفرنس های برنامه اضافه کنید
این پروژه یک کلاس مهم بنام
my_plugin دارد.این کلاس براساس Interface IPlugin که در پروژه اول نوشتیم ایجاد می شود.
کد وی بی

کد:

Imports sdk  Public Class my_plugin     Implements IPlugin     Dim WithEvents f As Form1     Public Sub New()         f = New Form1     End Sub #Region "Private declarations"      Private Const IPlugin_name As String = "my_plugin"  #End Region  #Region "Property interface"      Public Property Name() As String Implements IPlugin.Name         Get             Return (IPlugin_name)         End Get         Set(ByVal value As String)          End Set     End Property      Public Property menu() As Windows.Forms.ToolStripItemCollection Implements IPlugin.menu         Get             Return (f.MenuStrip1.Items)         End Get         Set(ByVal value As Windows.Forms.ToolStripItemCollection)          End Set     End Property     Dim message As String     Public Sub GetMessage(ByVal msg As String) Implements IPlugin.GetMessage         message = msg     End Sub      Event SendMessage(ByVal msg As String, ByVal IPlugin As IPlugin) Implements IPlugin.SendMessage       Public Sub About() Implements IPlugin.About          Dim f As New about         f.ShowDialog()     End Sub      Public Sub DisplayPlugForm() _         Implements IPlugin.DisplayPlugForm         f.Show()     End Sub  #End Region       Private Sub f_menu1_click() Handles f.menu1_click         RaiseEvent SendMessage("textbox1", Me)         f.a = Int(Message)         RaiseEvent SendMessage("textbox2", Me)         f.b = Int(Message)     End Sub End Class

توضیحات کد:
خاصیت
name و menu اولی نام پلاگین را بر می گرداند دومی هم menu فرم اصلی (البته در اینجا برنامه نویس  منو را با کد تعریف نکرده  و یک منو داخل فرم گذاشته  تا بعد آیتم های آن را به عنوان منو خواهد گذاشت که البته این کار صحیحی نیست و نباید آن را انجام داد)

 تابع GetMessage هم اطلاعات در یافتی از برنامه اصلی را در متغییر رشته ای بنام message ذخیره می کند.
تابع های
About و DisplayPlugForm هم به ترتیب فرم های توضیحات برنامه و فرم اصلی را نمایش می دهد.
تابع رویداد
f_menu1_click این هم وقتی اجرا می شود که منو روی فرم اصلی کلیک شود.
این تابع پبغامی را به برنامه اصلی فرستاده و از برنامه اصلی مقدار  تکس با کس را کنترل می کند و سپس این مقادبر را در متغییرهایی که در فرم اصلی تعریف کردیم ذخیره می کند.
می رسیم به کد فرم اصلی
با وی بی

کد:

Public Class Form1     Public a, b As Integer     Public Event menu1_click()     Private Sub ضربToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ضربToolStripMenuItem.Click         RaiseEvent menu1_click()         Me.Show()         Label1.Text = "حاصلضرب اعداد شما برابر" + (a * b).ToString     End Sub      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load         Me.MenuStrip1.Hide()     End Sub End Class

 

 

 

توضیحات کد:
دو متغییر
a,b که قبلا توضیح دادم رویداد menu1_click هم که رویدادی است که با فشرده شدن منو فرا خوانده می شود و بقیه کدها هم فکر نکنم نیاز به توضیح باشد.

اجرای برنامه مثال
ابتدا شما فایل ریجیستری برنامه را با نام
reg.reg را اجرا کنید تا کلید و مقادیر ریجیستری ایجاد شود و سپس برنامه را اجرا نمایید.
کد برنامه
با وی بیplug_in_vb.zip
مقاله بصورت article.zip
pdf
فایل ریجیستری reg.zip

نوشته شده در چهارشنبه هجدهم اردیبهشت 1387ساعت 21:13 توسط ترسیم گر|

فصل سوم:

ایجاد یک پروژه در VB.NET

برای ایجاد یک پروژه جدید در VB.NET باید مراحل زیر را طی کنبد:

1- از منوهای محیط Visual Studio .NET 2005 قسمت  File > New Project > Visual Basic > Windows را انتخاب نمایید.

۲- از قسمت Templatesروی گزینه WIndows Application  کلیک کرده و در قسمت Name نام پروژه را وارد کنید. (در اینجا نام پروژه Mehdi انتخاب شده است.)

۳- برای ساخت پروژه OK را فشار دهید.

 

 

در این مرحله می توانید فرم اصلی برنامه را - که به طور پیش فرض نام و عنوان آن Form1 - است ببینید. در قسمت Properties می توانید مشخصات مربوط به این فرم مثل نام، عنوان، رنگ و . . . را ملاحظه کنید. به عنوان مثال در این قسمت عنوان فرم را به عبارت "فرم آزمایشی" تغییر می دهیم . برای این کار در قسمت Properties روی عنوان Text کلیک کرده و مقدار فعلی آن را با عبارت "فرم آزمایشی" جایگزین کنید. بلافاصله پس از اعمال این مشخصه، عنوان پنجره به "فرم آزمایشی" تغییر خواهد کرد.

در پنجره ToolBox اشیائی را که می توان به فرم اضافه کرد - مثل تکست باکس، چک باکس، باتون و . . . - مشخص شده اند. دابل کلیک کردن روی هر یک از این اشیاء یک نمونه از آن شیء به فرم اضافه می کند. به عنوان مثال یک باتون به فرم اضافه کرده، و عنوان آنرا - از قسمت Properties - به "تست" تغییر دهید.

 

 

حال اگر روی این باتون دابل کلیک کنید وارد قسمت کد نویسی خواهید شد. کلیه دستوراتی که در این بخش می نویسید زمان اجرای برنامه با کلیک کردن بر روی باتون اجرا خواهند شد.

دستورات زیر را در قسمت کد نویسی مربوط به این باتون می نویسیم:

MessageBox.Show("www.aachp.ir", "Mehdi")

 

 

حال با فشار دادن کلید F5 برنامه را اجرا کرده و نتیجه را ببینید. با کلیک بر روی باتون دستور نوشته شده ما اجرا خواهد شد. 

 

منبع :www.aachp.ir

نوشته شده در چهارشنبه هجدهم اردیبهشت 1387ساعت 21:6 توسط ترسیم گر|

فصل دوم:       

نگاهی بر برنامه نويسی شی گراء در دات نت

برنامه نويسی شی گراء، بدون شک مهمترين تحول در دنيای نرم افزار طی ساليان گذشته بوده که بيشترين تاثير را در پيشبرد نرم افزار بدنبال داشته  و ما امروز در صنعت گسترده نرم افزار از دستاوردهای وسيع  آن بهره مند هستيم . در اين قسمت قصد داريم ، به بررسی برنامه نويسی شی گراء پرداخته و از اين زاويه نگاهی به دات نت  داشته باشيم .

ويژوال بيسيک دات نت و برنامه نويسی شی گراء


ويژوال بيسيک دات نت يک زبان برنامه نويسی شی گراء کامل است . اين بدان معنی است که زبان فوق از چهار اصل برنامه نويسی شی گراء يعنی : انتزاع (abstraction ) ، کپسوله سازی کد و داده  ( encapsulation  ) ، وراثت  ( inheritance) ، چند ريختی ( polymorphism ) حمايت می نمايد. در ادامه با اصول چهار گانه فوق بيشتر آشنا شده و مشاهده خواهيم کرد که هر يک از اصول فوق، چه دستاوردی را  برای پياده کنندگان نرم افزار شی گراء بدنبال خواهند داشت .

انتزاع  ( abstraction )


انتزاع ، يک بايد غير قابل اتتخاب و جزء لاينفک يک شی است . مثلا"  شی Button که در فرم های ويندوز و يا وب از آن بدفعات استفاده می گردد ، دارای متدی با نام  Click  است . متد فوق ، يک انتزاع است و چه بخواهيم و يا نخواهيم وجود خواهد داشت . ( تغيير شکل اوليه Button در زمانيکه بر روی آن کليک می گردد ).  در اين رابطه رويداد OnClick  يک انتخاب است که پياده کنندگان می توانند با توجه به سياست های موجود در نرم افزار نحوه برخورد با رويداد فوق را تبين و مشخص نمايند . در ويژوال بيسيک دات نت ، ساختاری که امکان تعريف يک "انتزاع " را فراهم می نمايد ، کلاس ( class ) ، ناميده می شود. واژه کلاس و شی ، اغلب بجای يکديگر استفاده می گردند ، اما  شی در واقع يک نمونه از يک کلاس است . يک عنصر شامل مجموعه ای از يک و يا چندين شی نظير يک کتابخانه کلاس در يک DLL است .

 

کپسوله سازی کد و داده   (encapsulation)


استقرار ساختمان داده ها و کدهای مربوطه جهت پردازش داده های فوق ، بمنظور رسيدن به يک هدف مشخص در يک Box و توليد يک شی مشخص با اهداف از قبل تعريف شده ، کپسوله سازی ناميده می گردد.
کپسوله سازی ، اغلب با نام مخفی سازی اطلاعات نيز ناميده می شود. اما با اينکه اين دو واژه در برخی حالات بجای يکديگر استفاده می گردند ، نمی توان آنان را مترادف هم در نظر گرفت . آنان دارای مفاهيمی مجزاء می باشند. کپسوله سازی ، پياده سازی يک شی را از رفتار آن  تفکيک و بنوعی محدوديتی را  بمنظور دستيابی به داده داخلی  ايجاد می نمايد . محدوديت فوق ، باعث می گردد که جزئيات خاصی از رفتار يک شی مخفی گردد . بدين ترتيب ، امکان ايجاد يک جعبه سياه فراهم که وضعيت داخلی يک شی در مقابل استفاده کنندگان وو آسيب های احتمالی حفاظت خواهد شد .
کپسوله سازی معمولا" با "انتزاع " نيز اشتباه گرفته می شود. با اينکه دو مفهوم فوق تا حدود زيادی با يکديگر مشابه  می باشند ، ولی  ايده های متفاوتی را ارائه می نمايند. انتزاع يک فرآيند بوده و شامل عمليات لازم بمنظور مشخص نمودن خصايص و رفتار يک  شی برای  پردازش است . کپسوله سازی ، مکانيزمی است که توسط  "انتزاع " ، پياده سازی می گردد .

 

توارث  (inheritance)


توارث ، قابليت تعريف يک کلاس جديد است که رفتارهای خود ( و کد ) را ااز يک کلاس موجود ، به ارث می برد. کلاس جديد ، کلاس مشتق شده و يا کلاس فرزند ، ناميده می شود . کلاس اوليه بعنوان کلاس پايه و يا مادر  ناميده می شود .
توارث بمنظور ارائه ارتباطات از نوع "
Is-a " و يا "kind-of
" ، است مهمترين دستاورد توارث ، قابليت توسعه و استفاده مجدد از کد است .  علاوه بر امکان فوق ، يکی ديگر از دستاوردهای توارث ، قابليت ارتباط بين اشياء متفاوتی است که از يک شی واحد ، مشتق شده اند .

در ++C ، نوع خاصی از توارث و با نام توارت چندگانه ، استفاده می گردد. در سناريوی فوق ، يک کلاس از بيش از يک کلاس پايه مشتق می شود . تعداد زيادی از برنامه نويسان ++C ، استفاده از توارث چندگانه  را دارای چالش های خاص خود دانسته و در موارديکه از کلاس های پايه با اسامی توابع يکسان  استفاده می گردد بکارگيری صحيح آنان برای حتی برنامه نويسان با تجربه مسائل خاص خود را بدنبال خواهد د اشت .ويژوال بيسيک دات نت ، نظير جاوا صرفا" امکان توارث يگانه را حمايت می نمايد.
در زمان طراحی شی گراء ، می بايست شناخت لازم و عميقی از توارث و تاثيرات آن وجود داشته باشد . ايجاد يک شی که از شی ديگر مشتق خواهد شد ، همواره عمليات آسانی نخواهد بود و با مجموعه ای از سوالات روبرو خواهيم شد .

 مثلا"  آيا  دايره نوع خاصی از بيضی است ؟ آيا مربع شکل خاصی از مستطيل است ؟ . 

 

چند ريختی ( polymorphism  )


چندريختی ، تصور( برداشت )  اشکال متفاوت از يک شی ، است. در برنامه نويسی شی گراء ، اين انتظار وجود دارد که پتانسيل های زبان استفاده شده برخوردی مناسب و متفاوت با اشياء را در زمان اجراء داشته باشند  نوع ديگری از چند ريختی  ، Overloading ناميده می شود. در مدل فوق ،  يک شی دارای دو و يا بيش از دو رفتار است که دارای اسامی يکسان می باشند . متدها صرفا" از طريق پيامهائی که دريافت می نمايند ( توسط پارامترهای متد ) مشخص خواهند شد . ايجاد يک متد مشترک با نام power  بمنظور محاسبه توان اعداد صحيح  و اعشاری ، نمونه ای مناسب در اين زمينه است . با اينکه می دانيم برای محاسبه توان اعداد صحيح و اعشاری از الگوريتم ها ی متفاوتی استفاده می گردد ، می خواهيم با داشتن يک متد از قابليت های آن بمنظور محاسبه توان اعداد صحيح و يا اعشاری استفاده نمائيم . استفاده کننده از متد Power ، با سناريوی طراحی شده درون متد کاری نداشته و صرفا" پارامتر خود را در اختيار متد قرار خواهد داد . با تمهيداتی که درون متد پيش بينی شده است ، تصميم لازم در خصوص استفاده از روتين های جانبی ( متدهای جانبی ) بمنظور محاسبه توان اعداد صحيح و يا اعشاری يک عدد ، اتخاذ خواهد شد .
چند ريختی ، يکی از مفاهيم و ويژگی های مهم  برنامه نويسی شی گراء بوده که انعطاف شگفت انگيزی را در ارتباط با طراحی برنامه ها بدنبال خواهد داشت .

 

فريمورک دات نت


اشيائی که با استفاده از ويژوال بيسيک دات نت ايجاد می گردند، تداوم و ادامه حيات خود را مديون فريمورک دات نت می دانند. پلات فرم فوق، با استفاده از استانداردهای های باز و پروتکل هائی نظير XML  ، HTTP و SOAP ايجاد شده است . فريمورک دات نت ، شامل يک کتابخانه استاندارد غنی است که سرويس های اساسی را در اختيار تمامی زبانهای سازگار با دات نت ، قرار می دهند.هدف از معماری فوق ، ارائه امکانات و تسهيلات لازم برای برای ايجاد ، بکارگيری و اجراء سرويس های مبتنی بر وب است . عليرغم هدف  فوق ، فريمورک دات نت ، محلی ايده آل برای  پياده سازی تمامی انواع برنامه ها  صرفنظر از طراحی است .  برخی از مزايای معماری فوق بشرح زير می باشد :

·         عمليات توزيع شده بر اساس استانداردهای اينترنت و پروتکل هائی نظير HTTP,XML و SOAP 

·         ارائه سرويس های جهانی و بزرگ نظير Object pooling, پيام ، امنيت و تراکنش

·          زيرساخت  مناسب بمنظور تسهيل در پياده سازی کدها و عناصر با قابليت استفاده مجدد

·         تسهيل در پياده سازی تحت وب با استفاده از استانداردهای باز .

·         ارتباط کامل بين زبانها که  دستاوردهائی نظير : توارث کلاس ها ،  Catch exceptions و اشکال زدائی بين زبان های متفاوت را بدنبال خواهد داشت .

·         بکارگيری نرم افزار در دات نت بمراتب ساده ترنسبت به گذشته خواهد بود ، چراکه تنظيمات در فايل های پيکربندی از نوع XML ذخيره و در دايرکتوری مربوط به نرم افزار ذخيره خواهند شد. در اين راستا ضرورتی به استفاده از ريجستری نخواهد بود

دو بخش بسيار مهم دات نت که توجه طراحان و پياده کنندگان نرم افزار را بسرعت بسوی خود جلب می نمايد : CLR)Common Language Runtime) و  کتابخانه کلاس دات نت است . CLR ،  سرويس های لازم برای عناصری را که تحت دات نت اجراء می گردند ، ارائه می نمايد .کتابخانه کلاس دات نت ، مجموعه ای گسترده از کلاس ها را برای هر چيزی  از دستيابی به داده گرفته تا طراحی رابط کاربر، امنيت ، شبکه و ... ارائه می نمايد. کتابخانه همچنين شامل تعاريف مورد نياز برای تمامی نوع های داده اوليه نظير : bytes,integers و string است . تمامی اين نوع ها ، از يک کلاس پايه با نام  System.object  مشتق می گردند. محدوديتی بين نوع هائی که توسط سيستم تعريف شده اند با نوع هائی که شما ايجاد می نمائيد ،وجود نخواهد داشت . هر چيزبمنزله  يک شی خواهد بود.
در گذشته ، پاس دادن يک
string از يک عنصر نوشته شده به زبان ويژوال بيسيک به عنصر ديگری که با ++C نوشته شده بود ، ( و يا برعکس ) مسائل و مشکلات خاص خود را بدنبال داشت . رشته ها در ويژوال بيسيک ، مشابه رشته ها در ++C نبودند . در حقيقت،در برخی موارد خاص ، استفاده از يک عنصر نوشته شده با ++C از طريق ويژوال بيسيک ، بدليل تفاوت در نوع داده آنان ، غير ممکن بود. هر زبان سازگار با  دات نت ، از نوع های يکسان تعريف شده  و موجود در کتابخانه کلاس پايه استفاده می نمايد. بدين ترتيب ، با مسائل مربوط به ارتباط عملياتی بين زبانها که در گذشته شاهد آنان بوديم ، برخورد نخواهيم کرد.

CLR و قابليت های آن


CLR ، موتور اجرائی فريمورک دات نت است . سيستم  فوق ، مديريت تمامی کدهای ترجمه شده را بر عهده خواهد داشت .کد ترجمه شده که در دات نت اجراء می گردد را کد مديريت يافته (اداره شده) می گويند. علاوه بر مسئوليت لود و اجراء يک برنامه ، CLR سرويس هائی را ارائه که تمامی  پياده کنندگان عناصر می توانند از مزايای آن بهره مند گردند:

·         فراخوانی و توقف threads و پردازه ها

·         چرخه حيات شی و مديريت حافظه

·         ارتباط و همبستگی بين زبان ها

·          کد قابل استفاده در محيط های  متفاوت ( Cross-code )  و  عمليات مبتنی بر امنيت

·          Exception handling ( حتی بين زبانها )

·         بکارگيری و مسئله ورژن سازی

·          ارتباط بين کد اداره شده ( مديريت يافته ) و کد غير اداره شده (غيرمديريت يافته )

·         اشکال زدائی بين تمامی زبانها

Runtime ها چيزی جديدی نمی باشند . ويژوال بيسيک همواره دارای نوع خاصی از يک runtime  بوده است . ويژوال ++C ، دارای يک runtime با نام MSVCRT.DLL است . perl ، Python و SmallTalk نيز از runtime استفاده می نمايند. تفاوت بين اين نوع از Runtime ها و CLR در اين است که CLR بمنظور کار با چندين زبان برنامه نويسی طراحی شده است .هر برنامه ای که مقصد کمپايلر آن فريمورک دات نت باشد ، قادر به استفاده از تمامی مزايای CLR است .
دات نت در اين رابطه قابل مقايسه با جاوا نيز می باشد . جاوا از يک
Runtime با نام JVM)Java Virtual Machine) استفاده و صرفا" قادر به اجراء کد نوشته شده توسط جاوا می باشد . لازم است به اين نکته مهم نيز اشاره گردد که JVM يک مفسر است . در دات نت ، تمامی برنامه های نوشته شده با هر يک از زبان های سازگار با دانت نت ،در ايتدا به يک زبان مستقل از پردازنده ترجمه می گردند که IL)Intermediate Language) ناميده می شود( قابل مقايسه با بايت کدهای جاوا ) . IL ، نظير جاوا در زمان اجراء تفسير نمی گردد و زمانيکه کد در اولين مرتبه اجراء می گردد ، يک و يا چندين کمپايلر JIT)Just-in-time) مسئوليت ترجمه کدهای IL به کد مختص يک ماشين را برعهده می گيرند.
ارتباط و همبستگی بين زبانها يک از مهمترين مزايای ارائه شده توسط
CLR است . اگر برنامه نويسی ، کلاسی را با استفاده از ++C نوشته باشد ، می توان کلاسی در VB.NET را با استفاده از آن ايجاد نمود( توارث بين زبانها ). ويژگی فوق ، توارث بين زبان ها ناميده می گردد. اشياء نوشته شده با زبان متفاوت ديگر قادر به ارتباط عملياتی  با يکديگر می باشند . دو بخش مهم CLR که  امکان فوق را فراهم می نمايند CTS)Common Type System) و CLS) Common Language Specification)، می باشند .

 

 

سيستم CTS


سيستم CTS ، قوانين لازم بمنظورتبعيت يک زبان در جهت  بهره گيری از مزايای فريمورک دات نت را تعريف می نمايد. سيستم فوق، همچنين مجموعه ای از نوع های متداول و عملياتی که در بين زبان های برنامه نويسی متفاوت موجود است را تعريف و مشخص می نمايد که چگونه اين نوع ها استفاده و توسط CLR مديريت گردند ، چگونه اشياء قابليت های خود را عرضه و چگونه با يکديگر ارتباط برقرار نمايند . CTS  ، فونداسيون لازم بمنظور ارتباط متقابل بين زبانها در دات نت را ايجاد  می نمايد.

سيستم CLS)Common Language Specification)


CLS ، زير مجموعه ای از CTS بوده که مسئول تشريح پارامترهای پايه و مهم استفاده شده توسط مجموعه ای گسترده از زبان های برنامه نويسی است . عناصری که از ويژگی های CLS ، استفاده می نمايند ، سازگار با CLS بوده و امکان استفاده و دستيابی به عناصر فوق ، از طريق ساير زبانهای برنامه نويسی سازگار با  دات نت ، وجود خواهد داشت . VB.NET يک زبان سازگار با CLS است . بنابراين ، هر کلاس ، شی و يا عنصری که ايجاد می گردد ، توسط ساير زبا ن های سازگار با CLS در دا ت نت ، قابل استفاده خواهد بود.

 

 

 

نوشته شده در چهارشنبه هجدهم اردیبهشت 1387ساعت 20:59 توسط ترسیم گر|

فصل اول:

تاریخچه ویژوال بیسیک:

 

 قبل از معرفی ویژوال بیسیک در سال 1991 ، پیاده کنندگان نرم افزار مجبور به تسلط و مهارت در زمینه استفاده از ++C بهمراه موارد پیچیده ای در این خصوص بودند . بدین ترتیب ، صرفا" افراد خاص آموزش دیده، قادر به خلق نرم افزارهای قدرتمند بمنظور اجراء در محیط ویندوز بودند. ویژوال بیسیک ، محدودیت فوق را تغییر و می توان این ادعا را داشت که امروزه خطوط زیادی از برنامه های نوشته شده با استفاده از ویژوال بیسیک کد شده است . ویژوال بیسیک ، ظاهر برنامه نویسی تحت ویندوز را با حذف عملیات اضافی برای نوشتن کدهای لازم جهت طراحی بخش رابط کاربر (UI) ، تغییر داده است .

 در این راستا ، زمانیکه بخش رابط کاربر ، ترسیم می گردد ، برنامه نویس می تواند کدهای لازم بمنظور انجام عکس العمل مناسب در رابطه با رویداد ها را به آن اضافه نماید . زمانیکه ماکروسافت نسخه شماره سه ویژوال بیسیک را ارائه نمود ، مجددا" دنیای برنامه نویسی با تغییر مهمی مواجه گردید. در این راستا امکانات مناسبی برای نوشتن برنامه های مبتنی بر بانک های اطلاعاتی ، در اختیار برنامه نویسان قرار گرفت. ماکروسافت بدین منظور محصول جدیدی با نامObjects DAO)Data Access) را ارائه نمود .

 

 برنامه نویسان با استفاده از DAO ، امکان انجام عملیات متفاوت در رابطه با داده ها را ، بدست آوردند . نسخه های شماره چهار و پنج ، قابلیت های نسخه سه را افزایش و این امکان را برای پیاده کنندگان نرم افزار فراهم نمود تا برنامه های خود را جهت اجراء در محیط ویندوز 95 ، طراحی و پیاده سازی نمایند . در این زمینه ، برنامه نویسان قادر به نوشتن کدهائی گردیدند که امکان استفاده از آنان توسط سایر پیاده کنندگان نرم افزار که از زبانی دیگر استفاده می کردند، فراهم گردید.

 نسخه شماره شش ویژوال بیسیک ، روش جدیدی بمنظور دستیابی به بانک های اطلاعاتی را ارائه نمود: ADO)ActiveX Data Objects ) . یکی از اهداف اولیه طراحی ADO ، امکان دستیابی به بانک های اطلاعاتی برای پیاده کنندگان برنامه های مبتنی بر وب است که از تکنولوژی ASP ، استفاده می نمایند. همزمان با ارائه جدیدترین نسخه ویژوال بیسیک که VB.NET نامیده می شود ، بسیاری از محدودیت های مرتبط با ویژوال بیسیک برطرف گردید . در گذشته ویژوال بیسیک با انتفادات فراوان مواجه ( عدم وجود امکانات مناسب در مقایسه با جاوا و یا ++C ) و بسیاری آن را نظیر یک اسباب بازی در دنیای وسیع زبان های برنامه نویسی می پنداشتند. VB.NET با غلبه بر مشکلات نسخه های پیشین ، توانسته است در مدت زمان کوتاهی ، بعنوان یک ابزار پیاده سازی بسیار قدرتمند مطرح و گزینه ای مناسب برای برنامه نویسان در تمامی سطوح باشد .

نوشته شده در دوشنبه شانزدهم اردیبهشت 1387ساعت 20:56 توسط ترسیم گر|


Design By : Night Skin