• به وب استیودنت خوش آمدیدد
  • آموزش های ما را از وب سایت به نشانی www.WebStudent.ir پیگیری کنید
  • لطفا قوانین را مطالعه فرمایید
  • آموزش های گام به گام و تصویری
  • لطفا قوانین را مطالعه فرمایید
درود مهمان گرامی! ورود ثبت نام

درود به مهمان گرامی
برای مشاهده و استفاده از تمامی امکانات انجمن باید ثبت نام کنید یا وارد شوید
( با سپاس: کارگروه راهبری وب استیودنت )


آخرین اخبار انجمن وب استیودنت

مفهوم برنامه نویسی شی گرا (Object Oriented Programming)

مفهوم برنامه نویسی شی گرا (Object Oriented Programming)

این صفحه را به اشتراک بگذارید:



مفهوم برنامه نویسی شی گرا (Object Oriented Programming)
زمان کنونی: 1397-5-28، 03:58:14
کاربرانِ درحال بازدید از این موضوع: 1 مهمان
نویسنده: Bahrami
آخرین ارسال: sirwan-bz
پاسخ 3
بازدید 21438



امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
مفهوم برنامه نویسی شی گرا (Object Oriented Programming)
#1
با دروددر این نوشته می خواهیم با مفهوم برنامه نویسی شی گرا (Object Oriented Programming) به زبان ساده آشنا شویم.برنامه نویسی شی گرا یا Object Oriented Programming که به صورت OOP هم نوشته می شود، یک الگوی برنامه نویسی است.زبانهای مبتنی بر شی گرایی، گونه ای متفاوت از زبان ها، نسبت به زبان های برنامه نویسی پروسیجری (procedural programming languages) قدیمی (مانند زبان C و پاسکال (Pascal) و ...) هستند.
ما در این نوشته می خواهیم به سوالاتی مانند زیر به زبان ساده جواب دهیم:
  • کلاس (Class) چیست؟
  • شی یا آبجکت (Object) چیست؟
  • نمونه (instance) چیست؟
  • ویژگی (attribute) چیست؟
  • متد (Method) چیست؟
  • کپسوله سازی (Encapsulation) یعنی چه؟
  • وراثت (Inheritance) یعنی چه؟

در برنامه نویسی شی گرا (OOP) بخش های برنامه نویسی بصورت شی هایی در نظر گرفته می شوند که با هم در ارتباط هستند. و در این رابطه اقدام به تعریف کلاس هایی می کنند که اشیاء بر مبنای آن تعریف می شوند.

کلاس (Class) چیست؟
بصورت ساده باید بگویم که کلاس (Class) در واقع یک الگو و یک قالب کلی برای تعریف کردن اشیاء است. بعبارت دیگر، کلاس ها در واقع موجودیتی ندارند و خود آنها شی (آبجکت - Object) نیستند، بلکه در واقع یک الگو هستند که اشیاء بر اساس آن ساخته می شوند.
بعنوان مثال در زندگی روزمره شما انسان های متفاوتی می بینید. از دید برنامه نویسی مثلا مهرداد، شهرام، مهردخت، آتوسا و ... هرکدام جزء کلاس (Class) انسان ها به حساب می آیند. یعنی "انسان" یک الگو از موجودی زنده را تعریف می کند که دارای ویژگی های خاصی است (ویژگی هایی که باعث می شود شما تفاوت انسان را با سایر موجودات درک کنید).

بعنوان مثال دیگر، شما می توانید کلاسی به نام "اتومبیل" را در نظر بگیرید! کلاس اتومبیل تعیین کننده یک وسیله نقلیه است که دارای برخی ویژگی ها است (مثلا چرخ دارد، بر روی زمین حرکت می کند، جعبه دنده دارد، فرمان دارد، موتور دارد و ...).

پس همانطور که گفته شد، کلاس ها در واقع موجودیتی ندارند، بلکه یک الگو هستند که تعریف کننده اشیاء است.


شی یا آبجکت (Object) چیست؟
شی، شی است! Wink
خب اگر بخواهیم با مثال های بالا پیش برویم، باید بگویم که هریک از افراد (در مثال بالا: مهرداد، شهرام، مهردخت، آتوسا و ...) در واقع یک شی هستند که از روی کلاس (الگوی تعریف شده) انسان ایجاد شده اند.
پس شی یا آبجکت (Object) در واقع یک موجودیت است (چیزی که وجود دارد نه فقط یک تعریف) که از روی کلاس (الگوی تعریف شده) ساخته می شود و دارای ویژگی های مخصوص به خودش است. مثلا: موهای مهرداد صاف است. قد شهرام بلند است و ...)

در مثال دوم هم هر نوع خودرود، یک شی (Object) است که از روی کلاس اتومبیل ساخته شده است و دارای ویژگی هایی است. مثلا پورشه یک آبجکت از کلاس اتومبیل است که دارای ویژگی هایی است (برخی از ویژگی ها:‌ یک نوع اتومبیل سواری است، دنده اتوماتیک است و ...) همچنین ولوو و اسکانیا هم آبجکت هایی از کلاس اتومبیل هستند که دارای ویژگی های دیگری هستند (مثلا نوع ماشین باری است)

بنابراین آبجکت یا شی (Object) در واقع یک موجودیت است که از روی کلاس (که یک الگوی تعریف کننده است) ساخته می شود



نمونه (instance) چیست؟

نمونه یا instance از جمله کلماتی است که باعث سردرگمی مخاطبینی می شود که تازه به وادی برنامه نویسی شی گرا (OOP) پیوسته اند.
هر شی (Object) از روی یک کلاس ساخته می شود و در واقع نمایانگر یک کلاس است و به زبان دیگر یک نمونه (instance) از یک کلاس است.
در واقع شما هنگامی که یک آبجکت را از روی یک کلاس می سازید، در واقع یک نمونه از کلاس را به وجود آورده اید (ایجاد کرده اید).



ویژگی (attribute) چیست؟

باز هم مثالهای بالا را در نظر بگیرید: یک انسان می تواند دارای ویژگی های متفاوتی باشد. مانند رنگ پوست، رنگ مو، قد، رنگ چشم، مدل مو، شکل ظاهری و ...
در دنیای برنامه نویسی شی گرا (Object Oriented Programming) نیز همین موضوع وجود دارد و هر کلاس دارای یک سری ویژگی (attribute) است که شی های آن نیز دارای آن ویژگی با با یک سری مقادیر است.

در کلاس اتومبیل ها هم می توانید دو شی با ویژگی های متفاوت داشت مثلا اتومبیل شماره یک که یک بنز است (یک ویژگی) رنگ آن مشکی است (یک ویژگی) و ... و اتومبیل شماره دو مثلا یک بی ام دابلیو است (یک ویژگی) به رنگ نقره ای (ویژگی دیگر) و ...


متد (Method) چیست؟

اگر با مفهوم تابع آشنایی دارید، در واقع میتوان گفت که متد در یک کلاس مانند یک تابع عمل می کند.
تابع را بصورت غیر دقیق می توان اینگونه تعریف کرد که قطعه کدی است که یک کار بخصوص را انجام می دهد (و یا یک نتیجه را بر می گرداند). تابع هم می تواند مقدار ورودی داشته باشد و هم می تواند نداشته باشد. مثلا تابعی که مساحت یک مستطیل را حساب می کند، دو عدد طول و عرض را بعنوان ورودی گرفته و نتیجه را (که حاصل ضرب آن دو عدد است) بعنوان خروجی بر می گرداند.
متد ها هم دقیقا تکه کدی هستند که در داخل یک کلاس یک کار بخصوص را انجام می دهند. مثلا در یک کلاس که برای کار با پایگاه داده (Database) ساخته شده است، می توان یک متد (Method) برای برقراری ارتباط با دیتابیس تعریف کرد و متد یاد شده را در مواقع لازم برای اتصال به دیتابیس فراخوانی کرد.


کپسوله سازی (Encapsulation) یعنی چه؟

کپسوله سازی از این مفهوم می آید که "نتیجه مهم است"! بعبارت دیگر هر بخش یا هر کاربر باید بتواند با سیستم کار کند و نتیجه بگیرد بدون آنکه درگیر پیچیدگی های داخل سیستم شود. در مثال بالا که در باره متدی برای محاسبه مساحت یک مستطیل بود، ما کاری نداریم که در داخل متد محاسبه را چگونه انجام داده اند، مهم این است که ما دو عدد را به متد بدهیم و نتیجه را درست به ما بدهد. یا در مثال مربوط به ماشین ها شما لازم نیست درگیر جزئیات استارت زدن ماشین (مانند سیستم برق رسانی، سیستم سوخت رسانی و ...) شوید. فقط کافی است دکمه استارت را بزنید!
این روش چند خوبی دارد.
اول اینکه برنامه نویس به راحتی می تواند روش برنامه نویسی را در متد خود تغییر دهد بدون اینکه نگران ایجاد اختلال در کار بقیه بخش های برنامه و یا سایر کاربران باشد.
دوم اینکه دسترسی ها به کدهای برنامه را کاملا می توان کنترل کرد و کابران فقط از طریق رابطهای تعریف شده به برنامه دسترسی دارند.



وراثت (Inheritance) یعنی چه؟

از روی هر کلاس (Class) می توان کلاس های دیگری ساخت که تمام ویژگی ها را از کلاس پدر (Parent) به ارث ببرد که به کلاس جدید، کلاس فرزند (Child Class) می گوییم.
روشن است که در کلاس فرزند می توان ویژگی هایی تعریف کرد که مختص به خود باشد اما در کل کلاس فرزند (Child)، نوعی از کلاس پدر (Parent) است.

بعنوان مثال در کلاس اتومبیل، می توانیم کلاس های فرزندی به شرح زیر تعریف کرد:
کلاس اتومبیل های مسابقه ای:‌ اتومبیل هایی که دارای چهار چرخ، شتاب و سرعت بسیار بالا، آیروداینامیک و ... است.
کلاس اتومبیل های باری: اتومبیل هایی که دارای قدرت بالا، فضا برای حمل بار، مثلا ۸ چرخ و ... است.
کلاس اتومبیل های عمومی: اتومبیل هایی که دارای فضای بیشتر برای حمل مسافر است، کشیده است، دو درب برای ورود و خروج دارد و ...

در روابط انسانی هم می توان کلاس انسان را به دو کلاس فرزند به شرح زیر تقسیم کرد:
کلاس مرد ها: آقایان در این دسته قرار می گیرند که دارای فیزیولوژیک (مثلا قوی تر)، و سایر ویژگی های بخصوص هستند.
کلاس زن ها: بانوان هم که دارای ویژگی های بخصوص زنانگی و فیزیولوژیک و اخلاقی (مثلا مهربان تر) هستند در این کلاس قرار می گیرند.

همه کلاس های فرزند (Child)، نوعی از کلاس پدر (Parent) هستند (بانوان و آقایان ، انسان هستند و نیز اتومبیلهای مسابقه ای، باری و عمومی نیز نوعی اتومبیل هستند) با ویژگی های خاص.



امیدوارم دانش اندکم دراین زمینه برای شما سودمند و راهگشا بوده باشد
با آرزوی تندرستی و دلشادی
بهرامی
اینک سخن می دارم،
برای شما ای خواستاران، و برای شما ای دانایان ، از دو نهاده ی بزرگ.
و می ستایم،
اهورا و اندیشه ی نیک را، و دانش نیک و آیین راستی را،
تا فروغ و روشنایی را دریابید،
و به رسایی و شادمانی برسید.
گاثا 3 - یسنا 30
[تصویر:  farvahar.png]
 
پاسخ
[-] 7 کاربر زیر از Bahrami به مایه این نوشته سپاسگزاری کرده اند:
bilirubin (1393-9-8 20:24), ipcworld.rzb.ir (1392-5-29 12:20), m00e00h00d00i (1392-10-14 16:57), NadAli (1392-11-23 00:08), Newton (1393-11-29 01:34), Odin (1392-4-14 01:19), sirwan-bz (1392-11-21 12:47)
#2
تشکر خدایش زیبا بود
 
پاسخ
[-] 2 کاربر زیر از hamed به مایه این نوشته سپاسگزاری کرده اند:
Bahrami (1392-8-27 13:24), m00e00h00d00i (1392-10-14 16:57)
#3
خسته نباشید واقعا به ساده ترین و قابل درک ترین روش توضیح دادین.
بسیار مفید بود.
 
پاسخ
[-] 2 کاربر زیر از sirwan-bz به مایه این نوشته سپاسگزاری کرده اند:
Bahrami (1392-11-21 15:52), m00e00h00d00i (1392-11-21 19:07)
  



پرش به انجمن:


کاربران در حال بازدید: 1 مهمان



:fixed;left : 2px;top :130px;float : left;width : 35px;height:320px;text-align:left;padding:0px;;border:0px #fff solid; background: #005ea7; background: -moz-linear-gradient(top, #005ea7 0%, #003965 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#005ea7), color-stop(100%,#003965)); background: -webkit-linear-gradient(top, #005ea7 0%,#003965 100%); background: -o-linear-gradient(top, #005ea7 0%,#003965 100%); background: -ms-linear-gradient(top, #005ea7 0%,#003965 100%); background: linear-gradient(to bottom, #005ea7 0%,#003965 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#005ea7', endColorstr='#003965',GradientType=0 ); } .tdicons a{-webkit-transition : all 0.5s ease-in-out;-moz-transition : all 0.5s ease-in-out;-o-transition : all 0.5s ease-in-out;display : block;float : left;margin : 8px;padding : 5px;font-weight : bold;color : #fff;border-radius : 8px 0 8px 0;} .tdicons img{-webkit-transition : all 0.2s ease-in-out;-moz-transition : all 0.2s ease-in-out;-o-transition : all 0.2s ease-in-out;padding:0px;} .tdicons img:hover{padding : 0px 0px 0px 8px;}