برنامه نویسی شی گرا چیه و به چه دردی میخوره؟

4 دقیقه مطالعه

شی گرایی چه جوری به وجود اومد؟

کامپیوتر های امروز، بر خلاف ظاهر فریبندشون، بسیار چیزای خنگی هستن! کافیه یه ; ته یه خط از کدت نذاری، هر چی دیگه نوشته باشی مهم نیست، برنامه ارور میده. آخه دیگه چقدر یه موجود می تونه گاو باشه؟

با این حال در طول تاریخ پیدایش این موجودات رقت انگیز اتفاقات خوبم افتاده. یه آقای باحالی به اسم ماروین مینسکی1 در سال ۱۹۷۴ داشت روی این کار می کرد که چطوری اطلاعاتو جوری تو کامپیوتر ذخیره کنه که بشه به سبک منطق ارسطویی نتیجه گیری های علت و معلولی روش انجام داد. در این حین یه مفهوم جدیدی ابداع کرد به اسم Frame2 که کلیتش این بود که اطلاعات رو میشه به صورت سلسله مراتبی طبقه بندی کرد:

  • مثلا یه فریم داریم به اسم «انسان» که یه مشخصه ای داره به اسم «جنسیت».
  • فریم دیگه ای میسازیم به اسم «خانم» که رابطه ی IS_A یا هست یک با فریم «انسان» داره، «خانم هست یک انسان».
  • در منطق فریم رابطه ی is a باعث میشه که فریم «خانم» مشخصه ی «جنسیت» که در «انسان» تعریف شده رو به ارث ببره
  • در ادامه «خانم» می تونه مقدار «جنسیت»ش رو به «زن» تغییر بده.

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

Hierarchy in Frames Hierarch in venn

کار مینسکی سال ها بعد توسط طراحای زبانای برنامه نویسی دنبال شد و مفهومی به اسم Object Oriented Programming یا برنامه نویسی شی گرا3 به وجود اومد. این یکی از اون لحظات تاریخی برای کامپیوتر ها بود. حدس میزنید سورس MS-DOS که به زبان اسمبلی نوشته شده و در مارچ ۱۹۸۳ به بازار اومده4 چند خط کد بوده؟

۴۶,۴۸۹ خط در ورژن ۲ (تو هیچ سایتی ننوشته بود، اولین بار در ووفورو شمرده5 شد).

ویندوز XP (آگوست ۲۰۰۱) رو با C و ++C نوشتن. ++C زبان OOایه (یعنی Object Oriented). حدس میزنین XP چند خطه؟

۴۵ میلیون خط کد6.

فرق OO و غیر OO همینه. بدون OO نمیشد کد بیس به این بزرگی درست کرد. به اصطلاح کامپیوتریا Scale نمی کرد (تو دانشگاه فارسیشو میگفتن مقیاس پذیر نیست).

شی گرایی، یک پارادایم

شی گرایی یه پارادایم برنامه نویسیه (Programming Paradigm7)، وقتی میگیم فلان زبان پارادایم OO رو پشتیبانی می کنه یعنی اون زبان امکان اینو بهت میده که با قواعد و اسلوب متداول در OO توش برنامه بنویسی. پارادایم های دیگه ای هم برای برنامه نویسی وجود دارن، مثلا پارادایم تابعی (Functional Programming8) که خیلی باحاله و تازگیا کاربردهای خفنی در پردازشای موازی پیدا کرده همچنین طرفداراش معتقدن بیشتر از OO به طرزی که آدما فکر می کنند نزدیکه. خیلی از زبانا به عنوان مثال Scala چندین پارادایم رو همزمان پشتیبانی می کنن (Multi Paradigm9).

پس چرا شی گرایی یاد بگیرم؟ میرم تابعی!

اونم برو! گاماس گاماس. همونطور که تو قسمت قبل گفتم قراره بشی مهندس آچار فرانسه. بذار فقط چند نمونه از دلایل لزوم یاد گرفتن شی گرایی رو برات لیست کنم:

  • کلییییی از کدایی که به عنوان یه آچار فرانسه باهاشون سر و کله خواهی زد رو با پارادایم OO زدن.
  • حضم کردن پارادایم تپلی مثل شی گرایی و اینکه دستت راه بیوفته کد شی گرا بزنی دست گرمیه عالی ای میشه برای پارادایمای دیگه ای که می خوای یاد بگیری. بذار همین الانم راستشو بهت بگم، شی گرایی یاد بگیری برنامه نویسی تموم نمیشه، تازه شروع میشه! بعیده غلو کرده باشم اگه بگم قطره ایه از یه دریا.
  • مهارت سخت یا Hard Skill10 خیلی محبوبیه. بعیده غلو کرده باشم اگه بگم تعداد زیادی از مهندسایی که دارن پولای خوب در میارن همین شی گرایی رو هم کامل بلد نیستن. بذار همین الانم راستشو بهت بگم، همین شی گراییو توپ یاد بگیری و در عمل بتونی به کار ببری از خیلیا جلویی و بیشتر می تونی پول بسازی.
  • شی گرایی رفرانسه. تو خیلی از متنا اشاره میشه به یکی از مفاهیم شی گرایی. آبرو ریزیه بلد نباشی!

خوب، حالا چی کار کنم؟

اگر داستان فریم های مینسکی که گفتمو فهمیده باشی همین الان ۸۰٪ شی گرایی رو یاد گرفتی. تا حالا اتاقی که ۵ سانت خاک کفش ریخته بوده رو جارو زدی؟ ۸۰٪ خاکا ۵ دقیقه ی اول تمیز میشن میرن دنبال کارشون. ولی ۲۰٪ آخر ممکنه تا آخر روز طول بکشه. هیچ وقتم کسی نمی تونه ادعا کنه یه مولوکول خاکم دیگه تو اتاق نیست. تا آخر این سری آموزشی سعی میکنیم ۱۰٪ دیگه از راهو بریم که بعدش بتونی با اعتماد به نفس بگی من ۹۰٪ شی گراییو بلدم. ولی نویسنده ی این مطلبم با چند سال سابقه برنامه نویسی OO نمی تونه با اعتماد به نفس بگه من ۹۵٪ بلدم. پس بجنب چون خیلی از راهو می تونی خیلی زود بری.

به روز رسانی شده در:

نظر ها

Hello! Quick question that’s entirely off topic. Do you know how to make your site mobile friendly? My site looks weird when browsing from my apple iphone.

I’m trying to find a theme or plugin that might be able to fix this problem. If you have any suggestions, please share. Appreciate it!

Hello, Neat post. There’s an issue with your site in web explorer, could test this? IE nonetheless is the marketplace leader and a good component to people will pass over your fantastic writing because of this problem.

I am very happy to read this. This is the type of manual that needs to be given and not the random misinformation that is at the other blogs. Appreciate your sharing this greatest doc.

When someone writes an article he/she keeps the image of a user in his/her mind that how a user can be aware of it. Thus that’s why this piece of writing is outstdanding.

Thanks!

Hey there would you mind stating which blog platform you’re using? I’m planning to start my own blog soon but I’m having a difficult time selecting between BlogEngine/Wordpress/B2evolution and Drupal. The reason I ask is because your design seems different then most blogs and I’m looking for something completely unique. P.S My apologies for being off-topic but I had to ask!

I was extremely pleased to discover this website. I need to to thank you for your time for this particularly fantastic read!! I definitely savored every part of it and I have you saved to fav to check out new information in your website.

نظر خود را بنویسید

ایمیل شما منتشر نخواهد شد. فیلد های الزامی *

در حال بارگذاری...