برنامهنویسی شیءگرا چیست؟
برنامهنویسی شیءگرا چه میباشد؟
در حالتی که تا به امروز هر سیرتکامل برنامهنویسی انجام داده باشید و یا این که حتی تنهاً لهجههای متعدد برنامهنویسی را باز بینی کرده باشید، احتمالاً تا به امروز با عبارت «برنامهنویسی شیءگرا» مواجه گردیدهاید. توضیحات فنی مختلفی دربارهی مضمون برنامهنویسی شیءگرا موجود هست؛ البته درین نوشته قصد داریم تعریفوتمجید این معنا برنامهنویسی را به روشی معمولی بیان کنیم.
سرآغاز: گویشهای راهای
برای این که بدانیم برنامهنویسی شیءگرا چه میباشد، نخست بایستی نقیض آن را بشناسیم. لهجههای برنامهنویسی اول به طور راه و روشای بودند. برهان این نامگذاری آن بود که دراین لهجهها، برنامهنویس بایستی گروه خاصی از راه و روشها را تمجید مینمود که رایانه آنهارا به ترتیب اجرا می کرد.
در طولهای در آغاز برنامهنویسی، خط مشها بر روی کارتهای پانچ نوشته میشدند. رایانهها به این ترتیب دادهها را گرفته، یک توالی از اقدامات را بر روی دادهها انجام داده و آنگاه دادههای تازه را در خروجی ارائه میکردند.
لهجههای راهای تا مقطعها به نیکی عمل میکردند و برخی از آن ها نیز همچنان گزینه استعمال قرار میگیرند. ولی وقتی که قرار بود برنامهنویس کاری را بیرون از ترتیب مقدماتی پروسه انجام دهد، رئیس لهجههای برنامهنویسی مشقت بار می شد. به این ترتیب لهجههای برنامهنویسی شیءگرا وارد عرصه شدند.
انگیزه از برنامهنویسی شیءگرا
سؤالی که دراین مکان مطرح می گردد، این میباشد که برنامهنویسی شیءگرا چه می باشد؟ اولیه گویش برنامهنویسی شیءگرا (که عموماً اعتقاد و باور بر این میباشد Simula بوده میباشد) ایده شی ءها را معرفی کرد. شی ها گروهای از داده ها میباشند که تحت عنوان واحدی منفرد با آنان خلق می شود.
این معنا را با ارائه مثالی درپی اضافه توضیح میدهیم؛ البته در آغاز در باب کلاسها سخن می کنیم. کلاسها نوعی از اشیای مقدماتی میباشند. آنها فهرستی از مختصات داراهستند که زمانی تعریفوتمجید می شوند، تبدیل به یک شیء میگردند.
مثلا به یک بازی شطرنج اشاره می کنیم. در بازی شطرنج میتوانیم کلاسی به اسم «مهره» (Piece) داشته باشیم. داخل این کلاس مهره، فهرستی از مختصات را به طور تحت داریم:
رنگ
طول
صورت
جنبشهای مجاز
هر شیئی فقطً یک وهله یگانه از چیزی که به آن کلاس وابستگی داراست را تعریف و تمجید میکند. براین اساس میتوانیم شیئی به اسم وزیر سپید داشته باشیم. این شیء قادر است تعاریفی برای هر چهار ویژگی خویش داشته باشد (رنگ: سپید، طول: بلند، صورت: استوانهای دارنده تاج، جنبش: به تعداد نامحدود در هر جهت) این شیء میتواند متدها یا این که تابعهایی نیز داشته باشد.
اصول برنامهنویسی شیء گرا
سؤالی که دراین مرحله ممکن میباشد بپرسید این میباشد که چه چیزی منجر می گردد برنامهنویسی شیءگرا بهتر از برنامهنویسی خط مشای باشد؟ به صورت خلاصه می بایست ذکر کرد که لهجههای برنامهنویسی شیءگرا مانند جاوا قابلیت سازماندهی دادهها و کد را به ترتیبی آماده میسازند که در پروژههای وسیعخیس سازش بیشتری داشته باشند. برای این کهاین مورد را طولانی تر توضیح دهیم درپی چهار اصل برنامهنویسی شیءگرا را توضیح خوا هیم بخشید.
مضمون تجرید در برنامهنویسی شیءگرا
این که قصد دارید از چیزی به کار گیری فرمائید، ادله نمیشود که شیوه فعالیت آن را میدانید. مثلا یک دستگاه اسپرسو تماماً پیچیده میباشد، ولی شما لازم وجود ندارد شیوه فعالیت آن را بدانید. شما کافی میباشد بدانید که زمانی دکمه پرنور دستگاه را میزنید، اسپرسو اخذ خواهید کرد.
همین قضیه در امر برنامهنویسی شیءگرا نیز صحت مینماید. در نمونه بازی شطرنج می توانیم یک متد ()move داشته باشیم. این متد ممکن میباشد مستلزم مقادیر بالایی از دادهها و متدهای دیگر باشد. همینطور ممکن میباشد مستلزم متغیرهایی به طور شرایط اول و پایانی مهره باشد. علاوه بر این موردها ممکن میباشد به یک متد دیگر برای هنگامی که مهرهای یک مهره دیگر را می زند نیاز داشته باشد.
البته نیاز وجود ندارد کهاینها را بدانید و کلیه آنچه که می بایست بدانید این میباشد که هنگامی که از مهرهای می خواهیم تکان نماید، مهره جنبش می کند. این معنی تجرید میباشد.
مضمون کپسولهسازی در برنامهنویسی شیءگرا
کپسولهسازی یکیاز طریقهایی میباشد که برنامهنویسی شیءگرا برای تولید تجرید به کارگیری مینماید. هر شیء گروهای از دادهها میباشد که با آن تحت عنوان یک واحد منقطع واکنش میشود. باطن این شی ءها نیز دادهها به طور متغیر و متد قرار دارا هستند.
متغیرهای باطن شیء در مجموع جداازهم باقی می مانند و این بدان معنا میباشد که اشیاء و متدها نمیتوانند به همدیگر دسترسی داشته باشند. شی ها صرفا از روش استعمال از متدهایشان تأثیر میپذیرند.
یک شیء وزیر می تواند دربرگیرنده یک سری بخش از داده ها باشد. برای مثال قادر است متغیری به اسم «حالت» داشته باشد که مکان آن را روی ورقه گزینش می کند. این متغیر برای استعمال از متد ()move لازم میباشد. و همینطور یک متغیر رنگ نیز دارااست.
با اعلان محرمانه متغیر شرایط و اعلان همگانی متد ()move برنامهنویس می تواند از تأثیرپذیری متغیرهای جنبش از اشیای دیگر خودداری کند. رنگ مهره نیز در صورتیکه به طور سری اعلان شود، اشیای دیگر نمیتوانند آن را تغییرو تحول دهند؛ مگر این که متدی اذن این فعالیت را به آنان بدهد. ولی در این زمینه چنین کاری مجاز وجود ندارد زیرا رنگ مهرههای شطرنج همواره اثبات میباشد.
مضمون وراثت در برنامهنویسی شیءگرا
زبان هاب برنامه نویسی برنامهنویسی شیءگرا علاوه بر کلاس دارنده زیرکلاس نیز میباشند. این زیرکلاسها مشتمل بر کلیه خصوصیاتی میباشند که کلاسهای والدشان داراهستند؛ ولی می توانند مختصات دیگری را نیز بپذیرند.
درخصوص نمونه بازی شطرنج، مهرههای پیاده به متدی نیاز دارا هستند که در چهره پیروزی در وصال به انتهای برگه، آنها را به وزیر تبدیل نماید. به عنوان مثالً این متد را میقدرت ()transformPiece نامید.
تمامی مهرهها به چنین متدی نیاز ندارند. براین اساس لازم وجود ندارد کهاین متد را در کلاس مهرهها در اختیار بگذاریم. بلکه میتوانیم یک زیرکلاس از کلاس مهرهها به اسم «پیاده» تولید کنیم. ازآنجا که زیرکلاسها کلیه مختصات کلاس «مهره» را ارث می برند، این وهله از زیرکلاس «پیاده» نیز دربرگیرنده رنگ، طول، صورت و جنبشهای مجاز خواهد بود.
ولی علاوه بر مختصات فوق یک متد ()transformPiece نیز در آن تعریفوتمجید میکنیم. در این صورت لازم وجود ندارد که نگران به کار گیری غلط از این متد بر روی مهره صورت (قلعه) باشیم.
تولید زیرکلاسها سبب ساز صرفهجویی متعددی در حین برنامهنویسی می گردد. به جای ساخت کلاسهای نو برای هر چیز، میاقتدار صرفا یک کلاس مبنا نوشت و بعد از آن آن را هر دوران که نیاز باشد، به زیرکلاسهای نو بسط اعطا کرد. ولی توکل زیاد بر روی وراثت نیز جنبههای منفی یگانه خویش را داراست که دراین نوشته مجال پرداختن به آنان وجود ندارد.
معنا چندریختی در برنامهنویسی شیءگرا
چندریختی فیض وراثت میباشد. ادراک بدون نقص چندریختی مستلزم کسب حداقلی از علم برنامهنویسی میباشد و از این رو دراین بخش صرفا به طور مقدماتی آن را معرفی می کنیم. به صورت خلاصه چندریختی به برنامهنویس قابلیت و امکان می دهد که متدهایی با اسم یکسان را بر روی اشیای متفاوت به کارگیری نماید.
برای مثال فرض فرمائید در کلاس «مهره»-ها که در بخشهای پیشین تمجید کردیم یک متد move() داشتیم که هر مهره را در همگی جهات به اندازه یک واحد تکان میاعطا کرد. این متد برای مهره سلطان اثرگذار میباشد؛ ولی تنها برای این مهره به درد میخورد و راجع به مهرههای دیگر به عمل نمیآید. برای حل این ایراد میتوانیم متد ()move جدیدی در زیرکلاس «مهره چهره» تعریفوتمجید کنیم که به طور جنبش به تعداد نامحدود در سمتهای جلو، عقب، چپ و راست باشد.
دراینصورت هنگامی که برنامهنویس متد ()move را فراخوانی می کند، گونه مهره را نیز تحت عنوان محل ورود (آرگومان) متد ارسال مینماید تا برنامه بداند که دقیقاً چه مهرهای را می بایست جنبش دهد. بنابراین مقدار زمانه متعددی صرفهجویی می گردد. این دوران سوای وجود چندریختی می بایست صرف این می شد که تشخیص دهید چه دسته حرکتی می بایست انجام دهید.
برنامهنویسی شیءگرا به طور خلاصه
درصورتیکه بعداز مطالعه مفاهیم برنامهنویسی شیءگرا در گیر سردرد گردیدهاید، می بایست بگوییم که جای نگرانی وجود ندارد. به دنبال مواقعی که بایستی به خیال بسپارید را فهرست کردهایم:
برنامهنویسی شیءگرا اطلاعاتی را در واحدهای منفرد به اسم شیء جمع آوری می نماید.
هر شیء وهله منفردی از یک کلاس میباشد
تجرید، سبب پنهان شدن نحوه عمل درونی شیء در مواقعی که لزومی به افشای آن وجود ندارد میگردد.
کپسولهسازی، متغیرها و متدهای داخل شی ءها را به هم دارای ربط میسازد و از آن ها حفاظت می کند.
وراثت، قابلیت استعمال زیرکلاسها از مختصات کلاسهای والد را آماده میسازد.
چندریختی به شی ها و متدها قابلیت و امکان رئیس شرایطهای متعدد با یک رابط منفرد را می دهد.
درصورتی که موردها فوق را به خیال و خاطر بسپارید، شعور قابل قبولی از معنا برنامهنویسی شیءگرا خواهید داشت. شعور چهار اصل برنامهنویسی شیءگرا به عبارتیطور که اشاره کردیم ممکن میباشد عمل دشواری باشد؛ البته هنگامی که آغاز به برنامهنویسی بکنید برایتان بدیهیخیس میشوند.
به خیال و خاطر داشته باشید که ما درین نوشته فقط کلیاتی از برنامهنویسی شیءگرا را مطرح کردهایم. لهجههای برنامهنویسی متعدد شیءگرا هر مورد شیوهها و ترتیبات مختص خویش را دارا هستند. هنگامی که لهجه برنامهنویسی مطلوب خویش را گزینش کردید، میتوانید استارت به مطالعه راجعبه شیوه استعمال آن گویش از مفاهیم شیءگرایی بکنید.