مفاهیم ، مبانی و اصول شی گرایی (OOP) قسمت اول
مفاهیم ، مبانی و اصول شی گرایی (OOP) قسمت اول
شی گرایی یکی از مهم ترین و کاربردی ترین مباحث در برنامه نویسی پیشرفته و ساخت یافته می باشد .
در حقیقت شی گرایی نوعی طرز تفکر خاص در پیاده سازی برنامه هاست ، به عبارتی برنامه نویس با بخش های مختلف برنامه به همان صورتی که با اشیا در دنیای واقعی رفتار می کند ، ارتباط برقرار می نماید .
مثال هایی از دنیای خارج و همچنین شبیه نمودن اصول شی گرایی به اصول وراثت و….
به یادگیری و تفهیم شی گرایی کمک می نماید .
کلاس ها مهم ترین جزء شی گرایی هستند و در حقیقت کلاس ، تولید کننده یک شی محسوب می شود .
برای برنامه نویسی شی گرا و کپسوله کردن برنامه تسلط به مفاهیم زیر الزامیست :
۱- متدها (رفتار ها)
۲- متغیر ها
۳- خصیصه ها
هر سه بخش فوق می توانند Public , Private یا Protected باشد .
متغیر ها و متد های Private یا خصوصی فقط در همان کلاس قابل دسترسی هستند و از دنیای خارج پنهانند ، متغیر ها و متد های Public یا عمومی از طریق دنیای خارج قابل دسترسی هستند . در مورد Protected هم در بخش وراثت صحبت خواهیم کرد .
در صورتی که نوع متغیر public یا private تعیین نگردد (یا از Dim استفاده شود) به صورت پیشفرض متغیر Private در نظر گرفته خواهد شد .
شما میتوانید در دنیای خارج برای خود مثال هایی از کلاس ها و اشیا بزنید ، به عنوان مثال کلاس انسان را در نظر بگیرید (منظور از کلاس مجموعه رفتار و خصیصه های انسانی است)
فرض کنید این کلاس شامل دو رفتار “رشد کردن” و “حرف زدن” و همچنین دارای سه خصیصه “سن” و “قد” و “رنگ چشم” باشد .
البته می توان سن و قد و رنگ چشم را به عنوان متغیر نیز در نظر گرفت ولی به دلایلی که بعدا ذکر خواهد شد ما این دو را به عنوان خصیصه در نظر میگیریم .
خوب ما یک کلاس به نام انسان داریم که شامل دو متد (رفتار) و سه خصیصه می باشد .
حال می خواهیم یک شی جدید از این کلاس ایجاد نماییم . نام این شی جدید را “آقا فریبرز” میگذاریم .
پس ما یک آقا فریبرز داریم که قادر است حرف بزند و رشد کند ! چرا ؟!
جواب واضح است چون یک شی از کلاس انسان است و انسان همانطور که ما تعیین کردیم رشد می کند و حرف میزند ، بنابراین هر شیی که از این کلاس ایجاد گردد خواص و رفتاری مانند این کلاس خواهد داشت .
فرض می کنیم این شی در کنترل ماست و میخواهیم که ۲ سال رشد کند . این رشد کردن بر خصیصه های سن و قد تاثیر می گذارد ، البته واضح است که بر روی خصیصه رنگ چشم تاثیری ندارد .
خوب من قصد دارم تمامی حرف های بالا را در دنیای برنامه نویسی ایجاد کنم .
پس به سراغ کد نویسی رفته و یک پروژه جدید به نام OOP ایجاد نمایید ، وارد منوی WebSite شده و گزینه Add new item را انتخاب کنید و از لیست Class را انتخاب و نام فایل را به Human تغییر دهید (Human.Cs در سی شارپ و Human.Vb در ویژوال بیسیک) و بر روی دکمه Add کلیک نمایید .
پیامی مبنی بر اضافه کردن این کلاس به پوشه App_Code داده میشود ، شما گزینه Yes را انتخاب نمایید تا کلاس Human ایجاد شده و در پوشه App_Code قرار گیرد .
این فایل را باز نمایید احتمالا کلاس شما به شکل زیر خواهد بود :
Imports Microsoft.VisualBasic Public Class Human End Class |
خوب این کلاس کاملا خام است و هیچ رفتار و خصیصه ای ندارد .
اکنون متد (رفتار) های رشد کردن (Grow) و حرف زدن (Talk) را به کلاس اضافه می کنیم :
Imports Microsoft.VisualBasic Public Class Human Public Sub Grow() End Sub Public Function Talk(ByVal Words As String) Return “He said : ” + Words End Function End Class |
متد Grow یک ساب روتین است چرا که هیچ خروجی ندارد ولی Talk یک تابع است زیرا که مقدار بازگشتی ( خروجی ) دارد .
خوب متد Grow همانطور که گفتیم بر روی خصیصه های قد و سن تاثیر گذار است پس ابتدا دو متغیر به نام Age و Height برای سن و قد (در قسمت بعد این متغیر ها را به خصیصه تبدیل می کنیم ) اضافه می کنیم :
Imports Microsoft.VisualBasic Public Class Human Dim Age As Integer = 0 Dim Height AsInteger = 0 Public Sub Grow() End Sub Public Function Talk(ByVal Words As String) Return “He said : ” + Words End Function End Class |
مقادیر اولیه این دو متغیر را به صورت پیشفرض ۰ قرار می دهیم (شما میتوانید مقادیر دیگری قرار دهید )
خوب تاثیری که متد Grow بر روی سن و قد میگذارد را به صورت زیر تعریف می کنیم :
Imports Microsoft.VisualBasic Public Class Human Dim Age As Integer = 0 Dim Height AsInteger = 0 Public Sub Grow() Age = Age + 1 Height = Height + 10 End Sub Public Function Talk(ByVal Words As String) Return “He said : ” + Words End Function End Class |
متد Grow باعث میشود که ۱ واحد به متغیر Age و ۱۰ واحد به متغیر Height اضافه شود .
خوب کلاس ما تا حدودی تکمیل شده است ، میتوانیم آن را تست نماییم .
برای تست یک صفحه Default.aspx به پروژه اضافه کنید ، در ساب روتین مربوط به لود صفحه ابتدا شی “آقا فریبرز ” را ساخته و با آن کار خواهیم کرد :
Dim Agha_Fariborz As New Human |
با این کار ما یک شی به نام Agha_Fariborz از کلاس Human ایجاد کردیم .
حال با صدا زدن متد Grow اقا فریبرز یک سال بزرگ شده و ۱۰ سانتی متر بلند قد تر خواهد شد :
Dim Agha_Fariborz As New Human Agha_Fariborz.Grow() |
شما میتوانید مقدار متغیر سن را قبل و بعد از فراخوانی متد Grow() چاپ کنید تا متوجه رشد آقا فریبرز بشوید ولی چون متغیر های Age و Height محلی (Private) هستند نمی توانیم از خارج کلاس به آنها دسترسی پیدا کنیم ، بنابراین متغیر های Height و Age را عمومی (Public) تعریف می کنیم تا از خارج از کلاس به آنها دسترسی داشته باشیم پس کلاس Human به شکل زیر خواهد بود :
Imports Microsoft.VisualBasic Public Class Human Public Age As Integer = 0 Public Height As Integer = 0 Public Sub Grow() Age = Age + 1 Height = Height + 10 End Sub Public Function Talk(ByVal Words As String) Return “He said : ” + Words End Function End Class |
اکنون قادریم از خارج از کلاس به این متغیر ها دسترسی پیدا کرده و مقادیر آن ها را قبل و بعد از اجرای متد چاپ کنیم برای این کار دو Label در صفحه Default.aspx قرار می دهیم یکی برای نمایش مقدار متغیر سن قبل از اجرای متد Grow و یکی برای نمایش این مقدار بعد از اجرای متد داریم :
Partial Class _Default Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim Agha_Fariborz As New Human Lbl_Before.Text = Agha_Fariborz.Age Agha_Fariborz.Grow() Lbl_After.Text = Agha_Fariborz.Age
End Sub End Class |
اکنون صفحه Default.aspx را در مرورگر خود مرور کرده تا متوجه تغییرات شوید .
همانطور که می بینید مقدار چاپ شده قبل از اجرای متد ۰ و بعد از آن به ۱ تغییر یافته است .
متد دیگر ما Talk بسیار ساده است کافیست در ورودی یک کلمه به آن بدهیم تا به همراه جملهHe Said برگردانده شود .
برای استفاده از این متد داریم :
Partial Class _Default Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim Agha_Fariborz As New Human Response.Write(Agha_Fariborz.Talk(“Hello!”)) End Sub End Class |
اگر این صفحه را در مرورگر باز کنید نوشته ” He said : Hello! ” را در صفحه مشاهده خواهید کرد .
آخرین دیدگاهها