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

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.

I just like the helpful information you supply on your articles. I will bookmark your blog and check once more right here regularly. I am relatively sure I will be informed plenty of new stuff right right here! Good luck for the next!

I have been exploring for a little for any high quality articles or weblog posts on this kind of area . Exploring in Yahoo I finally stumbled upon this website. Reading this information So i am happy to exhibit that I’ve an incredibly good uncanny feeling I discovered just what I needed. I most no doubt will make sure to do not put out of your mind this web site and give it a glance regularly.

I am really impressed with your writing skills and also with the layout on your blog. Is this a paid theme or did you modify it yourself? Anyway keep up the excellent quality writing, it is rare to see a nice blog like this one nowadays.

Very good site you have here but I was wanting to know if you knew of any message boards that cover the same topics talked about here? I’d really love to be a part of group where I can get comments from other experienced individuals that share the same interest. If you have any suggestions, please let me know. Appreciate it!

Great goods from you, man. I’ve understand your stuff previous to and you are just extremely fantastic. I really like what you’ve acquired here, certainly like what you’re stating and the way in which you say it. You make it enjoyable and you still care for to keep it wise. I can’t wait to read far more from you. This is actually a terrific web site.

I used to be recommended this website via my cousin. I’m not positive whether or not this submit is written by means of him as nobody else recognise such detailed approximately my trouble. You’re amazing! Thank you!

My brother recommended I would possibly like this website. He used to be entirely right. This put up actually made my day. You can not imagine just how so much time I had spent for this information! Thanks!

I’m compiling my latest list. I’m sorry there hasn’t been any recent updates. I’ve had some problems building the list along the way. I’ll talk more about that at a later date.

Amazing blog! Is your theme custom made or did you download it from somewhere? A design like yours with a few simple tweeks would really make my blog stand out. Please let me know where you got your design. Cheers

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

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

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