برنامهنویسی شیگرا
از ویکیپدیا، دانشنامهٔ آزاد.
برنامه نویسی شیگرا (OOP) شیوهای ازتحلیل و طراحی نرم افزار است که بر تجزیهی مسئله به اشیاء تاکید دارد. اشیاء صور انتزاعی از ماهیتهای مطرح در مسئله هستند که دو جنبه دارند. اشیاء دارای حالت یا داده بوده و همچنین دارای عملیات بر روی دادهها میباشند. این نوع نگرش دارای مزایای بسیاری از جمله مدیریت پیچیدگی کاراتر و هزینه نگهداری کمتری است.
در برنامه نویسی شیگرا (Object Oriented) همه چیز یک شی (Object) است. هر شی ویژگیها (Properties) و توابع و متدهای مربوط به خودش را دارد.
[ویرایش] یک مثال
مثلاً اگر گربه یک object باشد، ویژگیهایی مثل رنگ، نژاد، سن، وزن و ... دارد. متدهای گربه هم است از c نیز پشتیبانی کند، نمیتوان برنامههای کاملاً شی گرا با این زبان نوشت)، شی گربه این گونه ساخته میشود:
public class Cat { // declaring private properties (_Color and _Age). These are used to store // . private string _Color; private int _Age; // declaring a pubic property (Color) public string Color { get { return _Color; } set { _Color = value; } } // declaring a pubic property (Age) public int Age { get { return _Age; } set { _Age = value; } } public void Eat(string Food) { // codes for eating } public string Voice() { return "Mio, mio" } }
کد بالا تعریف شی گربه است و به هیچ گربه خاصی اشاره نمیکند. برای استفاده از این شی باید اشیایی از نوع گربه بسازیم:
Cat MyCat = new Cat();
MyCat.Color = "White";
MyCat.Age = 2;
MyCat.Eat("Mouse");
Cat Malous = new Cat(); Malous.Color = "Brown"; Malous.Age = 1; string MalusVoice = Malous.Voice();
کد بالا یک گربه به نام MyCat و گربه دیگری به نام Malous میسازد. همان طور که میبینید استفاده از Objectها مشابه استفاده از انواع داده پایه (Primary datatypes) است. اگر میخواستیم یک عدد از نوع عدد صحیح بسازیم از کد مشابهی (;int i) استفاده میکردیم. در حقیقت objectها نوع دادههای غیر اولیه هستند.
شی گرا یا به طور کاملتر زبانهای برنامه نویسی شی گرا، زبانهایی هستند که در آن برنامه نویس میتواند اشيا مختلفی را تعریف نماید و از اشیاء تولید شده استفاده نماید. هر شی یک سری خصوصیت و قابلیت دارد، که اصطلاحا Properties و Methods خوانده میشوند. در این روش از برنامه نویسی دید برنامه نویس به سیستم دید شخصی است که سعی مینماید به پیدا کردن اشیاء مختلف در سیستم و برقراری ارتباط بین آنها سیستم را تولید نماید.
[ویرایش] مثال
در این مثال سعی میشود مفهوم سیستمهای شی گرا با چند مثال از دنیا خارجی بیان گردد. در اطراف ما اشیا زیادی وجود دارد و اصولا در طبیعت تنها اشیاء هستند و همه چیز از اشياء ساخته شده است.
یک شی را در نظر میگیریم، مثلاً یک ماشین وانت را تجسم کنید.این ماشین یک سری خصوصیات دارد، مثلاً چهار چرخ، یک پدال ترمز، یک پدال گاز، یک فرمان و یک محل بزرگ برای قرار دادن اشياء در آن والبته چیزهای دیگر! این وانت در صورتی که شما به پدال گاز آن فشار بدهید حرکت میکند، در صورتی که فرمان آن را بچرخانید تغییر مسیر میدهد. پس این شی علاوه بر یکسری خصوصیات، یک سری رفتار مشخص هم به شما نشان میدهد. ولی آیا فقط این وانت است که این کار را انجام میدهد؟ مسلما نه تمامی وانتها این کار را انجام میدهند. پس شما میتوانید یک وانت را تعریف کنیدو بگویید:
وانت وسیلهای است که چهار چرخ، یک گاز، یک ترمز، یک فرمان یک محل برای حمل بار دارد و اگر پدال گاز آن فشار داده شود حرکت میکند. این تعریف وانت است ولی خود وانت نیست! شما هر موقع وانتی بخواهید به کارخانه تولید وانت می روید و از صاحب کارخانه میخواهید تا با توجه به این تعریف یک وانت به شما بدهد.
مفاهیم فوق دقیقا در زبانهای برنامه نویسی شی گرا پیاده سازی شده و مورد استفاده قرار میگیرند. در زبانهای برنامه نویسی شی گرا هم اشیاء زیادی وجود دارند که برنامه نویسان میتوانند از آنها استفاده کنند. اگر در حال حاضر به صفحه کامپبوتر خود نگاه کنید، اشياء برنامه نویسی مختلفی را مشاهده میکند. مثلاً همین برنامه مرورگر شما، دارای یک شی دگمه است که عنوان آن در بالای صفحه، با نامهای back، forward، stop و .. چیده شده است. این دگمهها همه از نوع دگمه (ویا buttin)هستند و با هم تفاوتها و شباهتهایی دارند. مثلاً هر کدام داری تصویر متفاوت هستند و به کلیک روی آنها عمل متفاوتی انجام داده میشود. ولی در برخی از چیزها هم مشترکند، مثلاً روی همه آنها میشود کلیک کرد یا وقت ماوس را روی هر کدام میبرید، یک پیغام به شما نمایش میدهند. (دقت کنید که مثلاً تفاوت رنگ دو وانت باعث نمیشود که شما فکر کنید یکی از این دو ماشین وانت نیست!) برنامه نویسان شی گرا از اشيا موجود استفاده میکنند و یا اشياء جدیدی را درست میکنند و با قرار دادن این اشیاء سیستم را پیاده سازی میکنند.
[ویرایش] ارتباط اشیاء
مجدداً به مثال وانت بر میگردیم و سعی میکنیم یک ماشین سواری را تعریف کنیم.
ماشین سواری شی است که چهار چرخ، یک ترمز، یک پدال گاز و یک صندوق عقب دارد. همانطور که ملاحظه میکنید این تعریف به تعریف وانت بسیار شبیه است. به عبارت دیگر ما به یک تعریف جدید رسیده ایم، به اسم خودرو. خودرو وسیلهای است که چهار چرخ، یک ترمز، یک پدال گاز دارد. پس از این به بعد تعریف وانت و ماشین سورای خیلی ساده تر میشود.
وانت خودرویی است که محلی برای جابجایی بار داشته باشد. ماشین سواری خودرویی است که صندوق عقب داشته باشد. موارد زیر توجه کنید:
- اگر کسی به درب کارخانه مراجعه کند و بگوید که خودرو میخواهد، چیزی دریافت نمیکند! خودرو یک تعریف انتزاعی است، برای تعریف خودرو شی وجود ندارد پس مشتری تنها میتواتند وانت یا ماشین سواری بخواهد.
- کار واش را در نظر بگیرید. این کارواش خودرو را تمیز میکند و دیگر به طور جزئی عنوان نمیکند که این کارواش وانت و ماشین سواری را تمیز میکند. به عبارت دیگر نوع خودرو برای کارواش مهم نیست.
- وقتی شخصی قصد اجارای خودرویی دارد، و میخواهد جنسی را حمل کند در هنگام نماس با متصدی کرایه ماشین میگوید: (اگر خودرو شما از نوع وانت است، برای من ارسال کنید) ولی اگر قصد جابجا شدن را دارد میگوید (برای من یک خودرو بفرستید)
اگر در اطراف خود بگردید میتوانید تعریفهای عامتری پیدا کنید و اصطلاحا به طور انتزاعی تری به اطراف نگاه کنید.
در زبان برنامه نویسی شی گرا نیز اشیا مختلفی وجود دارند که تعریف آنها تکمیل کننده یکدیگر است، به عبارت دیگر اشيا از یکدیگر ارث بری میکنند. برخی از تعاریف کاملاً عام است و نمیتوان از آنها شی ساخت و تنها تعریف هستند. به این تعاریف Interface گفته میشود.