PDA

View Full Version : سوال: کلاس چیست؟



zhilbert
سه شنبه 24 آذر 1388, 21:19 عصر
سلام .راستش من تازه کارم و میخواستم بدونم کلاس چیه ؟ به چه دردی میخوره ؟ چجوری میشه باهاش کار کرد ؟ این ارتباط بین کلاس و فرم چجوریه ؟ و غیره .
میشه منو راهنمایی کنید

zhilbert
چهارشنبه 25 آذر 1388, 15:44 عصر
از این همه استادان خوبی که اینجا هست خوب یکی هم به من کمک کنه ؟؟؟؟؟؟؟

Computer.Programmer
چهارشنبه 25 آذر 1388, 17:12 عصر
دوست عزیز کلاس به مجموعه کدی گویند که برای یک هدف نوشته شده اند و در کنار یکدیگر قرار گرفته اند. در دنیای واقعی شما می توانید فرضاً اتومبیل رو یک کلاس در نظر بگیرید. تمام اجزای این اتومبیل برای یک هدف در کنار یکدیگر قرار گرفته اند. حالا شما فرض کنید کلاسی به نام Car ایجاد نمودید. این کلاس می تونه مشخصاتی داشته باشه. مثلاً مشخصه هایی از قبیل تعداد سیلندر - نوع سوخت - رنگ ماشین - تعداد دنده و ... اینها همه مشخصاتی هست که می تونید برای کلاس Car مشخص نمایید. که در برنامه نویسی به این مشخصات Property گویند.

ویژگی که برنامه نویسی به صورت شی گرا دارد این است که کار را بسیار راحت تر (البته از نظر مهندسی نرم افزار) میکنه. مثلاً شما در برنامتان می خواهید کلاسی به نام Studentداشته باشید. و مشخصات هر دانش آموز را در آن نگه دارید و از همه مهتر اینکه برای هر دانش آموز دوباره کد نویسی نشود. حالا بهتر است در اینجا شما از یک کلاس به همراه Property های مد نظرتان درست نمایید و برای هر دانش آموز از آن کلاس استفادع نمایید.

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

موفق باشید

zhilbert
پنج شنبه 26 آذر 1388, 01:22 صبح
درود
حالا من یک فرم دارم که یک دکمه روشه و توی قسمت کد نویسیه فرمم ودر ساب دکمه مثلا یک پیغام صادر میکنم ام اس جی باکس. حالا چجوری همین کد رو توی کلاس وارد کنم که بعد فقط در ساب دکمه بجای کد نویسیه دوباره همون کدهایی که در کلاسی ایجاد کردم اجرا بشه؟

sh2007
پنج شنبه 26 آذر 1388, 07:16 صبح
دوست عزیز کلاس به مجموعه کدی گویند ...
این توضیحات کلی در خصوص کلاس بود اگر جاییش برایت مبهم بود سوال کن.

موفق باشید

دوست من هم با كلاس مشكل دارم آيا مي توني ديتابيس كه جدولهائي داره رو به يه كلاس تبديل كني يعني با استفاده از كلاس شروع به ذخيره كردن ركورد نمائي
ممنون

Mahdi.Daneshvar
پنج شنبه 26 آذر 1388, 12:39 عصر
ببینید دوستان همونطور که دوستمون اشاره کردن کلاس مجموعه از کد هست که یه مفهوم بیان میکنه. و قابلیت انتزاع رو به به برنامه میده.
حالا این یعنی چی؟
یعنی این که یک ما برای یک کلاس خواص و متد هایی تعریف میکنیم که این خواص و متد شیوه رفتار برنامه ما با اون کلاس (اشیای اون کلاس) رو بیان میکنه.
بزارید یه مثال براتون بزنم.
مثلا ما میخویم برنامه ای بنویسم که طول قاعده و ارتفاع یک مثلث رو بگیره و مساحت اون رو تحویل بده. خوب برنامه مون یه چنین چیزی میشه:

Dim area As Double = Val(BaseTextBox.Text) * Val(HeightTextBox.Text) / 2
MsgBox("Area = " + CStr(area))

حالا اگه بخوایم همین برنامه رو به صورت شی گرا و با استفاده از کلاس بنویسیم.
یه کلاس تعریف میکنیم به نام triangle که دارای دو تا متغیر (فیلد) برای قاعده و ارتفاع(base ,height ) و یه متد برای محاسبه مساحت باشه(ComputeArea). تعریف کلاس ما اینجوری میشه:

Class Triangle
Public Base, Height As Double
Public Function ComputeArea() As Double
Return Base * Height / 2
End Function

End Class

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


حالا برای استفاده از این کلاس باید یک شی از روی این کلاس بسازیم مثل تعریف کردن سایر متغیر ها البته با یه تفاوت کوچیک.برای استفاده از کلاس مثلثی که درست کردیم توی برنامه مون (مثلا توی اونت هندلر کلیک شدن یه باتن) این کد رو مینویسم:

Dim a As New Triangle
a.Base = BaseTextBox.Text
a.Height = HeightTextBox.Text
MsgBox(a.ComputeArea())

در خط اون ما یه شی از نوع triangle که همون کلاسی هست که خودمون ایجاد کردیم میسازیم. (کلمه new هم اینجا یه بحثی داره ولی وارد جزئیات نمیشم)
در خط های بعد مقدار ارتفاع و قاعده طبق اطلاعات وارد شده توسط کاربر مقدار میدیم و در نهایت با صدا زدن متد ComputeArea این متد مساحت رو حساب میکنه و msgbox هم اون رو نشون میده.
(البته توی این مثال از یه سری casting ها صرف نظر شده البته برنامه درست کار میکنه)

امید وارم که با این مثال متوجه شده باشید.
کلا برای هر مقصود و منظوری میتونیم از کلاس ها استفاده کنیم و واقعا کار برنامه نویسی رو راحت تر میکنه.

zhilbert
پنج شنبه 26 آذر 1388, 16:04 عصر
ببینید دوستان همونطور که دوستمون اشاره کردن کلاس مجموعه از کد هست که یه مفهوم بیان میکنه. و قابلیت انتزاع رو به به برنامه میده.
حالا این یعنی چی؟
یعنی این که یک ما برای یک کلاس خواص و متد هایی تعریف میکنیم که این خواص و متد شیوه رفتار برنامه ما با اون کلاس (اشیای اون کلاس) رو بیان میکنه.
بزارید یه مثال براتون بزنم.
مثلا ما میخویم برنامه ای بنویسم که طول قاعده و ارتفاع یک مثلث رو بگیره و مساحت اون رو تحویل بده. خوب برنامه مون یه چنین چیزی میشه:

Dim area As Double = Val(BaseTextBox.Text) * Val(HeightTextBox.Text) / 2
MsgBox("Area = " + CStr(area))

حالا اگه بخوایم همین برنامه رو به صورت شی گرا و با استفاده از کلاس بنویسیم.
یه کلاس تعریف میکنیم به نام triangle که دارای دو تا متغیر (فیلد) برای قاعده و ارتفاع(base ,height ) و یه متد برای محاسبه مساحت باشه(ComputeArea). تعریف کلاس ما اینجوری میشه:

Class Triangle
Public Base, Height As Double
Public Function ComputeArea() As Double
Return Base * Height / 2
End Function

End Class

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


حالا برای استفاده از این کلاس باید یک شی از روی این کلاس بسازیم مثل تعریف کردن سایر متغیر ها البته با یه تفاوت کوچیک.برای استفاده از کلاس مثلثی که درست کردیم توی برنامه مون (مثلا توی اونت هندلر کلیک شدن یه باتن) این کد رو مینویسم:

Dim a As New Triangle
a.Base = BaseTextBox.Text
a.Height = HeightTextBox.Text
MsgBox(a.ComputeArea())

در خط اون ما یه شی از نوع triangle که همون کلاسی هست که خودمون ایجاد کردیم میسازیم. (کلمه new هم اینجا یه بحثی داره ولی وارد جزئیات نمیشم)
در خط های بعد مقدار ارتفاع و قاعده طبق اطلاعات وارد شده توسط کاربر مقدار میدیم و در نهایت با صدا زدن متد ComputeArea این متد مساحت رو حساب میکنه و msgbox هم اون رو نشون میده.
(البته توی این مثال از یه سری casting ها صرف نظر شده البته برنامه درست کار میکنه)

امید وارم که با این مثال متوجه شده باشید.
کلا برای هر مقصود و منظوری میتونیم از کلاس ها استفاده کنیم و واقعا کار برنامه نویسی رو راحت تر میکنه.


مرسی از راهنمایی خوبتون
شما فرمودید" کلمه new هم اینجا یه بحثی داره ولی وارد جزئیات نمیشم " خوب میشه بگین جزئیاتش چیه ؟
و یک جای دیگه گفتید "البته توی این مثال از یه سری casting ها صرف نظر شده البته برنامه درست کار میکنه" این casting چیه ؟
میشه یک مثال هم از بانک اطلاعاتی بزنید ؟ مثلا همه کدهامونو از کلاس بخونیم

Mahdi.Daneshvar
پنج شنبه 26 آذر 1388, 18:21 عصر
در مورد new :
اشیا در وی بی از نوع reference هستند یعنی به جای اینکه مقدار ها رو در خودشون نگه دارن به مکان ذخیره شدن مقادیر روی حافظه اشاره میکنن. بر خلاف متغیر ها و structure ها که مقادیر رو توی خودشون ذخیره میکنن.
وقتی که ما بخوایم یه متغیر از نوع شی از روی کلاسی ایجاد کنیم کلمه new یعنی اینکه برنامه باید یه نمونه جدید از اون کلاس بسازه. حالا اگه ما از new استفاده نکنیم شی ایجاد شده به هیچ اشاره نمیکنه و مقدار اون میشه nothing. و وقتی از کلمه new استفاده میشه برنامه حافظه مورد نیاز برای کلاس رو از سیستم عامل میگیره و متغیرهای کلاس رو ایجاد میکنه و شی به محل ذخیره داده ی خودش اشاره میکنه.
خیلی بد توضیح دادم امید وارم متوجه شده باشی.
برای اینکه بهتر بفهمی که یعنی چی:
1- یعنی چی که اشیا از نوع reference هستند:
این برنامه رو ببین:

Dim frm As Form
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
frm = Me
frm.Close()
end sub
همونطور که میبینی ما یه شی از نوع form ساختیم و بعد در load شی me (یعنی فرم جاری) رو انتساب دادیم به frm و بعد متد close رو از شی frm صدا زدیم.
چه اتفاقی افتاد؟ فرم ما بسته شد. چون هر دو شی me و form1 و frm به یک چیز اشاره میکرند و هر کاری به یکی کنیم انگار با بقیه کردیم.
2-یعنی چی که بعد از تعریف شی با new حافظه پر میشه؟
اینو ببین:

Dim frm(10000) As Form
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For i = 0 To 9999
frm(i) = New Form
Next
End Sub
(یه دکمه بزار روی فرم)
حالا برنامه رو اجرا کن و task manager رو باز کن (alt + ctrl + delete) حالا برو به بخش processes و برنامه رو پیدا کن و ببین در ستون mem usage چه عددی نوشته شده. حالا task manager رو نبند و روی دکمه button1 روی فرم کلیک کن میبینی که حافظه مورد استفاده توسط برنامه چیزی حدود 4 مگابایت زیاد میشه.
و این بخاطر اینه که عناصر اون آرایه رو به استفاده از new مقدار دادی

خوب این از کلمه new.

casting چیه؟
casting یعنی تبدیل اشیا و متغیر ها به هم. مثلا وقتی میخوای یه متغیر integer رو بدی به msgbox چون این تابع فقط نوع رشته رو قبول میکنه خودش این متغیر عددی رو تبدیل میکنه به رشته. خودمون هم میتونیم این کار رو بکنیم.با استفاده از توابع casting که چند تا شون اینا هستن:
CSByte
CShort
CSng
CInt
CBool
CStr
CType
که هر کدوم برای یه نوع خواص به کار میرن و آخری عمومیت داره.


مثال بانک اطلاعاتی رو براتون بعدا میگم.

zhilbert
دوشنبه 30 آذر 1388, 16:03 عصر
متشکرم
منتظر مثال بانک اطلاعاتی هم هستم

DoDoklak
دوشنبه 30 آذر 1388, 16:43 عصر
اینم یه کلاس برای کار با پایگاه داده

میتونید با این کلاس بانک رو Attach کنید و ارتباطات با سرور و کانیکنشها رو بررسی کنید سایر کارها هم مثل این نمومنه کد میمونه



Friend Class DBHelper
#Region " Const & TSQL "
Private Const DATABASENAME As String = "QNDBTest"
Private Const DEFAULTCONNECTIONSTRING As String = "Data Source=.;Integrated Security=True"
Private Const TSQL_ATTACH As String = _
"EXEC sp_attach_db @dbname = N'" & DATABASENAME & "',@filename1 = @MDF,@filename2 = @LDF;" & vbCrLf & _
"ALTER DATABASE [" & DATABASENAME & "] SET ENABLE_BROKER;"
Private Const TSQL_DETACH As String = _
"EXEC sp_detach_db '" & DATABASENAME & "', 'true';"
#End Region
Private m_ServerConnectionString As String = DEFAULTCONNECTIONSTRING
Private m_DatabaseConnectionString As String
Public Function Initialize() As Boolean
If (Not Me.IsServerConnect()) Then
Using diallog As New GHNet.Windows.Forms.SqlServerConnectionStringDialo g()
diallog.ShowDatabaseName = False
diallog.ShowAdvanced = False
diallog.ShowAttachDatabase = False
diallog.ConnectionString = Me.m_ServerConnectionString
Do
If (diallog.ShowDialog() <> System.Windows.Forms.DialogResult.OK) Then Return False
Me.m_ServerConnectionString = diallog.ConnectionString
Loop Until Me.IsServerConnect
End Using
End If
'--------------
Me.m_DatabaseConnectionString = Me.m_ServerConnectionString & ";Initial Catalog=" & DATABASENAME & ";"
Return True
End Function
Private Function CreateServerConnection() As System.Data.SqlClient.SqlConnection
Return New System.Data.SqlClient.SqlConnection(Me.m_ServerCon nectionString)
End Function
Public Function CreateDatabaseConnection() As System.Data.SqlClient.SqlConnection
Return New System.Data.SqlClient.SqlConnection(Me.m_DatabaseC onnectionString)
End Function
Friend Function GetDatabaseConnectionStringInternal() As String
Return Me.m_DatabaseConnectionString
End Function
Private Function IsServerConnect() As Boolean
Try
Using dbCon = Me.CreateServerConnection()
dbCon.Open()
Return True
End Using
Catch
End Try
Return False
End Function
Private Function IsDatabaseConnect() As Boolean
Try
Using dbCon = Me.CreateDatabaseConnection()
dbCon.Open()
Return True
End Using
Catch
End Try
Return False
End Function
Public Property Attach() As Boolean
Get
Return Me.IsDatabaseConnect
End Get
Set(ByVal value As Boolean)
If (Me.Attach = value) Then Return
'--------------
Using _
dbCon = Me.CreateServerConnection(), _
dbCom As New System.Data.SqlClient.SqlCommand(If(value, TSQL_ATTACH, TSQL_DETACH), dbCon)
If value Then
Dim path As String = System.IO.Path.Combine(System.Windows.Forms.Applic ation.StartupPath, DATABASENAME)
With dbCom.Parameters
.Add("@MDF", System.Data.SqlDbType.NVarChar).Value = path & ".mdf"
.Add("@LDF", System.Data.SqlDbType.NVarChar).Value = path & "_Log.ldf"
End With
Else
System.Data.SqlClient.SqlConnection.ClearAllPools( )
End If
dbCom.CommandType = System.Data.CommandType.Text
dbCon.Open()
dbCom.ExecuteNonQuery()
End Using
End Set
End Property